@nanoporetech-digital/components 2.13.2 → 2.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/cjs/nano-datalist_3.cjs.entry.js +13 -5
  3. package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
  4. package/dist/cjs/nano-field-validator.cjs.entry.js +8 -6
  5. package/dist/cjs/nano-field-validator.cjs.entry.js.map +1 -1
  6. package/dist/cjs/nano-nav-item_2.cjs.entry.js +2 -1
  7. package/dist/cjs/nano-nav-item_2.cjs.entry.js.map +1 -1
  8. package/dist/collection/components/accordion/accordion.js +1 -1
  9. package/dist/collection/components/alert/alert.js +1 -1
  10. package/dist/collection/components/algolia/algolia-filter.js +2 -2
  11. package/dist/collection/components/algolia/algolia-input.js +5 -5
  12. package/dist/collection/components/algolia/algolia-results.js +1 -1
  13. package/dist/collection/components/algolia/algolia.js +6 -6
  14. package/dist/collection/components/checkbox/checkbox-group.js +2 -2
  15. package/dist/collection/components/checkbox/checkbox.js +3 -3
  16. package/dist/collection/components/datalist/datalist.js +14 -6
  17. package/dist/collection/components/datalist/datalist.js.map +1 -1
  18. package/dist/collection/components/date-input/date-input.js +8 -8
  19. package/dist/collection/components/date-picker/date-picker.js +5 -5
  20. package/dist/collection/components/details/details.js +1 -1
  21. package/dist/collection/components/dialog/dialog.js +1 -1
  22. package/dist/collection/components/dropdown/dropdown.js +1 -1
  23. package/dist/collection/components/field-validator/field-validator.js +14 -12
  24. package/dist/collection/components/field-validator/field-validator.js.map +1 -1
  25. package/dist/collection/components/file-upload/file-upload.js +4 -4
  26. package/dist/collection/components/global-nav/global-nav.js +4 -4
  27. package/dist/collection/components/grid/grid-item.js +1 -1
  28. package/dist/collection/components/icon/icon.js +1 -1
  29. package/dist/collection/components/input/input.js +5 -5
  30. package/dist/collection/components/nav-item/nav-item.js +4 -4
  31. package/dist/collection/components/range/range.js +4 -4
  32. package/dist/collection/components/resize-observe/resize-observe.js +1 -1
  33. package/dist/collection/components/select/select.js +9 -9
  34. package/dist/collection/components/select/select.js.map +1 -1
  35. package/dist/collection/components/slides/slides.js +7 -7
  36. package/dist/collection/components/tabs/tab-group.js +2 -2
  37. package/dist/components/datalist.js +13 -4
  38. package/dist/components/datalist.js.map +1 -1
  39. package/dist/components/nano-field-validator.js +8 -6
  40. package/dist/components/nano-field-validator.js.map +1 -1
  41. package/dist/components/select.js +2 -1
  42. package/dist/components/select.js.map +1 -1
  43. package/dist/custom-elements/index.js +22 -11
  44. package/dist/custom-elements/index.js.map +1 -1
  45. package/dist/esm/nano-datalist_3.entry.js +13 -5
  46. package/dist/esm/nano-datalist_3.entry.js.map +1 -1
  47. package/dist/esm/nano-field-validator.entry.js +8 -6
  48. package/dist/esm/nano-field-validator.entry.js.map +1 -1
  49. package/dist/esm/nano-nav-item_2.entry.js +2 -1
  50. package/dist/esm/nano-nav-item_2.entry.js.map +1 -1
  51. package/dist/esm-es5/nano-datalist_3.entry.js +2 -2
  52. package/dist/esm-es5/nano-datalist_3.entry.js.map +1 -1
  53. package/dist/esm-es5/nano-field-validator.entry.js +1 -1
  54. package/dist/esm-es5/nano-field-validator.entry.js.map +1 -1
  55. package/dist/esm-es5/nano-nav-item_2.entry.js +1 -1
  56. package/dist/esm-es5/nano-nav-item_2.entry.js.map +1 -1
  57. package/dist/nano-components/nano-components.esm.js +1 -1
  58. package/dist/nano-components/{p-ed0bdea9.entry.js → p-3f51bdf5.entry.js} +2 -2
  59. package/dist/nano-components/p-3f51bdf5.entry.js.map +1 -0
  60. package/dist/nano-components/p-53957ec6.system.js +1 -1
  61. package/dist/nano-components/p-6ce533f1.system.entry.js +5 -0
  62. package/dist/nano-components/p-6ce533f1.system.entry.js.map +1 -0
  63. package/dist/nano-components/p-a8ab65fa.entry.js +5 -0
  64. package/dist/nano-components/p-a8ab65fa.entry.js.map +1 -0
  65. package/dist/nano-components/p-bc34955f.system.entry.js +5 -0
  66. package/dist/nano-components/p-bc34955f.system.entry.js.map +1 -0
  67. package/dist/nano-components/{p-cb512cff.system.entry.js → p-e7628969.system.entry.js} +2 -2
  68. package/dist/nano-components/p-e7628969.system.entry.js.map +1 -0
  69. package/dist/nano-components/p-f0e9397c.entry.js +5 -0
  70. package/dist/nano-components/p-f0e9397c.entry.js.map +1 -0
  71. package/dist/types/components/datalist/datalist.d.ts +1 -0
  72. package/docs-json.json +1 -1
  73. package/package.json +2 -2
  74. package/dist/nano-components/p-32900c91.entry.js +0 -5
  75. package/dist/nano-components/p-32900c91.entry.js.map +0 -1
  76. package/dist/nano-components/p-3f5de726.system.entry.js +0 -5
  77. package/dist/nano-components/p-3f5de726.system.entry.js.map +0 -1
  78. package/dist/nano-components/p-aa84c727.system.entry.js +0 -5
  79. package/dist/nano-components/p-aa84c727.system.entry.js.map +0 -1
  80. package/dist/nano-components/p-cb512cff.system.entry.js.map +0 -1
  81. package/dist/nano-components/p-db02ad4c.entry.js +0 -5
  82. package/dist/nano-components/p-db02ad4c.entry.js.map +0 -1
  83. package/dist/nano-components/p-ed0bdea9.entry.js.map +0 -1
@@ -430,7 +430,7 @@ export class CheckboxGroup {
430
430
  "references": {
431
431
  "ControlValidityEventDetail": {
432
432
  "location": "import",
433
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
433
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
434
434
  }
435
435
  }
436
436
  }
@@ -452,7 +452,7 @@ export class CheckboxGroup {
452
452
  },
453
453
  "ControlValidity": {
454
454
  "location": "import",
455
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
455
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
456
456
  }
457
457
  },
458
458
  "return": "Promise<ControlValidity>"
@@ -437,7 +437,7 @@ export class Checkbox {
437
437
  "references": {
438
438
  "Color": {
439
439
  "location": "import",
440
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
440
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
441
441
  }
442
442
  }
443
443
  },
@@ -492,7 +492,7 @@ export class Checkbox {
492
492
  "references": {
493
493
  "CheckboxChangeEventDetail": {
494
494
  "location": "import",
495
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
495
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
496
496
  }
497
497
  }
498
498
  }
@@ -563,7 +563,7 @@ export class Checkbox {
563
563
  },
564
564
  "ControlValidity": {
565
565
  "location": "import",
566
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
566
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
567
567
  }
