@dso-toolkit/core 32.1.0 → 33.2.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.
Files changed (45) hide show
  1. package/dist/cjs/dso-autosuggest.cjs.entry.js +5 -1
  2. package/dist/cjs/dso-date-picker.cjs.entry.js +8 -7
  3. package/dist/cjs/dso-dropdown-menu.cjs.entry.js +4 -1
  4. package/dist/cjs/dso-label.cjs.entry.js +1 -1
  5. package/dist/cjs/dso-toggletip.cjs.entry.js +2 -1
  6. package/dist/cjs/dso-tree-view.cjs.entry.js +5 -4
  7. package/dist/collection/components/autosuggest/autosuggest.js +19 -1
  8. package/dist/collection/components/autosuggest/autosuggest.template.js +2 -1
  9. package/dist/collection/components/date-picker/date-picker.js +8 -7
  10. package/dist/collection/components/dropdown-menu/dropdown-menu.css +4 -0
  11. package/dist/collection/components/dropdown-menu/dropdown-menu.js +3 -0
  12. package/dist/collection/components/label/label.js +2 -1
  13. package/dist/collection/components/toggletip/toggletip.css +4 -0
  14. package/dist/collection/components/toggletip/toggletip.js +1 -0
  15. package/dist/collection/components/tree-view/tree-item.js +3 -2
  16. package/dist/collection/components/tree-view/tree-view.css +33 -5
  17. package/dist/collection/components/tree-view/tree-view.js +11 -11
  18. package/dist/custom-elements/index.js +25 -15
  19. package/dist/dso-toolkit/dso-toolkit.esm.js +1 -1
  20. package/dist/dso-toolkit/p-0a08ac9f.entry.js +1 -0
  21. package/dist/dso-toolkit/p-731a9631.entry.js +1 -0
  22. package/dist/dso-toolkit/p-741e96de.entry.js +5 -0
  23. package/dist/dso-toolkit/{p-e2dc97c4.entry.js → p-984551a8.entry.js} +1 -1
  24. package/dist/dso-toolkit/p-e814d644.entry.js +1 -0
  25. package/dist/dso-toolkit/p-fd5e24c9.entry.js +1 -0
  26. package/dist/esm/dso-autosuggest.entry.js +5 -1
  27. package/dist/esm/dso-date-picker.entry.js +8 -7
  28. package/dist/esm/dso-dropdown-menu.entry.js +4 -1
  29. package/dist/esm/dso-label.entry.js +1 -1
  30. package/dist/esm/dso-toggletip.entry.js +2 -1
  31. package/dist/esm/dso-tree-view.entry.js +5 -4
  32. package/dist/types/components/autosuggest/autosuggest.d.ts +5 -0
  33. package/dist/types/components/autosuggest/autosuggest.template.d.ts +1 -1
  34. package/dist/types/components/dropdown-menu/dropdown-menu.d.ts +1 -0
  35. package/dist/types/components/tree-view/tree-item.d.ts +4 -4
  36. package/dist/types/components/tree-view/tree-view.d.ts +12 -9
  37. package/dist/types/components/tree-view/tree-view.interfaces.d.ts +14 -4
  38. package/dist/types/components/tree-view/tree-view.template.d.ts +1 -1
  39. package/dist/types/components.d.ts +11 -7
  40. package/package.json +1 -8
  41. package/dist/dso-toolkit/p-12f7e7d7.entry.js +0 -5
  42. package/dist/dso-toolkit/p-39dae284.entry.js +0 -1
  43. package/dist/dso-toolkit/p-9e9f8bcf.entry.js +0 -1
  44. package/dist/dso-toolkit/p-ad8f467f.entry.js +0 -1
  45. package/dist/dso-toolkit/p-e03d7741.entry.js +0 -1
