carbon-components-angular 5.56.0 → 5.56.2

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/button/icon-button.component.d.ts +5 -1
  2. package/docs/documentation/components/ComboBox.html +39 -31
  3. package/docs/documentation/components/IconButton.html +53 -14
  4. package/docs/documentation/coverage.html +3 -3
  5. package/docs/documentation/js/search/search_index.js +2 -2
  6. package/docs/documentation/modules/TilesModule/dependencies.svg +91 -91
  7. package/docs/documentation/modules/TilesModule.html +91 -91
  8. package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +4 -4
  9. package/docs/documentation/modules/TimePickerSelectModule.html +4 -4
  10. package/docs/documentation/modules/ToggleModule/dependencies.svg +19 -19
  11. package/docs/documentation/modules/ToggleModule.html +19 -19
  12. package/docs/documentation/modules/ToggletipModule/dependencies.svg +37 -37
  13. package/docs/documentation/modules/ToggletipModule.html +37 -37
  14. package/docs/documentation/modules/TooltipModule/dependencies.svg +28 -28
  15. package/docs/documentation/modules/TooltipModule.html +28 -28
  16. package/docs/documentation/modules/TreeviewModule/dependencies.svg +7 -7
  17. package/docs/documentation/modules/TreeviewModule.html +7 -7
  18. package/docs/documentation/modules/UIShellModule/dependencies.svg +4 -4
  19. package/docs/documentation/modules/UIShellModule.html +4 -4
  20. package/docs/documentation.json +119 -108
  21. package/docs/storybook/7141.9d9ce230.iframe.bundle.js +1 -0
  22. package/docs/storybook/button-button-set-stories.1094a620.iframe.bundle.js +1 -0
  23. package/docs/storybook/button-button-stories.a0ff29b1.iframe.bundle.js +1 -0
  24. package/docs/storybook/button-icon-button-stories.db9a9ba5.iframe.bundle.js +1 -0
  25. package/docs/storybook/code-snippet-code-snippet-stories.cc0ddba0.iframe.bundle.js +1 -0
  26. package/docs/storybook/{combobox-combobox-stories.6da5780e.iframe.bundle.js → combobox-combobox-stories.2d3b97eb.iframe.bundle.js} +1 -1
  27. package/docs/storybook/iframe.html +2 -2
  28. package/docs/storybook/index-stories.69d5a816.iframe.bundle.js +1 -0
  29. package/docs/storybook/input-input-stories.68ee4653.iframe.bundle.js +1 -0
  30. package/docs/storybook/input-password-stories.3084ebfc.iframe.bundle.js +1 -0
  31. package/docs/storybook/input-textarea-stories.e3f84fc4.iframe.bundle.js +1 -0
  32. package/docs/storybook/main.2e1da19e.iframe.bundle.js +1 -0
  33. package/docs/storybook/patterns-loading-large-loading-stories.67f20584.iframe.bundle.js +1 -0
  34. package/docs/storybook/project.json +1 -1
  35. package/docs/storybook/{runtime~main.e82ba84b.iframe.bundle.js → runtime~main.48ab60ff.iframe.bundle.js} +1 -1
  36. package/docs/storybook/tiles-expandable-tile-stories.8658f693.iframe.bundle.js +1 -0
  37. package/docs/storybook/toggletip-toggletip-stories.f20fbe75.iframe.bundle.js +1 -0
  38. package/docs/storybook/ui-shell-ui-shell-stories.157336b4.iframe.bundle.js +1 -0
  39. package/esm2020/button/icon-button.component.mjs +10 -4
  40. package/esm2020/code-snippet/code-snippet.component.mjs +1 -1
  41. package/esm2020/combobox/combobox.component.mjs +9 -2
  42. package/esm2020/modal/modal-header.component.mjs +1 -1
  43. package/esm2020/pagination/pagination-nav/pagination-nav.component.mjs +1 -1
  44. package/esm2020/ui-shell/header/header-action.component.mjs +1 -1
  45. package/fesm2015/carbon-components-angular-button.mjs +9 -3
  46. package/fesm2015/carbon-components-angular-button.mjs.map +1 -1
  47. package/fesm2015/carbon-components-angular-code-snippet.mjs +1 -1
  48. package/fesm2015/carbon-components-angular-code-snippet.mjs.map +1 -1
  49. package/fesm2015/carbon-components-angular-combobox.mjs +8 -1
  50. package/fesm2015/carbon-components-angular-combobox.mjs.map +1 -1
  51. package/fesm2015/carbon-components-angular-modal.mjs +1 -1
  52. package/fesm2015/carbon-components-angular-modal.mjs.map +1 -1
  53. package/fesm2015/carbon-components-angular-pagination.mjs +1 -1
  54. package/fesm2015/carbon-components-angular-pagination.mjs.map +1 -1
  55. package/fesm2015/carbon-components-angular-ui-shell.mjs +1 -1
  56. package/fesm2015/carbon-components-angular-ui-shell.mjs.map +1 -1
  57. package/fesm2020/carbon-components-angular-button.mjs +9 -3
  58. package/fesm2020/carbon-components-angular-button.mjs.map +1 -1
  59. package/fesm2020/carbon-components-angular-code-snippet.mjs +1 -1
  60. package/fesm2020/carbon-components-angular-code-snippet.mjs.map +1 -1
  61. package/fesm2020/carbon-components-angular-combobox.mjs +8 -1
  62. package/fesm2020/carbon-components-angular-combobox.mjs.map +1 -1
  63. package/fesm2020/carbon-components-angular-modal.mjs +1 -1
  64. package/fesm2020/carbon-components-angular-modal.mjs.map +1 -1
  65. package/fesm2020/carbon-components-angular-pagination.mjs +1 -1
  66. package/fesm2020/carbon-components-angular-pagination.mjs.map +1 -1
  67. package/fesm2020/carbon-components-angular-ui-shell.mjs +1 -1
  68. package/fesm2020/carbon-components-angular-ui-shell.mjs.map +1 -1
  69. package/package.json +1 -1
  70. package/docs/storybook/7141.e6990367.iframe.bundle.js +0 -1
  71. package/docs/storybook/button-button-set-stories.ed1d0fd9.iframe.bundle.js +0 -1
  72. package/docs/storybook/button-button-stories.de18db98.iframe.bundle.js +0 -1
  73. package/docs/storybook/button-icon-button-stories.4a9748f3.iframe.bundle.js +0 -1
  74. package/docs/storybook/code-snippet-code-snippet-stories.2701eee9.iframe.bundle.js +0 -1
  75. package/docs/storybook/index-stories.fba8f9b4.iframe.bundle.js +0 -1
  76. package/docs/storybook/input-input-stories.4bd7425d.iframe.bundle.js +0 -1
  77. package/docs/storybook/input-password-stories.575fa23d.iframe.bundle.js +0 -1
  78. package/docs/storybook/input-textarea-stories.75dfc9b8.iframe.bundle.js +0 -1
  79. package/docs/storybook/main.848bbb16.iframe.bundle.js +0 -1
  80. package/docs/storybook/patterns-loading-large-loading-stories.a8a467eb.iframe.bundle.js +0 -1
  81. package/docs/storybook/tiles-expandable-tile-stories.97c48cb1.iframe.bundle.js +0 -1
  82. package/docs/storybook/toggletip-toggletip-stories.73f8eaaa.iframe.bundle.js +0 -1
  83. package/docs/storybook/ui-shell-ui-shell-stories.642f613c.iframe.bundle.js +0 -1
@@ -23130,7 +23130,7 @@
23130
23130
  },