568
568
  },
569
569
  "return": "Promise<ControlValidity>"
@@ -2,7 +2,7 @@
2
2
  * Web Components for Nanopore digital Web Apps
3
3
  */
4
4
  import { Component, h, Host, Element, State, Watch, Prop, Event, writeTask, Build, } from '@stencil/core';
5
- import { debounce, raf } from '../../utils';
5
+ import { debounce, getActiveElement, raf } from '../../utils';
6
6
  function findLabel(formCtrl) {
7
7
  let foundLabel;
8
8
  if (formCtrl.id) {
@@ -65,7 +65,7 @@ export class DataList {
65
65
  e.stopPropagation();
66
66
  this.changeInputValue(e.detail);
67
67
  raf(() => this.inputChange());
68
- if (this.type === 'select')
68
+ if (this.type !== 'selctMulti')
69
69
  this.shouldOpen = false;
70
70
  };
71
71
  // sets focus immediately on open when 'select' - mirroring native behaviour
@@ -77,6 +77,14 @@ export class DataList {
77
77
  else if (this.type === 'select')
78
78
  this.listBox.showActiveElement();
79
79
  };
80
+ this.handleHide = () => {
81
+ this.open = false;
82
+ const activeElement = getActiveElement();
83
+ if (activeElement === document.body ||
84
+ activeElement.closest(this.host.tagName.toLowerCase())) {
85
+ this.connectedInput.focus();
86
+ }
87
+ };
80
88
  this.inputClick = () => {
81
89
  this.shouldOpen = true;
82
90
  // open dropdown if possible
@@ -257,8 +265,8 @@ export class DataList {
257
265
  let autocompleteType = 'both';
258
266
  let readonly = false;
259
267
  switch (this.type) {
260
- case 'selctMulti':
261
- // dwConfig.closeOnSelect = false;
268
+ case 'input':
269
+ dwConfig = { closeOnSelect: true };
262
270
  break;
263
271
  case 'select':
264
272
  autocompleteType = 'list';
@@ -481,7 +489,7 @@ export class DataList {
481
489
  h("nano-dropdown", Object.assign({}, this.dropDownConfig, { ref: (el) => (this.nanoDropdown = el), dialogTitle: "Select options from the list below", class: {
482
490
  dlist__dropdown: true,
483
491
  'dlist--isfiltered': this.isFiltered,
484
- }, onNanoAfterShow: this.handleShow, onNanoAfterHide: (_) => (this.open = false) }),
492
+ }, onNanoAfterShow: this.handleShow, onNanoAfterHide: this.handleHide }),
485
493
  h("nano-menu", { hidden: !this.actvOptEles.length, type: "listbox", label: this.inputLabel ? this.inputLabel.textContent : undefined, class: {
486
494
  dlist__menu: true,
487
495
  'dlist__menu--open': this.dropwdownOpen,
@@ -555,7 +563,7 @@ export class DataList {
555
563
  "references": {
556
564
  "OptionInterface": {
557
565
  "location": "import",
558
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
566
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
559
567
  }
560
568
  }
561
569
  },
@@ -1 +1 @@
1
- {"version":3,"file":"datalist.js","sourceRoot":"","sources":["../../../src/components/datalist/datalist.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ComponentInterface,\n h,\n Host,\n Element,\n State,\n Watch,\n Prop,\n Event,\n EventEmitter,\n writeTask,\n Build,\n} from '@stencil/core';\nimport { debounce, raf } from '../../utils';\nimport type { Dropdown } from '../dropdown/dropdown';\nimport type { OptionInterface } from '../../interface';\n\nfunction findLabel(formCtrl: Element) {\n let foundLabel: HTMLLabelElement;\n\n if (formCtrl.id) {\n foundLabel = document.querySelector(`label[for='${formCtrl.id}']`);\n }\n if (!foundLabel) {\n foundLabel = formCtrl.closest('label');\n }\n return foundLabel;\n}\n\nlet listIds = 0;\n\n/**\n * `nano-datalist` a visually consistent and more flexible replacement for a native\n * [datalist](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist). Can be nested within a `nano-input`\n * or linked to any input control via the `input` prop. Is used internally within `nano-select`.\n * Options can be defined declaratively by nesting `<nano-option>` elements or imperatively using the `options` prop\n *\n * @slot - use `<nano-option>` elements for more complex html. Alternatively use the `options` prop\n * @slot list-top - shows at the top of the list when there are options present\n * @slot list-bottom - shows at the bottom of the list when there are options present\n * @slot no-result - shown when there are no results otherwise nothing will be shown\n */\n@Component({\n tag: 'nano-datalist',\n styleUrl: 'datalist.scss',\n shadow: true,\n})\nexport class DataList implements ComponentInterface {\n // Private State\n\n private isNanoInput = false;\n private typeToSelect = '';\n private typeToSelectTimeout: number;\n private nanoDropdown: HTMLNanoDropdownElement;\n private listBox: HTMLNanoMenuElement;\n private mo?: MutationObserver;\n private listId = `nano-datalist-${listIds++}`;\n private isFiltered = false;\n private shouldFocus = false;\n // all potential option eles. Set via slot or `options` prop.\n // Some may get hidden due to filtering\n private get allOptEles() {\n return this._allOptEles;\n }\n private set allOptEles(opts) {\n // when allOptEles are initially set (on slot change / options) -\n // add options to 'selected' and fire selected event *if*\n // value isn't set on the input\n this._allOptEles = opts;\n if (this.connectedInput?.value) return;\n\n opts.forEach((opt) => {\n if (opt.selected && !this.selected.includes(opt.value)) {\n this.changeInputValue(opt);\n }\n });\n }\n private _allOptEles: HTMLNanoOptionElement[] = [];\n\n @Element() host: HTMLNanoDatalistElement;\n\n // active option eles that are not hidden.\n @State() actvOptEles: HTMLNanoOptionElement[] = [];\n @State() connectedInput: HTMLInputElement | HTMLTextAreaElement;\n @State() inputLabel: HTMLLabelElement;\n @State() hasNoResult: boolean;\n @State() shouldOpen: boolean;\n @State() canOpen: boolean = true;\n @State() optionIds: string[] = [];\n\n constructor() {\n this.inputChange = debounce(this.inputChange.bind(this), 50);\n }\n\n // Public API\n\n /** By default, items in the list will appear 'selected' when the value in the linked input control matches.\n * However you can add other selected options via the the selected prop. */\n @Prop({ mutable: true }) selected: string[] = [];\n\n /** nano-dropdown config options you can pass to the nested dropdown component */\n @Prop()\n get dropDownConfig() {\n return this._dropDownConfig;\n }\n set dropDownConfig(ddc: Partial<Dropdown>) {\n this._dropDownConfig = { ...this._dropDownConfig, ...ddc };\n }\n private _dropDownConfig: Partial<Dropdown> = {\n skidding: -1,\n };\n\n /** Provide an option list.\n * Options can be defined declaratively by nesting `<nano-option>` elements or imperatively using this prop */\n @Prop() options?: OptionInterface[] = [];\n\n /** A selector to a HTMLInputElement */\n @Prop() input?: string | HTMLInputElement;\n\n /** Tweaks the datalist behaviour and linked control semantics and behaviour.\n * e.g. 'select' will make the linked input control `readonly`.\n */\n @Prop() type: 'select' | 'selctMulti' | 'input' = 'input';\n\n /** return all the active options currently within the datalist. Can be useful for validation */\n @Prop()\n get activeOptions() {\n return this.allOptEles;\n }\n\n /** Force datalist open */\n @Prop({ mutable: true }) open: boolean = false;\n\n @Watch('open')\n openWatcher() {\n writeTask(() => {\n this.nanoDropdown.open = this.open;\n this.connectedInput.setAttribute('aria-expanded', this.open.toString());\n });\n }\n\n /** Use this option to disable to default filtering. This is useful if filtering happens\n * externally via another method (e.g. via ajax)\n */\n @Prop() disableFilter = false;\n\n /** Activate / deactivate the datalist control */\n @Prop() disabled = false;\n\n // State change watchers\n\n @Watch('input')\n async watchInputChange() {\n let nanoInput;\n if ((nanoInput = this.host.closest('nano-input'))) {\n this.isNanoInput = true;\n this.connectedInput = await nanoInput.getInputElement();\n } else if (\n this.input &&\n typeof this.input === 'string' &&\n (nanoInput = document.querySelector(this.input))\n ) {\n this.isNanoInput = false;\n this.connectedInput = nanoInput;\n } else if (this.input instanceof HTMLElement) {\n this.connectedInput = this.input;\n }\n }\n\n @Watch('options')\n manageSlotChangeListener() {\n if (!this.host) return;\n\n // we're not using `options` - setup new MO\n if ((!this.options || !this.options.length) && !this.mo) {\n if (Build.isBrowser) {\n const mo = (this.mo = new MutationObserver(() =>\n this.processSlottedContent()\n ));\n mo.observe(this.host, { childList: true, subtree: true });\n }\n this.processSlottedContent();\n return;\n }\n\n // we're using `options` - trash current MO\n if (this.options?.length) {\n if (!!this.mo) {\n this.mo.disconnect();\n this.mo = undefined;\n }\n\n // add imperative `options`\n writeTask(() => {\n this.allOptEles = this.options.flatMap((option, i) => {\n if (option.value || option.label) {\n const opt = Object.assign(document.createElement('nano-option'), {\n label: option.label,\n value: option.value,\n ariaPosinset: i,\n ariaSetsize: this.options.length,\n selected: option.selected,\n id: this.listId + '-option-' + i,\n textContent: option.label ? option.label : option.value,\n slot: 'internal-opts',\n });\n this.host.append(opt);\n return opt;\n }\n });\n\n if (this.connectedInput?.value.length && this.type !== 'select') {\n this.inputChange();\n } else this.actvOptEles = [...this.allOptEles];\n });\n }\n // forceUpdate(this.host);\n }\n\n @Watch('type')\n @Watch('connectedInput')\n watchTypeChange() {\n if (!this.connectedInput) return;\n\n let dwConfig: Partial<Dropdown> = { closeOnSelect: false };\n let autocompleteType: 'list' | 'both' = 'both';\n let readonly = false;\n\n switch (this.type) {\n case 'selctMulti':\n // dwConfig.closeOnSelect = false;\n break;\n case 'select':\n autocompleteType = 'list';\n readonly = true;\n dwConfig = { closeOnSelect: true, placement: 'center' };\n break;\n }\n\n if (!this.isNanoInput) {\n dwConfig.tetherTo = this.connectedInput;\n }\n\n this.dropDownConfig = { ...this.dropDownConfig, ...dwConfig };\n this.connectedInput.setAttribute('aria-autocomplete', autocompleteType);\n this.connectedInput.readOnly = readonly;\n }\n\n @Watch('connectedInput')\n manageInputEvents(newInput?: HTMLInputElement, oldInput?: HTMLInputElement) {\n if (!!oldInput) {\n const nanoInput = oldInput.closest('nano-input');\n if (nanoInput) {\n nanoInput.removeEventListener('nanoChange', this.inputChange);\n }\n oldInput.removeEventListener('change', this.inputChange);\n oldInput.removeEventListener('click', this.inputClick);\n oldInput.removeEventListener('keydown', this.inputKeydown);\n oldInput.removeEventListener('input', this.inputChange);\n\n this.inputLabel = null;\n\n writeTask(() => {\n oldInput.removeAttribute('role');\n oldInput.removeAttribute('aria-expanded');\n oldInput.removeAttribute('aria-controls');\n oldInput.removeAttribute('aria-owns');\n oldInput.removeAttribute('aria-haspopup');\n oldInput.removeAttribute('aria-autocomplete');\n oldInput.removeAttribute('autocomplete');\n });\n }\n if (!!newInput) {\n const nanoInput = newInput.closest('nano-input');\n if (nanoInput) {\n nanoInput.addEventListener('nanoChange', this.inputChange);\n }\n newInput.addEventListener('change', this.inputChange);\n newInput.addEventListener('click', this.inputClick);\n newInput.addEventListener('keydown', this.inputKeydown);\n newInput.addEventListener('input', this.inputChange);\n this.listId = this.host.id || this.listId;\n\n this.inputLabel = newInput?.labels?.item(0) || findLabel(newInput);\n\n writeTask(() => {\n this.host.id = this.listId;\n newInput.setAttribute('role', 'combobox');\n newInput.setAttribute('aria-expanded', 'false');\n newInput.setAttribute('aria-controls', this.listId);\n newInput.setAttribute('aria-owns', this.listId);\n newInput.setAttribute('aria-haspopup', 'listbox');\n newInput.setAttribute('autocomplete', 'off');\n });\n }\n }\n\n @Watch('selected')\n @Watch('actvOptEles')\n watchActvOptChange() {\n let c = 0;\n const val = this.connectedInput?.value || '';\n const optIds = [];\n\n writeTask(() => {\n this.allOptEles.forEach((opt, i) => {\n if (this.actvOptEles.includes(opt)) {\n c++;\n opt.setAttribute('aria-posinset', c + '');\n opt.setAttribute('aria-setsize', this.actvOptEles.length + '');\n opt.hidden = false;\n this.isSelected(opt, val);\n } else {\n opt.removeAttribute('aria-posinset');\n opt.removeAttribute('aria-setsize');\n opt.hidden = true;\n opt.selected = false;\n }\n opt.id = this.listId + '-option-' + i;\n optIds.push(opt.id);\n });\n this.optionIds = optIds;\n });\n }\n\n @Watch('actvOptEles')\n @Watch('hasNoResult')\n manageCanOpen() {\n if (this.actvOptEles.length || this.hasNoResult) this.canOpen = true;\n else this.canOpen = false;\n }\n\n /**\n * Opens the dropdown if it can, it should and there are items to display.\n */\n @Watch('shouldOpen')\n @Watch('canOpen')\n manageDropdownDisplay() {\n if (this.shouldOpen && this.canOpen && !this.disabled) this.open = true;\n if (!this.shouldOpen || !this.canOpen) this.open = false;\n this.openWatcher();\n }\n\n @Watch('actvOptEles')\n fireActiveOptsEvent() {\n this.nanoOptionsUpdated.emit(this.actvOptEles);\n }\n\n // Events\n\n /** Fired when an item is selected. */\n @Event() nanoSelect: EventEmitter<HTMLNanoOptionElement>;\n\n /** Fired when a currently selected item is reselected. */\n @Event() nanoDeselect: EventEmitter<HTMLNanoOptionElement>;\n\n /** Fired when active options change */\n @Event() nanoOptionsUpdated: EventEmitter<HTMLNanoOptionElement[]>;\n\n // Private logic\n\n private isSelected(opt: HTMLNanoOptionElement, val: string) {\n if (val === opt.value || this.selected.includes(opt.value)) {\n opt.selected = true;\n } else opt.selected = false;\n }\n\n private get dropwdownOpen() {\n if (!this.nanoDropdown || !this.open) return false;\n return true;\n }\n\n private get exactMatch() {\n return this.allOptEles.find(\n (opt) => this.connectedInput.value === opt.value\n );\n }\n\n /** reflect value back to the connected input unless the event is cancelled */\n private changeInputValue(opt: HTMLNanoOptionElement) {\n let nanoSelected;\n\n if (this.selected.includes(opt.value)) {\n // deselect option\n this.selected = this.selected.filter((val) => val !== opt.value);\n nanoSelected = this.nanoDeselect.emit(opt);\n } else {\n // select new option\n this.selected = [...this.selected];\n nanoSelected = this.nanoSelect.emit(opt);\n }\n\n if (!nanoSelected.defaultPrevented) {\n if (this.connectedInput) this.connectedInput.value = opt.value;\n\n const event = new window.Event('change');\n this.connectedInput?.dispatchEvent(event);\n }\n }\n\n // a new option has been picked\n private optSelected = (e: CustomEvent<HTMLNanoOptionElement>) => {\n e.stopPropagation();\n this.changeInputValue(e.detail);\n raf(() => this.inputChange());\n\n if (this.type === 'select') this.shouldOpen = false;\n };\n\n // this is for type=\"select\" only.\n // Filter options that start with text - aggregates letters (as opposed to getting the value from input)\n private setOptStartsWith() {\n const attrFind = (toFind: string) =>\n toFind.toLowerCase().substring(0, this.typeToSelect.length) ===\n this.typeToSelect;\n\n const foundEle = this.allOptEles.find(\n (opt) =>\n opt.value.trim().length > 0 &&\n !opt.disabled &&\n (attrFind(opt.textContent) ||\n attrFind(opt.value) ||\n attrFind(opt.label) ||\n attrFind(opt.filterMeta))\n );\n if (foundEle) this.changeInputValue(foundEle);\n }\n\n // Event handlers\n\n private processSlottedContent() {\n raf(() => {\n this.allOptEles = Array.from(this.host.querySelectorAll('nano-option'));\n this.hasNoResult = !!this.host.querySelector('[slot=\"no-result\"]');\n\n if (this.connectedInput?.value.length && this.type !== 'select') {\n this.inputChange();\n } else this.actvOptEles = this.allOptEles;\n });\n }\n\n // sets focus immediately on open when 'select' - mirroring native behaviour\n private handleShow = async () => {\n if (this.shouldFocus) {\n this.shouldFocus = false;\n this.listBox.setFocus();\n } else if (this.type === 'select') this.listBox.showActiveElement();\n };\n\n // any changes to the connected input value will filter the list of active options\n private inputChange() {\n if (this.disableFilter) {\n this.actvOptEles = this.allOptEles;\n return;\n }\n\n const val = this.connectedInput.value;\n const valStr = val.trim().toLowerCase();\n\n let exactMatch = false;\n const activeEles = [];\n const attrFind = (toFind: string) =>\n toFind.toLowerCase().indexOf(valStr) > -1;\n\n this.allOptEles.forEach((opt) => {\n if (\n (val === opt.value || val === opt.label) &&\n this.type !== 'selctMulti'\n ) {\n opt.selected = true;\n exactMatch = true;\n } else this.isSelected(opt, val);\n });\n\n this.allOptEles.forEach((opt) => {\n if (!valStr.length || exactMatch) {\n activeEles.push(opt);\n } else if (\n opt.value.trim().length > 0 &&\n !opt.disabled &&\n (attrFind(opt.textContent) ||\n attrFind(opt.value) ||\n attrFind(opt.label) ||\n attrFind(opt.filterMeta))\n ) {\n activeEles.push(opt);\n }\n });\n\n this.isFiltered = valStr.length && !exactMatch;\n this.actvOptEles = activeEles;\n }\n\n private inputClick = () => {\n this.shouldOpen = true;\n // open dropdown if possible\n this.manageDropdownDisplay();\n };\n\n private inputKeydown = (e: KeyboardEvent) => {\n const ignoreKeys = [\n 'Shift',\n 'ArrowRight',\n 'ArrowLeft',\n 'Escape',\n 'Enter',\n 'Tab',\n ];\n if (ignoreKeys.includes(e.key)) {\n if (e.key === 'Tab') this.shouldOpen = false;\n return;\n }\n\n // When select, mirror native select behaviour. Search on closed list\n if (\n this.type === 'select' &&\n !['ArrowDown', 'ArrowUp'].includes(e.key) &&\n (e.key !== ' ' || this.typeToSelectTimeout)\n ) {\n if (e.key === ' ' || /^[a-z0-9]+$/i.test(e.key)) {\n clearTimeout(this.typeToSelectTimeout);\n this.typeToSelectTimeout = window.setTimeout(() => {\n this.typeToSelect = '';\n this.typeToSelectTimeout = 0;\n }, 750);\n this.typeToSelect += e.key;\n this.setOptStartsWith();\n }\n return;\n }\n\n this.shouldOpen = true;\n // open dropdown if possible\n this.manageDropdownDisplay();\n if (['ArrowDown', 'ArrowUp'].includes(e.key)) {\n e.preventDefault();\n this.shouldFocus = true;\n }\n };\n\n // handles key down on options. Either 'picks'\n // an option or passes event back to input for search / filter\n private optionKeyDown = (\n e: KeyboardEvent & { target: HTMLNanoOptionElement }\n ) => {\n const ignoreKeys = [\n 'Shift',\n 'ArrowUp',\n 'ArrowDown',\n 'Escape',\n 'Enter',\n 'Tab',\n 'Space',\n 'PageUp',\n 'PageDown',\n 'Home',\n 'End',\n ' ',\n ];\n if (ignoreKeys.includes(e.key)) {\n if (e.key === 'Escape') this.connectedInput.focus();\n return;\n }\n\n const deleteKeys = ['Delete', 'Backspace'];\n // this passes whatever's typed back to our input control\n if (\n this.type !== 'select' &&\n (!this.exactMatch || deleteKeys.includes(e.key))\n ) {\n this.connectedInput.focus();\n }\n };\n\n // Component lifecycle\n\n connectedCallback() {\n this.watchInputChange();\n }\n\n componentDidLoad() {\n this.manageSlotChangeListener();\n this.openWatcher();\n }\n\n componentDidRender(): void {\n setTimeout(() => {\n if (!this.connectedInput)\n console.warn(\n 'no `nano-input` found. `nano-datalist` should be nested within an `nano-input` or linked via `input` prop',\n this.host\n );\n }, 500);\n }\n\n render() {\n return (\n <Host\n role=\"listbox\"\n aria-owns={this.optionIds.join(' ')}\n aria-label=\"Select options from the list below\"\n >\n <nano-dropdown\n {...this.dropDownConfig}\n ref={(el) => (this.nanoDropdown = el)}\n dialogTitle=\"Select options from the list below\"\n class={{\n dlist__dropdown: true,\n 'dlist--isfiltered': this.isFiltered,\n }}\n onNanoAfterShow={this.handleShow}\n onNanoAfterHide={(_) => (this.open = false)}\n >\n <nano-menu\n hidden={!this.actvOptEles.length}\n type=\"listbox\"\n label={this.inputLabel ? this.inputLabel.textContent : undefined}\n class={{\n dlist__menu: true,\n 'dlist__menu--open': this.dropwdownOpen,\n }}\n tabIndex={-1}\n onNanoSelect={this.optSelected}\n onKeyDown={this.optionKeyDown}\n ref={(el) => (this.listBox = el)}\n >\n <slot name=\"list-top\" />\n {!this.options.length && <slot />}\n {!!this.options.length && <slot name=\"internal-opts\" />}\n <slot name=\"list-bottom\" />\n </nano-menu>\n <nano-menu\n type=\"listbox\"\n label=\"No results found\"\n hidden={!!this.actvOptEles.length}\n class={{\n dlist__menu: true,\n 'dlist__menu--open': this.dropwdownOpen,\n }}\n >\n <slot name=\"no-result\" />\n </nano-menu>\n {!!this.actvOptEles && (\n <div aria-live=\"polite\" role=\"status\" class=\"dlist__status\">\n {this.actvOptEles.length} result\n {this.actvOptEles.length > 1 ? 's' : ''} available.\n </div>\n )}\n </nano-dropdown>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"datalist.js","sourceRoot":"","sources":["../../../src/components/datalist/datalist.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ComponentInterface,\n h,\n Host,\n Element,\n State,\n Watch,\n Prop,\n Event,\n EventEmitter,\n writeTask,\n Build,\n} from '@stencil/core';\nimport { debounce, getActiveElement, raf } from '../../utils';\nimport type { Dropdown } from '../dropdown/dropdown';\nimport type { OptionInterface } from '../../interface';\n\nfunction findLabel(formCtrl: Element) {\n let foundLabel: HTMLLabelElement;\n\n if (formCtrl.id) {\n foundLabel = document.querySelector(`label[for='${formCtrl.id}']`);\n }\n if (!foundLabel) {\n foundLabel = formCtrl.closest('label');\n }\n return foundLabel;\n}\n\nlet listIds = 0;\n\n/**\n * `nano-datalist` a visually consistent and more flexible replacement for a native\n * [datalist](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist). Can be nested within a `nano-input`\n * or linked to any input control via the `input` prop. Is used internally within `nano-select`.\n * Options can be defined declaratively by nesting `<nano-option>` elements or imperatively using the `options` prop\n *\n * @slot - use `<nano-option>` elements for more complex html. Alternatively use the `options` prop\n * @slot list-top - shows at the top of the list when there are options present\n * @slot list-bottom - shows at the bottom of the list when there are options present\n * @slot no-result - shown when there are no results otherwise nothing will be shown\n */\n@Component({\n tag: 'nano-datalist',\n styleUrl: 'datalist.scss',\n shadow: true,\n})\nexport class DataList implements ComponentInterface {\n // Private State\n\n private isNanoInput = false;\n private typeToSelect = '';\n private typeToSelectTimeout: number;\n private nanoDropdown: HTMLNanoDropdownElement;\n private listBox: HTMLNanoMenuElement;\n private mo?: MutationObserver;\n private listId = `nano-datalist-${listIds++}`;\n private isFiltered = false;\n private shouldFocus = false;\n // all potential option eles. Set via slot or `options` prop.\n // Some may get hidden due to filtering\n private get allOptEles() {\n return this._allOptEles;\n }\n private set allOptEles(opts) {\n // when allOptEles are initially set (on slot change / options) -\n // add options to 'selected' and fire selected event *if*\n // value isn't set on the input\n this._allOptEles = opts;\n if (this.connectedInput?.value) return;\n\n opts.forEach((opt) => {\n if (opt.selected && !this.selected.includes(opt.value)) {\n this.changeInputValue(opt);\n }\n });\n }\n private _allOptEles: HTMLNanoOptionElement[] = [];\n\n @Element() host: HTMLNanoDatalistElement;\n\n // active option eles that are not hidden.\n @State() actvOptEles: HTMLNanoOptionElement[] = [];\n @State() connectedInput: HTMLInputElement | HTMLTextAreaElement;\n @State() inputLabel: HTMLLabelElement;\n @State() hasNoResult: boolean;\n @State() shouldOpen: boolean;\n @State() canOpen: boolean = true;\n @State() optionIds: string[] = [];\n\n constructor() {\n this.inputChange = debounce(this.inputChange.bind(this), 50);\n }\n\n // Public API\n\n /** By default, items in the list will appear 'selected' when the value in the linked input control matches.\n * However you can add other selected options via the the selected prop. */\n @Prop({ mutable: true }) selected: string[] = [];\n\n /** nano-dropdown config options you can pass to the nested dropdown component */\n @Prop()\n get dropDownConfig() {\n return this._dropDownConfig;\n }\n set dropDownConfig(ddc: Partial<Dropdown>) {\n this._dropDownConfig = { ...this._dropDownConfig, ...ddc };\n }\n private _dropDownConfig: Partial<Dropdown> = {\n skidding: -1,\n };\n\n /** Provide an option list.\n * Options can be defined declaratively by nesting `<nano-option>` elements or imperatively using this prop */\n @Prop() options?: OptionInterface[] = [];\n\n /** A selector to a HTMLInputElement */\n @Prop() input?: string | HTMLInputElement;\n\n /** Tweaks the datalist behaviour and linked control semantics and behaviour.\n * e.g. 'select' will make the linked input control `readonly`.\n */\n @Prop() type: 'select' | 'selctMulti' | 'input' = 'input';\n\n /** return all the active options currently within the datalist. Can be useful for validation */\n @Prop()\n get activeOptions() {\n return this.allOptEles;\n }\n\n /** Force datalist open */\n @Prop({ mutable: true }) open: boolean = false;\n\n @Watch('open')\n openWatcher() {\n writeTask(() => {\n this.nanoDropdown.open = this.open;\n this.connectedInput.setAttribute('aria-expanded', this.open.toString());\n });\n }\n\n /** Use this option to disable to default filtering. This is useful if filtering happens\n * externally via another method (e.g. via ajax)\n */\n @Prop() disableFilter = false;\n\n /** Activate / deactivate the datalist control */\n @Prop() disabled = false;\n\n // State change watchers\n\n @Watch('input')\n async watchInputChange() {\n let nanoInput;\n if ((nanoInput = this.host.closest('nano-input'))) {\n this.isNanoInput = true;\n this.connectedInput = await nanoInput.getInputElement();\n } else if (\n this.input &&\n typeof this.input === 'string' &&\n (nanoInput = document.querySelector(this.input))\n ) {\n this.isNanoInput = false;\n this.connectedInput = nanoInput;\n } else if (this.input instanceof HTMLElement) {\n this.connectedInput = this.input;\n }\n }\n\n @Watch('options')\n manageSlotChangeListener() {\n if (!this.host) return;\n\n // we're not using `options` - setup new MO\n if ((!this.options || !this.options.length) && !this.mo) {\n if (Build.isBrowser) {\n const mo = (this.mo = new MutationObserver(() =>\n this.processSlottedContent()\n ));\n mo.observe(this.host, { childList: true, subtree: true });\n }\n this.processSlottedContent();\n return;\n }\n\n // we're using `options` - trash current MO\n if (this.options?.length) {\n if (!!this.mo) {\n this.mo.disconnect();\n this.mo = undefined;\n }\n\n // add imperative `options`\n writeTask(() => {\n this.allOptEles = this.options.flatMap((option, i) => {\n if (option.value || option.label) {\n const opt = Object.assign(document.createElement('nano-option'), {\n label: option.label,\n value: option.value,\n ariaPosinset: i,\n ariaSetsize: this.options.length,\n selected: option.selected,\n id: this.listId + '-option-' + i,\n textContent: option.label ? option.label : option.value,\n slot: 'internal-opts',\n });\n this.host.append(opt);\n return opt;\n }\n });\n\n if (this.connectedInput?.value.length && this.type !== 'select') {\n this.inputChange();\n } else this.actvOptEles = [...this.allOptEles];\n });\n }\n // forceUpdate(this.host);\n }\n\n @Watch('type')\n @Watch('connectedInput')\n watchTypeChange() {\n if (!this.connectedInput) return;\n\n let dwConfig: Partial<Dropdown> = { closeOnSelect: false };\n let autocompleteType: 'list' | 'both' = 'both';\n let readonly = false;\n\n switch (this.type) {\n case 'input':\n dwConfig = { closeOnSelect: true };\n break;\n case 'select':\n autocompleteType = 'list';\n readonly = true;\n dwConfig = { closeOnSelect: true, placement: 'center' };\n break;\n }\n\n if (!this.isNanoInput) {\n dwConfig.tetherTo = this.connectedInput;\n }\n\n this.dropDownConfig = { ...this.dropDownConfig, ...dwConfig };\n this.connectedInput.setAttribute('aria-autocomplete', autocompleteType);\n this.connectedInput.readOnly = readonly;\n }\n\n @Watch('connectedInput')\n manageInputEvents(newInput?: HTMLInputElement, oldInput?: HTMLInputElement) {\n if (!!oldInput) {\n const nanoInput = oldInput.closest('nano-input');\n if (nanoInput) {\n nanoInput.removeEventListener('nanoChange', this.inputChange);\n }\n oldInput.removeEventListener('change', this.inputChange);\n oldInput.removeEventListener('click', this.inputClick);\n oldInput.removeEventListener('keydown', this.inputKeydown);\n oldInput.removeEventListener('input', this.inputChange);\n\n this.inputLabel = null;\n\n writeTask(() => {\n oldInput.removeAttribute('role');\n oldInput.removeAttribute('aria-expanded');\n oldInput.removeAttribute('aria-controls');\n oldInput.removeAttribute('aria-owns');\n oldInput.removeAttribute('aria-haspopup');\n oldInput.removeAttribute('aria-autocomplete');\n oldInput.removeAttribute('autocomplete');\n });\n }\n if (!!newInput) {\n const nanoInput = newInput.closest('nano-input');\n if (nanoInput) {\n nanoInput.addEventListener('nanoChange', this.inputChange);\n }\n newInput.addEventListener('change', this.inputChange);\n newInput.addEventListener('click', this.inputClick);\n newInput.addEventListener('keydown', this.inputKeydown);\n newInput.addEventListener('input', this.inputChange);\n this.listId = this.host.id || this.listId;\n\n this.inputLabel = newInput?.labels?.item(0) || findLabel(newInput);\n\n writeTask(() => {\n this.host.id = this.listId;\n newInput.setAttribute('role', 'combobox');\n newInput.setAttribute('aria-expanded', 'false');\n newInput.setAttribute('aria-controls', this.listId);\n newInput.setAttribute('aria-owns', this.listId);\n newInput.setAttribute('aria-haspopup', 'listbox');\n newInput.setAttribute('autocomplete', 'off');\n });\n }\n }\n\n @Watch('selected')\n @Watch('actvOptEles')\n watchActvOptChange() {\n let c = 0;\n const val = this.connectedInput?.value || '';\n const optIds = [];\n\n writeTask(() => {\n this.allOptEles.forEach((opt, i) => {\n if (this.actvOptEles.includes(opt)) {\n c++;\n opt.setAttribute('aria-posinset', c + '');\n opt.setAttribute('aria-setsize', this.actvOptEles.length + '');\n opt.hidden = false;\n this.isSelected(opt, val);\n } else {\n opt.removeAttribute('aria-posinset');\n opt.removeAttribute('aria-setsize');\n opt.hidden = true;\n opt.selected = false;\n }\n opt.id = this.listId + '-option-' + i;\n optIds.push(opt.id);\n });\n this.optionIds = optIds;\n });\n }\n\n @Watch('actvOptEles')\n @Watch('hasNoResult')\n manageCanOpen() {\n if (this.actvOptEles.length || this.hasNoResult) this.canOpen = true;\n else this.canOpen = false;\n }\n\n /**\n * Opens the dropdown if it can, it should and there are items to display.\n */\n @Watch('shouldOpen')\n @Watch('canOpen')\n manageDropdownDisplay() {\n if (this.shouldOpen && this.canOpen && !this.disabled) this.open = true;\n if (!this.shouldOpen || !this.canOpen) this.open = false;\n this.openWatcher();\n }\n\n @Watch('actvOptEles')\n fireActiveOptsEvent() {\n this.nanoOptionsUpdated.emit(this.actvOptEles);\n }\n\n // Events\n\n /** Fired when an item is selected. */\n @Event() nanoSelect: EventEmitter<HTMLNanoOptionElement>;\n\n /** Fired when a currently selected item is reselected. */\n @Event() nanoDeselect: EventEmitter<HTMLNanoOptionElement>;\n\n /** Fired when active options change */\n @Event() nanoOptionsUpdated: EventEmitter<HTMLNanoOptionElement[]>;\n\n // Private logic\n\n private isSelected(opt: HTMLNanoOptionElement, val: string) {\n if (val === opt.value || this.selected.includes(opt.value)) {\n opt.selected = true;\n } else opt.selected = false;\n }\n\n private get dropwdownOpen() {\n if (!this.nanoDropdown || !this.open) return false;\n return true;\n }\n\n private get exactMatch() {\n return this.allOptEles.find(\n (opt) => this.connectedInput.value === opt.value\n );\n }\n\n /** reflect value back to the connected input unless the event is cancelled */\n private changeInputValue(opt: HTMLNanoOptionElement) {\n let nanoSelected;\n\n if (this.selected.includes(opt.value)) {\n // deselect option\n this.selected = this.selected.filter((val) => val !== opt.value);\n nanoSelected = this.nanoDeselect.emit(opt);\n } else {\n // select new option\n this.selected = [...this.selected];\n nanoSelected = this.nanoSelect.emit(opt);\n }\n\n if (!nanoSelected.defaultPrevented) {\n if (this.connectedInput) this.connectedInput.value = opt.value;\n\n const event = new window.Event('change');\n this.connectedInput?.dispatchEvent(event);\n }\n }\n\n // a new option has been picked\n private optSelected = (e: CustomEvent<HTMLNanoOptionElement>) => {\n e.stopPropagation();\n this.changeInputValue(e.detail);\n raf(() => this.inputChange());\n\n if (this.type !== 'selctMulti') this.shouldOpen = false;\n };\n\n // this is for type=\"select\" only.\n // Filter options that start with text - aggregates letters (as opposed to getting the value from input)\n private setOptStartsWith() {\n const attrFind = (toFind: string) =>\n toFind.toLowerCase().substring(0, this.typeToSelect.length) ===\n this.typeToSelect;\n\n const foundEle = this.allOptEles.find(\n (opt) =>\n opt.value.trim().length > 0 &&\n !opt.disabled &&\n (attrFind(opt.textContent) ||\n attrFind(opt.value) ||\n attrFind(opt.label) ||\n attrFind(opt.filterMeta))\n );\n if (foundEle) this.changeInputValue(foundEle);\n }\n\n // Event handlers\n\n private processSlottedContent() {\n raf(() => {\n this.allOptEles = Array.from(this.host.querySelectorAll('nano-option'));\n this.hasNoResult = !!this.host.querySelector('[slot=\"no-result\"]');\n\n if (this.connectedInput?.value.length && this.type !== 'select') {\n this.inputChange();\n } else this.actvOptEles = this.allOptEles;\n });\n }\n\n // sets focus immediately on open when 'select' - mirroring native behaviour\n private handleShow = async () => {\n if (this.shouldFocus) {\n this.shouldFocus = false;\n this.listBox.setFocus();\n } else if (this.type === 'select') this.listBox.showActiveElement();\n };\n\n private handleHide = () => {\n this.open = false;\n const activeElement = getActiveElement();\n if (\n activeElement === document.body ||\n activeElement.closest(this.host.tagName.toLowerCase())\n ) {\n this.connectedInput.focus();\n }\n };\n\n // any changes to the connected input value will filter the list of active options\n private inputChange() {\n if (this.disableFilter) {\n this.actvOptEles = this.allOptEles;\n return;\n }\n\n const val = this.connectedInput.value;\n const valStr = val.trim().toLowerCase();\n\n let exactMatch = false;\n const activeEles = [];\n const attrFind = (toFind: string) =>\n toFind.toLowerCase().indexOf(valStr) > -1;\n\n this.allOptEles.forEach((opt) => {\n if (\n (val === opt.value || val === opt.label) &&\n this.type !== 'selctMulti'\n ) {\n opt.selected = true;\n exactMatch = true;\n } else this.isSelected(opt, val);\n });\n\n this.allOptEles.forEach((opt) => {\n if (!valStr.length || exactMatch) {\n activeEles.push(opt);\n } else if (\n opt.value.trim().length > 0 &&\n !opt.disabled &&\n (attrFind(opt.textContent) ||\n attrFind(opt.value) ||\n attrFind(opt.label) ||\n attrFind(opt.filterMeta))\n ) {\n activeEles.push(opt);\n }\n });\n\n this.isFiltered = valStr.length && !exactMatch;\n this.actvOptEles = activeEles;\n }\n\n private inputClick = () => {\n this.shouldOpen = true;\n // open dropdown if possible\n this.manageDropdownDisplay();\n };\n\n private inputKeydown = (e: KeyboardEvent) => {\n const ignoreKeys = [\n 'Shift',\n 'ArrowRight',\n 'ArrowLeft',\n 'Escape',\n 'Enter',\n 'Tab',\n ];\n if (ignoreKeys.includes(e.key)) {\n if (e.key === 'Tab') this.shouldOpen = false;\n return;\n }\n\n // When select, mirror native select behaviour. Search on closed list\n if (\n this.type === 'select' &&\n !['ArrowDown', 'ArrowUp'].includes(e.key) &&\n (e.key !== ' ' || this.typeToSelectTimeout)\n ) {\n if (e.key === ' ' || /^[a-z0-9]+$/i.test(e.key)) {\n clearTimeout(this.typeToSelectTimeout);\n this.typeToSelectTimeout = window.setTimeout(() => {\n this.typeToSelect = '';\n this.typeToSelectTimeout = 0;\n }, 750);\n this.typeToSelect += e.key;\n this.setOptStartsWith();\n }\n return;\n }\n\n this.shouldOpen = true;\n // open dropdown if possible\n this.manageDropdownDisplay();\n if (['ArrowDown', 'ArrowUp'].includes(e.key)) {\n e.preventDefault();\n this.shouldFocus = true;\n }\n };\n\n // handles key down on options. Either 'picks'\n // an option or passes event back to input for search / filter\n private optionKeyDown = (\n e: KeyboardEvent & { target: HTMLNanoOptionElement }\n ) => {\n const ignoreKeys = [\n 'Shift',\n 'ArrowUp',\n 'ArrowDown',\n 'Escape',\n 'Enter',\n 'Tab',\n 'Space',\n 'PageUp',\n 'PageDown',\n 'Home',\n 'End',\n ' ',\n ];\n if (ignoreKeys.includes(e.key)) {\n if (e.key === 'Escape') this.connectedInput.focus();\n return;\n }\n\n const deleteKeys = ['Delete', 'Backspace'];\n // this passes whatever's typed back to our input control\n if (\n this.type !== 'select' &&\n (!this.exactMatch || deleteKeys.includes(e.key))\n ) {\n this.connectedInput.focus();\n }\n };\n\n // Component lifecycle\n\n connectedCallback() {\n this.watchInputChange();\n }\n\n componentDidLoad() {\n this.manageSlotChangeListener();\n this.openWatcher();\n }\n\n componentDidRender(): void {\n setTimeout(() => {\n if (!this.connectedInput)\n console.warn(\n 'no `nano-input` found. `nano-datalist` should be nested within an `nano-input` or linked via `input` prop',\n this.host\n );\n }, 500);\n }\n\n render() {\n return (\n <Host\n role=\"listbox\"\n aria-owns={this.optionIds.join(' ')}\n aria-label=\"Select options from the list below\"\n >\n <nano-dropdown\n {...this.dropDownConfig}\n ref={(el) => (this.nanoDropdown = el)}\n dialogTitle=\"Select options from the list below\"\n class={{\n dlist__dropdown: true,\n 'dlist--isfiltered': this.isFiltered,\n }}\n onNanoAfterShow={this.handleShow}\n onNanoAfterHide={this.handleHide}\n >\n <nano-menu\n hidden={!this.actvOptEles.length}\n type=\"listbox\"\n label={this.inputLabel ? this.inputLabel.textContent : undefined}\n class={{\n dlist__menu: true,\n 'dlist__menu--open': this.dropwdownOpen,\n }}\n tabIndex={-1}\n onNanoSelect={this.optSelected}\n onKeyDown={this.optionKeyDown}\n ref={(el) => (this.listBox = el)}\n >\n <slot name=\"list-top\" />\n {!this.options.length && <slot />}\n {!!this.options.length && <slot name=\"internal-opts\" />}\n <slot name=\"list-bottom\" />\n </nano-menu>\n <nano-menu\n type=\"listbox\"\n label=\"No results found\"\n hidden={!!this.actvOptEles.length}\n class={{\n dlist__menu: true,\n 'dlist__menu--open': this.dropwdownOpen,\n }}\n >\n <slot name=\"no-result\" />\n </nano-menu>\n {!!this.actvOptEles && (\n <div aria-live=\"polite\" role=\"status\" class=\"dlist__status\">\n {this.actvOptEles.length} result\n {this.actvOptEles.length > 1 ? 's' : ''} available.\n </div>\n )}\n </nano-dropdown>\n </Host>\n );\n }\n}\n"]}
@@ -448,7 +448,7 @@ export class DateInput {
448
448
  "references": {
449
449
  "LocalDateOpts": {
450
450
  "location": "import",
451
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
451
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
452
452
  }
453
453
  }
454
454
  },
@@ -569,7 +569,7 @@ export class DateInput {
569
569
  "references": {
570
570
  "DaysOfWeek": {
571
571
  "location": "import",
572
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/utils/date-utils.ts"
572
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/utils/date-utils.ts"
573
573
  }
574
574
  }
575
575
  },
@@ -593,7 +593,7 @@ export class DateInput {
593
593
  "references": {
594
594
  "DuetLocalizedText": {
595
595
  "location": "import",
596
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
596
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
597
597
  }
598
598
  }
599
599
  },
@@ -635,7 +635,7 @@ export class DateInput {
635
635
  "references": {
636
636
  "Color": {
637
637
  "location": "import",
638
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
638
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
639
639
  }
640
640
  }
641
641
  },
@@ -1012,7 +1012,7 @@ export class DateInput {
1012
1012
  "references": {
1013
1013
  "DateDisabledPredicate": {
1014
1014
  "location": "import",
1015
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
1015
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
1016
1016
  }
1017
1017
  }
1018
1018
  },
@@ -1048,7 +1048,7 @@ export class DateInput {
1048
1048
  "references": {
1049
1049
  "DateInputChangeEventDetail": {
1050
1050
  "location": "import",
1051
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
1051
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
1052
1052
  }
1053
1053
  }
1054
1054
  }
@@ -1071,7 +1071,7 @@ export class DateInput {
1071
1071
  "references": {
1072
1072
  "ControlValidityEventDetail": {
1073
1073
  "location": "import",
1074
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
1074
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
1075
1075
  }
1076
1076
  }
1077
1077
  }
@@ -1093,7 +1093,7 @@ export class DateInput {
1093
1093
  },
1094
1094
  "ControlValidity": {
1095
1095
  "location": "import",
1096
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
1096
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
1097
1097
  }
1098
1098
  },
1099
1099
  "return": "Promise<ControlValidity>"
@@ -370,7 +370,7 @@ export class DatePicker {
370
370
  "references": {
371
371
  "DaysOfWeek": {
372
372
  "location": "import",
373
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/utils/date-utils.ts"
373
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/utils/date-utils.ts"
374
374
  }
375
375
  }
376
376
  },
@@ -395,7 +395,7 @@ export class DatePicker {
395
395
  "references": {
396
396
  "DuetLocalizedText": {
397
397
  "location": "import",
398
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
398
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
399
399
  }
400
400
  }
401
401
  },
@@ -418,7 +418,7 @@ export class DatePicker {
418
418
  "references": {
419
419
  "Color": {
420
420
  "location": "import",
421
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
421
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
422
422
  }
423
423
  }
424
424
  },
@@ -442,7 +442,7 @@ export class DatePicker {
442
442
  "references": {
443
443
  "DateDisabledPredicate": {
444
444
  "location": "import",
445
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
445
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
446
446
  }
447
447
  }
448
448
  },
@@ -521,7 +521,7 @@ export class DatePicker {
521
521
  "references": {
522
522
  "PickerChangeEvent": {
523
523
  "location": "import",
524
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
524
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
525
525
  }
526
526
  }
527
527
  }
@@ -238,7 +238,7 @@ export class Details {
238
238
  "references": {
239
239
  "Color": {
240
240
  "location": "import",
241
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
241
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
242
242
  }
243
243
  }
244
244
  },
@@ -346,7 +346,7 @@ export class Dialog {
346
346
  "references": {
347
347
  "StorageMethods": {
348
348
  "location": "import",
349
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/utils/store/component-store.ts"
349
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/utils/store/component-store.ts"
350
350
  }
351
351
  }
352
352
  },
@@ -410,7 +410,7 @@ export class Dropdown {
410
410
  "references": {
411
411
  "PopoverPlacement": {
412
412
  "location": "import",
413
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/utils/popover.ts"
413
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/utils/popover.ts"
414
414
  }
415
415
  }
416
416
  },
@@ -46,10 +46,10 @@ export class FieldValidator {
46
46
  const found = this.allFields.find((field) => this.getName(field) === key);
47
47
  // field update has come programmatically (not from ui),
48
48
  // so let's update the underlying ui field
49
- if ((found &&
50
- found.tagName === 'NANO-FILE-UPLOAD' &&
51
- !this.fileStateEqual(key, found)) ||
52
- (found.tagName !== 'NANO-FILE-UPLOAD' && found.value !== newVal)) {
49
+ if (found &&
50
+ ((found.tagName === 'NANO-FILE-UPLOAD' &&
51
+ !this.fileStateEqual(key, found)) ||
52
+ (found.tagName !== 'NANO-FILE-UPLOAD' && found.value !== newVal))) {
53
53
  this.storeToFields([found]);
54
54
  }
55
55
  if (this.validateOn === 'dirty' && this.dirty) {
@@ -258,7 +258,9 @@ export class FieldValidator {
258
258
  * @param state - the state to load in the store
259
259
  */
260
260
  async setStore(state) {
261
- Object.entries(state).forEach(([key, val]) => (this.store.state[key] = val));
261
+ Object.entries(state).forEach(([key, val]) => {
262
+ this.store.state[key] = val;
263
+ });
262
264
  }
263
265
  /**
264
266
  * Sets custom validity for all / some form fields.
@@ -384,7 +386,7 @@ export class FieldValidator {
384
386
  if (cb.checked)
385
387
  this._store.state[fieldName] = cb.value;
386
388
  }
387
- else if (this.allFields.filter((f) => this.getName(field) === fieldName &&
389
+ else if (this.allFields.filter((f) => this.getName(f) === fieldName &&
388
390
  (f.tagName === 'NANO-CHECKBOX' ||
389
391
  f.type === 'checkbox')).length > 1) {
390
392
  // multiple checkbox type control
@@ -686,15 +688,15 @@ export class FieldValidator {
686
688
  "references": {
687
689
  "ValidationState": {
688
690
  "location": "import",
689
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
691
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
690
692
  },
691
693
  "PlainFormEles": {
692
694
  "location": "import",
693
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
695
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
694
696
  },
695
697
  "NanoFormEles": {
696
698
  "location": "import",
697
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
699
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
698
700
  }
699
701
  }
700
702
  },
@@ -736,7 +738,7 @@ export class FieldValidator {
736
738
  "references": {
737
739
  "ValidatorValueStore": {
738
740
  "location": "import",
739
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
741
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
740
742
  }
741
743
  }
742
744
  },
@@ -785,7 +787,7 @@ export class FieldValidator {
785
787
  "references": {
786
788
  "ValidatorValueStore": {
787
789
  "location": "import",
788
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
790
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
789
791
  }
790
792
  }
791
793
  }
@@ -837,7 +839,7 @@ export class FieldValidator {
837
839
  },
838
840
  "ValidatorValueStore": {
839
841
  "location": "import",
840
- "path": "/builds/v4bvxH77/0/Digital/nano-components/packages/components/src/interface.d.ts"
842
+ "path": "/builds/-PA_AySk/0/Digital/nano-components/packages/components/src/interface.d.ts"
841
843
  }
842
844
  },
843
845
  "return": "Promise<void>"