@@ -93,6 +93,7 @@ let Autosuggest = class {
93
93
  index.registerInstance(this, hostRef);
94
94
  this.selectEmitter = index.createEvent(this, "dsoSelect", 7);
95
95
  this.changeEmitter = index.createEvent(this, "dsoChange", 7);
96
+ this.searchEmitter = index.createEvent(this, "dsoSearch", 7);
96
97
  /**
97
98
  * The suggestions for the value of the slotted input element
98
99
  */
@@ -279,9 +280,12 @@ let Autosuggest = class {
279
280
  this.selectFirstSuggestion();
280
281
  }
281
282
  pickSelectedValue() {
282
- if (this.selectedSuggestion) {
283
+ if (this.selectedSuggestion && this.showSuggestions) {
283
284
  this.selectEmitter.emit(this.selectedSuggestion);
284
285
  }
286
+ else {
287
+ this.searchEmitter.emit(this.input.value);
288
+ }
285
289
  this.closeSuggestions();
286
290
  }
287
291
  listboxItemId(suggestion) {
@@ -478,8 +478,7 @@ let DsoDatePicker = class {
478
478
  };
479
479
  this.handleInputChange = (e) => {
480
480
  const target = e.target;
481
- target.value = target.value.replace(DISALLOWED_CHARACTERS, "");
482
- this.setValue(target.value);
481
+ this.setValue(target.value.replace(DISALLOWED_CHARACTERS, ""));
483
482
  };
484
483
  this.processFocusedDayNode = (element) => {
485
484
  this.focusedDayNode = element;
@@ -585,10 +584,7 @@ let DsoDatePicker = class {
585
584
  event.valueAsDate = parseDutchDate(value);
586
585
  }
587
586
  if (event.valueAsDate) {
588
- event.value = this.value = printDutchDate(event.valueAsDate);
589
- }
590
- else {
591
- this.value = "";
587
+ event.value = printDutchDate(event.valueAsDate);
592
588
  }
593
589
  if (!event.valueAsDate && this.required) {
594
590
  event.error = "required";
@@ -596,9 +592,14 @@ let DsoDatePicker = class {
596
592
  if (event.value && !event.valueAsDate) {
597
593
  event.error = "invalid";
598
594
  }
595
+ this.value = event.value;
599
596
  this.dateChange.emit(event);
600
597
  }
601
598
  componentDidLoad() {
599
+ const valueAsDate = parseDutchDate(this.value);
600
+ if (valueAsDate) {
601
+ this.value = printDutchDate(valueAsDate);
602
+ }
602
603
  if (this.dsoAutofocus) {
603
604
  this.setFocus();
604
605
  }
@@ -625,7 +626,7 @@ let DsoDatePicker = class {
625
626
  if (maxDate) {
626
627
  maxYear = Math.min(maxYear, maxDate.getFullYear());
627
628
  }
628
- return (index.h(index.Host, null, index.h("div", { class: "dso-date" }, index.h("div", { class: "dso-date__input-wrapper" }, index.h("input", { class: "dso-date__input", value: formattedDate, placeholder: this.localization.placeholder, id: this.identifier, disabled: this.disabled, role: this.role, required: this.required ? true : undefined, "aria-autocomplete": "none", onInput: this.handleInputChange, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown, autoComplete: "off", ref: element => (this.datePickerInput = element) }), index.h("button", { type: "button", class: "dso-date__toggle", onClick: this.toggleOpen, disabled: this.disabled, ref: element => (this.datePickerButton = element) }, index.h("span", { class: "dso-date__toggle-icon" }, index.h("dso-icon", { icon: "calendar" })), index.h("span", { class: "dso-date__vhidden" }, this.localization.buttonLabel, formattedDate && (index.h("span", null, ", ", this.localization.selectedDateMessage, " ", formattedDate))))), index.h("div", { class: {
629
+ return (index.h(index.Host, null, index.h("div", { class: "dso-date" }, index.h("div", { class: "dso-date__input-wrapper" }, index.h("input", { class: "dso-date__input", value: this.value, placeholder: this.localization.placeholder, id: this.identifier, disabled: this.disabled, role: this.role, required: this.required ? true : undefined, "aria-autocomplete": "none", onInput: this.handleInputChange, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown, autoComplete: "off", ref: element => (this.datePickerInput = element) }), index.h("button", { type: "button", class: "dso-date__toggle", onClick: this.toggleOpen, disabled: this.disabled, ref: element => (this.datePickerButton = element) }, index.h("span", { class: "dso-date__toggle-icon" }, index.h("dso-icon", { icon: "calendar" })), index.h("span", { class: "dso-date__vhidden" }, this.localization.buttonLabel, formattedDate && (index.h("span", null, ", ", this.localization.selectedDateMessage, " ", formattedDate))))), index.h("div", { class: {
629
630
  "dso-date__dialog": true,
630
631
  "is-left": this.direction === "left",
631
632
  "is-active": this.open,
@@ -230,7 +230,7 @@ var tabbable = function tabbable(el, options) {
230
230
  return tabbableNodes;
231
231
  };
232
232
 
233
- const dropdownMenuCss = ":host{--di-check-wit:url(\"data:image/svg+xml,%3csvg id='check' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M10.11%2c18%2c5.29%2c13.31A.92.92%2c0%2c0%2c1%2c5.3%2c12a1%2c1%2c0%2c0%2c1%2c1.41%2c0l3.4%2c3.3%2c7.18-7a1%2c1%2c0%2c0%2c1%2c1.41%2c0%2c.92.92%2c0%2c0%2c1%2c0%2c1.35Z'/%3e %3c/svg%3e\");--di-chevron-down:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %2339870c%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-down-scampi:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %23676cb0%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-down-wit:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-up:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %2339870c%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");--di-chevron-up-scampi:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %23676cb0%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");--di-chevron-up-wit:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");display:inline-block;position:relative}";
233
+ const dropdownMenuCss = ":host(:focus){outline:none}:host{--di-check-wit:url(\"data:image/svg+xml,%3csvg id='check' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M10.11%2c18%2c5.29%2c13.31A.92.92%2c0%2c0%2c1%2c5.3%2c12a1%2c1%2c0%2c0%2c1%2c1.41%2c0l3.4%2c3.3%2c7.18-7a1%2c1%2c0%2c0%2c1%2c1.41%2c0%2c.92.92%2c0%2c0%2c1%2c0%2c1.35Z'/%3e %3c/svg%3e\");--di-chevron-down:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %2339870c%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-down-scampi:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %23676cb0%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-down-wit:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-up:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %2339870c%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");--di-chevron-up-scampi:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %23676cb0%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");--di-chevron-up-wit:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");display:inline-block;position:relative}";
234
234
 
235
235
  let DropdownMenu = class {
236
236
  constructor(hostRef) {
@@ -325,6 +325,9 @@ let DropdownMenu = class {
325
325
  this.openPopup();
326
326
  }
327
327
  }
328
+ componentDidRender() {
329
+ this.host.setAttribute("tabindex", "-1");
330
+ }
328
331
  componentWillRender() {
329
332
  for (const li of Array.from(this.host.getElementsByTagName("li"))) {
330
333
  for (const tab of tabbable(li)) {
@@ -14,7 +14,7 @@ let Label = class {
14
14
  }
15
15
  render() {
16
16
  const status = this.status && Label.statusMap.get(this.status);
17
- return (index.h("span", { class: clsx_m.clsx('dso-label', { [`dso-label-${this.status}`]: this.status, 'dso-compact': this.compact && !this.removable, 'dso-hover': this.hover }) }, index.h("slot", { name: "symbol" }), status && (index.h("span", { class: "sr-only" }, status, ": ")), index.h("slot", null), this.removable && (index.h("button", { type: "button", onClick: e => this.removeClick.emit(e), title: "Verwijder", onMouseEnter: () => this.hover = true, onMouseLeave: () => this.hover = false }, index.h("dso-icon", { icon: "times" })))));
17
+ return (index.h("span", { class: clsx_m.clsx('dso-label', { [`dso-label-${this.status}`]: this.status, 'dso-compact': this.compact && !this.removable, 'dso-hover': this.hover }) }, index.h("slot", { name: "symbol" }), status && (index.h("span", { class: "sr-only" }, status, ": ")), index.h("slot", null), this.removable && (index.h("button", { type: "button", onClick: e => this.removeClick.emit(e), onMouseEnter: () => this.hover = true, onMouseLeave: () => this.hover = false }, index.h("span", { class: "sr-only" }, "Verwijder"), index.h("dso-icon", { icon: "times" })))));
18
18
  }
19
19
  };
20
20
  Label.statusMap = new Map([
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-fcdfdd38.js');
6
6
 
7
- const toggletipCss = "*,*::after,*::before{box-sizing:border-box}";
7
+ const toggletipCss = "*,*::after,*::before{box-sizing:border-box}:host(:focus){outline:none}";
8
8
 
9
9
  let Toggletip = class {
10
10
  constructor(hostRef) {
@@ -51,6 +51,7 @@ let Toggletip = class {
51
51
  throw Error("button not found");
52
52
  }
53
53
  this.button = button;
54
+ this.host.setAttribute("tabindex", "-1");
54
55
  }
55
56
  render() {
56
57
  return (index.h(index.Fragment, null, index.h("dso-info-button", { id: "toggle", onClick: this.click, label: this.label, active: this.active, secondary: this.secondary }), index.h("dso-tooltip", { stateless: true, for: "toggle", active: this.active, position: this.position, small: this.small }, index.h("slot", null))));
@@ -7,13 +7,14 @@ const clsx_m = require('./clsx.m-b00fa5e1.js');
7
7
 
8
8
  const DsoTreeItem = ({ owner, ancestors, item, index: index$1, level, setSize }) => {
9
9
  var _a, _b, _c;
10
- return (index.h("li", { key: item.reference, class: clsx_m.clsx('tree-item', { 'has-child': item.hasItems }), role: 'none' },
10
+ return (index.h("li", { key: item.id, class: clsx_m.clsx('tree-item', { 'has-child': item.hasItems }), role: 'none' },
11
11
  index.h("div", { class: "tree-branch-control" }, item.hasItems
12
12
  ?
13
13
  index.h("div", { onClick: (e) => owner.itemClick(e, ancestors, item) },
14
14
  index.h("dso-icon", { icon: item.open ? 'chevron-down' : 'chevron-right' }))
15
15
  : index.h("dso-icon", null)),
16
- index.h("p", { class: "tree-content", tabindex: level === 1 && index$1 === 0 ? 0 : -1, role: "treeitem", "aria-expanded": item.hasItems ? '' + (!!item.open && !!((_a = item.items) === null || _a === void 0 ? void 0 : _a.length)) : undefined, "aria-level": level, "aria-setsize": setSize, "aria-posinset": index$1 + 1, "aria-busy": item.loading ? 'true' : undefined, onClick: (e) => owner.itemClick(e, ancestors, item) },
16
+ index.h("p", { class: clsx_m.clsx('tree-content', { 'active': item.active }, { 'selected': item.selected }), tabindex: level === 1 && index$1 === 0 ? 0 : -1, role: "treeitem", "aria-expanded": item.hasItems ? '' + (!!item.open && !!((_a = item.items) === null || _a === void 0 ? void 0 : _a.length)) : undefined, "aria-current": item.active ? 'true' : undefined, "aria-level": level, "aria-setsize": setSize, "aria-posinset": index$1 + 1, "aria-busy": item.loading ? 'true' : undefined, onClick: (e) => owner.itemClick(e, ancestors, item) },
17
+ item.selected && index.h("span", { class: "sr-only" }, "Resultaat: "),
17
18
  item.href
18
19
  ? index.h("a", { href: item.href, tabindex: "-1" }, item.label)
19
20
  : index.h("span", null, item.label), (_b = item.icons) === null || _b === void 0 ? void 0 :
@@ -24,7 +25,7 @@ const DsoTreeItem = ({ owner, ancestors, item, index: index$1, level, setSize })
24
25
  : index.h("ul", { role: "group" }, (_c = item.items) === null || _c === void 0 ? void 0 : _c.map((childItem, index$1, org) => index.h(DsoTreeItem, { owner: owner, ancestors: [...ancestors, item], item: childItem, index: index$1, level: level + 1, setSize: org.length }))))));
25
26
  };
26
27
 
27
- const treeViewCss = ":host ul{list-style-type:none}:host ul[role=tree]{padding-left:0}:host li[role=treeitem]>ul{padding-left:1.5em}:host .tree-branch-control{cursor:pointer;display:inline-block}:host .tree-content{cursor:pointer;display:inline-block;margin:8px 0}:host .tree-content a,:host .tree-content a:visited{color:#39870c;text-decoration:none}:host .tree-content a:hover,:host .tree-content a:focus{color:#676cb0;text-decoration:underline}:host .tree-content a:active{text-decoration:none}:host .tree-content dso-icon{vertical-align:text-bottom;font-size:0.75em;margin-left:0.5em}*,*::after,*::before{box-sizing:border-box}";
28
+ const treeViewCss = ":host ul{list-style-type:none}:host ul[role=tree]{padding-left:0}:host li[role=treeitem]>ul{padding-left:1.5em}:host .tree-branch-control{cursor:pointer;display:inline-block}:host .tree-content{cursor:pointer;display:inline-block;margin:8px 0}:host .tree-content.active{font-weight:700}:host .tree-content.active:hover{text-decoration:underline}:host .tree-content.active a{text-decoration:none}:host .tree-content.selected{color:#191919;font-weight:700;text-decoration:underline}:host .tree-content.selected:hover,:host .tree-content.selected:focus{text-decoration:none}:host .tree-content a,:host .tree-content a:visited{color:#191919;text-decoration:underline}:host .tree-content a:hover,:host .tree-content a:focus{color:#191919;text-decoration:none}:host .tree-content a:active{text-decoration:none}:host .tree-content dso-icon{font-size:0.75em;margin-left:0.5em;vertical-align:text-bottom}*,*::after,*::before{box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}";
28
29
 
29
30
  let TreeView = class {
30
31
  constructor(hostRef) {
@@ -85,7 +86,7 @@ let TreeView = class {
85
86
  return;
86
87
  }
87
88
  TreeView.setFocus(tree, contentElement);
88
- this.clickItem.emit([...ancestors, item]);
89
+ this.clickItem.emit({ path: [...ancestors, item], originalEvent: event });
89
90
  return;
90
91
  }
91
92
  if (item.open) {
@@ -190,9 +190,12 @@ export class Autosuggest {
190
190
  this.selectFirstSuggestion();
191
191
  }
192
192
  pickSelectedValue() {
193
- if (this.selectedSuggestion) {
193
+ if (this.selectedSuggestion && this.showSuggestions) {
194
194
  this.selectEmitter.emit(this.selectedSuggestion);
195
195
  }
196
+ else {
197
+ this.searchEmitter.emit(this.input.value);
198
+ }
196
199
  this.closeSuggestions();
197
200
  }
198
201
  listboxItemId(suggestion) {
@@ -296,6 +299,21 @@ export class Autosuggest {
296
299
  "resolved": "string",
297
300
  "references": {}
298
301
  }
302
+ }, {
303
+ "method": "searchEmitter",
304
+ "name": "dsoSearch",
305
+ "bubbles": true,
306
+ "cancelable": true,
307
+ "composed": true,
308
+ "docs": {
309
+ "tags": [],
310
+ "text": "Emitted when enter is pressed.\nThe `detail` property of the `CustomEvent`\u00A0will contain the input text."
311
+ },
312
+ "complexType": {
313
+ "original": "string",
314
+ "resolved": "string",
315
+ "references": {}
316
+ }
299
317
  }]; }
300
318
  static get elementRef() { return "host"; }
301
319
  static get watchers() { return [{
@@ -1,10 +1,11 @@
1
1
  import { html } from 'lit-html';
2
- export function autosuggestTemplate({ suggestions, onSelect, onChange, suggestOnFocus }, children) {
2
+ export function autosuggestTemplate({ suggestions, onSelect, onChange, onSearch, suggestOnFocus }, children) {
3
3
  return html `
4
4
  <dso-autosuggest
5
5
  .suggestions=${suggestions}
6
6
  @dsoSelect=${onSelect}
7
7
  @dsoChange=${onChange}
8
+ @dsoSearch=${onSearch}
8
9
  ?suggest-on-focus=${suggestOnFocus}
9
10
  >
10
11
  ${children}
@@ -229,8 +229,7 @@ export class DsoDatePicker {
229
229
  };
230
230
  this.handleInputChange = (e) => {
231
231
  const target = e.target;
232
- target.value = target.value.replace(DISALLOWED_CHARACTERS, "");
233
- this.setValue(target.value);
232
+ this.setValue(target.value.replace(DISALLOWED_CHARACTERS, ""));
234
233
  };
235
234
  this.processFocusedDayNode = (element) => {
236
235
  this.focusedDayNode = element;
@@ -336,10 +335,7 @@ export class DsoDatePicker {
336
335
  event.valueAsDate = parseDutchDate(value);
337
336
  }
338
337
  if (event.valueAsDate) {
339
- event.value = this.value = printDutchDate(event.valueAsDate);
340
- }
341
- else {
342
- this.value = "";
338
+ event.value = printDutchDate(event.valueAsDate);
343
339
  }
344
340
  if (!event.valueAsDate && this.required) {
345
341
  event.error = "required";
@@ -347,9 +343,14 @@ export class DsoDatePicker {
347
343
  if (event.value && !event.valueAsDate) {
348
344
  event.error = "invalid";
349
345
  }
346
+ this.value = event.value;
350
347
  this.dateChange.emit(event);
351
348
  }
352
349
  componentDidLoad() {
350
+ const valueAsDate = parseDutchDate(this.value);
351
+ if (valueAsDate) {
352
+ this.value = printDutchDate(valueAsDate);
353
+ }
353
354
  if (this.dsoAutofocus) {
354
355
  this.setFocus();
355
356
  }
@@ -379,7 +380,7 @@ export class DsoDatePicker {
379
380
  return (h(Host, null,
380
381
  h("div", { class: "dso-date" },
381
382
  h("div", { class: "dso-date__input-wrapper" },
382
- h("input", { class: "dso-date__input", value: formattedDate, placeholder: this.localization.placeholder, id: this.identifier, disabled: this.disabled, role: this.role, required: this.required ? true : undefined, "aria-autocomplete": "none", onInput: this.handleInputChange, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown, autoComplete: "off", ref: element => (this.datePickerInput = element) }),
383
+ h("input", { class: "dso-date__input", value: this.value, placeholder: this.localization.placeholder, id: this.identifier, disabled: this.disabled, role: this.role, required: this.required ? true : undefined, "aria-autocomplete": "none", onInput: this.handleInputChange, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown, autoComplete: "off", ref: element => (this.datePickerInput = element) }),
383
384
  h("button", { type: "button", class: "dso-date__toggle", onClick: this.toggleOpen, disabled: this.disabled, ref: element => (this.datePickerButton = element) },
384
385
  h("span", { class: "dso-date__toggle-icon" },
385
386
  h("dso-icon", { icon: "calendar" })),
@@ -1,6 +1,10 @@
1
1
  /* stylelint-disable value-keyword-case */
2
2
  /* stylelint-disable string-no-newline */
3
3
  /* stylelint-enable */
4
+ :host(:focus) {
5
+ outline: none;
6
+ }
7
+
4
8
  :host {
5
9
  --di-check-wit: url("data:image/svg+xml,%3csvg id='check' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M10.11%2c18%2c5.29%2c13.31A.92.92%2c0%2c0%2c1%2c5.3%2c12a1%2c1%2c0%2c0%2c1%2c1.41%2c0l3.4%2c3.3%2c7.18-7a1%2c1%2c0%2c0%2c1%2c1.41%2c0%2c.92.92%2c0%2c0%2c1%2c0%2c1.35Z'/%3e %3c/svg%3e");
6
10
  --di-chevron-down: url("data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %2339870c%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e");
@@ -93,6 +93,9 @@ export class DropdownMenu {
93
93
  this.openPopup();
94
94
  }
95
95
  }
96
+ componentDidRender() {
97
+ this.host.setAttribute("tabindex", "-1");
98
+ }
96
99
  componentWillRender() {
97
100
  for (const li of Array.from(this.host.getElementsByTagName("li"))) {
98
101
  for (const tab of tabbable(li)) {
@@ -9,7 +9,8 @@ export class Label {
9
9
  status,
10
10
  ": ")),
11
11
  h("slot", null),
12
- this.removable && (h("button", { type: "button", onClick: e => this.removeClick.emit(e), title: "Verwijder", onMouseEnter: () => this.hover = true, onMouseLeave: () => this.hover = false },
12
+ this.removable && (h("button", { type: "button", onClick: e => this.removeClick.emit(e), onMouseEnter: () => this.hover = true, onMouseLeave: () => this.hover = false },
13
+ h("span", { class: "sr-only" }, "Verwijder"),
13
14
  h("dso-icon", { icon: "times" })))));
14
15
  }
15
16
  static get is() { return "dso-label"; }
@@ -5,4 +5,8 @@
5
5
  *::after,
6
6
  *::before {
7
7
  box-sizing: border-box;
8
+ }
9
+
10
+ :host(:focus) {
11
+ outline: none;
8
12
  }
@@ -43,6 +43,7 @@ export class Toggletip {
43
43
  throw Error("button not found");
44
44
  }
45
45
  this.button = button;
46
+ this.host.setAttribute("tabindex", "-1");
46
47
  }
47
48
  render() {
48
49
  return (h(Fragment, null,
@@ -2,13 +2,14 @@ import { h, Fragment } from '@stencil/core';
2
2
  import clsx from 'clsx';
3
3
  export const DsoTreeItem = ({ owner, ancestors, item, index, level, setSize }) => {
4
4
  var _a, _b, _c;
5
- return (h("li", { key: item.reference, class: clsx('tree-item', { 'has-child': item.hasItems }), role: 'none' },
5
+ return (h("li", { key: item.id, class: clsx('tree-item', { 'has-child': item.hasItems }), role: 'none' },
6
6
  h("div", { class: "tree-branch-control" }, item.hasItems
7
7
  ?
8
8
  h("div", { onClick: (e) => owner.itemClick(e, ancestors, item) },
9
9
  h("dso-icon", { icon: item.open ? 'chevron-down' : 'chevron-right' }))
10
10
  : h("dso-icon", null)),
11
- h("p", { class: "tree-content", tabindex: level === 1 && index === 0 ? 0 : -1, role: "treeitem", "aria-expanded": item.hasItems ? '' + (!!item.open && !!((_a = item.items) === null || _a === void 0 ? void 0 : _a.length)) : undefined, "aria-level": level, "aria-setsize": setSize, "aria-posinset": index + 1, "aria-busy": item.loading ? 'true' : undefined, onClick: (e) => owner.itemClick(e, ancestors, item) },
11
+ h("p", { class: clsx('tree-content', { 'active': item.active }, { 'selected': item.selected }), tabindex: level === 1 && index === 0 ? 0 : -1, role: "treeitem", "aria-expanded": item.hasItems ? '' + (!!item.open && !!((_a = item.items) === null || _a === void 0 ? void 0 : _a.length)) : undefined, "aria-current": item.active ? 'true' : undefined, "aria-level": level, "aria-setsize": setSize, "aria-posinset": index + 1, "aria-busy": item.loading ? 'true' : undefined, onClick: (e) => owner.itemClick(e, ancestors, item) },
12
+ item.selected && h("span", { class: "sr-only" }, "Resultaat: "),
12
13
  item.href
13
14
  ? h("a", { href: item.href, tabindex: "-1" }, item.label)
14
15
  : h("span", null, item.label), (_b = item.icons) === null || _b === void 0 ? void 0 :
@@ -19,25 +19,53 @@
19
19
  display: inline-block;
20
20
  margin: 8px 0;
21
21
  }
22
- :host .tree-content a, :host .tree-content a:visited {
23
- color: #39870c;
22
+ :host .tree-content.active {
23
+ font-weight: 700;
24
+ }
25
+ :host .tree-content.active:hover {
26
+ text-decoration: underline;
27
+ }
28
+ :host .tree-content.active a {
24
29
  text-decoration: none;
25
30
  }
26
- :host .tree-content a:hover, :host .tree-content a:focus {
27
- color: #676cb0;
31
+ :host .tree-content.selected {
32
+ color: #191919;
33
+ font-weight: 700;
28
34
  text-decoration: underline;
29
35
  }
36
+ :host .tree-content.selected:hover, :host .tree-content.selected:focus {
37
+ text-decoration: none;
38
+ }
39
+ :host .tree-content a, :host .tree-content a:visited {
40
+ color: #191919;
41
+ text-decoration: underline;
42
+ }
43
+ :host .tree-content a:hover, :host .tree-content a:focus {
44
+ color: #191919;
45
+ text-decoration: none;
46
+ }
30
47
  :host .tree-content a:active {
31
48
  text-decoration: none;
32
49
  }
33
50
  :host .tree-content dso-icon {
34
- vertical-align: text-bottom;
35
51
  font-size: 0.75em;
36
52
  margin-left: 0.5em;
53
+ vertical-align: text-bottom;
37
54
  }
38
55
 
39
56
  *,
40
57
  *::after,
41
58
  *::before {
42
59
  box-sizing: border-box;
60
+ }
61
+
62
+ .sr-only {
63
+ position: absolute;
64
+ width: 1px;
65
+ height: 1px;
66
+ padding: 0;
67
+ margin: -1px;
68
+ overflow: hidden;
69
+ clip: rect(0, 0, 0, 0);
70
+ border: 0;
43
71
  }
@@ -55,7 +55,7 @@ export class TreeView {
55
55
  return;
56
56
  }
57
57
  TreeView.setFocus(tree, contentElement);
58
- this.clickItem.emit([...ancestors, item]);
58
+ this.clickItem.emit({ path: [...ancestors, item], originalEvent: event });
59
59
  return;
60
60
  }
61
61
  if (item.open) {
@@ -158,8 +158,8 @@ export class TreeView {
158
158
  "type": "unknown",
159
159
  "mutable": false,
160
160
  "complexType": {
161
- "original": "TreeViewItem<string>[]",
162
- "resolved": "TreeViewItem<string>[]",
161
+ "original": "TreeViewItem[]",
162
+ "resolved": "TreeViewItem[]",
163
163
  "references": {
164
164
  "TreeViewItem": {
165
165
  "location": "import",
@@ -186,8 +186,8 @@ export class TreeView {
186
186
  "text": "Emitted when a tree view item is opened.\nThe `detail` property of the `CustomEvent`\u00A0will contain the complete path of TreeViewItems from the\nroot to the item that is emitting the open event. The consumer of the event is responsible for updating\nthe TreeView's collection (usually set the open state on the last TreeViewItem in path)."
187
187
  },
188
188
  "complexType": {
189
- "original": "TreeViewItem<string>[]",
190
- "resolved": "TreeViewItem<string>[]",
189
+ "original": "TreeViewItem[]",
190
+ "resolved": "TreeViewItem[]",
191
191
  "references": {
192
192
  "TreeViewItem": {
193
193
  "location": "import",
@@ -206,8 +206,8 @@ export class TreeView {
206
206
  "text": "Emitted when a tree view item is closed.\nThe `detail` property of the `CustomEvent`\u00A0will contain the complete path of TreeViewItems from the\nroot to the item that is emitting the close event. The consumer of the event is responsible for updating\nthe TreeView's collection (usually set the closed state on the last TreeViewItem in path)."
207
207
  },
208
208
  "complexType": {
209
- "original": "TreeViewItem<string>[]",
210
- "resolved": "TreeViewItem<string>[]",
209
+ "original": "TreeViewItem[]",
210
+ "resolved": "TreeViewItem[]",
211
211
  "references": {
212
212
  "TreeViewItem": {
213
213
  "location": "import",
@@ -223,13 +223,13 @@ export class TreeView {
223
223
  "composed": true,
224
224
  "docs": {
225
225
  "tags": [],
226
- "text": "Emitted when a tree view item is clicked.\nThe `detail` property of the `CustomEvent`\u00A0will contain the complete path of TreeViewItems from the\nroot to the item that is emitting the clicked event."
226
+ "text": "Emitted when a tree view item is clicked.\nThe `detail` property of the `CustomEvent`\u00A0will contain an object with:\n`path` = the complete path of TreeViewItems from the root to the item that is emitting the clicked event.\n`originalEvent` = the original click event.\nThe consumer of the event is responsible for updating the TreeView's collection (usually set the active\nstate on the last TreeViewItem in path and clear all other active item states)."
227
227
  },
228
228
  "complexType": {
229
- "original": "TreeViewItem<string>[]",
230
- "resolved": "TreeViewItem<string>[]",
229
+ "original": "TreeViewPointerEvent",
230
+ "resolved": "TreeViewPointerEvent",
231
231
  "references": {
232
- "TreeViewItem": {
232
+ "TreeViewPointerEvent": {
233
233
  "location": "import",
234
234
  "path": "./tree-view.interfaces"
235
235
  }
@@ -243,6 +243,7 @@ let Autosuggest = class extends HTMLElement {
243
243
  this.__registerHost();
244
244
  this.selectEmitter = createEvent(this, "dsoSelect", 7);
245
245
  this.changeEmitter = createEvent(this, "dsoChange", 7);
246
+ this.searchEmitter = createEvent(this, "dsoSearch", 7);
246
247
  /**
247
248
  * The suggestions for the value of the slotted input element
248
249
  */
@@ -429,9 +430,12 @@ let Autosuggest = class extends HTMLElement {
429
430
  this.selectFirstSuggestion();
430
431
  }
431
432
  pickSelectedValue() {
432
- if (this.selectedSuggestion) {
433
+ if (this.selectedSuggestion && this.showSuggestions) {
433
434
  this.selectEmitter.emit(this.selectedSuggestion);
434
435
  }
436
+ else {
437
+ this.searchEmitter.emit(this.input.value);
438
+ }
435
439
  this.closeSuggestions();
436
440
  }
437
441
  listboxItemId(suggestion) {
@@ -977,8 +981,7 @@ let DsoDatePicker$1 = class extends HTMLElement {
977
981
  };
978
982
  this.handleInputChange = (e) => {
979
983
  const target = e.target;
980
- target.value = target.value.replace(DISALLOWED_CHARACTERS, "");
981
- this.setValue(target.value);
984
+ this.setValue(target.value.replace(DISALLOWED_CHARACTERS, ""));
982
985
  };
983
986
  this.processFocusedDayNode = (element) => {
984
987
  this.focusedDayNode = element;
@@ -1084,10 +1087,7 @@ let DsoDatePicker$1 = class extends HTMLElement {
1084
1087
  event.valueAsDate = parseDutchDate(value);
1085
1088
  }
1086
1089
  if (event.valueAsDate) {
1087
- event.value = this.value = printDutchDate(event.valueAsDate);
1088
- }
1089
- else {
1090
- this.value = "";
1090
+ event.value = printDutchDate(event.valueAsDate);
1091
1091
  }
1092
1092
  if (!event.valueAsDate && this.required) {
1093
1093
  event.error = "required";
@@ -1095,9 +1095,14 @@ let DsoDatePicker$1 = class extends HTMLElement {
1095
1095
  if (event.value && !event.valueAsDate) {
1096
1096
  event.error = "invalid";
1097
1097
  }
1098
+ this.value = event.value;
1098
1099
  this.dateChange.emit(event);
1099
1100
  }
1100
1101
  componentDidLoad() {
1102
+ const valueAsDate = parseDutchDate(this.value);
1103
+ if (valueAsDate) {
1104
+ this.value = printDutchDate(valueAsDate);
1105
+ }
1101
1106
  if (this.dsoAutofocus) {
1102
1107
  this.setFocus();
1103
1108
  }
@@ -1124,7 +1129,7 @@ let DsoDatePicker$1 = class extends HTMLElement {
1124
1129
  if (maxDate) {
1125
1130
  maxYear = Math.min(maxYear, maxDate.getFullYear());
1126
1131
  }
1127
- return (h(Host, null, h("div", { class: "dso-date" }, h("div", { class: "dso-date__input-wrapper" }, h("input", { class: "dso-date__input", value: formattedDate, placeholder: this.localization.placeholder, id: this.identifier, disabled: this.disabled, role: this.role, required: this.required ? true : undefined, "aria-autocomplete": "none", onInput: this.handleInputChange, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown, autoComplete: "off", ref: element => (this.datePickerInput = element) }), h("button", { type: "button", class: "dso-date__toggle", onClick: this.toggleOpen, disabled: this.disabled, ref: element => (this.datePickerButton = element) }, h("span", { class: "dso-date__toggle-icon" }, h("dso-icon", { icon: "calendar" })), h("span", { class: "dso-date__vhidden" }, this.localization.buttonLabel, formattedDate && (h("span", null, ", ", this.localization.selectedDateMessage, " ", formattedDate))))), h("div", { class: {
1132
+ return (h(Host, null, h("div", { class: "dso-date" }, h("div", { class: "dso-date__input-wrapper" }, h("input", { class: "dso-date__input", value: this.value, placeholder: this.localization.placeholder, id: this.identifier, disabled: this.disabled, role: this.role, required: this.required ? true : undefined, "aria-autocomplete": "none", onInput: this.handleInputChange, onFocus: this.handleFocus, onBlur: this.handleBlur, onKeyUp: this.handleKeyUp, onKeyDown: this.handleKeyDown, autoComplete: "off", ref: element => (this.datePickerInput = element) }), h("button", { type: "button", class: "dso-date__toggle", onClick: this.toggleOpen, disabled: this.disabled, ref: element => (this.datePickerButton = element) }, h("span", { class: "dso-date__toggle-icon" }, h("dso-icon", { icon: "calendar" })), h("span", { class: "dso-date__vhidden" }, this.localization.buttonLabel, formattedDate && (h("span", null, ", ", this.localization.selectedDateMessage, " ", formattedDate))))), h("div", { class: {
1128
1133
  "dso-date__dialog": true,
1129
1134
  "is-left": this.direction === "left",
1130
1135
  "is-active": this.open,
@@ -1359,7 +1364,7 @@ var tabbable = function tabbable(el, options) {
1359
1364
  return tabbableNodes;
1360
1365
  };
1361
1366
 
1362
- const dropdownMenuCss = ":host{--di-check-wit:url(\"data:image/svg+xml,%3csvg id='check' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M10.11%2c18%2c5.29%2c13.31A.92.92%2c0%2c0%2c1%2c5.3%2c12a1%2c1%2c0%2c0%2c1%2c1.41%2c0l3.4%2c3.3%2c7.18-7a1%2c1%2c0%2c0%2c1%2c1.41%2c0%2c.92.92%2c0%2c0%2c1%2c0%2c1.35Z'/%3e %3c/svg%3e\");--di-chevron-down:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %2339870c%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-down-scampi:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %23676cb0%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-down-wit:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-up:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %2339870c%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");--di-chevron-up-scampi:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %23676cb0%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");--di-chevron-up-wit:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");display:inline-block;position:relative}";
1367
+ const dropdownMenuCss = ":host(:focus){outline:none}:host{--di-check-wit:url(\"data:image/svg+xml,%3csvg id='check' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M10.11%2c18%2c5.29%2c13.31A.92.92%2c0%2c0%2c1%2c5.3%2c12a1%2c1%2c0%2c0%2c1%2c1.41%2c0l3.4%2c3.3%2c7.18-7a1%2c1%2c0%2c0%2c1%2c1.41%2c0%2c.92.92%2c0%2c0%2c1%2c0%2c1.35Z'/%3e %3c/svg%3e\");--di-chevron-down:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %2339870c%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-down-scampi:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %23676cb0%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-down-wit:url(\"data:image/svg+xml,%3csvg id='chevron-down' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M12%2c16%2c5.29%2c9.63a.93.93%2c0%2c0%2c1%2c0-1.35%2c1%2c1%2c0%2c0%2c1%2c1.42%2c0l5.29%2c5%2c5.29-5a1%2c1%2c0%2c0%2c1%2c1.42%2c0%2c.91.91%2c0%2c0%2c1%2c0%2c1.34Z'/%3e %3c/svg%3e\");--di-chevron-up:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %2339870c%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");--di-chevron-up-scampi:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: %23676cb0%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");--di-chevron-up-wit:url(\"data:image/svg+xml,%3csvg id='chevron-up' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' style='color: white%3b'%3e %3cpath fill='currentColor' d='M18%2c16a1%2c1%2c0%2c0%2c1-.71-.28l-5.29-5-5.29%2c5a1%2c1%2c0%2c0%2c1-1.42%2c0%2c.93.93%2c0%2c0%2c1%2c0-1.35L12%2c8l6.71%2c6.38a.91.91%2c0%2c0%2c1%2c0%2c1.34A1%2c1%2c0%2c0%2c1%2c18%2c16Z'/%3e %3c/svg%3e\");display:inline-block;position:relative}";
1363
1368
 
1364
1369
  let DropdownMenu = class extends HTMLElement {
1365
1370
  constructor() {
@@ -1456,6 +1461,9 @@ let DropdownMenu = class extends HTMLElement {
1456
1461
  this.openPopup();
1457
1462
  }
1458
1463
  }
1464
+ componentDidRender() {
1465
+ this.host.setAttribute("tabindex", "-1");
1466
+ }
1459
1467
  componentWillRender() {
1460
1468
  for (const li of Array.from(this.host.getElementsByTagName("li"))) {
1461
1469
  for (const tab of tabbable(li)) {
@@ -2207,7 +2215,7 @@ let Label = class extends HTMLElement {
2207
2215
  }
2208
2216
  render() {
2209
2217
  const status = this.status && Label.statusMap.get(this.status);
2210
- return (h("span", { class: clsx('dso-label', { [`dso-label-${this.status}`]: this.status, 'dso-compact': this.compact && !this.removable, 'dso-hover': this.hover }) }, h("slot", { name: "symbol" }), status && (h("span", { class: "sr-only" }, status, ": ")), h("slot", null), this.removable && (h("button", { type: "button", onClick: e => this.removeClick.emit(e), title: "Verwijder", onMouseEnter: () => this.hover = true, onMouseLeave: () => this.hover = false }, h("dso-icon", { icon: "times" })))));
2218
+ return (h("span", { class: clsx('dso-label', { [`dso-label-${this.status}`]: this.status, 'dso-compact': this.compact && !this.removable, 'dso-hover': this.hover }) }, h("slot", { name: "symbol" }), status && (h("span", { class: "sr-only" }, status, ": ")), h("slot", null), this.removable && (h("button", { type: "button", onClick: e => this.removeClick.emit(e), onMouseEnter: () => this.hover = true, onMouseLeave: () => this.hover = false }, h("span", { class: "sr-only" }, "Verwijder"), h("dso-icon", { icon: "times" })))));
2211
2219
  }
2212
2220
  static get style() { return labelCss; }
2213
2221
  };
@@ -2883,7 +2891,7 @@ let Selectable = class extends HTMLElement {
2883
2891
  static get style() { return selectableCss; }
2884
2892
  };
2885
2893
 
2886
- const toggletipCss = "*,*::after,*::before{box-sizing:border-box}";
2894
+ const toggletipCss = "*,*::after,*::before{box-sizing:border-box}:host(:focus){outline:none}";
2887
2895
 
2888
2896
  let Toggletip = class extends HTMLElement {
2889
2897
  constructor() {
@@ -2932,6 +2940,7 @@ let Toggletip = class extends HTMLElement {
2932
2940
  throw Error("button not found");
2933
2941
  }
2934
2942
  this.button = button;
2943
+ this.host.setAttribute("tabindex", "-1");
2935
2944
  }
2936
2945
  render() {
2937
2946
  return (h(Fragment, null, h("dso-info-button", { id: "toggle", onClick: this.click, label: this.label, active: this.active, secondary: this.secondary }), h("dso-tooltip", { stateless: true, for: "toggle", active: this.active, position: this.position, small: this.small }, h("slot", null))));
@@ -4822,13 +4831,14 @@ let Tooltip = class extends HTMLElement {
4822
4831
 
4823
4832
  const DsoTreeItem = ({ owner, ancestors, item, index, level, setSize }) => {
4824
4833
  var _a, _b, _c;
4825
- return (h("li", { key: item.reference, class: clsx('tree-item', { 'has-child': item.hasItems }), role: 'none' },
4834
+ return (h("li", { key: item.id, class: clsx('tree-item', { 'has-child': item.hasItems }), role: 'none' },
4826
4835
  h("div", { class: "tree-branch-control" }, item.hasItems
4827
4836
  ?
4828
4837
  h("div", { onClick: (e) => owner.itemClick(e, ancestors, item) },
4829
4838
  h("dso-icon", { icon: item.open ? 'chevron-down' : 'chevron-right' }))
4830
4839
  : h("dso-icon", null)),
4831
- h("p", { class: "tree-content", tabindex: level === 1 && index === 0 ? 0 : -1, role: "treeitem", "aria-expanded": item.hasItems ? '' + (!!item.open && !!((_a = item.items) === null || _a === void 0 ? void 0 : _a.length)) : undefined, "aria-level": level, "aria-setsize": setSize, "aria-posinset": index + 1, "aria-busy": item.loading ? 'true' : undefined, onClick: (e) => owner.itemClick(e, ancestors, item) },
4840
+ h("p", { class: clsx('tree-content', { 'active': item.active }, { 'selected': item.selected }), tabindex: level === 1 && index === 0 ? 0 : -1, role: "treeitem", "aria-expanded": item.hasItems ? '' + (!!item.open && !!((_a = item.items) === null || _a === void 0 ? void 0 : _a.length)) : undefined, "aria-current": item.active ? 'true' : undefined, "aria-level": level, "aria-setsize": setSize, "aria-posinset": index + 1, "aria-busy": item.loading ? 'true' : undefined, onClick: (e) => owner.itemClick(e, ancestors, item) },
4841
+ item.selected && h("span", { class: "sr-only" }, "Resultaat: "),
4832
4842
  item.href
4833
4843
  ? h("a", { href: item.href, tabindex: "-1" }, item.label)
4834
4844
  : h("span", null, item.label), (_b = item.icons) === null || _b === void 0 ? void 0 :
@@ -4839,7 +4849,7 @@ const DsoTreeItem = ({ owner, ancestors, item, index, level, setSize }) => {
4839
4849
  : h("ul", { role: "group" }, (_c = item.items) === null || _c === void 0 ? void 0 : _c.map((childItem, index, org) => h(DsoTreeItem, { owner: owner, ancestors: [...ancestors, item], item: childItem, index: index, level: level + 1, setSize: org.length }))))));
4840
4850
  };
4841
4851
 
4842
- const treeViewCss = ":host ul{list-style-type:none}:host ul[role=tree]{padding-left:0}:host li[role=treeitem]>ul{padding-left:1.5em}:host .tree-branch-control{cursor:pointer;display:inline-block}:host .tree-content{cursor:pointer;display:inline-block;margin:8px 0}:host .tree-content a,:host .tree-content a:visited{color:#39870c;text-decoration:none}:host .tree-content a:hover,:host .tree-content a:focus{color:#676cb0;text-decoration:underline}:host .tree-content a:active{text-decoration:none}:host .tree-content dso-icon{vertical-align:text-bottom;font-size:0.75em;margin-left:0.5em}*,*::after,*::before{box-sizing:border-box}";
4852
+ const treeViewCss = ":host ul{list-style-type:none}:host ul[role=tree]{padding-left:0}:host li[role=treeitem]>ul{padding-left:1.5em}:host .tree-branch-control{cursor:pointer;display:inline-block}:host .tree-content{cursor:pointer;display:inline-block;margin:8px 0}:host .tree-content.active{font-weight:700}:host .tree-content.active:hover{text-decoration:underline}:host .tree-content.active a{text-decoration:none}:host .tree-content.selected{color:#191919;font-weight:700;text-decoration:underline}:host .tree-content.selected:hover,:host .tree-content.selected:focus{text-decoration:none}:host .tree-content a,:host .tree-content a:visited{color:#191919;text-decoration:underline}:host .tree-content a:hover,:host .tree-content a:focus{color:#191919;text-decoration:none}:host .tree-content a:active{text-decoration:none}:host .tree-content dso-icon{font-size:0.75em;margin-left:0.5em;vertical-align:text-bottom}*,*::after,*::before{box-sizing:border-box}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}";
4843
4853
 
4844
4854
  let TreeView = class extends HTMLElement {
4845
4855
  constructor() {
@@ -4902,7 +4912,7 @@ let TreeView = class extends HTMLElement {
4902
4912
  return;
4903
4913
  }
4904
4914
  TreeView.setFocus(tree, contentElement);
4905
- this.clickItem.emit([...ancestors, item]);
4915
+ this.clickItem.emit({ path: [...ancestors, item], originalEvent: event });
4906
4916
  return;
4907
4917
  }
4908
4918
  if (item.open) {