23131
23131
  {
23132
23132
  "name": "ComboBox",
23133
- "id": "component-ComboBox-4bd11617318e0f3c7c865c6fe820c21ccb91ad2a7a301bb900f1657eee7ec3a783213aa68d8a8e86ca19eda085678f0a3f205e7f925d842b0003e79cfaee54e5",
23133
+ "id": "component-ComboBox-8e621cfa3bfd41d3a57823ac72d0ad9c54d34a1a321828952c1ab2570578f4b4bee065cbeb3c6632e04f06e8768928a9a1e4c5f8c498757be7b70c2a93862be5",
23134
23134
  "file": "src/combobox/combobox.component.ts",
23135
23135
  "encapsulation": [],
23136
23136
  "entryComponents": [],
@@ -23721,7 +23721,7 @@
23721
23721
  "optional": false,
23722
23722
  "returnType": "void",
23723
23723
  "typeParameters": [],
23724
- "line": 845,
23724
+ "line": 853,
23725
23725
  "deprecated": false,
23726
23726
  "deprecationMessage": "",
23727
23727
  "rawdescription": "\n\nCreates the `Dropdown` list as an element that is appended to the DOM body.\n",
@@ -23733,7 +23733,7 @@
23733
23733
  "optional": false,
23734
23734
  "returnType": "void",
23735
23735
  "typeParameters": [],
23736
- "line": 856,
23736
+ "line": 864,
23737
23737
  "deprecated": false,
23738
23738
  "deprecationMessage": "",
23739
23739
  "rawdescription": "\n\nCreates the `Dropdown` list appending it to the dropdown parent object instead of the body.\n",
@@ -23752,7 +23752,7 @@
23752
23752
  "optional": false,
23753
23753
  "returnType": "void",
23754
23754
  "typeParameters": [],
23755
- "line": 825,
23755
+ "line": 833,
23756
23756
  "deprecated": false,
23757
23757
  "deprecationMessage": "",
23758
23758
  "rawdescription": "\n\nHandles keyboard events so users are controlling the `Dropdown` instead of unintentionally controlling outside elements.\n",
@@ -23792,7 +23792,7 @@
23792
23792
  "optional": false,
23793
23793
  "returnType": "void",
23794
23794
  "typeParameters": [],
23795
- "line": 885,
23795
+ "line": 893,
23796
23796
  "deprecated": false,
23797
23797
  "deprecationMessage": "",
23798
23798
  "rawdescription": "\n\nHandles clicks outside of the `Dropdown` list.\n",
@@ -23815,7 +23815,7 @@
23815
23815
  "optional": false,
23816
23816
  "returnType": "any",
23817
23817
  "typeParameters": [],
23818
- "line": 865,
23818
+ "line": 873,
23819
23819
  "deprecated": false,
23820
23820
  "deprecationMessage": "",
23821
23821
  "rawdescription": "\n\nDetects whether or not the `Dropdown` list is visible within all scrollable parents.\nThis can be overridden by passing in a value to the `dropUp` input.\n",
@@ -23834,7 +23834,7 @@
23834
23834
  "optional": false,
23835
23835
  "returnType": "void",
23836
23836
  "typeParameters": [],
23837
- "line": 797,
23837
+ "line": 805,
23838
23838
  "deprecated": false,
23839
23839
  "deprecationMessage": "",
23840
23840
  "jsdoctags": [
@@ -23886,7 +23886,7 @@
23886
23886
  "optional": false,
23887
23887
  "returnType": "void",
23888
23888
  "typeParameters": [],
23889
- "line": 705,
23889
+ "line": 713,
23890
23890
  "deprecated": false,
23891
23891
  "deprecationMessage": "",
23892
23892
  "rawdescription": "\n\nCloses the dropdown and emits the close event.\n",
@@ -23908,7 +23908,7 @@
23908
23908
  "optional": false,
23909
23909
  "returnType": "void",
23910
23910
  "typeParameters": [],
23911
- "line": 894,
23911
+ "line": 902,
23912
23912
  "deprecated": false,
23913
23913
  "deprecationMessage": "",
23914
23914
  "jsdoctags": [
@@ -23975,7 +23975,7 @@
23975
23975
  "optional": false,
23976
23976
  "returnType": "boolean",
23977
23977
  "typeParameters": [],
23978
- "line": 818,
23978
+ "line": 826,
23979
23979
  "deprecated": false,
23980
23980
  "deprecationMessage": "",
23981
23981
  "modifierKind": [
@@ -24023,7 +24023,7 @@
24023
24023
  "optional": false,
24024
24024
  "returnType": "void",
24025
24025
  "typeParameters": [],
24026
- "line": 753,
24026
+ "line": 761,
24027
24027
  "deprecated": false,
24028
24028
  "deprecationMessage": "",
24029
24029
  "rawdescription": "\n\nSets the list group filter, and manages single select item selection.\n",
@@ -24066,7 +24066,7 @@
24066
24066
  "optional": false,
24067
24067
  "returnType": "void",
24068
24068
  "typeParameters": [],
24069
- "line": 786,
24069
+ "line": 794,
24070
24070
  "deprecated": false,
24071
24071
  "deprecationMessage": "",
24072
24072
  "rawdescription": "\n\nIntended to be used to add items to the list.\n",
@@ -24092,7 +24092,7 @@
24092
24092
  "optional": false,
24093
24093
  "returnType": "void",
24094
24094
  "typeParameters": [],
24095
- "line": 719,
24095
+ "line": 727,
24096
24096
  "deprecated": false,
24097
24097
  "deprecationMessage": "",
24098
24098
  "rawdescription": "\n\nOpens the dropdown.\n",
@@ -24193,7 +24193,7 @@
24193
24193
  "optional": false,
24194
24194
  "returnType": "void",
24195
24195
  "typeParameters": [],
24196
- "line": 742,
24196
+ "line": 750,
24197
24197
  "deprecated": false,
24198
24198
  "deprecationMessage": "",
24199
24199
  "rawdescription": "\n\nToggles the dropdown.\n",
@@ -24285,7 +24285,7 @@
24285
24285
  "description": "<p>Get started with importing the module:</p>\n<b>Example :</b><div><pre class=\"line-numbers\"><code class=\"language-typescript\">import { ComboBoxModule } from &#39;carbon-components-angular&#39;;</code></pre></div><p>ComboBoxes are similar to dropdowns, except a combobox provides an input field for users to search items and (optionally) add their own.\nMulti-select comboboxes also provide &quot;pills&quot; of selected items.</p>\n<p><a href=\"../../?path=/story/components-combobox--basic\">See demo</a></p>\n",
24286
24286
  "rawdescription": "\n\nGet started with importing the module:\n\n```typescript\nimport { ComboBoxModule } from 'carbon-components-angular';\n```\n\nComboBoxes are similar to dropdowns, except a combobox provides an input field for users to search items and (optionally) add their own.\nMulti-select comboboxes also provide \"pills\" of selected items.\n\n[See demo](../../?path=/story/components-combobox--basic)\n",
24287
24287
  "type": "component",
24288
- "sourceCode": "import {\n\tComponent,\n\tOnChanges,\n\tContentChild,\n\tInput,\n\tOutput,\n\tHostListener,\n\tElementRef,\n\tViewChild,\n\tEventEmitter,\n\tAfterViewInit,\n\tAfterContentInit,\n\tHostBinding,\n\tTemplateRef,\n\tOnDestroy\n} from \"@angular/core\";\nimport { AbstractDropdownView, DropdownService } from \"carbon-components-angular/dropdown\";\nimport { ListItem } from \"carbon-components-angular/dropdown\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { filter } from \"rxjs/operators\";\nimport {\n\tgetScrollableParents,\n\thasScrollableParents\n} from \"carbon-components-angular/utils\";\nimport { I18n, Overridable } from \"carbon-components-angular/i18n\";\nimport { Observable } from \"rxjs\";\n\n/**\n * Get started with importing the module:\n *\n * ```typescript\n * import { ComboBoxModule } from 'carbon-components-angular';\n * ```\n *\n * ComboBoxes are similar to dropdowns, except a combobox provides an input field for users to search items and (optionally) add their own.\n * Multi-select comboboxes also provide \"pills\" of selected items.\n *\n * [See demo](../../?path=/story/components-combobox--basic)\n */\n@Component({\n\tselector: \"cds-combo-box, ibm-combo-box\",\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"cds--list-box__wrapper\"\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--list-box__wrapper--fluid': fluid,\n\t\t\t\t'cds--list-box__wrapper--fluid--invalid': fluid && invalid,\n\t\t\t\t'cds--list-box__wrapper--fluid--focus': fluid && _isFocused\n\t\t\t}\">\n\t\t\t<label\n\t\t\t\t*ngIf=\"label\"\n\t\t\t\t[for]=\"id\"\n\t\t\t\t[id]=\"labelId\"\n\t\t\t\tclass=\"cds--label\"\n\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t'cds--label--disabled': disabled,\n\t\t\t\t\t'cds--visually-hidden': hideLabel\n\t\t\t\t}\">\n\t\t\t\t<ng-container *ngIf=\"!isTemplate(label)\">{{label}}</ng-container>\n\t\t\t\t<ng-template *ngIf=\"isTemplate(label)\" [ngTemplateOutlet]=\"label\"></ng-template>\n\t\t\t</label>\n\t\t\t<div\n\t\t\t\t#listbox\n\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t'cds--multi-select cds--multi-select--filterable': type === 'multi',\n\t\t\t\t\t'cds--list-box--light': theme === 'light',\n\t\t\t\t\t'cds--list-box--expanded': open,\n\t\t\t\t\t'cds--list-box--sm': size === 'sm',\n\t\t\t\t\t'cds--list-box--md': size === 'md',\n\t\t\t\t\t'cds--list-box--lg': size === 'lg',\n\t\t\t\t\t'cds--list-box--disabled': disabled,\n\t\t\t\t\t'cds--combo-box--readonly': readonly,\n\t\t\t\t\t'cds--combo-box--warning cds--list-box--warning': warn,\n\t\t\t\t\t'cds--list-box--invalid': invalid\n\t\t\t\t}\"\n\t\t\t\tclass=\"cds--list-box cds--combo-box\"\n\t\t\t\t[attr.data-invalid]=\"(invalid ? true : null)\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"cds--list-box__field\"\n\t\t\t\t\t(click)=\"toggleDropdown()\"\n\t\t\t\t\t(blur)=\"onBlur()\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t*ngIf=\"type === 'multi' && pills.length > 0\"\n\t\t\t\t\t\tclass=\"cds--tag cds--tag--filter cds--tag--high-contrast\"\n\t\t\t\t\t\t[ngClass]=\"{'cds--tag--disabled': disabled || readonly}\">\n\t\t\t\t\t\t<span class=\"cds--tag__label\">{{ pills.length }}</span>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t(click)=\"clearSelected($event)\"\n\t\t\t\t\t\t\t(blur)=\"onBlur()\"\n\t\t\t\t\t\t\t(keydown.enter)=\"clearSelected($event)\"\n\t\t\t\t\t\t\tclass=\"cds--tag__close-icon\"\n\t\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t\t[title]=\"clearSelectionsTitle\"\n\t\t\t\t\t\t\t[disabled]=\"disabled || readonly\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"clearSelectionAria\">\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tfocusable=\"false\"\n\t\t\t\t\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\"\n\t\t\t\t\t\t\t\trole=\"img\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\">\n\t\t\t\t\t\t\t\t<path d=\"M12 4.7l-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8z\"></path>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<input\n\t\t\t\t\t\t#input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t\t[readOnly]=\"readonly\"\n\t\t\t\t\t\t(input)=\"onSearch($event.target.value)\"\n\t\t\t\t\t\t(focus)=\"fluid ? handleFocus($event) : null\"\n\t\t\t\t\t\t(blur)=\"fluid ? handleFocus($event) : onBlur()\"\n\t\t\t\t\t\t(keydown.enter)=\"onSubmit($event)\"\n\t\t\t\t\t\t[value]=\"selectedValue\"\n\t\t\t\t\t\tclass=\"cds--text-input\"\n\t\t\t\t\t\t[ngClass]=\"{'cds--text-input--empty': !showClearButton}\"\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t[attr.aria-labelledby]=\"labelId\"\n\t\t\t\t\t\t[attr.aria-expanded]=\"open\"\n\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t[attr.maxlength]=\"maxLength\"\n\t\t\t\t\t\t[attr.aria-controls]=\"open ? view?.listId : null\"\n\t\t\t\t\t\t[attr.aria-autocomplete]=\"autocomplete\"\n\t\t\t\t\t\t[placeholder]=\"placeholder\"/>\n\t\t\t\t\t<svg\n\t\t\t\t\t\t*ngIf=\"invalid\"\n\t\t\t\t\t\tcdsIcon=\"warning--filled\"\n\t\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t\tclass=\"cds--list-box__invalid-icon\">\n\t\t\t\t\t</svg>\n\t\t\t\t\t<svg\n\t\t\t\t\t\t*ngIf=\"!invalid && warn\"\n\t\t\t\t\t\tcdsIcon=\"warning--alt--filled\"\n\t\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t\tclass=\"cds--list-box__invalid-icon cds--list-box__invalid-icon--warning\">\n\t\t\t\t\t</svg>\n\t\t\t\t\t<div\n\t\t\t\t\t\t*ngIf=\"showClearButton\"\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\tclass=\"cds--list-box__selection\"\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t[attr.aria-label]=\"clearSelectionAria\"\n\t\t\t\t\t\t[title]=\"clearSelectionTitle\"\n\t\t\t\t\t\t(keyup.enter)=\"clearInput($event)\"\n\t\t\t\t\t\t(click)=\"clearInput($event)\"\n\t\t\t\t\t\t(blur)=\"onBlur()\">\n\t\t\t\t\t\t<svg cdsIcon=\"close\" size=\"16\"></svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\tclass=\"cds--list-box__menu-icon\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t[title]=\"open ? closeMenuAria : openMenuAria\"\n\t\t\t\t\t\t[attr.aria-label]=\"open ? closeMenuAria : openMenuAria\"\n\t\t\t\t\t\t[ngClass]=\"{'cds--list-box__menu-icon--open': open}\">\n\t\t\t\t\t\t<svg cdsIcon=\"chevron--down\" size=\"16\"></svg>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\t#dropdownMenu\n\t\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t\t'cds--list-box--up': this.dropUp !== null && this.dropUp !== undefined ? dropUp : _dropUp\n\t\t\t\t\t}\">\n\t\t\t\t\t<ng-content *ngIf=\"open\"></ng-content>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<hr *ngIf=\"fluid\" class=\"cds--list-box__divider\" />\n\t\t\t<div\n\t\t\t\t*ngIf=\"helperText && !invalid && !warn && !fluid\"\n\t\t\t\tclass=\"cds--form__helper-text\"\n\t\t\t\t[ngClass]=\"{'cds--form__helper-text--disabled': disabled}\">\n\t\t\t\t<ng-container *ngIf=\"!isTemplate(helperText)\">{{helperText}}</ng-container>\n\t\t\t\t<ng-template *ngIf=\"isTemplate(helperText)\" [ngTemplateOutlet]=\"helperText\"></ng-template>\n\t\t\t</div>\n\t\t\t<div *ngIf=\"invalid\" class=\"cds--form-requirement\">\n\t\t\t\t<ng-container *ngIf=\"!isTemplate(invalidText)\">{{ invalidText }}</ng-container>\n\t\t\t\t<ng-template *ngIf=\"isTemplate(invalidText)\" [ngTemplateOutlet]=\"invalidText\"></ng-template>\n\t\t\t</div>\n\t\t\t<div *ngIf=\"!invalid && warn\" class=\"cds--form-requirement\">\n\t\t\t\t<ng-container *ngIf=\"!isTemplate(warnText)\">{{warnText}}</ng-container>\n\t\t\t\t<ng-template *ngIf=\"isTemplate(warnText)\" [ngTemplateOutlet]=\"warnText\"></ng-template>\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: ComboBox,\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class ComboBox implements OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n\t/**\n\t * Text to show when nothing is selected.\n\t */\n\t@Input() set placeholder(value: string | Observable<string>) {\n\t\tthis._placeholder.override(value);\n\t}\n\n\tget placeholder() {\n\t\treturn this._placeholder.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the combobox control menu when closed\n\t */\n\t@Input() set openMenuAria(value: string | Observable<string>) {\n\t\tthis._openMenuAria.override(value);\n\t}\n\n\tget openMenuAria() {\n\t\treturn this._openMenuAria.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the combobox control menu when opened\n\t */\n\t@Input() set closeMenuAria(value: string | Observable<string>) {\n\t\tthis._closeMenuAria.override(value);\n\t}\n\n\tget closeMenuAria() {\n\t\treturn this._closeMenuAria.value;\n\t}\n\t/**\n\t * Value to display on the clear selections icon, when multi is selected\n\t */\n\t@Input() set clearSelectionsTitle(value: string | Observable<string>) {\n\t\tthis._clearSelectionsTitle.override(value);\n\t}\n\n\tget clearSelectionsTitle() {\n\t\treturn this._clearSelectionsTitle.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes to clear selections, when multi is selected\n\t */\n\t@Input() set clearSelectionsAria(value: string | Observable<string>) {\n\t\tthis._clearSelectionsAria.override(value);\n\t}\n\n\tget clearSelectionsAria() {\n\t\treturn this._clearSelectionsAria.value;\n\t}\n\t/**\n\t * Value to display on the clear the selected item icon, when single is selected\n\t */\n\t@Input() set clearSelectionTitle(value: string | Observable<string>) {\n\t\tthis._clearSelectionTitle.override(value);\n\t}\n\n\tget clearSelectionTitle() {\n\t\treturn this._clearSelectionTitle.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the clear the selected item icon, when single is selected\n\t */\n\t@Input() set clearSelectionAria(value: string | Observable<string>) {\n\t\tthis._clearSelectionAria.override(value);\n\t}\n\n\tget clearSelectionAria() {\n\t\treturn this._clearSelectionAria.value;\n\t}\n\tstatic comboBoxCount = 0;\n\t@Input() id = `combobox-${ComboBox.comboBoxCount++}`;\n\t@Input() labelId = `combobox-label-${ComboBox.comboBoxCount++}`;\n\t/**\n\t * List of items to fill the content with.\n\t *\n\t * **Example:**\n\t * ```javascript\n\t * items = [\n\t *\t\t{\n\t *\t\t\tcontent: \"Abacus\",\n\t *\t\t\tselected: false\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Byte\",\n\t *\t\t\tselected: false,\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Computer\",\n\t *\t\t\tselected: false\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Digital\",\n\t *\t\t\tselected: false\n\t *\t\t}\n\t * ];\n\t * ```\n\t *\n\t */\n\t@Input() items: Array<ListItem> = [];\n\t/**\n\t * Combo box type (supporting single or multi selection of items).\n\t */\n\t@Input() type: \"single\" | \"multi\" = \"single\";\n\t/**\n\t * Combo box render size.\n\t */\n\t@Input() size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\t/**\n\t * Specifies the property to be used as the return value to `ngModel`\n\t */\n\t@Input() itemValueKey: string;\n\t/**\n\t * Label for the combobox.\n\t */\n\t@Input() label: string | TemplateRef<any>;\n\t/**\n\t * Hide label while keeping it accessible for screen readers\n\t */\n\t@Input() hideLabel = false;\n\t/**\n\t * Sets the optional helper text.\n\t */\n\t@Input() helperText: string | TemplateRef<any>;\n\t/**\n\t * set to `true` to place the dropdown view inline with the component\n\t */\n\t@Input() appendInline: boolean = null;\n\t/**\n\t * Set to `true` to show the invalid state.\n\t */\n\t@Input() invalid = false;\n\t/**\n\t * Value displayed if combobox is in an invalid state.\n\t */\n\t@Input() invalidText: string | TemplateRef<any>;\n\t/**\n\t* Set to `true` to show a warning (contents set by warnText)\n\t*/\n\t@Input() warn = false;\n\t/**\n\t * Sets the warning text\n\t */\n\t@Input() warnText: string | TemplateRef<any>;\n\t/**\n\t * Max length value to limit input characters\n\t */\n\t@Input() maxLength: number = null;\n\t/**\n\t * @deprecated since v5 - Use `cdsLayer` directive instead\n\t */\n\t@Input() theme: \"light\" | \"dark\" = \"dark\";\n\t/**\n\t * Specify feedback (mode) of the selection.\n\t * `top`: selected item jumps to top\n\t * `fixed`: selected item stays at its position\n\t * `top-after-reopen`: selected item jump to top after reopen dropdown\n\t */\n\t@Input() selectionFeedback: \"top\" | \"fixed\" | \"top-after-reopen\" = \"top-after-reopen\";\n\t/**\n\t * Specify aria-autocomplete attribute of text input.\n\t * \"list\", is the expected value for a combobox that invokes a drop-down list\n\t */\n\t@Input() autocomplete = \"list\";\n\t/**\n\t * Overrides the automatic dropUp.\n\t */\n\t@Input() dropUp: boolean;\n\t/**\n\t * Set to `true` to disable combobox.\n\t */\n\t@Input() disabled = false;\n\t/**\n\t * Set to `true` for readonly state.\n\t */\n\t@Input() readonly = false;\n\t/**\n\t * Experimental: enable fluid state\n\t */\n\t@Input() fluid = false;\n\t/**\n\t * Emits a ListItem\n\t *\n\t * Example:\n\t * ```javascript\n\t * {\n\t * \t\tcontent: \"one\",\n\t * \t\tselected: true\n\t * }\n\t * ```\n\t */\n\t@Output() selected = new EventEmitter<ListItem | ListItem[]>();\n\t/**\n\t * Intended to be used to add items to the list.\n\t *\n\t * Emits an event that includes the current item list, the suggested index for the new item, and a simple ListItem\n\t *\n\t * Example:\n\t * ```javascript\n\t *\t{\n\t *\t\titems: [{content: \"one\", selected: true}, {content: \"two\", selected: true}],\n\t *\t\tindex: 1,\n\t *\t\tvalue: {\n\t *\t\t\tcontent: \"some user string\",\n\t *\t\t\tselected: false\n\t *\t\t}\n\t *\t}\n\t * ```\n\t *\n\t *\n\t * Example:\n\t * ```javascript\n\t * {\n\t *\tafter: 1,\n\t *\tvalue: \"some user string\"\n\t * }\n\t * ```\n\t */\n\t@Output() submit = new EventEmitter<{\n\t\titems: ListItem[],\n\t\tindex: number,\n\t\tvalue: {\n\t\t\tcontent: string,\n\t\t\tselected: boolean\n\t\t}\n\t}>();\n\t/** Emits an empty event when the menu is closed */\n\t@Output() close = new EventEmitter<void>();\n\t/** Emits the search string from the input */\n\t@Output() search = new EventEmitter<string>();\n\t/** Emits an event when the clear button is clicked. */\n\t@Output() clear = new EventEmitter<Event>();\n\t/** ContentChild reference to the instantiated dropdown list */\n\t@ContentChild(AbstractDropdownView, { static: true }) view: AbstractDropdownView;\n\t@ViewChild(\"dropdownMenu\") dropdownMenu;\n\t@ViewChild(\"input\", { static: true }) input: ElementRef;\n\t@ViewChild(\"listbox\", { static: true }) listbox: ElementRef;\n\t@HostBinding(\"class.cds--list-box__wrapper\") hostClass = true;\n\n\tpublic open = false;\n\n\tpublic showClearButton = false;\n\n\t/** Selected items for multi-select combo-boxes. */\n\tpublic pills = [];\n\t/** used to update the displayValue */\n\tpublic selectedValue = \"\";\n\n\toutsideClick = this._outsideClick.bind(this);\n\tkeyboardNav = this._keyboardNav.bind(this);\n\t/**\n\t * controls whether the `drop-up` class is applied\n\t */\n\t_dropUp = false;\n\n\tprotected noop = this._noop.bind(this);\n\tprotected onTouchedCallback: () => void = this._noop;\n\tprotected propagateChangeCallback: (_: any) => void = this._noop;\n\n\tprotected _placeholder = this.i18n.getOverridable(\"COMBOBOX.PLACEHOLDER\");\n\tprotected _closeMenuAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLOSE_MENU\");\n\tprotected _openMenuAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.OPEN_MENU\");\n\tprotected _clearSelectionsTitle = this.i18n.getOverridable(\"COMBOBOX.CLEAR_SELECTIONS\");\n\tprotected _clearSelectionsAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLEAR_SELECTIONS\");\n\tprotected _clearSelectionTitle = this.i18n.getOverridable(\"COMBOBOX.CLEAR_SELECTED\");\n\tprotected _clearSelectionAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLEAR_SELECTED\");\n\n\tprotected _isFocused = false;\n\n\t/**\n\t * Creates an instance of ComboBox.\n\t */\n\tconstructor(\n\t\tprotected elementRef: ElementRef,\n\t\tprotected dropdownService: DropdownService,\n\t\tprotected i18n: I18n\n\t) {}\n\n\t/**\n\t * Lifecycle hook.\n\t * Updates pills if necessary.\n\t *\n\t */\n\tngOnChanges(changes) {\n\t\tif (changes.items) {\n\t\t\tthis.view.items = changes.items.currentValue;\n\t\t\tthis.updateSelected();\n\t\t\t// If new items are added into the combobox while there is search input,\n\t\t\t// repeat the search. Search should only trigger for type 'single' when there is no value selected.\n\t\t\tif (this.type === \"multi\" || (this.type === \"single\" && !this.selectedValue)) {\n\t\t\t\tthis.onSearch(this.input.nativeElement.value, false);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Sets initial state that depends on child components\n\t * Subscribes to select events and handles focus/filtering/initial list updates\n\t */\n\tngAfterContentInit() {\n\t\tif (this.view) {\n\t\t\tthis.view.type = this.type;\n\n\t\t\t// function to check if the event is organic (isUpdate === false) or programmatic\n\t\t\tconst isUpdate = event => event && event.isUpdate;\n\n\t\t\tthis.view.select.subscribe(event => {\n\t\t\t\tif (Array.isArray(event)) {\n\t\t\t\t\tthis.updatePills();\n\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\tif (this.itemValueKey && this.view.getSelected()) {\n\t\t\t\t\t\t\tconst values = this.view.getSelected().map(item => item[this.itemValueKey]);\n\t\t\t\t\t\t\tthis.propagateChangeCallback(values);\n\t\t\t\t\t\t// otherwise just pass up the values from `getSelected`\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.propagateChangeCallback(this.view.getSelected());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.selected.emit(event);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If type is single, dropdown list will emit an object\n\t\t\t\t\tif (event.item && event.item.selected) {\n\t\t\t\t\t\tthis.showClearButton = true;\n\t\t\t\t\t\tthis.selectedValue = event.item.content;\n\n\t\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\t\tif (this.itemValueKey) {\n\t\t\t\t\t\t\t\tthis.propagateChangeCallback(event.item[this.itemValueKey]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.propagateChangeCallback(event.item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.selectedValue = \"\";\n\t\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\t\tthis.propagateChangeCallback(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// not guarding these since the nativeElement has to be loaded\n\t\t\t\t\t// for select to even fire\n\t\t\t\t\t// only focus for \"organic\" selections\n\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\tthis.elementRef.nativeElement.querySelector(\"input\").focus();\n\t\t\t\t\t\tthis.view.filterBy(\"\");\n\t\t\t\t\t\tthis.selected.emit(event.item);\n\t\t\t\t\t}\n\t\t\t\t\tthis.closeDropdown();\n\t\t\t\t}\n\t\t\t});\n\t\t\t// update the rest of combobox with any pre-selected items\n\t\t\t// setTimeout just defers the call to the next check cycle\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.updateSelected();\n\t\t\t});\n\n\t\t\tthis.view.blurIntent.pipe(filter(v => v === \"top\")).subscribe(() => {\n\t\t\t\tthis.elementRef.nativeElement.querySelector(\".cds--text-input\").focus();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Binds event handlers against the rendered view\n\t */\n\tngAfterViewInit() {\n\t\t// if appendInline is default valued (null) we should:\n\t\t// 1. if there are scrollable parents (not including body) don't append inline\n\t\t// this should also cover the case where the dropdown is in a modal\n\t\t// (where we _do_ want to append to the placeholder)\n\t\tif (this.appendInline === null && hasScrollableParents(this.elementRef.nativeElement)) {\n\t\t\tthis.appendInline = false;\n\t\t// 2. otherwise we should append inline\n\t\t} else if (this.appendInline === null) {\n\t\t\tthis.appendInline = true;\n\t\t}\n\t}\n\n\t/**\n\t * Removing the `Dropdown` from the body if it is appended to the body.\n\t */\n\tngOnDestroy() {\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Handles `Escape/Tab` key closing the dropdown, and arrow up/down focus to/from the dropdown list.\n\t */\n\t@HostListener(\"keydown\", [\"$event\"])\n\thostkeys(ev: KeyboardEvent) {\n\t\tif (ev.key === \"Escape\") {\n\t\t\tthis.closeDropdown();\n\t\t} else if ((ev.key === \"ArrowDown\")\n\t\t\t&& (!this.dropdownMenu || !this.dropdownMenu.nativeElement.contains(ev.target))) {\n\t\t\tev.preventDefault();\n\t\t\tthis.openDropdown();\n\t\t\tsetTimeout(() => { this.view.initFocus(); }, 0);\n\t\t}\n\n\t\tif (\n\t\t\tthis.open && ev.key === \"Tab\" &&\n\t\t\t(this.dropdownMenu.nativeElement.contains(ev.target as Node) || ev.target === this.input.nativeElement)\n\t\t) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\n\t\tif (this.open && ev.key === \"Tab\" && ev.shiftKey) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\t/*\n\t * no-op method for null event listeners, and other no op calls\n\t */\n\t_noop() {}\n\n\t/*\n\t * propagates the value provided from ngModel\n\t */\n\twriteValue(value: any) {\n\t\tif (this.type === \"single\") {\n\t\t\tif (this.itemValueKey) {\n\t\t\t\t// clone the specified item and update its state\n\t\t\t\tconst newValue = Object.assign({}, this.view.getListItems().find(item => item[this.itemValueKey] === value));\n\t\t\t\tnewValue.selected = true;\n\t\t\t\tthis.view.propagateSelected([newValue]);\n\t\t\t} else {\n\t\t\t\t// all items in propagateSelected must be iterable\n\t\t\t\tthis.view.propagateSelected([value || \"\"]);\n\t\t\t}\n\t\t\tthis.showClearButton = !!(value && this.view.getSelected().length);\n\t\t} else {\n\t\t\tif (this.itemValueKey) {\n\t\t\t\t// clone the items and update their state based on the received value array\n\t\t\t\t// this way we don't lose any additional metadata that may be passed in via the `items` Input\n\t\t\t\tlet newValues = [];\n\t\t\t\tfor (const v of value) {\n\t\t\t\t\tfor (const item of this.view.getListItems()) {\n\t\t\t\t\t\tif (item[this.itemValueKey] === v) {\n\t\t\t\t\t\t\tnewValues.push(Object.assign({}, item, { selected: true }));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.view.propagateSelected(newValues);\n\t\t\t} else {\n\t\t\t\tthis.view.propagateSelected(value ? value : [\"\"]);\n\t\t\t}\n\t\t}\n\t\tthis.updateSelected();\n\t}\n\n\tonBlur() {\n\t\tthis.onTouchedCallback();\n\t}\n\n\tregisterOnChange(fn: any) {\n\t\tthis.propagateChangeCallback = fn;\n\t}\n\n\tregisterOnTouched(fn: any) {\n\t\tthis.onTouchedCallback = fn;\n\t}\n\n\t/**\n\t * `ControlValueAccessor` method to programmatically disable the combobox.\n\t *\n\t * ex: `this.formGroup.get(\"myCoolCombobox\").disable();`\n\t */\n\tsetDisabledState(isDisabled: boolean) {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t/**\n\t * Called by `n-pill-input` when the selected pills have changed.\n\t */\n\tpublic updatePills() {\n\t\tthis.pills = this.view.getSelected() || [];\n\t\tthis.checkForReorder();\n\t}\n\n\tpublic clearSelected(event) {\n\t\tthis.items = this.items.map(item => {\n\t\t\tif (!item.disabled) {\n\t\t\t\titem.selected = false;\n\t\t\t}\n\t\t\treturn item;\n\t\t});\n\t\tthis.view.items = this.items;\n\t\tthis.updatePills();\n\t\t// clearSelected can only fire on type=multi\n\t\t// so we just emit getSelected() (just in case there's any disabled but selected items)\n\t\tconst selected = this.view.getSelected();\n\t\tthis.propagateChangeCallback(selected);\n\t\tthis.selected.emit(selected as any);\n\t\tthis.clear.emit(event);\n\t}\n\n\t/**\n\t * Closes the dropdown and emits the close event.\n\t */\n\tpublic closeDropdown() {\n\t\tthis.open = false;\n\t\tthis.checkForReorder();\n\t\tthis.close.emit();\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToDropdown();\n\t\t}\n\n\t\tdocument.removeEventListener(\"click\", this.outsideClick, true);\n\t}\n\n\t/**\n\t * Opens the dropdown.\n\t */\n\tpublic openDropdown() {\n\t\tif (this.disabled || this.readonly) { return; }\n\t\tthis.open = true;\n\t\tthis._dropUp = false;\n\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToBody();\n\t\t}\n\n\t\tdocument.addEventListener(\"click\", this.outsideClick, true);\n\n\t\t// set the dropdown menu to drop up if it is near the bottom of the screen\n\t\t// setTimeout lets us do the calculations after it is visible in the DOM\n\t\tsetTimeout(() => {\n\t\t\tif (this.dropUp === null || this.dropUp === undefined) {\n\t\t\t\tthis._dropUp = this._shouldDropUp();\n\t\t\t}\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Toggles the dropdown.\n\t */\n\tpublic toggleDropdown() {\n\t\tif (this.open) {\n\t\t\tthis.closeDropdown();\n\t\t} else {\n\t\t\tthis.openDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Sets the list group filter, and manages single select item selection.\n\t */\n\tpublic onSearch(searchString, shouldEmitSearch = true) {\n\t\tif (shouldEmitSearch) {\n\t\t\tthis.search.emit(searchString);\n\t\t}\n\t\tthis.showClearButton = !!searchString;\n\t\tthis.view.filterBy(searchString);\n\t\tif (searchString !== \"\") {\n\t\t\tif (!this.open) {\n\t\t\t\tthis.openDropdown();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.selectedValue = \"\";\n\t\t\tif (this.type === \"multi\" &&\n\t\t\t\t(this.selectionFeedback === \"top\" || this.selectionFeedback === \"top-after-reopen\")) {\n\t\t\t\tthis.view.reorderSelected();\n\t\t\t}\n\t\t}\n\t\tif (this.type === \"single\") {\n\t\t\t// deselect if the input doesn't match the content\n\t\t\t// of any given item\n\t\t\tconst matches = this.view.getListItems().some(item => item.content.toLowerCase().includes(searchString.toLowerCase()));\n\t\t\tif (!matches) {\n\t\t\t\tconst selected = this.view.getSelected();\n\t\t\t\tif (!selected || !selected[0]) {\n\t\t\t\t\tthis.view.filterBy(searchString);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Intended to be used to add items to the list.\n\t */\n\tpublic onSubmit(event: KeyboardEvent) {\n\t\tthis.submit.emit({\n\t\t\titems: this.view.getListItems(),\n\t\t\tindex: 0,\n\t\t\tvalue: {\n\t\t\t\tcontent: (event.target as HTMLInputElement).value,\n\t\t\t\tselected: false\n\t\t\t}\n\t\t});\n\t}\n\n\tclearInput(event) {\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\n\t\tif (this.disabled || this.readonly) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.type === \"single\") { // don't want to clear selected or close if multi\n\t\t\tthis.clearSelected(event);\n\t\t\tthis.closeDropdown();\n\t\t}\n\n\t\tthis.selectedValue = \"\";\n\t\tthis.input.nativeElement.value = \"\";\n\n\t\tthis.showClearButton = false;\n\t\tthis.input.nativeElement.focus();\n\t\tthis.onSearch(this.input.nativeElement.value);\n\t}\n\n\tpublic isTemplate(value) {\n\t\treturn value instanceof TemplateRef;\n\t}\n\n\t/**\n\t * Handles keyboard events so users are controlling the `Dropdown` instead of unintentionally controlling outside elements.\n\t */\n\t_keyboardNav(event: KeyboardEvent) {\n\t\tif ((event.key === \"Escape\") && this.open) {\n\t\t\tevent.stopImmediatePropagation(); // don't unintentionally close modal if inside of it\n\t\t}\n\t\tif (event.key === \"Escape\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.closeDropdown();\n\t\t\tthis.input.nativeElement.focus();\n\t\t} else if (this.open && event.key === \"Tab\") {\n\t\t\t// this way focus will start on the next focusable item from the dropdown\n\t\t\t// not the top of the body!\n\t\t\tthis.input.nativeElement.focus();\n\t\t\tthis.input.nativeElement.dispatchEvent(new KeyboardEvent(\"keydown\", { bubbles: true, cancelable: true, key: \"Tab\" }));\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list as an element that is appended to the DOM body.\n\t */\n\t_appendToBody() {\n\t\tthis.dropdownService.appendToBody(\n\t\t\tthis.listbox.nativeElement,\n\t\t\tthis.dropdownMenu.nativeElement,\n\t\t\t`${this.elementRef.nativeElement.className}${this.open ? \" cds--list-box--expanded\" : \"\"}`);\n\t\tthis.dropdownMenu.nativeElement.addEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list appending it to the dropdown parent object instead of the body.\n\t */\n\t_appendToDropdown() {\n\t\tthis.dropdownService.appendToDropdown(this.elementRef.nativeElement);\n\t\tthis.dropdownMenu.nativeElement.removeEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Detects whether or not the `Dropdown` list is visible within all scrollable parents.\n\t * This can be overridden by passing in a value to the `dropUp` input.\n\t */\n\t_shouldDropUp() {\n\t\t// check if dropdownMenu exists first.\n\t\tconst menu = this.dropdownMenu && this.dropdownMenu.nativeElement.querySelector(\".cds--list-box__menu\");\n\t\t// check if menu exists first.\n\t\tconst menuRect = menu && menu.getBoundingClientRect();\n\t\tif (menu && menuRect) {\n\t\t\tconst scrollableParents = getScrollableParents(menu);\n\t\t\treturn scrollableParents.reduce((shouldDropUp: boolean, parent: HTMLElement) => {\n\t\t\t\tconst parentRect = parent.getBoundingClientRect();\n\t\t\t\tconst isBelowParent = !(menuRect.bottom <= parentRect.bottom);\n\t\t\t\treturn shouldDropUp || isBelowParent;\n\t\t\t}, false);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Handles clicks outside of the `Dropdown` list.\n\t */\n\t_outsideClick(event) {\n\t\tif (!this.elementRef.nativeElement.contains(event.target) &&\n\t\t\t// if we're appendToBody the list isn't within the _elementRef,\n\t\t\t// so we've got to check if our target is possibly in there too.\n\t\t\t!this.dropdownMenu.nativeElement.contains(event.target)) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\thandleFocus(event: FocusEvent) {\n\t\tthis._isFocused = event.type === \"focus\";\n\t}\n\n\tprotected updateSelected() {\n\t\tconst selected = this.view.getSelected();\n\t\tif (this.type === \"multi\") {\n\t\t\tthis.updatePills();\n\t\t} else if (selected) {\n\t\t\tconst value = selected[0] ? selected[0].content : \"\";\n\t\t\tconst changeCallbackValue = selected[0] ? selected[0] : \"\";\n\t\t\tthis.selectedValue = value;\n\t\t\tthis.showClearButton = !!value;\n\t\t}\n\t}\n\n\tprotected checkForReorder() {\n\t\tconst topAfterReopen = !this.open && this.selectionFeedback === \"top-after-reopen\";\n\t\tif ((this.type === \"multi\") && (topAfterReopen || this.selectionFeedback === \"top\")) {\n\t\t\tthis.view.reorderSelected(true);\n\t\t}\n\t}\n}\n",
24288
+ "sourceCode": "import {\n\tComponent,\n\tOnChanges,\n\tContentChild,\n\tInput,\n\tOutput,\n\tHostListener,\n\tElementRef,\n\tViewChild,\n\tEventEmitter,\n\tAfterViewInit,\n\tAfterContentInit,\n\tHostBinding,\n\tTemplateRef,\n\tOnDestroy\n} from \"@angular/core\";\nimport { AbstractDropdownView, DropdownService } from \"carbon-components-angular/dropdown\";\nimport { ListItem } from \"carbon-components-angular/dropdown\";\nimport { NG_VALUE_ACCESSOR } from \"@angular/forms\";\nimport { filter } from \"rxjs/operators\";\nimport {\n\tgetScrollableParents,\n\thasScrollableParents\n} from \"carbon-components-angular/utils\";\nimport { I18n, Overridable } from \"carbon-components-angular/i18n\";\nimport { Observable } from \"rxjs\";\n\n/**\n * Get started with importing the module:\n *\n * ```typescript\n * import { ComboBoxModule } from 'carbon-components-angular';\n * ```\n *\n * ComboBoxes are similar to dropdowns, except a combobox provides an input field for users to search items and (optionally) add their own.\n * Multi-select comboboxes also provide \"pills\" of selected items.\n *\n * [See demo](../../?path=/story/components-combobox--basic)\n */\n@Component({\n\tselector: \"cds-combo-box, ibm-combo-box\",\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"cds--list-box__wrapper\"\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--list-box__wrapper--fluid': fluid,\n\t\t\t\t'cds--list-box__wrapper--fluid--invalid': fluid && invalid,\n\t\t\t\t'cds--list-box__wrapper--fluid--focus': fluid && _isFocused\n\t\t\t}\">\n\t\t\t<label\n\t\t\t\t*ngIf=\"label\"\n\t\t\t\t[for]=\"id\"\n\t\t\t\t[id]=\"labelId\"\n\t\t\t\tclass=\"cds--label\"\n\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t'cds--label--disabled': disabled,\n\t\t\t\t\t'cds--visually-hidden': hideLabel\n\t\t\t\t}\">\n\t\t\t\t<ng-container *ngIf=\"!isTemplate(label)\">{{label}}</ng-container>\n\t\t\t\t<ng-template *ngIf=\"isTemplate(label)\" [ngTemplateOutlet]=\"label\"></ng-template>\n\t\t\t</label>\n\t\t\t<div\n\t\t\t\t#listbox\n\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t'cds--multi-select cds--multi-select--filterable': type === 'multi',\n\t\t\t\t\t'cds--list-box--light': theme === 'light',\n\t\t\t\t\t'cds--list-box--expanded': open,\n\t\t\t\t\t'cds--list-box--sm': size === 'sm',\n\t\t\t\t\t'cds--list-box--md': size === 'md',\n\t\t\t\t\t'cds--list-box--lg': size === 'lg',\n\t\t\t\t\t'cds--list-box--disabled': disabled,\n\t\t\t\t\t'cds--combo-box--readonly': readonly,\n\t\t\t\t\t'cds--combo-box--warning cds--list-box--warning': warn,\n\t\t\t\t\t'cds--list-box--invalid': invalid\n\t\t\t\t}\"\n\t\t\t\tclass=\"cds--list-box cds--combo-box\"\n\t\t\t\t[attr.data-invalid]=\"(invalid ? true : null)\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"cds--list-box__field\"\n\t\t\t\t\t(click)=\"toggleDropdown()\"\n\t\t\t\t\t(blur)=\"onBlur()\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t*ngIf=\"type === 'multi' && pills.length > 0\"\n\t\t\t\t\t\tclass=\"cds--tag cds--tag--filter cds--tag--high-contrast\"\n\t\t\t\t\t\t[ngClass]=\"{'cds--tag--disabled': disabled || readonly}\">\n\t\t\t\t\t\t<span class=\"cds--tag__label\">{{ pills.length }}</span>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t(click)=\"clearSelected($event)\"\n\t\t\t\t\t\t\t(blur)=\"onBlur()\"\n\t\t\t\t\t\t\t(keydown.enter)=\"clearSelected($event)\"\n\t\t\t\t\t\t\tclass=\"cds--tag__close-icon\"\n\t\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t\t[title]=\"clearSelectionsTitle\"\n\t\t\t\t\t\t\t[disabled]=\"disabled || readonly\"\n\t\t\t\t\t\t\t[attr.aria-label]=\"clearSelectionAria\">\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\tfocusable=\"false\"\n\t\t\t\t\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\t\t\t\tstyle=\"will-change: transform;\"\n\t\t\t\t\t\t\t\trole=\"img\"\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\twidth=\"16\"\n\t\t\t\t\t\t\t\theight=\"16\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\">\n\t\t\t\t\t\t\t\t<path d=\"M12 4.7l-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8z\"></path>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<input\n\t\t\t\t\t\t#input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t\t[readOnly]=\"readonly\"\n\t\t\t\t\t\t(input)=\"onSearch($event.target.value)\"\n\t\t\t\t\t\t(focus)=\"fluid ? handleFocus($event) : null\"\n\t\t\t\t\t\t(blur)=\"fluid ? handleFocus($event) : onBlur()\"\n\t\t\t\t\t\t(keydown.enter)=\"onSubmit($event)\"\n\t\t\t\t\t\t[value]=\"selectedValue\"\n\t\t\t\t\t\tclass=\"cds--text-input\"\n\t\t\t\t\t\t[ngClass]=\"{'cds--text-input--empty': !showClearButton}\"\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t[id]=\"id\"\n\t\t\t\t\t\t[attr.aria-labelledby]=\"labelId\"\n\t\t\t\t\t\t[attr.aria-expanded]=\"open\"\n\t\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\t\t[attr.maxlength]=\"maxLength\"\n\t\t\t\t\t\t[attr.aria-controls]=\"open ? view?.listId : null\"\n\t\t\t\t\t\t[attr.aria-autocomplete]=\"autocomplete\"\n\t\t\t\t\t\t[placeholder]=\"placeholder\"/>\n\t\t\t\t\t<svg\n\t\t\t\t\t\t*ngIf=\"invalid\"\n\t\t\t\t\t\tcdsIcon=\"warning--filled\"\n\t\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t\tclass=\"cds--list-box__invalid-icon\">\n\t\t\t\t\t</svg>\n\t\t\t\t\t<svg\n\t\t\t\t\t\t*ngIf=\"!invalid && warn\"\n\t\t\t\t\t\tcdsIcon=\"warning--alt--filled\"\n\t\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t\tclass=\"cds--list-box__invalid-icon cds--list-box__invalid-icon--warning\">\n\t\t\t\t\t</svg>\n\t\t\t\t\t<div\n\t\t\t\t\t\t*ngIf=\"showClearButton\"\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\tclass=\"cds--list-box__selection\"\n\t\t\t\t\t\ttabindex=\"0\"\n\t\t\t\t\t\t[attr.aria-label]=\"clearSelectionAria\"\n\t\t\t\t\t\t[title]=\"clearSelectionTitle\"\n\t\t\t\t\t\t(keyup.enter)=\"clearInput($event)\"\n\t\t\t\t\t\t(click)=\"clearInput($event)\"\n\t\t\t\t\t\t(blur)=\"onBlur()\">\n\t\t\t\t\t\t<svg cdsIcon=\"close\" size=\"16\"></svg>\n\t\t\t\t\t</div>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\tclass=\"cds--list-box__menu-icon\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\t[title]=\"open ? closeMenuAria : openMenuAria\"\n\t\t\t\t\t\t[attr.aria-label]=\"open ? closeMenuAria : openMenuAria\"\n\t\t\t\t\t\t[ngClass]=\"{'cds--list-box__menu-icon--open': open}\">\n\t\t\t\t\t\t<svg cdsIcon=\"chevron--down\" size=\"16\"></svg>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div\n\t\t\t\t\t#dropdownMenu\n\t\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t\t'cds--list-box--up': this.dropUp !== null && this.dropUp !== undefined ? dropUp : _dropUp\n\t\t\t\t\t}\">\n\t\t\t\t\t<ng-content *ngIf=\"open\"></ng-content>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<hr *ngIf=\"fluid\" class=\"cds--list-box__divider\" />\n\t\t\t<div\n\t\t\t\t*ngIf=\"helperText && !invalid && !warn && !fluid\"\n\t\t\t\tclass=\"cds--form__helper-text\"\n\t\t\t\t[ngClass]=\"{'cds--form__helper-text--disabled': disabled}\">\n\t\t\t\t<ng-container *ngIf=\"!isTemplate(helperText)\">{{helperText}}</ng-container>\n\t\t\t\t<ng-template *ngIf=\"isTemplate(helperText)\" [ngTemplateOutlet]=\"helperText\"></ng-template>\n\t\t\t</div>\n\t\t\t<div *ngIf=\"invalid\" class=\"cds--form-requirement\">\n\t\t\t\t<ng-container *ngIf=\"!isTemplate(invalidText)\">{{ invalidText }}</ng-container>\n\t\t\t\t<ng-template *ngIf=\"isTemplate(invalidText)\" [ngTemplateOutlet]=\"invalidText\"></ng-template>\n\t\t\t</div>\n\t\t\t<div *ngIf=\"!invalid && warn\" class=\"cds--form-requirement\">\n\t\t\t\t<ng-container *ngIf=\"!isTemplate(warnText)\">{{warnText}}</ng-container>\n\t\t\t\t<ng-template *ngIf=\"isTemplate(warnText)\" [ngTemplateOutlet]=\"warnText\"></ng-template>\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: ComboBox,\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class ComboBox implements OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n\t/**\n\t * Text to show when nothing is selected.\n\t */\n\t@Input() set placeholder(value: string | Observable<string>) {\n\t\tthis._placeholder.override(value);\n\t}\n\n\tget placeholder() {\n\t\treturn this._placeholder.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the combobox control menu when closed\n\t */\n\t@Input() set openMenuAria(value: string | Observable<string>) {\n\t\tthis._openMenuAria.override(value);\n\t}\n\n\tget openMenuAria() {\n\t\treturn this._openMenuAria.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the combobox control menu when opened\n\t */\n\t@Input() set closeMenuAria(value: string | Observable<string>) {\n\t\tthis._closeMenuAria.override(value);\n\t}\n\n\tget closeMenuAria() {\n\t\treturn this._closeMenuAria.value;\n\t}\n\t/**\n\t * Value to display on the clear selections icon, when multi is selected\n\t */\n\t@Input() set clearSelectionsTitle(value: string | Observable<string>) {\n\t\tthis._clearSelectionsTitle.override(value);\n\t}\n\n\tget clearSelectionsTitle() {\n\t\treturn this._clearSelectionsTitle.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes to clear selections, when multi is selected\n\t */\n\t@Input() set clearSelectionsAria(value: string | Observable<string>) {\n\t\tthis._clearSelectionsAria.override(value);\n\t}\n\n\tget clearSelectionsAria() {\n\t\treturn this._clearSelectionsAria.value;\n\t}\n\t/**\n\t * Value to display on the clear the selected item icon, when single is selected\n\t */\n\t@Input() set clearSelectionTitle(value: string | Observable<string>) {\n\t\tthis._clearSelectionTitle.override(value);\n\t}\n\n\tget clearSelectionTitle() {\n\t\treturn this._clearSelectionTitle.value;\n\t}\n\t/**\n\t * Value to display for accessibility purposes on the clear the selected item icon, when single is selected\n\t */\n\t@Input() set clearSelectionAria(value: string | Observable<string>) {\n\t\tthis._clearSelectionAria.override(value);\n\t}\n\n\tget clearSelectionAria() {\n\t\treturn this._clearSelectionAria.value;\n\t}\n\tstatic comboBoxCount = 0;\n\t@Input() id = `combobox-${ComboBox.comboBoxCount++}`;\n\t@Input() labelId = `combobox-label-${ComboBox.comboBoxCount++}`;\n\t/**\n\t * List of items to fill the content with.\n\t *\n\t * **Example:**\n\t * ```javascript\n\t * items = [\n\t *\t\t{\n\t *\t\t\tcontent: \"Abacus\",\n\t *\t\t\tselected: false\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Byte\",\n\t *\t\t\tselected: false,\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Computer\",\n\t *\t\t\tselected: false\n\t *\t\t},\n\t *\t\t{\n\t *\t\t\tcontent: \"Digital\",\n\t *\t\t\tselected: false\n\t *\t\t}\n\t * ];\n\t * ```\n\t *\n\t */\n\t@Input() items: Array<ListItem> = [];\n\t/**\n\t * Combo box type (supporting single or multi selection of items).\n\t */\n\t@Input() type: \"single\" | \"multi\" = \"single\";\n\t/**\n\t * Combo box render size.\n\t */\n\t@Input() size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\t/**\n\t * Specifies the property to be used as the return value to `ngModel`\n\t */\n\t@Input() itemValueKey: string;\n\t/**\n\t * Label for the combobox.\n\t */\n\t@Input() label: string | TemplateRef<any>;\n\t/**\n\t * Hide label while keeping it accessible for screen readers\n\t */\n\t@Input() hideLabel = false;\n\t/**\n\t * Sets the optional helper text.\n\t */\n\t@Input() helperText: string | TemplateRef<any>;\n\t/**\n\t * set to `true` to place the dropdown view inline with the component\n\t */\n\t@Input() appendInline: boolean = null;\n\t/**\n\t * Set to `true` to show the invalid state.\n\t */\n\t@Input() invalid = false;\n\t/**\n\t * Value displayed if combobox is in an invalid state.\n\t */\n\t@Input() invalidText: string | TemplateRef<any>;\n\t/**\n\t* Set to `true` to show a warning (contents set by warnText)\n\t*/\n\t@Input() warn = false;\n\t/**\n\t * Sets the warning text\n\t */\n\t@Input() warnText: string | TemplateRef<any>;\n\t/**\n\t * Max length value to limit input characters\n\t */\n\t@Input() maxLength: number = null;\n\t/**\n\t * @deprecated since v5 - Use `cdsLayer` directive instead\n\t */\n\t@Input() theme: \"light\" | \"dark\" = \"dark\";\n\t/**\n\t * Specify feedback (mode) of the selection.\n\t * `top`: selected item jumps to top\n\t * `fixed`: selected item stays at its position\n\t * `top-after-reopen`: selected item jump to top after reopen dropdown\n\t */\n\t@Input() selectionFeedback: \"top\" | \"fixed\" | \"top-after-reopen\" = \"top-after-reopen\";\n\t/**\n\t * Specify aria-autocomplete attribute of text input.\n\t * \"list\", is the expected value for a combobox that invokes a drop-down list\n\t */\n\t@Input() autocomplete = \"list\";\n\t/**\n\t * Overrides the automatic dropUp.\n\t */\n\t@Input() dropUp: boolean;\n\t/**\n\t * Set to `true` to disable combobox.\n\t */\n\t@Input() disabled = false;\n\t/**\n\t * Set to `true` for readonly state.\n\t */\n\t@Input() readonly = false;\n\t/**\n\t * Experimental: enable fluid state\n\t */\n\t@Input() fluid = false;\n\t/**\n\t * Emits a ListItem\n\t *\n\t * Example:\n\t * ```javascript\n\t * {\n\t * \t\tcontent: \"one\",\n\t * \t\tselected: true\n\t * }\n\t * ```\n\t */\n\t@Output() selected = new EventEmitter<ListItem | ListItem[]>();\n\t/**\n\t * Intended to be used to add items to the list.\n\t *\n\t * Emits an event that includes the current item list, the suggested index for the new item, and a simple ListItem\n\t *\n\t * Example:\n\t * ```javascript\n\t *\t{\n\t *\t\titems: [{content: \"one\", selected: true}, {content: \"two\", selected: true}],\n\t *\t\tindex: 1,\n\t *\t\tvalue: {\n\t *\t\t\tcontent: \"some user string\",\n\t *\t\t\tselected: false\n\t *\t\t}\n\t *\t}\n\t * ```\n\t *\n\t *\n\t * Example:\n\t * ```javascript\n\t * {\n\t *\tafter: 1,\n\t *\tvalue: \"some user string\"\n\t * }\n\t * ```\n\t */\n\t@Output() submit = new EventEmitter<{\n\t\titems: ListItem[],\n\t\tindex: number,\n\t\tvalue: {\n\t\t\tcontent: string,\n\t\t\tselected: boolean\n\t\t}\n\t}>();\n\t/** Emits an empty event when the menu is closed */\n\t@Output() close = new EventEmitter<void>();\n\t/** Emits the search string from the input */\n\t@Output() search = new EventEmitter<string>();\n\t/** Emits an event when the clear button is clicked. */\n\t@Output() clear = new EventEmitter<Event>();\n\t/** ContentChild reference to the instantiated dropdown list */\n\t@ContentChild(AbstractDropdownView, { static: true }) view: AbstractDropdownView;\n\t@ViewChild(\"dropdownMenu\") dropdownMenu;\n\t@ViewChild(\"input\", { static: true }) input: ElementRef;\n\t@ViewChild(\"listbox\", { static: true }) listbox: ElementRef;\n\t@HostBinding(\"class.cds--list-box__wrapper\") hostClass = true;\n\n\tpublic open = false;\n\n\tpublic showClearButton = false;\n\n\t/** Selected items for multi-select combo-boxes. */\n\tpublic pills = [];\n\t/** used to update the displayValue */\n\tpublic selectedValue = \"\";\n\n\toutsideClick = this._outsideClick.bind(this);\n\tkeyboardNav = this._keyboardNav.bind(this);\n\t/**\n\t * controls whether the `drop-up` class is applied\n\t */\n\t_dropUp = false;\n\n\tprotected noop = this._noop.bind(this);\n\tprotected onTouchedCallback: () => void = this._noop;\n\tprotected propagateChangeCallback: (_: any) => void = this._noop;\n\n\tprotected _placeholder = this.i18n.getOverridable(\"COMBOBOX.PLACEHOLDER\");\n\tprotected _closeMenuAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLOSE_MENU\");\n\tprotected _openMenuAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.OPEN_MENU\");\n\tprotected _clearSelectionsTitle = this.i18n.getOverridable(\"COMBOBOX.CLEAR_SELECTIONS\");\n\tprotected _clearSelectionsAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLEAR_SELECTIONS\");\n\tprotected _clearSelectionTitle = this.i18n.getOverridable(\"COMBOBOX.CLEAR_SELECTED\");\n\tprotected _clearSelectionAria = this.i18n.getOverridable(\"COMBOBOX.A11Y.CLEAR_SELECTED\");\n\n\tprotected _isFocused = false;\n\n\t/**\n\t * Creates an instance of ComboBox.\n\t */\n\tconstructor(\n\t\tprotected elementRef: ElementRef,\n\t\tprotected dropdownService: DropdownService,\n\t\tprotected i18n: I18n\n\t) {}\n\n\t/**\n\t * Lifecycle hook.\n\t * Updates pills if necessary.\n\t *\n\t */\n\tngOnChanges(changes) {\n\t\tif (changes.items) {\n\t\t\tthis.view.items = changes.items.currentValue;\n\t\t\tthis.updateSelected();\n\t\t\t// If new items are added into the combobox while there is search input,\n\t\t\t// repeat the search. Search should only trigger for type 'single' when there is no value selected.\n\t\t\tif (this.type === \"multi\" || (this.type === \"single\" && !this.selectedValue)) {\n\t\t\t\tthis.onSearch(this.input.nativeElement.value, false);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Sets initial state that depends on child components\n\t * Subscribes to select events and handles focus/filtering/initial list updates\n\t */\n\tngAfterContentInit() {\n\t\tif (this.view) {\n\t\t\tthis.view.type = this.type;\n\n\t\t\t// function to check if the event is organic (isUpdate === false) or programmatic\n\t\t\tconst isUpdate = event => event && event.isUpdate;\n\n\t\t\tthis.view.select.subscribe(event => {\n\t\t\t\tif (Array.isArray(event)) {\n\t\t\t\t\tthis.updatePills();\n\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\tif (this.itemValueKey && this.view.getSelected()) {\n\t\t\t\t\t\t\tconst values = this.view.getSelected().map(item => item[this.itemValueKey]);\n\t\t\t\t\t\t\tthis.propagateChangeCallback(values);\n\t\t\t\t\t\t// otherwise just pass up the values from `getSelected`\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.propagateChangeCallback(this.view.getSelected());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.selected.emit(event);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If type is single, dropdown list will emit an object\n\t\t\t\t\tif (event.item && event.item.selected) {\n\t\t\t\t\t\tthis.showClearButton = true;\n\t\t\t\t\t\tthis.selectedValue = event.item.content;\n\n\t\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\t\tif (this.itemValueKey) {\n\t\t\t\t\t\t\t\tthis.propagateChangeCallback(event.item[this.itemValueKey]);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.propagateChangeCallback(event.item);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.selectedValue = \"\";\n\t\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\t\tthis.propagateChangeCallback(null);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// not guarding these since the nativeElement has to be loaded\n\t\t\t\t\t// for select to even fire\n\t\t\t\t\t// only focus for \"organic\" selections\n\t\t\t\t\tif (!isUpdate(event)) {\n\t\t\t\t\t\tthis.elementRef.nativeElement.querySelector(\"input\").focus();\n\t\t\t\t\t\tthis.view.filterBy(\"\");\n\t\t\t\t\t\tthis.selected.emit(event.item);\n\t\t\t\t\t}\n\t\t\t\t\tthis.closeDropdown();\n\t\t\t\t}\n\t\t\t});\n\t\t\t// update the rest of combobox with any pre-selected items\n\t\t\t// setTimeout just defers the call to the next check cycle\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.updateSelected();\n\t\t\t});\n\n\t\t\tthis.view.blurIntent.pipe(filter(v => v === \"top\")).subscribe(() => {\n\t\t\t\tthis.elementRef.nativeElement.querySelector(\".cds--text-input\").focus();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Binds event handlers against the rendered view\n\t */\n\tngAfterViewInit() {\n\t\t// if appendInline is default valued (null) we should:\n\t\t// 1. if there are scrollable parents (not including body) don't append inline\n\t\t// this should also cover the case where the dropdown is in a modal\n\t\t// (where we _do_ want to append to the placeholder)\n\t\tif (this.appendInline === null && hasScrollableParents(this.elementRef.nativeElement)) {\n\t\t\tthis.appendInline = false;\n\t\t// 2. otherwise we should append inline\n\t\t} else if (this.appendInline === null) {\n\t\t\tthis.appendInline = true;\n\t\t}\n\t}\n\n\t/**\n\t * Removing the `Dropdown` from the body if it is appended to the body.\n\t */\n\tngOnDestroy() {\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Handles `Escape/Tab` key closing the dropdown, and arrow up/down focus to/from the dropdown list.\n\t */\n\t@HostListener(\"keydown\", [\"$event\"])\n\thostkeys(ev: KeyboardEvent) {\n\t\tif (ev.key === \"Escape\") {\n\t\t\tthis.closeDropdown();\n\t\t} else if ((ev.key === \"ArrowDown\")\n\t\t\t&& (!this.dropdownMenu || !this.dropdownMenu.nativeElement.contains(ev.target))) {\n\t\t\tev.preventDefault();\n\t\t\tthis.openDropdown();\n\t\t\tsetTimeout(() => { this.view.initFocus(); }, 0);\n\t\t}\n\n\t\tif (\n\t\t\tthis.open && ev.key === \"Tab\" &&\n\t\t\t(this.dropdownMenu.nativeElement.contains(ev.target as Node) || ev.target === this.input.nativeElement)\n\t\t) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\n\t\tif (this.open && ev.key === \"Tab\" && ev.shiftKey) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\t/*\n\t * no-op method for null event listeners, and other no op calls\n\t */\n\t_noop() {}\n\n\t/*\n\t * propagates the value provided from ngModel\n\t */\n\twriteValue(value: any) {\n\t\tif (this.type === \"single\") {\n\t\t\tif (this.itemValueKey) {\n\t\t\t\t// clone the specified item and update its state\n\t\t\t\tconst newValue = Object.assign({}, this.view.getListItems().find(item => item[this.itemValueKey] === value));\n\t\t\t\tnewValue.selected = true;\n\t\t\t\tthis.view.propagateSelected([newValue]);\n\t\t\t} else {\n\t\t\t\t// all items in propagateSelected must be iterable\n\t\t\t\tthis.view.propagateSelected([value || \"\"]);\n\t\t\t}\n\t\t\tthis.showClearButton = !!(value && this.view.getSelected().length);\n\t\t} else {\n\t\t\tif (this.itemValueKey) {\n\t\t\t\t// clone the items and update their state based on the received value array\n\t\t\t\t// this way we don't lose any additional metadata that may be passed in via the `items` Input\n\t\t\t\tlet newValues = [];\n\t\t\t\tfor (const v of value) {\n\t\t\t\t\tfor (const item of this.view.getListItems()) {\n\t\t\t\t\t\tif (item[this.itemValueKey] === v) {\n\t\t\t\t\t\t\tnewValues.push(Object.assign({}, item, { selected: true }));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.view.propagateSelected(newValues);\n\t\t\t} else {\n\t\t\t\tthis.view.propagateSelected(value ? value : [\"\"]);\n\t\t\t}\n\t\t}\n\t\tthis.updateSelected();\n\t}\n\n\tonBlur() {\n\t\tthis.onTouchedCallback();\n\t}\n\n\tregisterOnChange(fn: any) {\n\t\tthis.propagateChangeCallback = fn;\n\t}\n\n\tregisterOnTouched(fn: any) {\n\t\tthis.onTouchedCallback = fn;\n\t}\n\n\t/**\n\t * `ControlValueAccessor` method to programmatically disable the combobox.\n\t *\n\t * ex: `this.formGroup.get(\"myCoolCombobox\").disable();`\n\t */\n\tsetDisabledState(isDisabled: boolean) {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t/**\n\t * Called by `n-pill-input` when the selected pills have changed.\n\t */\n\tpublic updatePills() {\n\t\tthis.pills = this.view.getSelected() || [];\n\t\tthis.checkForReorder();\n\t}\n\n\tpublic clearSelected(event) {\n\t\tthis.items = this.items.map(item => {\n\t\t\tif (!item.disabled) {\n\t\t\t\titem.selected = false;\n\t\t\t}\n\t\t\treturn item;\n\t\t});\n\t\tthis.view.items = this.items;\n\t\tthis.updatePills();\n\t\t// clearSelected can only fire on type=multi\n\t\t// so we just emit getSelected() (just in case there's any disabled but selected items)\n\t\tconst selected = this.view.getSelected();\n\n\t\t// in case there are disabled items they should be mapped according to itemValueKey\n if (this.itemValueKey && selected) {\n const values = selected.map((item) => item[this.itemValueKey]);\n this.propagateChangeCallback(values);\n } else {\n this.propagateChangeCallback(selected);\n }\n\n\t\tthis.selected.emit(selected as any);\n\t\tthis.clear.emit(event);\n\t}\n\n\t/**\n\t * Closes the dropdown and emits the close event.\n\t */\n\tpublic closeDropdown() {\n\t\tthis.open = false;\n\t\tthis.checkForReorder();\n\t\tthis.close.emit();\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToDropdown();\n\t\t}\n\n\t\tdocument.removeEventListener(\"click\", this.outsideClick, true);\n\t}\n\n\t/**\n\t * Opens the dropdown.\n\t */\n\tpublic openDropdown() {\n\t\tif (this.disabled || this.readonly) { return; }\n\t\tthis.open = true;\n\t\tthis._dropUp = false;\n\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToBody();\n\t\t}\n\n\t\tdocument.addEventListener(\"click\", this.outsideClick, true);\n\n\t\t// set the dropdown menu to drop up if it is near the bottom of the screen\n\t\t// setTimeout lets us do the calculations after it is visible in the DOM\n\t\tsetTimeout(() => {\n\t\t\tif (this.dropUp === null || this.dropUp === undefined) {\n\t\t\t\tthis._dropUp = this._shouldDropUp();\n\t\t\t}\n\t\t}, 0);\n\t}\n\n\t/**\n\t * Toggles the dropdown.\n\t */\n\tpublic toggleDropdown() {\n\t\tif (this.open) {\n\t\t\tthis.closeDropdown();\n\t\t} else {\n\t\t\tthis.openDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Sets the list group filter, and manages single select item selection.\n\t */\n\tpublic onSearch(searchString, shouldEmitSearch = true) {\n\t\tif (shouldEmitSearch) {\n\t\t\tthis.search.emit(searchString);\n\t\t}\n\t\tthis.showClearButton = !!searchString;\n\t\tthis.view.filterBy(searchString);\n\t\tif (searchString !== \"\") {\n\t\t\tif (!this.open) {\n\t\t\t\tthis.openDropdown();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.selectedValue = \"\";\n\t\t\tif (this.type === \"multi\" &&\n\t\t\t\t(this.selectionFeedback === \"top\" || this.selectionFeedback === \"top-after-reopen\")) {\n\t\t\t\tthis.view.reorderSelected();\n\t\t\t}\n\t\t}\n\t\tif (this.type === \"single\") {\n\t\t\t// deselect if the input doesn't match the content\n\t\t\t// of any given item\n\t\t\tconst matches = this.view.getListItems().some(item => item.content.toLowerCase().includes(searchString.toLowerCase()));\n\t\t\tif (!matches) {\n\t\t\t\tconst selected = this.view.getSelected();\n\t\t\t\tif (!selected || !selected[0]) {\n\t\t\t\t\tthis.view.filterBy(searchString);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Intended to be used to add items to the list.\n\t */\n\tpublic onSubmit(event: KeyboardEvent) {\n\t\tthis.submit.emit({\n\t\t\titems: this.view.getListItems(),\n\t\t\tindex: 0,\n\t\t\tvalue: {\n\t\t\t\tcontent: (event.target as HTMLInputElement).value,\n\t\t\t\tselected: false\n\t\t\t}\n\t\t});\n\t}\n\n\tclearInput(event) {\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\n\t\tif (this.disabled || this.readonly) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.type === \"single\") { // don't want to clear selected or close if multi\n\t\t\tthis.clearSelected(event);\n\t\t\tthis.closeDropdown();\n\t\t}\n\n\t\tthis.selectedValue = \"\";\n\t\tthis.input.nativeElement.value = \"\";\n\n\t\tthis.showClearButton = false;\n\t\tthis.input.nativeElement.focus();\n\t\tthis.onSearch(this.input.nativeElement.value);\n\t}\n\n\tpublic isTemplate(value) {\n\t\treturn value instanceof TemplateRef;\n\t}\n\n\t/**\n\t * Handles keyboard events so users are controlling the `Dropdown` instead of unintentionally controlling outside elements.\n\t */\n\t_keyboardNav(event: KeyboardEvent) {\n\t\tif ((event.key === \"Escape\") && this.open) {\n\t\t\tevent.stopImmediatePropagation(); // don't unintentionally close modal if inside of it\n\t\t}\n\t\tif (event.key === \"Escape\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.closeDropdown();\n\t\t\tthis.input.nativeElement.focus();\n\t\t} else if (this.open && event.key === \"Tab\") {\n\t\t\t// this way focus will start on the next focusable item from the dropdown\n\t\t\t// not the top of the body!\n\t\t\tthis.input.nativeElement.focus();\n\t\t\tthis.input.nativeElement.dispatchEvent(new KeyboardEvent(\"keydown\", { bubbles: true, cancelable: true, key: \"Tab\" }));\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list as an element that is appended to the DOM body.\n\t */\n\t_appendToBody() {\n\t\tthis.dropdownService.appendToBody(\n\t\t\tthis.listbox.nativeElement,\n\t\t\tthis.dropdownMenu.nativeElement,\n\t\t\t`${this.elementRef.nativeElement.className}${this.open ? \" cds--list-box--expanded\" : \"\"}`);\n\t\tthis.dropdownMenu.nativeElement.addEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list appending it to the dropdown parent object instead of the body.\n\t */\n\t_appendToDropdown() {\n\t\tthis.dropdownService.appendToDropdown(this.elementRef.nativeElement);\n\t\tthis.dropdownMenu.nativeElement.removeEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Detects whether or not the `Dropdown` list is visible within all scrollable parents.\n\t * This can be overridden by passing in a value to the `dropUp` input.\n\t */\n\t_shouldDropUp() {\n\t\t// check if dropdownMenu exists first.\n\t\tconst menu = this.dropdownMenu && this.dropdownMenu.nativeElement.querySelector(\".cds--list-box__menu\");\n\t\t// check if menu exists first.\n\t\tconst menuRect = menu && menu.getBoundingClientRect();\n\t\tif (menu && menuRect) {\n\t\t\tconst scrollableParents = getScrollableParents(menu);\n\t\t\treturn scrollableParents.reduce((shouldDropUp: boolean, parent: HTMLElement) => {\n\t\t\t\tconst parentRect = parent.getBoundingClientRect();\n\t\t\t\tconst isBelowParent = !(menuRect.bottom <= parentRect.bottom);\n\t\t\t\treturn shouldDropUp || isBelowParent;\n\t\t\t}, false);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Handles clicks outside of the `Dropdown` list.\n\t */\n\t_outsideClick(event) {\n\t\tif (!this.elementRef.nativeElement.contains(event.target) &&\n\t\t\t// if we're appendToBody the list isn't within the _elementRef,\n\t\t\t// so we've got to check if our target is possibly in there too.\n\t\t\t!this.dropdownMenu.nativeElement.contains(event.target)) {\n\t\t\tthis.closeDropdown();\n\t\t}\n\t}\n\n\thandleFocus(event: FocusEvent) {\n\t\tthis._isFocused = event.type === \"focus\";\n\t}\n\n\tprotected updateSelected() {\n\t\tconst selected = this.view.getSelected();\n\t\tif (this.type === \"multi\") {\n\t\t\tthis.updatePills();\n\t\t} else if (selected) {\n\t\t\tconst value = selected[0] ? selected[0].content : \"\";\n\t\t\tconst changeCallbackValue = selected[0] ? selected[0] : \"\";\n\t\t\tthis.selectedValue = value;\n\t\t\tthis.showClearButton = !!value;\n\t\t}\n\t}\n\n\tprotected checkForReorder() {\n\t\tconst topAfterReopen = !this.open && this.selectionFeedback === \"top-after-reopen\";\n\t\tif ((this.type === \"multi\") && (topAfterReopen || this.selectionFeedback === \"top\")) {\n\t\t\tthis.view.reorderSelected(true);\n\t\t}\n\t}\n}\n",
24289
24289
  "assetsDirs": [],
24290
24290
  "styleUrlsData": "",
24291
24291
  "stylesData": "",
@@ -34503,7 +34503,7 @@
34503
34503
  },
34504
34504
  {
34505
34505
  "name": "IconButton",
34506
- "id": "component-IconButton-51758ccc9548e4288883169b57e7512220d12ca16445c4ff51c7084ae4ed320f3b06fa92fa97371db2f37ae1f7207df0e9f0fe205c83199eccd69b4a6c1a8f59",
34506
+ "id": "component-IconButton-edf3bbe1c9106645ec3623e28d5b0e5714a657c6f37a1b87ed4006000faba99f48a0c3f833a653dd3dfa2f9774943aecdf505dfe418f5d2d4ff38baef63bedab",
34507
34507
  "file": "src/button/icon-button.component.ts",
34508
34508
  "encapsulation": [],
34509
34509
  "entryComponents": [],
@@ -34513,7 +34513,7 @@
34513
34513
  "selector": "cds-icon-button, ibm-icon-button",
34514
34514
  "styleUrls": [],
34515
34515
  "styles": [],
34516
- "template": "<cds-tooltip\n\tclass=\"cds--icon-tooltip\"\n\t[description]=\"description\"\n\t[disabled]=\"disabled\"\n\t[caret]=\"caret\"\n\t[dropShadow]=\"dropShadow\"\n\t[highContrast]=\"highContrast\"\n\t[isOpen]=\"isOpen\"\n\t[align]=\"align\"\n\t[autoAlign]=\"autoAlign\"\n\t[enterDelayMs]=\"enterDelayMs\"\n\t[leaveDelayMs]=\"leaveDelayMs\"\n\t(click)=\"emitClickEvent($event, 'tooltip')\">\n\t<button\n\t\t#button\n\t\t[id]=\"buttonId\"\n\t\t[disabled]=\"disabled\"\n\t\t[attr.type]=\"type\"\n\t\t[iconOnly]=\"true\"\n\t\t[ngClass]=\"buttonNgClass\"\n\t\t[cdsButton]=\"kind\"\n\t\t[size]=\"size\"\n\t\t[isExpressive]=\"isExpressive\"\n\t\t(click)=\"emitClickEvent($event)\"\n\t\t(focus)=\"focus.emit($event)\"\n\t\t(blur)=\"blur.emit($event)\">\n\t\t<ng-content></ng-content>\n\t</button>\n</cds-tooltip>\n",
34516
+ "template": "<cds-tooltip\n\tclass=\"cds--icon-tooltip\"\n\t[description]=\"description\"\n\t[disabled]=\"showTooltipWhenDisabled ? false : disabled\"\n\t[caret]=\"caret\"\n\t[dropShadow]=\"dropShadow\"\n\t[highContrast]=\"highContrast\"\n\t[isOpen]=\"isOpen\"\n\t[align]=\"align\"\n\t[autoAlign]=\"autoAlign\"\n\t[enterDelayMs]=\"enterDelayMs\"\n\t[leaveDelayMs]=\"leaveDelayMs\"\n\t(click)=\"emitClickEvent($event, 'tooltip')\">\n\t<button\n\t\t#button\n\t\t[id]=\"buttonId\"\n\t\t[disabled]=\"disabled\"\n\t\t[attr.type]=\"type\"\n\t\t[iconOnly]=\"true\"\n\t\t[ngClass]=\"buttonNgClass\"\n\t\t[cdsButton]=\"kind\"\n\t\t[size]=\"size\"\n\t\t[isExpressive]=\"isExpressive\"\n\t\t(click)=\"emitClickEvent($event)\"\n\t\t(focus)=\"focus.emit($event)\"\n\t\t(blur)=\"blur.emit($event)\">\n\t\t<ng-content></ng-content>\n\t</button>\n</cds-tooltip>\n",
34517
34517
  "templateUrl": [],
34518
34518
  "viewProviders": [],
34519
34519
  "hostDirectives": [],
@@ -34524,15 +34524,15 @@
34524
34524
  "deprecationMessage": "",
34525
34525
  "jsdoctags": [
34526
34526
  {
34527
- "pos": 1607,
34528
- "end": 1813,
34527
+ "pos": 1641,
34528
+ "end": 1847,
34529
34529
  "flags": 16842752,
34530
34530
  "modifierFlagsCache": 0,
34531
34531
  "transformFlags": 0,
34532
34532
  "kind": 348,
34533
34533
  "tagName": {
34534
- "pos": 1608,
34535
- "end": 1613,
34534
+ "pos": 1642,
34535
+ "end": 1647,
34536
34536
  "flags": 16842752,
34537
34537
  "modifierFlagsCache": 0,
34538
34538
  "transformFlags": 0,
@@ -34541,8 +34541,8 @@
34541
34541
  },
34542
34542
  "comment": "<p>: { [key: string]: string\nUser can pass additional button attributes if component property does not already exist\nKey is the attribute name &amp; value is the attribute value for the button</p>\n",
34543
34543
  "name": {
34544
- "pos": 1614,
34545
- "end": 1617,
34544
+ "pos": 1648,
34545
+ "end": 1651,
34546
34546
  "flags": 16842752,
34547
34547
  "modifierFlagsCache": 0,
34548
34548
  "transformFlags": 0,
@@ -34621,6 +34621,17 @@
34621
34621
  "type": "ButtonType",
34622
34622
  "decorators": []
34623
34623
  },
34624
+ {
34625
+ "name": "showTooltipWhenDisabled",
34626
+ "defaultValue": "false",
34627
+ "deprecated": false,
34628
+ "deprecationMessage": "",
34629
+ "rawdescription": "\n\nIndicates whether the tooltip should be shown when the button is disabled\n",
34630
+ "description": "<p>Indicates whether the tooltip should be shown when the button is disabled</p>\n",
34631
+ "line": 129,
34632
+ "type": "boolean",
34633
+ "decorators": []
34634
+ },
34624
34635
  {
34625
34636
  "name": "size",
34626
34637
  "defaultValue": "\"lg\"",
@@ -34762,7 +34773,7 @@
34762
34773
  "defaultValue": "new EventEmitter<Event>()",
34763
34774
  "deprecated": false,
34764
34775
  "deprecationMessage": "",
34765
- "line": 132,
34776
+ "line": 136,
34766
34777
  "type": "EventEmitter"
34767
34778
  },
34768
34779
  {
@@ -34772,7 +34783,7 @@
34772
34783
  "deprecationMessage": "",
34773
34784
  "rawdescription": "\n\nCommon button events\n",
34774
34785
  "description": "<p>Common button events</p>\n",
34775
- "line": 130,
34786
+ "line": 134,
34776
34787
  "type": "EventEmitter"
34777
34788
  },
34778
34789
  {
@@ -34780,7 +34791,7 @@
34780
34791
  "defaultValue": "new EventEmitter<Event>()",
34781
34792
  "deprecated": false,
34782
34793
  "deprecationMessage": "",
34783
- "line": 131,
34794
+ "line": 135,
34784
34795
  "type": "EventEmitter"
34785
34796
  },
34786
34797
  {
@@ -34790,7 +34801,7 @@
34790
34801
  "deprecationMessage": "",
34791
34802
  "rawdescription": "\n\nEvent to emit when click event is fired from tooltip\n",
34792
34803
  "description": "<p>Event to emit when click event is fired from tooltip</p>\n",
34793
- "line": 136,
34804
+ "line": 140,
34794
34805
  "type": "EventEmitter"
34795
34806
  }
34796
34807
  ],
@@ -34848,7 +34859,7 @@
34848
34859
  "optional": false,
34849
34860
  "returnType": "void",
34850
34861
  "typeParameters": [],
34851
- "line": 154,
34862
+ "line": 158,
34852
34863
  "deprecated": false,
34853
34864
  "deprecationMessage": "",
34854
34865
  "rawdescription": "\n\nStop propogation of click event\nElse double fires (click) event\n",
@@ -34885,7 +34896,7 @@
34885
34896
  "description": "<p>Get started with importing the module:</p>\n<b>Example :</b><div><pre class=\"line-numbers\"><code class=\"language-typescript\">import { ButtonModule } from &#39;carbon-components-angular&#39;;</code></pre></div><p><a href=\"../../?path=/story/components-button-icon-button--basic\">See demo</a></p>\n",
34886
34897
  "rawdescription": "\n\nGet started with importing the module:\n\n```typescript\nimport { ButtonModule } from 'carbon-components-angular';\n```\n\n[See demo](../../?path=/story/components-button-icon-button--basic)\n",
34887
34898
  "type": "component",
34888
- "sourceCode": "import {\n\tAfterViewInit,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tInput,\n\tOutput,\n\tRenderer2,\n\tTemplateRef,\n\tViewChild\n} from \"@angular/core\";\nimport { BaseIconButton } from \"./base-icon-button.component\";\nimport { ButtonSize, ButtonType } from \"./button.types\";\n\n/**\n * Get started with importing the module:\n *\n * ```typescript\n * import { ButtonModule } from 'carbon-components-angular';\n * ```\n *\n * [See demo](../../?path=/story/components-button-icon-button--basic)\n */\n@Component({\n\tselector: \"cds-icon-button, ibm-icon-button\",\n\ttemplate: `\n\t<cds-tooltip\n\t\tclass=\"cds--icon-tooltip\"\n\t\t[description]=\"description\"\n\t\t[disabled]=\"disabled\"\n\t\t[caret]=\"caret\"\n\t\t[dropShadow]=\"dropShadow\"\n\t\t[highContrast]=\"highContrast\"\n\t\t[isOpen]=\"isOpen\"\n\t\t[align]=\"align\"\n\t\t[autoAlign]=\"autoAlign\"\n\t\t[enterDelayMs]=\"enterDelayMs\"\n\t\t[leaveDelayMs]=\"leaveDelayMs\"\n\t\t(click)=\"emitClickEvent($event, 'tooltip')\">\n\t\t<button\n\t\t\t#button\n\t\t\t[id]=\"buttonId\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t[attr.type]=\"type\"\n\t\t\t[iconOnly]=\"true\"\n\t\t\t[ngClass]=\"buttonNgClass\"\n\t\t\t[cdsButton]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[isExpressive]=\"isExpressive\"\n\t\t\t(click)=\"emitClickEvent($event)\"\n\t\t\t(focus)=\"focus.emit($event)\"\n\t\t\t(blur)=\"blur.emit($event)\">\n\t\t\t<ng-content></ng-content>\n\t\t</button>\n\t</cds-tooltip>\n\t`\n})\nexport class IconButton extends BaseIconButton implements AfterViewInit {\n\t/**\n\t * Pass global carbon classes to icon button\n\t */\n\t@Input() set buttonNgClass(obj: { [key: string]: boolean }) {\n\t\tthis.classList = Object.assign({ \"cds--btn--disabled\": this.disabled }, obj);\n\t}\n\n\tget buttonNgClass() {\n\t\treturn this.classList;\n\t}\n\n\t/**\n\t * @param obj: { [key: string]: string\n\t * User can pass additional button attributes if component property does not already exist\n\t * Key is the attribute name & value is the attribute value for the button\n\t */\n\t@Input() set buttonAttributes(obj: { [key: string]: string }) {\n\t\tif (this.button) {\n\t\t\t// Remove old attributes\n\t\t\tObject.keys(this.attributeList).forEach((key: string) => {\n\t\t\t\tthis.renderer.removeAttribute(this.button.nativeElement, key);\n\t\t\t});\n\t\t\t// Set new attributes\n\t\t\tObject.keys(obj).forEach((key: string) => {\n\t\t\t\tthis.renderer.setAttribute(this.button.nativeElement, key, obj[key]);\n\t\t\t});\n\t\t}\n\t\t// Set new attributes\n\t\tthis.attributeList = obj;\n\t}\n\n\tget buttonAttributes() {\n\t\treturn this.buttonAttributes;\n\t}\n\n\tstatic iconButtonCounter = 0;\n\n\t@ViewChild(\"button\") button: ElementRef;\n\n\t/**\n\t * Override id\n\t */\n\t@Input() buttonId = `icon-btn-${IconButton.iconButtonCounter++}`;\n\t/**\n\t * Sets the button type.\n\t */\n\t@Input() kind: ButtonType = \"primary\";\n\t/**\n\t * Specify the size of the button.\n\t */\n\t@Input() size: ButtonSize = \"lg\";\n\t/**\n\t * Set button type, `button` by default\n\t */\n\t@Input() type = \"button\";\n\t/**\n\t * Set to `true` to make button expressive\n\t */\n\t@Input() isExpressive = false;\n\t/**\n\t * Set to `true` to disable button\n\t */\n\t@Input() disabled = false;\n\t/**\n\t * The string or template content to be exposed by the tooltip.\n\t */\n\t@Input() description: string | TemplateRef<any>;\n\n\t/**\n\t * Common button events\n\t */\n\t@Output() click = new EventEmitter<Event>();\n\t@Output() focus = new EventEmitter<Event>();\n\t@Output() blur = new EventEmitter<Event>();\n\t/**\n\t * Event to emit when click event is fired from tooltip\n\t */\n\t@Output() tooltipClick = new EventEmitter<Event>();\n\n\tprivate classList: { [key: string]: boolean } = {};\n\tprivate attributeList: { [key: string]: string } = {};\n\n\tconstructor(private renderer: Renderer2) {\n\t\tsuper();\n\t}\n\n\tngAfterViewInit(): void {\n\t\t// Set attributes once element is found\n\t\tthis.buttonAttributes = this.attributeList;\n\t}\n\n\t/**\n\t * Stop propogation of click event\n\t * Else double fires (click) event\n\t */\n\temitClickEvent(event, element: \"tooltip\" | \"button\" = \"button\") {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\t// Prevents (click) event from bubbling since it would appear user clicked the `button`\n\t\tif (element === \"tooltip\") {\n\t\t\tthis.tooltipClick.emit(event);\n\t\t\treturn;\n\t\t}\n\t\tthis.click.emit(event);\n\t}\n}\n",
34899
+ "sourceCode": "import {\n\tAfterViewInit,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tInput,\n\tOutput,\n\tRenderer2,\n\tTemplateRef,\n\tViewChild\n} from \"@angular/core\";\nimport { BaseIconButton } from \"./base-icon-button.component\";\nimport { ButtonSize, ButtonType } from \"./button.types\";\n\n/**\n * Get started with importing the module:\n *\n * ```typescript\n * import { ButtonModule } from 'carbon-components-angular';\n * ```\n *\n * [See demo](../../?path=/story/components-button-icon-button--basic)\n */\n@Component({\n\tselector: \"cds-icon-button, ibm-icon-button\",\n\ttemplate: `\n\t<cds-tooltip\n\t\tclass=\"cds--icon-tooltip\"\n\t\t[description]=\"description\"\n\t\t[disabled]=\"showTooltipWhenDisabled ? false : disabled\"\n\t\t[caret]=\"caret\"\n\t\t[dropShadow]=\"dropShadow\"\n\t\t[highContrast]=\"highContrast\"\n\t\t[isOpen]=\"isOpen\"\n\t\t[align]=\"align\"\n\t\t[autoAlign]=\"autoAlign\"\n\t\t[enterDelayMs]=\"enterDelayMs\"\n\t\t[leaveDelayMs]=\"leaveDelayMs\"\n\t\t(click)=\"emitClickEvent($event, 'tooltip')\">\n\t\t<button\n\t\t\t#button\n\t\t\t[id]=\"buttonId\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t[attr.type]=\"type\"\n\t\t\t[iconOnly]=\"true\"\n\t\t\t[ngClass]=\"buttonNgClass\"\n\t\t\t[cdsButton]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[isExpressive]=\"isExpressive\"\n\t\t\t(click)=\"emitClickEvent($event)\"\n\t\t\t(focus)=\"focus.emit($event)\"\n\t\t\t(blur)=\"blur.emit($event)\">\n\t\t\t<ng-content></ng-content>\n\t\t</button>\n\t</cds-tooltip>\n\t`\n})\nexport class IconButton extends BaseIconButton implements AfterViewInit {\n\t/**\n\t * Pass global carbon classes to icon button\n\t */\n\t@Input() set buttonNgClass(obj: { [key: string]: boolean }) {\n\t\tthis.classList = Object.assign({ \"cds--btn--disabled\": this.disabled }, obj);\n\t}\n\n\tget buttonNgClass() {\n\t\treturn this.classList;\n\t}\n\n\t/**\n\t * @param obj: { [key: string]: string\n\t * User can pass additional button attributes if component property does not already exist\n\t * Key is the attribute name & value is the attribute value for the button\n\t */\n\t@Input() set buttonAttributes(obj: { [key: string]: string }) {\n\t\tif (this.button) {\n\t\t\t// Remove old attributes\n\t\t\tObject.keys(this.attributeList).forEach((key: string) => {\n\t\t\t\tthis.renderer.removeAttribute(this.button.nativeElement, key);\n\t\t\t});\n\t\t\t// Set new attributes\n\t\t\tObject.keys(obj).forEach((key: string) => {\n\t\t\t\tthis.renderer.setAttribute(this.button.nativeElement, key, obj[key]);\n\t\t\t});\n\t\t}\n\t\t// Set new attributes\n\t\tthis.attributeList = obj;\n\t}\n\n\tget buttonAttributes() {\n\t\treturn this.buttonAttributes;\n\t}\n\n\tstatic iconButtonCounter = 0;\n\n\t@ViewChild(\"button\") button: ElementRef;\n\n\t/**\n\t * Override id\n\t */\n\t@Input() buttonId = `icon-btn-${IconButton.iconButtonCounter++}`;\n\t/**\n\t * Sets the button type.\n\t */\n\t@Input() kind: ButtonType = \"primary\";\n\t/**\n\t * Specify the size of the button.\n\t */\n\t@Input() size: ButtonSize = \"lg\";\n\t/**\n\t * Set button type, `button` by default\n\t */\n\t@Input() type = \"button\";\n\t/**\n\t * Set to `true` to make button expressive\n\t */\n\t@Input() isExpressive = false;\n\t/**\n\t * Set to `true` to disable button\n\t */\n\t@Input() disabled = false;\n\t/**\n\t * The string or template content to be exposed by the tooltip.\n\t */\n\t@Input() description: string | TemplateRef<any>;\n\t/**\n\t * Indicates whether the tooltip should be shown when the button is disabled\n\t */\n\t@Input() showTooltipWhenDisabled = false;\n\n\t/**\n\t * Common button events\n\t */\n\t@Output() click = new EventEmitter<Event>();\n\t@Output() focus = new EventEmitter<Event>();\n\t@Output() blur = new EventEmitter<Event>();\n\t/**\n\t * Event to emit when click event is fired from tooltip\n\t */\n\t@Output() tooltipClick = new EventEmitter<Event>();\n\n\tprivate classList: { [key: string]: boolean } = {};\n\tprivate attributeList: { [key: string]: string } = {};\n\n\tconstructor(private renderer: Renderer2) {\n\t\tsuper();\n\t}\n\n\tngAfterViewInit(): void {\n\t\t// Set attributes once element is found\n\t\tthis.buttonAttributes = this.attributeList;\n\t}\n\n\t/**\n\t * Stop propogation of click event\n\t * Else double fires (click) event\n\t */\n\temitClickEvent(event, element: \"tooltip\" | \"button\" = \"button\") {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\t// Prevents (click) event from bubbling since it would appear user clicked the `button`\n\t\tif (element === \"tooltip\") {\n\t\t\tthis.tooltipClick.emit(event);\n\t\t\treturn;\n\t\t}\n\t\tthis.click.emit(event);\n\t}\n}\n",
34889
34900
  "assetsDirs": [],
34890
34901
  "styleUrlsData": "",
34891
34902
  "stylesData": "",
@@ -34902,7 +34913,7 @@
34902
34913
  "deprecationMessage": ""
34903
34914
  }
34904
34915
  ],
34905
- "line": 139,
34916
+ "line": 143,
34906
34917
  "jsdoctags": [
34907
34918
  {
34908
34919
  "name": "renderer",
@@ -34982,8 +34993,8 @@
34982
34993
  "jsdoctags": [
34983
34994
  {
34984
34995
  "name": {
34985
- "pos": 1614,
34986
- "end": 1617,
34996
+ "pos": 1648,
34997
+ "end": 1651,
34987
34998
  "flags": 16842752,
34988
34999
  "modifierFlagsCache": 0,
34989
35000
  "transformFlags": 0,
@@ -34994,8 +35005,8 @@
34994
35005
  "deprecated": false,
34995
35006
  "deprecationMessage": "",
34996
35007
  "tagName": {
34997
- "pos": 1608,
34998
- "end": 1613,
35008
+ "pos": 1642,
35009
+ "end": 1647,
34999
35010
  "flags": 16842752,
35000
35011
  "modifierFlagsCache": 0,
35001
35012
  "transformFlags": 0,
@@ -73512,7 +73523,7 @@
73512
73523
  "deprecated": false,
73513
73524
  "deprecationMessage": "",
73514
73525
  "type": "",
73515
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<div style=\"height:3000px\">\n\t\t\tScrolling will update the position of the tooltip:\n\t\t\t<div style=\"position: absolute; top: 500px; left: 500px;\">\n\t\t\t\t<cds-icon-button\n\t\t\t\t\tbuttonId=\"icon-btn1\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t[kind]=\"kind\"\n\t\t\t\t\t[size]=\"size\"\n\t\t\t\t\t[align]=\"align\"\n\t\t\t\t\t[autoAlign]=\"autoAlign\"\n\t\t\t\t\t[isOpen]=\"isOpen\"\n\t\t\t\t\t[buttonNgClass]=\"buttonNgClass\"\n\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t[description]=\"description\"\n\t\t\t\t\t(click)=\"onClick($event)\"\n\t\t\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t\t\t(blur)=\"onBlur($event)\">\n\t\t\t\t\t<svg class=\"cds--btn__icon\" cdsIcon=\"copy\" size=\"16\"></svg>\n\t\t\t\t</cds-icon-button>\n\t\t\t</div>\n\t\t</div>\n\t`\n})"
73526
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<div style=\"height:3000px\">\n\t\t\tScrolling will update the position of the tooltip:\n\t\t\t<div style=\"position: absolute; top: 500px; left: 500px;\">\n\t\t\t\t<cds-icon-button\n\t\t\t\t\tbuttonId=\"icon-btn1\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t[kind]=\"kind\"\n\t\t\t\t\t[size]=\"size\"\n\t\t\t\t\t[align]=\"align\"\n\t\t\t\t\t[autoAlign]=\"autoAlign\"\n\t\t\t\t\t[isOpen]=\"isOpen\"\n\t\t\t\t\t[buttonNgClass]=\"buttonNgClass\"\n\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t[showTooltipWhenDisabled]=\"showTooltipWhenDisabled\"\n\t\t\t\t\t[description]=\"description\"\n\t\t\t\t\t(click)=\"onClick($event)\"\n\t\t\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t\t\t(blur)=\"onBlur($event)\">\n\t\t\t\t\t<svg class=\"cds--btn__icon\" cdsIcon=\"copy\" size=\"16\"></svg>\n\t\t\t\t</cds-icon-button>\n\t\t\t</div>\n\t\t</div>\n\t`\n})"
73516
73527
  },
73517
73528
  {
73518
73529
  "name": "AutoAlignTemplate",
@@ -73578,7 +73589,7 @@
73578
73589
  "name": "Basic",
73579
73590
  "ctype": "miscellaneous",
73580
73591
  "subtype": "variable",
73581
- "file": "src/button/button-set.stories.ts",
73592
+ "file": "src/breadcrumb/breadcrumb.stories.ts",
73582
73593
  "deprecated": false,
73583
73594
  "deprecationMessage": "",
73584
73595
  "type": "",
@@ -73588,7 +73599,7 @@
73588
73599
  "name": "Basic",
73589
73600
  "ctype": "miscellaneous",
73590
73601
  "subtype": "variable",
73591
- "file": "src/button/button.stories.ts",
73602
+ "file": "src/button/button-set.stories.ts",
73592
73603
  "deprecated": false,
73593
73604
  "deprecationMessage": "",
73594
73605
  "type": "",
@@ -73598,7 +73609,7 @@
73598
73609
  "name": "Basic",
73599
73610
  "ctype": "miscellaneous",
73600
73611
  "subtype": "variable",
73601
- "file": "src/button/icon-button.stories.ts",
73612
+ "file": "src/button/button.stories.ts",
73602
73613
  "deprecated": false,
73603
73614
  "deprecationMessage": "",
73604
73615
  "type": "",
@@ -73608,7 +73619,7 @@
73608
73619
  "name": "Basic",
73609
73620
  "ctype": "miscellaneous",
73610
73621
  "subtype": "variable",
73611
- "file": "src/breadcrumb/breadcrumb.stories.ts",
73622
+ "file": "src/button/icon-button.stories.ts",
73612
73623
  "deprecated": false,
73613
73624
  "deprecationMessage": "",
73614
73625
  "type": "",
@@ -76420,41 +76431,41 @@
76420
76431
  "name": "Template",
76421
76432
  "ctype": "miscellaneous",
76422
76433
  "subtype": "variable",
76423
- "file": "src/button/button-set.stories.ts",
76434
+ "file": "src/breadcrumb/breadcrumb.stories.ts",
76424
76435
  "deprecated": false,
76425
76436
  "deprecationMessage": "",
76426
76437
  "type": "",
76427
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-button-set>\n\t\t\t<button cdsButton=\"secondary\" [size]=\"size\" [isExpressive]=\"isExpressive\">Button</button>\n\t\t\t<button cdsButton [size]=\"size\" [isExpressive]=\"isExpressive\">Button</button>\n\t\t</cds-button-set>\n\t`\n})"
76438
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-breadcrumb [noTrailingSlash]=\"noTrailingSlash\">\n\t\t\t<cds-breadcrumb-item href=\"#1\">\n\t\t\t\tBreadcrumb 1\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item href=\"#2\">\n\t\t\t\tBreadcrumb 2\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item href=\"#3\">\n\t\t\t\tBreadcrumb 3\n\t\t\t</cds-breadcrumb-item>\n\t\t</cds-breadcrumb>\n\t`\n})"
76428
76439
  },
76429
76440
  {
76430
76441
  "name": "Template",
76431
76442
  "ctype": "miscellaneous",
76432
76443
  "subtype": "variable",
76433
- "file": "src/button/button.stories.ts",
76444
+ "file": "src/button/button-set.stories.ts",
76434
76445
  "deprecated": false,
76435
76446
  "deprecationMessage": "",
76436
76447
  "type": "",
76437
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<button\n\t\t\t[cdsButton]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[isExpressive]=\"isExpressive\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t(click)=\"onClick($event)\"\n\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t(blur)=\"onBlur($event)\">\n\t\t\tButton\n\t\t</button>\n\t`\n})"
76448
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-button-set>\n\t\t\t<button cdsButton=\"secondary\" [size]=\"size\" [isExpressive]=\"isExpressive\">Button</button>\n\t\t\t<button cdsButton [size]=\"size\" [isExpressive]=\"isExpressive\">Button</button>\n\t\t</cds-button-set>\n\t`\n})"
76438
76449
  },
76439
76450
  {
76440
76451
  "name": "Template",
76441
76452
  "ctype": "miscellaneous",
76442
76453
  "subtype": "variable",
76443
- "file": "src/button/icon-button.stories.ts",
76454
+ "file": "src/button/button.stories.ts",
76444
76455
  "deprecated": false,
76445
76456
  "deprecationMessage": "",
76446
76457
  "type": "",
76447
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-icon-button\n\t\t\tbuttonId=\"icon-btn1\"\n\t\t\ttype=\"button\"\n\t\t\t[kind]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[align]=\"align\"\n\t\t\t[buttonNgClass]=\"buttonNgClass\"\n\t\t\t[buttonAttributes]=\"buttonAttributes\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\tdescription=\"Icon Description\"\n\t\t\t(click)=\"onClick($event)\"\n\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t(blur)=\"onBlur($event)\">\n\t\t\t<svg class=\"cds--btn__icon\" cdsIcon=\"copy\" size=\"16\"></svg>\n\t\t</cds-icon-button>\n\t`\n})"
76458
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<button\n\t\t\t[cdsButton]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[isExpressive]=\"isExpressive\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t(click)=\"onClick($event)\"\n\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t(blur)=\"onBlur($event)\">\n\t\t\tButton\n\t\t</button>\n\t`\n})"
76448
76459
  },
76449
76460
  {
76450
76461
  "name": "Template",
76451
76462
  "ctype": "miscellaneous",
76452
76463
  "subtype": "variable",
76453
- "file": "src/breadcrumb/breadcrumb.stories.ts",
76464
+ "file": "src/button/icon-button.stories.ts",
76454
76465
  "deprecated": false,
76455
76466
  "deprecationMessage": "",
76456
76467
  "type": "",
76457
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-breadcrumb [noTrailingSlash]=\"noTrailingSlash\">\n\t\t\t<cds-breadcrumb-item href=\"#1\">\n\t\t\t\tBreadcrumb 1\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item href=\"#2\">\n\t\t\t\tBreadcrumb 2\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item href=\"#3\">\n\t\t\t\tBreadcrumb 3\n\t\t\t</cds-breadcrumb-item>\n\t\t</cds-breadcrumb>\n\t`\n})"
76468
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-icon-button\n\t\t\tbuttonId=\"icon-btn1\"\n\t\t\ttype=\"button\"\n\t\t\t[kind]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[align]=\"align\"\n\t\t\t[buttonNgClass]=\"buttonNgClass\"\n\t\t\t[buttonAttributes]=\"buttonAttributes\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t[showTooltipWhenDisabled]=\"showTooltipWhenDisabled\"\n\t\t\tdescription=\"Icon Description\"\n\t\t\t(click)=\"onClick($event)\"\n\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t(blur)=\"onBlur($event)\">\n\t\t\t<svg class=\"cds--btn__icon\" cdsIcon=\"copy\" size=\"16\"></svg>\n\t\t</cds-icon-button>\n\t`\n})"
76458
76469
  },
76459
76470
  {
76460
76471
  "name": "Template",
@@ -79755,7 +79766,7 @@
79755
79766
  "deprecated": false,
79756
79767
  "deprecationMessage": "",
79757
79768
  "type": "",
79758
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<div style=\"height:3000px\">\n\t\t\tScrolling will update the position of the tooltip:\n\t\t\t<div style=\"position: absolute; top: 500px; left: 500px;\">\n\t\t\t\t<cds-icon-button\n\t\t\t\t\tbuttonId=\"icon-btn1\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t[kind]=\"kind\"\n\t\t\t\t\t[size]=\"size\"\n\t\t\t\t\t[align]=\"align\"\n\t\t\t\t\t[autoAlign]=\"autoAlign\"\n\t\t\t\t\t[isOpen]=\"isOpen\"\n\t\t\t\t\t[buttonNgClass]=\"buttonNgClass\"\n\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t[description]=\"description\"\n\t\t\t\t\t(click)=\"onClick($event)\"\n\t\t\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t\t\t(blur)=\"onBlur($event)\">\n\t\t\t\t\t<svg class=\"cds--btn__icon\" cdsIcon=\"copy\" size=\"16\"></svg>\n\t\t\t\t</cds-icon-button>\n\t\t\t</div>\n\t\t</div>\n\t`\n})"
79769
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<div style=\"height:3000px\">\n\t\t\tScrolling will update the position of the tooltip:\n\t\t\t<div style=\"position: absolute; top: 500px; left: 500px;\">\n\t\t\t\t<cds-icon-button\n\t\t\t\t\tbuttonId=\"icon-btn1\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t[kind]=\"kind\"\n\t\t\t\t\t[size]=\"size\"\n\t\t\t\t\t[align]=\"align\"\n\t\t\t\t\t[autoAlign]=\"autoAlign\"\n\t\t\t\t\t[isOpen]=\"isOpen\"\n\t\t\t\t\t[buttonNgClass]=\"buttonNgClass\"\n\t\t\t\t\t[disabled]=\"disabled\"\n\t\t\t\t\t[showTooltipWhenDisabled]=\"showTooltipWhenDisabled\"\n\t\t\t\t\t[description]=\"description\"\n\t\t\t\t\t(click)=\"onClick($event)\"\n\t\t\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t\t\t(blur)=\"onBlur($event)\">\n\t\t\t\t\t<svg class=\"cds--btn__icon\" cdsIcon=\"copy\" size=\"16\"></svg>\n\t\t\t\t</cds-icon-button>\n\t\t\t</div>\n\t\t</div>\n\t`\n})"
79759
79770
  },
79760
79771
  {
79761
79772
  "name": "Basic",
@@ -79775,7 +79786,7 @@
79775
79786
  "deprecated": false,
79776
79787
  "deprecationMessage": "",
79777
79788
  "type": "",
79778
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-icon-button\n\t\t\tbuttonId=\"icon-btn1\"\n\t\t\ttype=\"button\"\n\t\t\t[kind]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[align]=\"align\"\n\t\t\t[buttonNgClass]=\"buttonNgClass\"\n\t\t\t[buttonAttributes]=\"buttonAttributes\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\tdescription=\"Icon Description\"\n\t\t\t(click)=\"onClick($event)\"\n\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t(blur)=\"onBlur($event)\">\n\t\t\t<svg class=\"cds--btn__icon\" cdsIcon=\"copy\" size=\"16\"></svg>\n\t\t</cds-icon-button>\n\t`\n})"
79789
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-icon-button\n\t\t\tbuttonId=\"icon-btn1\"\n\t\t\ttype=\"button\"\n\t\t\t[kind]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[align]=\"align\"\n\t\t\t[buttonNgClass]=\"buttonNgClass\"\n\t\t\t[buttonAttributes]=\"buttonAttributes\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t[showTooltipWhenDisabled]=\"showTooltipWhenDisabled\"\n\t\t\tdescription=\"Icon Description\"\n\t\t\t(click)=\"onClick($event)\"\n\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t(blur)=\"onBlur($event)\">\n\t\t\t<svg class=\"cds--btn__icon\" cdsIcon=\"copy\" size=\"16\"></svg>\n\t\t</cds-icon-button>\n\t`\n})"
79779
79790
  },
79780
79791
  {
79781
79792
  "name": "WithAutoAlign",
@@ -80230,199 +80241,199 @@
80230
80241
  "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<div style=\"width: 500px\">\n\t\t\t<cds-accordion>\n\t\t\t\t<cds-accordion-item [title]=\"title\" (selected)=\"selected($event)\">\n\t\t\t\t\tLorem ipsum dolor sit amet, \\\n\t\t\t\t\tconsectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore \\\n\t\t\t\t\tet dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation \\\n\t\t\t\t\tullamco laboris nisi ut aliquip ex ea commodo consequat.\n\t\t\t\t</cds-accordion-item>\n\t\t\t\t<cds-accordion-item [title]=\"titleWithContext\" [context]=\"{ index: 2 }\" (selected)=\"selected($event)\">\n\t\t\t\t\tLorem ipsum dolor sit amet, \\\n\t\t\t\t\tconsectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore \\\n\t\t\t\t\tet dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation \\\n\t\t\t\t\tullamco laboris nisi ut aliquip ex ea commodo consequat.\n\t\t\t\t</cds-accordion-item>\n\t\t\t</cds-accordion>\n\t\t</div>\n\t\t<ng-template #title>\n\t\t\t<p class=\"cds--accordion__title\">Section 1 title</p>\n\t\t</ng-template>\n\t\t<ng-template #titleWithContext let-index=\"index\">\n\t\t\t<p class=\"cds--accordion__title\">Section {{ index }} title</p>\n\t\t</ng-template>\n\t`\n})"
80231
80242
  }
80232
80243
  ],
80233
- "src/button/button-set.stories.ts": [
80244
+ "src/breadcrumb/breadcrumb.stories.ts": [
80234
80245
  {
80235
80246
  "name": "Basic",
80236
80247
  "ctype": "miscellaneous",
80237
80248
  "subtype": "variable",
80238
- "file": "src/button/button-set.stories.ts",
80249
+ "file": "src/breadcrumb/breadcrumb.stories.ts",
80239
80250
  "deprecated": false,
80240
80251
  "deprecationMessage": "",
80241
80252
  "type": "",
80242
80253
  "defaultValue": "Template.bind({})"
80243
80254
  },
80244
80255
  {
80245
- "name": "Template",
80256
+ "name": "breadcrumbItems",
80246
80257
  "ctype": "miscellaneous",
80247
80258
  "subtype": "variable",
80248
- "file": "src/button/button-set.stories.ts",
80259
+ "file": "src/breadcrumb/breadcrumb.stories.ts",
80249
80260
  "deprecated": false,
80250
80261
  "deprecationMessage": "",
80251
- "type": "",
80252
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-button-set>\n\t\t\t<button cdsButton=\"secondary\" [size]=\"size\" [isExpressive]=\"isExpressive\">Button</button>\n\t\t\t<button cdsButton [size]=\"size\" [isExpressive]=\"isExpressive\">Button</button>\n\t\t</cds-button-set>\n\t`\n})"
80253
- }
80254
- ],
80255
- "src/button/button.stories.ts": [
80262
+ "type": ""
80263
+ },
80256
80264
  {
80257
- "name": "Basic",
80265
+ "name": "createBreadcrumbItems",
80258
80266
  "ctype": "miscellaneous",
80259
80267
  "subtype": "variable",
80260
- "file": "src/button/button.stories.ts",
80268
+ "file": "src/breadcrumb/breadcrumb.stories.ts",
80261
80269
  "deprecated": false,
80262
80270
  "deprecationMessage": "",
80263
80271
  "type": "",
80264
- "defaultValue": "Template.bind({})"
80272
+ "defaultValue": "(count: number, content = \"Breadcrumb\"): Array<BreadcrumbItem> => {\n\tif (breadcrumbItems && count === breadcrumbItems.length) {\n\t\treturn breadcrumbItems;\n\t}\n\tbreadcrumbItems = Array(count).fill(0).map((x, i) => ({\n\t\tcontent: `${content} ${i + 1}`,\n\t\thref: \"#\" + (i + 1)\n\t}));\n\treturn breadcrumbItems;\n}"
80265
80273
  },
80266
80274
  {
80267
- "name": "Template",
80275
+ "name": "CurrentPage",
80268
80276
  "ctype": "miscellaneous",
80269
80277
  "subtype": "variable",
80270
- "file": "src/button/button.stories.ts",
80278
+ "file": "src/breadcrumb/breadcrumb.stories.ts",
80271
80279
  "deprecated": false,
80272
80280
  "deprecationMessage": "",
80273
80281
  "type": "",
80274
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<button\n\t\t\t[cdsButton]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[isExpressive]=\"isExpressive\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t(click)=\"onClick($event)\"\n\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t(blur)=\"onBlur($event)\">\n\t\t\tButton\n\t\t</button>\n\t`\n})"
80282
+ "defaultValue": "CurrentPageTemplate.bind({})"
80275
80283
  },
80276
80284
  {
80277
- "name": "WithIcon",
80285
+ "name": "CurrentPageTemplate",
80278
80286
  "ctype": "miscellaneous",
80279
80287
  "subtype": "variable",
80280
- "file": "src/button/button.stories.ts",
80288
+ "file": "src/breadcrumb/breadcrumb.stories.ts",
80281
80289
  "deprecated": false,
80282
80290
  "deprecationMessage": "",
80283
80291
  "type": "",
80284
- "defaultValue": "WithIconTemplate.bind({})"
80292
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-breadcrumb>\n\t\t\t<cds-breadcrumb-item href=\"#1\">\n\t\t\t\tBreadcrumb 1\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item href=\"#2\">\n\t\t\t\tBreadcrumb 2\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item current=\"true\" href=\"#3\">\n\t\t\t\tBreadcrumb 3\n\t\t\t</cds-breadcrumb-item>\n\t\t</cds-breadcrumb>\n\t`\n})"
80285
80293
  },
80286
80294
  {
80287
- "name": "WithIconTemplate",
80295
+ "name": "Model",
80288
80296
  "ctype": "miscellaneous",
80289
80297
  "subtype": "variable",
80290
- "file": "src/button/button.stories.ts",
80298
+ "file": "src/breadcrumb/breadcrumb.stories.ts",
80291
80299
  "deprecated": false,
80292
80300
  "deprecationMessage": "",
80293
80301
  "type": "",
80294
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<button\n\t\t\t[cdsButton]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[isExpressive]=\"isExpressive\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t(click)=\"onClick($event)\"\n\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t(mouseleave)=\"onMouseleave($event)\"\n\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t(blur)=\"onBlur($event)\">\n\t\t\tWith icon\n\t\t\t<svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n\t\t</button>\n\t`\n})"
80295
- }
80296
- ],
80297
- "src/breadcrumb/breadcrumb.stories.ts": [
80302
+ "defaultValue": "ModelTemplate.bind({})"
80303
+ },
80298
80304
  {
80299
- "name": "Basic",
80305
+ "name": "ModelTemplate",
80300
80306
  "ctype": "miscellaneous",
80301
80307
  "subtype": "variable",
80302
80308
  "file": "src/breadcrumb/breadcrumb.stories.ts",
80303
80309
  "deprecated": false,
80304
80310
  "deprecationMessage": "",
80305
80311
  "type": "",
80306
- "defaultValue": "Template.bind({})"
80312
+ "defaultValue": "(args) => ({\n\tprops: {\n\t\t...args,\n\t\tcreateBreadcrumbItems\n\t},\n\ttemplate: `\n\t\t<cds-breadcrumb\n\t\t\t[noTrailingSlash]=\"noTrailingSlash\"\n\t\t\t[threshold]=\"threshold\"\n\t\t\t[items]=\"createBreadcrumbItems(itemCount, content)\">\n\t\t</cds-breadcrumb>\n\t`\n})"
80307
80313
  },
80308
80314
  {
80309
- "name": "breadcrumbItems",
80315
+ "name": "ModelWithTemplate",
80310
80316
  "ctype": "miscellaneous",
80311
80317
  "subtype": "variable",
80312
80318
  "file": "src/breadcrumb/breadcrumb.stories.ts",
80313
80319
  "deprecated": false,
80314
80320
  "deprecationMessage": "",
80315
- "type": ""
80321
+ "type": "",
80322
+ "defaultValue": "ModelWTemplate.bind({})"
80316
80323
  },
80317
80324
  {
80318
- "name": "createBreadcrumbItems",
80325
+ "name": "ModelWTemplate",
80319
80326
  "ctype": "miscellaneous",
80320
80327
  "subtype": "variable",
80321
80328
  "file": "src/breadcrumb/breadcrumb.stories.ts",
80322
80329
  "deprecated": false,
80323
80330
  "deprecationMessage": "",
80324
80331
  "type": "",
80325
- "defaultValue": "(count: number, content = \"Breadcrumb\"): Array<BreadcrumbItem> => {\n\tif (breadcrumbItems && count === breadcrumbItems.length) {\n\t\treturn breadcrumbItems;\n\t}\n\tbreadcrumbItems = Array(count).fill(0).map((x, i) => ({\n\t\tcontent: `${content} ${i + 1}`,\n\t\thref: \"#\" + (i + 1)\n\t}));\n\treturn breadcrumbItems;\n}"
80332
+ "defaultValue": "(args) => ({\n\tprops: {\n\t\t...args,\n\t\tcreateBreadcrumbItems,\n\t\twithTemplate\n\t},\n\ttemplate: `\n\t\t<ng-template #breadcrumbTemplate let-item>\n\t\t\t{{ templateContent }}{{ item.content }}\n\t\t</ng-template>\n\t\t<cds-breadcrumb\n\t\t\t[noTrailingSlash]=\"noTrailingSlash\"\n\t\t\t[threshold]=\"threshold\"\n\t\t\t[items]=\"withTemplate(breadcrumbTemplate, createBreadcrumbItems(itemCount, content))\">\n\t\t</cds-breadcrumb>\n\t`\n})"
80326
80333
  },
80327
80334
  {
80328
- "name": "CurrentPage",
80335
+ "name": "Skeleton",
80329
80336
  "ctype": "miscellaneous",
80330
80337
  "subtype": "variable",
80331
80338
  "file": "src/breadcrumb/breadcrumb.stories.ts",
80332
80339
  "deprecated": false,
80333
80340
  "deprecationMessage": "",
80334
80341
  "type": "",
80335
- "defaultValue": "CurrentPageTemplate.bind({})"
80342
+ "defaultValue": "WithSkeleton.bind({})"
80336
80343
  },
80337
80344
  {
80338
- "name": "CurrentPageTemplate",
80345
+ "name": "Template",
80339
80346
  "ctype": "miscellaneous",
80340
80347
  "subtype": "variable",
80341
80348
  "file": "src/breadcrumb/breadcrumb.stories.ts",
80342
80349
  "deprecated": false,
80343
80350
  "deprecationMessage": "",
80344
80351
  "type": "",
80345
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-breadcrumb>\n\t\t\t<cds-breadcrumb-item href=\"#1\">\n\t\t\t\tBreadcrumb 1\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item href=\"#2\">\n\t\t\t\tBreadcrumb 2\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item current=\"true\" href=\"#3\">\n\t\t\t\tBreadcrumb 3\n\t\t\t</cds-breadcrumb-item>\n\t\t</cds-breadcrumb>\n\t`\n})"
80352
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-breadcrumb [noTrailingSlash]=\"noTrailingSlash\">\n\t\t\t<cds-breadcrumb-item href=\"#1\">\n\t\t\t\tBreadcrumb 1\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item href=\"#2\">\n\t\t\t\tBreadcrumb 2\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item href=\"#3\">\n\t\t\t\tBreadcrumb 3\n\t\t\t</cds-breadcrumb-item>\n\t\t</cds-breadcrumb>\n\t`\n})"
80346
80353
  },
80347
80354
  {
80348
- "name": "Model",
80355
+ "name": "WithSkeleton",
80349
80356
  "ctype": "miscellaneous",
80350
80357
  "subtype": "variable",
80351
80358
  "file": "src/breadcrumb/breadcrumb.stories.ts",
80352
80359
  "deprecated": false,
80353
80360
  "deprecationMessage": "",
80354
80361
  "type": "",
80355
- "defaultValue": "ModelTemplate.bind({})"
80362
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-breadcrumb skeleton=\"true\" [noTrailingSlash]=\"noTrailingSlash\">\n\t\t\t<cds-breadcrumb-item></cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item></cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item></cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item></cds-breadcrumb-item>\n\t\t</cds-breadcrumb>\n\t`\n})"
80356
80363
  },
80357
80364
  {
80358
- "name": "ModelTemplate",
80365
+ "name": "withTemplate",
80359
80366
  "ctype": "miscellaneous",
80360
80367
  "subtype": "variable",
80361
80368
  "file": "src/breadcrumb/breadcrumb.stories.ts",
80362
80369
  "deprecated": false,
80363
80370
  "deprecationMessage": "",
80364
80371
  "type": "",
80365
- "defaultValue": "(args) => ({\n\tprops: {\n\t\t...args,\n\t\tcreateBreadcrumbItems\n\t},\n\ttemplate: `\n\t\t<cds-breadcrumb\n\t\t\t[noTrailingSlash]=\"noTrailingSlash\"\n\t\t\t[threshold]=\"threshold\"\n\t\t\t[items]=\"createBreadcrumbItems(itemCount, content)\">\n\t\t</cds-breadcrumb>\n\t`\n})"
80366
- },
80372
+ "defaultValue": "(templateRef, items) => items.map(item => Object.assign(item, { template: templateRef }))"
80373
+ }
80374
+ ],
80375
+ "src/button/button-set.stories.ts": [
80367
80376
  {
80368
- "name": "ModelWithTemplate",
80377
+ "name": "Basic",
80369
80378
  "ctype": "miscellaneous",
80370
80379
  "subtype": "variable",
80371
- "file": "src/breadcrumb/breadcrumb.stories.ts",
80380
+ "file": "src/button/button-set.stories.ts",
80372
80381
  "deprecated": false,
80373
80382
  "deprecationMessage": "",
80374
80383
  "type": "",
80375
- "defaultValue": "ModelWTemplate.bind({})"
80384
+ "defaultValue": "Template.bind({})"
80376
80385
  },
80377
80386
  {
80378
- "name": "ModelWTemplate",
80387
+ "name": "Template",
80379
80388
  "ctype": "miscellaneous",
80380
80389
  "subtype": "variable",
80381
- "file": "src/breadcrumb/breadcrumb.stories.ts",
80390
+ "file": "src/button/button-set.stories.ts",
80382
80391
  "deprecated": false,
80383
80392
  "deprecationMessage": "",
80384
80393
  "type": "",
80385
- "defaultValue": "(args) => ({\n\tprops: {\n\t\t...args,\n\t\tcreateBreadcrumbItems,\n\t\twithTemplate\n\t},\n\ttemplate: `\n\t\t<ng-template #breadcrumbTemplate let-item>\n\t\t\t{{ templateContent }}{{ item.content }}\n\t\t</ng-template>\n\t\t<cds-breadcrumb\n\t\t\t[noTrailingSlash]=\"noTrailingSlash\"\n\t\t\t[threshold]=\"threshold\"\n\t\t\t[items]=\"withTemplate(breadcrumbTemplate, createBreadcrumbItems(itemCount, content))\">\n\t\t</cds-breadcrumb>\n\t`\n})"
80386
- },
80394
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-button-set>\n\t\t\t<button cdsButton=\"secondary\" [size]=\"size\" [isExpressive]=\"isExpressive\">Button</button>\n\t\t\t<button cdsButton [size]=\"size\" [isExpressive]=\"isExpressive\">Button</button>\n\t\t</cds-button-set>\n\t`\n})"
80395
+ }
80396
+ ],
80397
+ "src/button/button.stories.ts": [
80387
80398
  {
80388
- "name": "Skeleton",
80399
+ "name": "Basic",
80389
80400
  "ctype": "miscellaneous",
80390
80401
  "subtype": "variable",
80391
- "file": "src/breadcrumb/breadcrumb.stories.ts",
80402
+ "file": "src/button/button.stories.ts",
80392
80403
  "deprecated": false,
80393
80404
  "deprecationMessage": "",
80394
80405
  "type": "",
80395
- "defaultValue": "WithSkeleton.bind({})"
80406
+ "defaultValue": "Template.bind({})"
80396
80407
  },
80397
80408
  {
80398
80409
  "name": "Template",
80399
80410
  "ctype": "miscellaneous",
80400
80411
  "subtype": "variable",
80401
- "file": "src/breadcrumb/breadcrumb.stories.ts",
80412
+ "file": "src/button/button.stories.ts",
80402
80413
  "deprecated": false,
80403
80414
  "deprecationMessage": "",
80404
80415
  "type": "",
80405
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-breadcrumb [noTrailingSlash]=\"noTrailingSlash\">\n\t\t\t<cds-breadcrumb-item href=\"#1\">\n\t\t\t\tBreadcrumb 1\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item href=\"#2\">\n\t\t\t\tBreadcrumb 2\n\t\t\t</cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item href=\"#3\">\n\t\t\t\tBreadcrumb 3\n\t\t\t</cds-breadcrumb-item>\n\t\t</cds-breadcrumb>\n\t`\n})"
80416
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<button\n\t\t\t[cdsButton]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[isExpressive]=\"isExpressive\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t(click)=\"onClick($event)\"\n\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t(mouseleave)=\"onMouseLeave($event)\"\n\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t(blur)=\"onBlur($event)\">\n\t\t\tButton\n\t\t</button>\n\t`\n})"
80406
80417
  },
80407
80418
  {
80408
- "name": "WithSkeleton",
80419
+ "name": "WithIcon",
80409
80420
  "ctype": "miscellaneous",
80410
80421
  "subtype": "variable",
80411
- "file": "src/breadcrumb/breadcrumb.stories.ts",
80422
+ "file": "src/button/button.stories.ts",
80412
80423
  "deprecated": false,
80413
80424
  "deprecationMessage": "",
80414
80425
  "type": "",
80415
- "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<cds-breadcrumb skeleton=\"true\" [noTrailingSlash]=\"noTrailingSlash\">\n\t\t\t<cds-breadcrumb-item></cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item></cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item></cds-breadcrumb-item>\n\t\t\t<cds-breadcrumb-item></cds-breadcrumb-item>\n\t\t</cds-breadcrumb>\n\t`\n})"
80426
+ "defaultValue": "WithIconTemplate.bind({})"
80416
80427
  },
80417
80428
  {
80418
- "name": "withTemplate",
80429
+ "name": "WithIconTemplate",
80419
80430
  "ctype": "miscellaneous",
80420
80431
  "subtype": "variable",
80421
- "file": "src/breadcrumb/breadcrumb.stories.ts",
80432
+ "file": "src/button/button.stories.ts",
80422
80433
  "deprecated": false,
80423
80434
  "deprecationMessage": "",
80424
80435
  "type": "",
80425
- "defaultValue": "(templateRef, items) => items.map(item => Object.assign(item, { template: templateRef }))"
80436
+ "defaultValue": "(args) => ({\n\tprops: args,\n\ttemplate: `\n\t\t<button\n\t\t\t[cdsButton]=\"kind\"\n\t\t\t[size]=\"size\"\n\t\t\t[isExpressive]=\"isExpressive\"\n\t\t\t[disabled]=\"disabled\"\n\t\t\t(click)=\"onClick($event)\"\n\t\t\t(mouseenter)=\"onMouseEnter($event)\"\n\t\t\t(mouseleave)=\"onMouseleave($event)\"\n\t\t\t(focus)=\"onFocus($event)\"\n\t\t\t(blur)=\"onBlur($event)\">\n\t\t\tWith icon\n\t\t\t<svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n\t\t</button>\n\t`\n})"
80426
80437
  }
80427
80438
  ],
80428
80439
  "src/checkbox/checkbox.stories.ts": [
@@ -85690,8 +85701,8 @@
85690
85701
  "type": "component",
85691
85702
  "linktype": "component",
85692
85703
  "name": "IconButton",
85693
- "coveragePercent": 76,
85694
- "coverageCount": "20/26",
85704
+ "coveragePercent": 77,
85705
+ "coverageCount": "21/27",
85695
85706
  "status": "very-good"
85696
85707
  },
85697
85708
  {