@ukic/canary-web-components 2.0.0-canary.28 → 2.0.0-canary.29

Sign up to get free protection for your applications and to get access to all the features.
Files changed (178) hide show
  1. package/dist/cjs/core.cjs.js +1 -1
  2. package/dist/cjs/ic-checkbox.cjs.entry.js.map +1 -1
  3. package/dist/cjs/ic-data-table.cjs.entry.js +62 -8
  4. package/dist/cjs/ic-data-table.cjs.entry.js.map +1 -1
  5. package/dist/cjs/ic-date-input.cjs.entry.js +3 -2
  6. package/dist/cjs/ic-date-input.cjs.entry.js.map +1 -1
  7. package/dist/cjs/ic-horizontal-scroll.cjs.entry.js +3 -2
  8. package/dist/cjs/ic-horizontal-scroll.cjs.entry.js.map +1 -1
  9. package/dist/cjs/ic-menu-group.cjs.entry.js +1 -1
  10. package/dist/cjs/ic-menu-group.cjs.entry.js.map +1 -1
  11. package/dist/cjs/ic-menu-item.cjs.entry.js +10 -6
  12. package/dist/cjs/ic-menu-item.cjs.entry.js.map +1 -1
  13. package/dist/cjs/ic-menu.cjs.entry.js +3 -2
  14. package/dist/cjs/ic-menu.cjs.entry.js.map +1 -1
  15. package/dist/cjs/ic-navigation-group.cjs.entry.js +3 -2
  16. package/dist/cjs/ic-navigation-group.cjs.entry.js.map +1 -1
  17. package/dist/cjs/ic-navigation-item.cjs.entry.js +28 -1
  18. package/dist/cjs/ic-navigation-item.cjs.entry.js.map +1 -1
  19. package/dist/cjs/ic-pagination_4.cjs.entry.js.map +1 -1
  20. package/dist/cjs/ic-popover-menu.cjs.entry.js +3 -3
  21. package/dist/cjs/ic-popover-menu.cjs.entry.js.map +1 -1
  22. package/dist/cjs/ic-side-navigation.cjs.entry.js +2 -1
  23. package/dist/cjs/ic-side-navigation.cjs.entry.js.map +1 -1
  24. package/dist/cjs/ic-tab-context.cjs.entry.js +2 -1
  25. package/dist/cjs/ic-tab-context.cjs.entry.js.map +1 -1
  26. package/dist/cjs/ic-toggle-button-group.cjs.entry.js +1 -1
  27. package/dist/cjs/ic-toggle-button-group.cjs.entry.js.map +1 -1
  28. package/dist/cjs/ic-tree-item.cjs.entry.js +3 -1
  29. package/dist/cjs/ic-tree-item.cjs.entry.js.map +1 -1
  30. package/dist/cjs/loader.cjs.js +1 -1
  31. package/dist/collection/components/ic-data-table/ic-data-table.css +20 -0
  32. package/dist/collection/components/ic-data-table/ic-data-table.js +82 -8
  33. package/dist/collection/components/ic-data-table/ic-data-table.js.map +1 -1
  34. package/dist/collection/components/ic-data-table/story-data.js +7 -0
  35. package/dist/collection/components/ic-data-table/story-data.js.map +1 -1
  36. package/dist/collection/components/ic-data-table/test/basic/ic-data-table.spec.js +17 -0
  37. package/dist/collection/components/ic-data-table/test/basic/ic-data-table.spec.js.map +1 -1
  38. package/dist/collection/components/ic-date-input/ic-date-input.css +4 -0
  39. package/dist/collection/components/ic-date-input/ic-date-input.js +2 -1
  40. package/dist/collection/components/ic-date-input/ic-date-input.js.map +1 -1
  41. package/dist/collection/components/ic-tree-item/ic-tree-item.js +3 -1
  42. package/dist/collection/components/ic-tree-item/ic-tree-item.js.map +1 -1
  43. package/dist/components/helpers2.js +1 -1
  44. package/dist/components/ic-checkbox.js.map +1 -1
  45. package/dist/components/ic-data-table.js +65 -9
  46. package/dist/components/ic-data-table.js.map +1 -1
  47. package/dist/components/ic-date-input2.js +3 -2
  48. package/dist/components/ic-date-input2.js.map +1 -1
  49. package/dist/components/ic-horizontal-scroll2.js +3 -2
  50. package/dist/components/ic-horizontal-scroll2.js.map +1 -1
  51. package/dist/components/ic-menu-group.js +1 -1
  52. package/dist/components/ic-menu-group.js.map +1 -1
  53. package/dist/components/ic-menu-item2.js +12 -8
  54. package/dist/components/ic-menu-item2.js.map +1 -1
  55. package/dist/components/ic-menu2.js +3 -2
  56. package/dist/components/ic-menu2.js.map +1 -1
  57. package/dist/components/ic-navigation-group.js +3 -2
  58. package/dist/components/ic-navigation-group.js.map +1 -1
  59. package/dist/components/ic-navigation-item.js +30 -2
  60. package/dist/components/ic-navigation-item.js.map +1 -1
  61. package/dist/components/ic-pagination-bar2.js +1 -1
  62. package/dist/components/ic-popover-menu.js +3 -3
  63. package/dist/components/ic-popover-menu.js.map +1 -1
  64. package/dist/components/ic-select2.js.map +1 -1
  65. package/dist/components/ic-side-navigation.js +2 -1
  66. package/dist/components/ic-side-navigation.js.map +1 -1
  67. package/dist/components/ic-tab-context.js +2 -1
  68. package/dist/components/ic-tab-context.js.map +1 -1
  69. package/dist/components/ic-text-field2.js.map +1 -1
  70. package/dist/components/ic-toggle-button-group.js +1 -1
  71. package/dist/components/ic-toggle-button-group.js.map +1 -1
  72. package/dist/components/ic-tree-item.js +3 -1
  73. package/dist/components/ic-tree-item.js.map +1 -1
  74. package/dist/core/core.esm.js +1 -1
  75. package/dist/core/core.esm.js.map +1 -1
  76. package/dist/core/p-09746a07.entry.js +2 -0
  77. package/dist/core/p-09746a07.entry.js.map +1 -0
  78. package/dist/core/p-097bfd3f.entry.js +2 -0
  79. package/dist/core/{p-fc76d510.entry.js.map → p-097bfd3f.entry.js.map} +1 -1
  80. package/dist/core/{p-d02a4d1b.entry.js → p-0cba186f.entry.js} +2 -2
  81. package/dist/core/{p-d02a4d1b.entry.js.map → p-0cba186f.entry.js.map} +1 -1
  82. package/dist/core/{p-5741a8bf.entry.js → p-1a317582.entry.js} +2 -2
  83. package/dist/core/p-1f262ffe.entry.js +2 -0
  84. package/dist/core/p-1f262ffe.entry.js.map +1 -0
  85. package/dist/core/p-2ecedbe5.entry.js.map +1 -1
  86. package/dist/core/p-3848f199.entry.js +2 -0
  87. package/dist/core/p-3848f199.entry.js.map +1 -0
  88. package/dist/core/{p-7435de65.js → p-40510c97.js} +2 -2
  89. package/dist/core/{p-a7794aa9.entry.js → p-4352b9c5.entry.js} +2 -2
  90. package/dist/core/p-4352b9c5.entry.js.map +1 -0
  91. package/dist/core/{p-6358925c.entry.js → p-43a2cad3.entry.js} +2 -2
  92. package/dist/core/{p-6358925c.entry.js.map → p-43a2cad3.entry.js.map} +1 -1
  93. package/dist/core/{p-07e4b89b.entry.js → p-4fd35690.entry.js} +2 -2
  94. package/dist/core/{p-7ee62798.entry.js → p-810561ab.entry.js} +2 -2
  95. package/dist/core/{p-d8322108.entry.js → p-9b70d4f8.entry.js} +2 -2
  96. package/dist/core/p-9b70d4f8.entry.js.map +1 -0
  97. package/dist/core/{p-3ce541df.entry.js → p-cf4572c9.entry.js} +2 -2
  98. package/dist/core/{p-6ca98c5d.entry.js → p-d56248df.entry.js} +2 -2
  99. package/dist/core/p-d56248df.entry.js.map +1 -0
  100. package/dist/core/{p-6b01e096.entry.js → p-d56593cc.entry.js} +2 -2
  101. package/dist/core/p-d56593cc.entry.js.map +1 -0
  102. package/dist/core/{p-d10e81f3.entry.js → p-dcb7d549.entry.js} +2 -2
  103. package/dist/core/p-dcb7d549.entry.js.map +1 -0
  104. package/dist/core/{p-d86cdbc8.entry.js → p-de630a67.entry.js} +2 -2
  105. package/dist/core/p-de630a67.entry.js.map +1 -0
  106. package/dist/core/p-e210f51a.entry.js.map +1 -1
  107. package/dist/core/{p-b03d14fc.entry.js → p-e35d6d78.entry.js} +2 -2
  108. package/dist/core/{p-89c7ea3e.entry.js → p-f39cf43c.entry.js} +2 -2
  109. package/dist/core/p-f39cf43c.entry.js.map +1 -0
  110. package/dist/core/{p-3ef5017d.entry.js → p-f4e57aaf.entry.js} +2 -2
  111. package/dist/core/p-f4e57aaf.entry.js.map +1 -0
  112. package/dist/core/{p-ac591209.entry.js → p-f6a93c4d.entry.js} +2 -2
  113. package/dist/esm/core.js +1 -1
  114. package/dist/esm/{helpers-c24d4455.js → helpers-e0c3e667.js} +2 -2
  115. package/dist/esm/{helpers-c24d4455.js.map → helpers-e0c3e667.js.map} +1 -1
  116. package/dist/esm/ic-card-horizontal.entry.js +1 -1
  117. package/dist/esm/ic-checkbox.entry.js.map +1 -1
  118. package/dist/esm/ic-data-table-title-bar.entry.js +1 -1
  119. package/dist/esm/ic-data-table.entry.js +63 -9
  120. package/dist/esm/ic-data-table.entry.js.map +1 -1
  121. package/dist/esm/ic-date-input.entry.js +4 -3
  122. package/dist/esm/ic-date-input.entry.js.map +1 -1
  123. package/dist/esm/ic-date-picker.entry.js +1 -1
  124. package/dist/esm/ic-empty-state_2.entry.js +1 -1
  125. package/dist/esm/ic-horizontal-scroll.entry.js +3 -2
  126. package/dist/esm/ic-horizontal-scroll.entry.js.map +1 -1
  127. package/dist/esm/ic-menu-group.entry.js +1 -1
  128. package/dist/esm/ic-menu-group.entry.js.map +1 -1
  129. package/dist/esm/ic-menu-item.entry.js +10 -6
  130. package/dist/esm/ic-menu-item.entry.js.map +1 -1
  131. package/dist/esm/ic-menu-with-multi.entry.js +1 -1
  132. package/dist/esm/ic-menu.entry.js +3 -2
  133. package/dist/esm/ic-menu.entry.js.map +1 -1
  134. package/dist/esm/ic-navigation-group.entry.js +3 -2
  135. package/dist/esm/ic-navigation-group.entry.js.map +1 -1
  136. package/dist/esm/ic-navigation-item.entry.js +29 -2
  137. package/dist/esm/ic-navigation-item.entry.js.map +1 -1
  138. package/dist/esm/ic-pagination_4.entry.js.map +1 -1
  139. package/dist/esm/ic-popover-menu.entry.js +3 -3
  140. package/dist/esm/ic-popover-menu.entry.js.map +1 -1
  141. package/dist/esm/ic-select-with-multi.entry.js +1 -1
  142. package/dist/esm/ic-side-navigation.entry.js +2 -1
  143. package/dist/esm/ic-side-navigation.entry.js.map +1 -1
  144. package/dist/esm/ic-tab-context.entry.js +2 -1
  145. package/dist/esm/ic-tab-context.entry.js.map +1 -1
  146. package/dist/esm/ic-toggle-button-group.entry.js +1 -1
  147. package/dist/esm/ic-toggle-button-group.entry.js.map +1 -1
  148. package/dist/esm/ic-tree-item.entry.js +4 -2
  149. package/dist/esm/ic-tree-item.entry.js.map +1 -1
  150. package/dist/esm/ic-tree-view.entry.js +1 -1
  151. package/dist/esm/loader.js +1 -1
  152. package/dist/types/components/ic-data-table/ic-data-table.d.ts +11 -0
  153. package/dist/types/components/ic-data-table/story-data.d.ts +1 -0
  154. package/dist/types/components.d.ts +8 -0
  155. package/hydrate/index.js +124 -34
  156. package/package.json +3 -3
  157. package/dist/core/p-3ef5017d.entry.js.map +0 -1
  158. package/dist/core/p-6b01e096.entry.js.map +0 -1
  159. package/dist/core/p-6ca98c5d.entry.js.map +0 -1
  160. package/dist/core/p-89c7ea3e.entry.js.map +0 -1
  161. package/dist/core/p-8f0660ec.entry.js +0 -2
  162. package/dist/core/p-8f0660ec.entry.js.map +0 -1
  163. package/dist/core/p-a7794aa9.entry.js.map +0 -1
  164. package/dist/core/p-bdb5addb.entry.js +0 -2
  165. package/dist/core/p-bdb5addb.entry.js.map +0 -1
  166. package/dist/core/p-d10e81f3.entry.js.map +0 -1
  167. package/dist/core/p-d8322108.entry.js.map +0 -1
  168. package/dist/core/p-d86cdbc8.entry.js.map +0 -1
  169. package/dist/core/p-f09b2041.entry.js +0 -2
  170. package/dist/core/p-f09b2041.entry.js.map +0 -1
  171. package/dist/core/p-fc76d510.entry.js +0 -2
  172. /package/dist/core/{p-5741a8bf.entry.js.map → p-1a317582.entry.js.map} +0 -0
  173. /package/dist/core/{p-7435de65.js.map → p-40510c97.js.map} +0 -0
  174. /package/dist/core/{p-07e4b89b.entry.js.map → p-4fd35690.entry.js.map} +0 -0
  175. /package/dist/core/{p-7ee62798.entry.js.map → p-810561ab.entry.js.map} +0 -0
  176. /package/dist/core/{p-3ce541df.entry.js.map → p-cf4572c9.entry.js.map} +0 -0
  177. /package/dist/core/{p-b03d14fc.entry.js.map → p-e35d6d78.entry.js.map} +0 -0
  178. /package/dist/core/{p-ac591209.entry.js.map → p-f6a93c4d.entry.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"names":["icDateInputCss","inputIds","DateInput","this","ARIA_INVALID","ARIA_LABEL","ARIA_LABELLED_BY","EVENT_OBJECT_STRING","FIT_TO_VALUE","initialValue","value","INPUT_EVENT_OBJECT_STRING","inputsInOrder","isAfterMax","isBeforeMin","isDateSetFromKeyboardEvent","isDisabledDate","isValidDay","isValidMonth","isValidDate","isZuluTime","KEYBOARD_EVENT_OBJECT_STRING","MAX_DAY","MAX_MONTH","previousEmittedDate","undefined","previousSelectedDate","selectedDate","setInputPasteValue","input","pastedValue","inputEl","classList","add","checkSingleCopiedValueIsValid","isValid","Number","dayInputEl","monthInputEl","yearInputEl","isKeyboardOrEvent","event","Object","prototype","toString","call","setDateValidity","isEmptyString","day","month","handleInput","inputEvent","target","inputType","preventAutoFormatting","length","setInputValue","notifyScreenReader","moveToNextInput","setPreventInput","setFitToValueStyling","setValidationMessage","handleKeyDown","isInputPrevented","eventKey","key","toLowerCase","regex","test","ctrlKey","metaKey","preventDefault","setPasteInvalidText","handleLeftRightArrowKeyPress","handleUpDownArrowKeyPress","preventInput","handleFocus","select","handleBlur","autocompleteInput","moveToPreviousInput","notifyScreenReaderSelectedDate","dayNames","stringEnumToArray","IcDayNames","months","IcDateInputMonths","selectedDateInfoEl","textContent","getDay","getDate","getMonth","getFullYear","minValue","maxValue","Date","handleDateChange","force","dateMatches","forEach","year","invalidDateText","setValueAndEmitChange","updateInputValues","slicePastedDate","valueLength","datePart","slice","isPastedStringDateValid","handlePaste","clipboardData","getData","setPastedValueAndValidation","setDate","date","remove","isDateOrEpoch","newDate","convertToDoubleDigits","defaultDateArray","splitStringDate","dateFormat","formatMinMax","formattedDate","clear","newValue","convertToDate","isSelectedDateDisabled","setAttribute","removeAttribute","invalidDateMessage","disablePast","disablePastMessage","minDate","disableFuture","disableFutureMessage","maxDate","disableDays","disableDaysMessage","setInputsInOrder","inputs","el","shadowRoot","querySelectorAll","push","setAriaLabelledBy","disabled","_a","inputCompContainerEl","getAttribute","removeAriaLabelledBy","labelEl","querySelector","labelId","inputId","id","hasValidation","validationStatus","validationText","labelledBy","_b","screenReaderInfoId","getInputDescribedByText","helperText","defaultHelperText","selectedDateInfoId","assistiveHintId","isPrevented","preventDayInput","preventMonthInput","preventYearInput","getInputFromDatePart","dayInput","h","class","ref","placeholder","onPaste","inputmode","pattern","onKeyDown","monthInput","yearInput","maxLength","getInputsInOrder","dateParts","split","part","substring","getDescOfInputsOrder","description","getScreenReaderInfo","inputDescriptors","required","IcInformationStatus","Error","selectedString","selectionStart","selectionEnd","currentDate","isNotToday","toDateString","includes","currentInput","currentInputPos","findIndex","nextInput","focus","autocompleteYear","inputValue","yearNumbers","autocompletedInput","number","index","handleHostBlur","removeLabelledBy","icBlur","emit","handleHostFocus","activeElement","match","icFocus","handleFormReset","getAriaLabel","notifyScreenReaderArrowKeys","liveRegion","announcement","ariaLabel","notifyScreenReaderInput","setAriaInvalid","validDay","validMonth","validDate","disabledDate","handleClear","handleCalendarOpen","ev","stopImmediatePropagation","calendarButtonEl","displayTooltip","calendarButtonClicked","emitIcChange","handleCalendarFocus","calendarFocused","handleCalendarBlur","handleClearFocus","clearButtonFocused","handleClearBlur","relatedTarget","d","icChange","watchDisableFutureHandler","watchMaxHandler","watchDisablePastHandler","watchMinHandler","createDate","max","min","watchRequiredHandler","asteriskSpan","document","createElement","appendChild","disconnectedCallback","removeFormResetListener","componentWillLoad","addFormResetListener","componentDidLoad","onComponentRequiredPropUndefined","prop","label","propName","addEventListener","componentWillUpdate","componentDidRender","setCalendarFocus","setDisableDays","days","triggerIcChange","nextParsedValue","extractDateFromZuluDateTime","pasteZuluDateTime","dateValue","isNumeric","displayPastedValidation","previousInvalidDateTest","isPasteValidationDisplayed","render","hideHelperText","hideLabel","showClearButton","showCalendarButton","size","hasCustomValidation","assistiveHint","renderHiddenInput","name","Host","onBlur","onFocus","for","role","innerHTML","Clear","onClick","variant","appearance","IcThemeForegroundEnum","Light","Dark","divider","Calendar","Default","status","message"],"sources":["src/components/ic-date-input/ic-date-input.css?tag=ic-date-input&encapsulation=shadow","src/components/ic-date-input/ic-date-input.tsx"],"sourcesContent":["@import \"../../../dist/core/normalize.css\";\n\ninput {\n border: 0;\n height: 100%;\n padding: 0;\n outline: none;\n background: none;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n -webkit-appearance: none;\n}\n\nic-input-component-container {\n cursor: text;\n}\n\nic-input-component-container,\nic-input-component-container:hover {\n color: var(--ic-color-tertiary-text);\n}\n\nic-input-component-container .focus-indicator {\n padding: var(--ic-space-xxxs) var(--ic-space-xs);\n align-items: center;\n}\n\n.day-input {\n width: 1.438rem;\n}\n\n.month-input {\n width: 1.813rem;\n}\n\n.year-input,\n.year-input.fit-to-value {\n width: 2.313rem;\n}\n\n.fit-to-value {\n width: 1.25rem;\n}\n\n.sr-only {\n position: absolute;\n left: -9999px;\n}\n\n.input-container {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: relative;\n}\n\n.action-buttons {\n display: flex;\n align-items: center;\n}\n\n.show-calendar-button-wrapper {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.clear-button,\n.calendar-button {\n border-radius: var(--ic-border-radius);\n transition: box-shadow var(--ic-easing-transition),\n border-radius var(--ic-easing-transition);\n margin: 0;\n}\n\n.clear-button.hidden {\n display: none;\n}\n\n.clear-button:focus,\n.calendar-button:focus,\n.clear-button:active,\n.calendar-button:active {\n background-color: var(--ic-focus-blue) !important;\n box-shadow: inset 0 0 0 0.125rem var(--ic-focus-glow) !important;\n border-radius: 0.25rem;\n}\n\n.clear-button:focus,\n.calendar-button:focus,\n.clear-button:active *,\n.calendar-button:active * {\n fill: var(--ic-architectural-white);\n}\n\n.divider {\n margin: 0 var(--ic-space-xxs);\n width: var(--ic-space-1px);\n background-color: var(--ic-architectural-400);\n border-radius: var(--ic-space-1px);\n}\n\n.divider.small {\n height: var(--ic-space-md);\n}\n\n.divider.default {\n height: calc(var(--ic-space-sm) + var(--ic-space-xs));\n}\n\n.divider.large {\n height: var(--ic-space-lg);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Prop,\n State,\n Host,\n Method,\n Watch,\n} from \"@stencil/core\";\nimport {\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcSizes,\n IcThemeForegroundEnum,\n IcDateFormat,\n IcDateInputMonths,\n IcDayNames,\n IcWeekDays,\n} from \"../../utils/types\";\nimport {\n convertToDoubleDigits,\n createDate,\n dateMatches,\n extractDateFromZuluDateTime,\n isDateOrEpoch,\n splitStringDate,\n} from \"../../utils/date-helpers\";\nimport {\n addFormResetListener,\n getInputDescribedByText,\n isEmptyString,\n isNumeric,\n onComponentRequiredPropUndefined,\n removeFormResetListener,\n renderHiddenInput,\n stringEnumToArray,\n} from \"../../utils/helpers\";\nimport Clear from \"../../assets/clear-icon.svg\";\nimport Calendar from \"../../assets/calendar.svg\";\n\nlet inputIds = 0;\n\n@Component({\n tag: \"ic-date-input\",\n styleUrl: \"ic-date-input.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class DateInput {\n private ARIA_INVALID = \"aria-invalid\";\n private ARIA_LABEL = \"aria-label\";\n private ARIA_LABELLED_BY = \"aria-labelledby\";\n private assistiveHintId: string;\n private calendarButtonEl: HTMLIcButtonElement;\n private dayInputEl: HTMLInputElement;\n private defaultHelperText: string;\n private EVENT_OBJECT_STRING = \"[object Event]\";\n private FIT_TO_VALUE = \"fit-to-value\";\n\n private initialValue = this.value;\n private inputCompContainerEl: HTMLIcInputComponentContainerElement;\n private INPUT_EVENT_OBJECT_STRING = \"[object InputEvent]\";\n private inputsInOrder: HTMLInputElement[] = [];\n\n private isAfterMax: boolean = false;\n private isBeforeMin: boolean = false;\n private isDateSetFromKeyboardEvent: boolean = false;\n private isDisabledDate: boolean = false;\n private isPasteValidationDisplayed: boolean;\n private isValidDay: boolean = true;\n private isValidMonth: boolean = true;\n private isValidDate: boolean = true;\n private isZuluTime: boolean = false;\n\n private KEYBOARD_EVENT_OBJECT_STRING = \"[object KeyboardEvent]\";\n private MAX_DAY = 31;\n private MAX_MONTH = 12;\n private monthInputEl: HTMLInputElement;\n\n private preventAutoFormatting: boolean;\n private preventDayInput: boolean;\n private preventMonthInput: boolean;\n private preventYearInput: boolean;\n\n private previousInvalidDateTest: string;\n private previousEmittedDate: Date = undefined;\n private previousSelectedDate: Date = null;\n\n private selectedDate: Date = null;\n private selectedDateInfoEl: HTMLSpanElement;\n private screenReaderInfoId: string;\n private selectedDateInfoId: string;\n\n private yearInputEl: HTMLInputElement;\n\n @Element() el: HTMLIcDateInputElement;\n\n @State() day: string = \"\";\n @State() invalidDateText: string;\n @State() maxDate: Date;\n @State() minDate: Date;\n @State() month: string = \"\";\n @State() year: string = \"\";\n @State() calendarFocused: boolean = false;\n @State() clearButtonFocused: boolean = false;\n @State() removeLabelledBy: boolean = false;\n\n /**\n * The format in which the date will be displayed.\n */\n // eslint-disable-next-line sonarjs/no-duplicate-string\n @Prop() dateFormat?: IcDateFormat = \"DD/MM/YYYY\";\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop() disabled?: boolean = false;\n\n /**\n * The days of the week to disable.\n */\n @Prop({ mutable: true }) disableDays?: IcWeekDays[] = [];\n\n /**\n * The text to display as the validation message when `disableDays` is set and a disabled date is entered.\n */\n @Prop() disableDaysMessage?: string =\n \"The date you have selected is on a day of the week that is not allowed. Please select another date.\";\n\n /**\n * If `true`, dates in the future are not allowed. A validation message will appear if a date in the future is entered.\n */\n @Prop() disableFuture?: boolean = false;\n\n @Watch(\"disableFuture\")\n watchDisableFutureHandler(): void {\n this.watchMaxHandler();\n }\n\n /**\n * The text to display as the validation message when `disableFuture` is true and a date in the future is entered.\n */\n @Prop() disableFutureMessage?: string =\n \"Dates in the future are not allowed. Please select a date in the past.\";\n\n /**\n * If `true`, dates in the past are not allowed. A validation message will appear if a date in the past is entered.\n */\n @Prop() disablePast?: boolean = false;\n\n @Watch(\"disablePast\")\n watchDisablePastHandler(): void {\n this.watchMinHandler();\n }\n\n /**\n * The text to display as the validation message when `disablePast` is true and a date in the past is entered.\n */\n @Prop() disablePastMessage?: string =\n \"Dates in the past are not allowed. Please select a date in the future.\";\n\n /**\n * The helper text that will be displayed for additional field guidance. This will default to the text \"Use format\" along with the `dateFormat` value.\n */\n @Prop({ mutable: true }) helperText?: string;\n\n /**\n * If `true`, the helper text will be visually hidden, but still read out by screenreaders.\n */\n @Prop() hideHelperText: boolean = false;\n\n /**\n * If `true`, the label will be visually hidden, but will still be read out by screen readers.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * The ID for the input.\n */\n @Prop() inputId?: string = `ic-date-input-${inputIds++}`;\n\n /**\n * The text to display as the validation message when an invalid date is entered.\n */\n @Prop() invalidDateMessage?: string = \"Please enter a valid date.\";\n\n /**\n * The label for the date input.\n */\n @Prop() label!: string;\n\n /**\n * The latest date that will be allowed. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n * The value of this prop is ignored if `disableFuture` is set to `true`.\n */\n @Prop() max?: string | Date = \"\";\n\n @Watch(\"max\")\n watchMaxHandler(): void {\n if (this.disableFuture) {\n this.maxDate = new Date();\n } else {\n this.maxDate = createDate(this.max, this.dateFormat);\n }\n }\n\n /**\n * The earliest date that will be allowed. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n * The value of this prop is ignored if `disablePast` is set to `true`.\n */\n @Prop() min?: string | Date = \"\";\n\n @Watch(\"min\")\n watchMinHandler(): void {\n if (this.disablePast) {\n this.minDate = new Date();\n } else {\n this.minDate = createDate(this.min, this.dateFormat);\n }\n }\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name: string = this.inputId;\n\n /**\n * If `true`, the input will require a value.\n */\n @Prop() required?: boolean = false;\n\n @Watch(\"required\")\n watchRequiredHandler(): void {\n // Prevent asterisk being read out after the label by screen reader (by applying aria-hidden)\n // Needed because label is included in 'aria-labelledby' instead of using 'aria-label'\n const labelEl = this.el.shadowRoot.querySelector(\"label\");\n if (this.required) {\n const asteriskSpan = document.createElement(\"span\");\n asteriskSpan.setAttribute(\"id\", \"asterisk-span\");\n asteriskSpan.setAttribute(\"aria-hidden\", \"true\");\n asteriskSpan.textContent = \" *\";\n labelEl?.appendChild(asteriskSpan);\n } else {\n const asteriskSpan = this.el.shadowRoot.querySelector(\"#asterisk-span\");\n if (asteriskSpan) {\n asteriskSpan.remove();\n }\n }\n }\n\n /**\n * @internal If `true`, a button which displays the calendar view when clicked will be displayed.\n */\n @Prop() showCalendarButton?: boolean = false;\n\n /**\n * If `true`, a button which clears the date input when clicked will be displayed.\n */\n @Prop() showClearButton?: boolean = true;\n\n /**\n * The size of the date input to be displayed.\n */\n @Prop() size?: IcSizes = \"default\";\n\n /**\n * The value of the date input. The value can be in any format supported as `dateFormat`, in ISO 8601 date string format (`yyyy-mm-dd`) or as a JavaScript `Date` object.\n */\n @Prop({ mutable: true }) value?: string | Date | null | undefined = \"\";\n\n /**\n * The validation status - e.g. 'error' | 'warning' | 'success'. This will override the built-in date validation.\n */\n @Prop({ mutable: true }) validationStatus?: IcInformationStatusOrEmpty = \"\";\n\n /**\n * The text to display as the validation message. This will override the built-in date validation.\n */\n @Prop() validationText?: string = \"\";\n\n /**\n * @internal Emitted when the calendar is opened.\n */\n @Event() calendarButtonClicked: EventEmitter<{ value: Date }>;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() icBlur: EventEmitter<{ value: Date }>;\n\n /**\n * Emitted when the value has changed.\n */\n @Event() icChange: EventEmitter<{ value: Date }>;\n\n /**\n * Emitted when the input gains focus.\n */\n @Event() icFocus: EventEmitter<{ value: Date }>;\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n }\n\n componentWillLoad(): void {\n this.defaultHelperText = `Use format ${this.dateFormat}`;\n\n if (isEmptyString(this.helperText))\n this.helperText = this.defaultHelperText;\n\n this.watchMinHandler();\n this.watchMaxHandler();\n\n if (this.value) {\n this.setDate(this.value);\n this.previousEmittedDate = this.selectedDate;\n } else {\n this.previousEmittedDate = null;\n }\n\n this.screenReaderInfoId = `${this.inputId}-screen-reader-info`;\n this.assistiveHintId = `${this.inputId}-assistive-hint`;\n this.selectedDateInfoId = `${this.inputId}-selected-date-info`;\n\n addFormResetListener(this.el, this.handleFormReset);\n }\n\n componentDidLoad(): void {\n this.setInputsInOrder();\n\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Date Input\"\n );\n\n if (this.value) {\n this.updateInputValues(this.day, this.month, this.year);\n this.inputsInOrder.forEach((input) => {\n input.classList.add(this.FIT_TO_VALUE);\n });\n }\n\n this.setAriaInvalid(\n this.isValidDay,\n this.isValidMonth,\n this.isValidDate,\n this.isDisabledDate\n );\n\n if (this.value) {\n this.notifyScreenReaderSelectedDate();\n }\n\n this.inputsInOrder.forEach((input) => {\n input.addEventListener(\"input\", this.handleInput);\n input.addEventListener(\"focus\", this.handleFocus);\n input.addEventListener(\"blur\", this.handleBlur);\n });\n\n this.watchRequiredHandler();\n }\n\n componentWillUpdate(): void {\n if (isEmptyString(this.helperText))\n this.helperText = this.defaultHelperText;\n\n if (!this.isDateSetFromKeyboardEvent) this.setDate(this.value);\n\n this.setAriaInvalid(\n this.isValidDay,\n this.isValidMonth,\n this.isValidDate,\n this.isDisabledDate\n );\n this.handleDateChange(false);\n this.isDateSetFromKeyboardEvent = false;\n }\n\n componentDidRender(): void {\n if (this.removeLabelledBy) {\n this.removeAriaLabelledBy();\n return;\n }\n\n this.setAriaLabelledBy();\n }\n\n /**\n * Returns the value as a Date object\n * @returns Date\n */\n @Method()\n async getDate(): Promise<Date> {\n return this.selectedDate;\n }\n\n /**\n * @internal Sets focus on the calendar button.\n */\n @Method()\n async setCalendarFocus(): Promise<void> {\n if (this.calendarButtonEl) {\n this.calendarButtonEl.focus();\n }\n }\n\n /**\n * @internal Used to pass disabledDays from parent component.\n */\n @Method()\n async setDisableDays(days: IcWeekDays[]): Promise<void> {\n this.disableDays = days;\n }\n\n /**\n * @internal Used to enable other components to invoke an IcChange event from the input.\n */\n @Method()\n async triggerIcChange(d: Date): Promise<void> {\n this.emitIcChange(d);\n }\n\n private setInputPasteValue = (input: EventTarget, pastedValue: string) => {\n const inputEl = input as HTMLInputElement;\n\n inputEl.value = pastedValue;\n inputEl.classList.add(this.FIT_TO_VALUE);\n };\n\n private checkSingleCopiedValueIsValid = (\n input: EventTarget,\n pastedValue: string\n ) => {\n let isValid = false;\n const value = Number(pastedValue);\n\n switch (input) {\n case this.dayInputEl:\n isValid = value >= 1 && value <= this.MAX_DAY;\n break;\n case this.monthInputEl:\n isValid = value >= 1 && value <= this.MAX_MONTH;\n break;\n case this.yearInputEl:\n isValid = true;\n break;\n default:\n isValid = false;\n break;\n }\n\n return isValid;\n };\n\n /**\n * Using Object.prototype.string to determine type if event from user\n * @param event - event object used to differentiate keyboard, generic or input event\n * @returns boolean\n */\n private isKeyboardOrEvent = (event: Event) => {\n return (\n Object.prototype.toString.call(event) === this.EVENT_OBJECT_STRING ||\n Object.prototype.toString.call(event) ===\n this.KEYBOARD_EVENT_OBJECT_STRING\n );\n };\n\n private setDateValidity = () => {\n if (!isEmptyString(this.day)) {\n this.isValidDay = +this.day > this.MAX_DAY ? false : true;\n } else {\n this.isValidDay = true;\n }\n\n if (!isEmptyString(this.month)) {\n this.isValidMonth = +this.month > this.MAX_MONTH ? false : true;\n } else {\n this.isValidMonth = true;\n }\n };\n\n private handleInput = (event: Event) => {\n const inputEvent = event as InputEvent;\n const input = event.target as HTMLInputElement;\n\n if (input !== this.yearInputEl) {\n // Only auto-format if input event is not a character being deleted\n // and not as user is changing value using up / down keys\n if (\n inputEvent.inputType !== \"deleteContentBackward\" &&\n !this.preventAutoFormatting\n ) {\n if (\n input.value.length === 1 &&\n ((input === this.dayInputEl && +input.value >= 4) ||\n (input === this.monthInputEl && +input.value >= 2)) &&\n +input.value <= 9\n ) {\n this.setInputValue(input);\n this.notifyScreenReader(input, event);\n this.moveToNextInput(input);\n }\n\n if (input.value.length === 2) {\n if (+input.value === 0) {\n input.value = \"01\";\n }\n this.setInputValue(input);\n this.setPreventInput(input, true);\n this.notifyScreenReader(input, event);\n this.moveToNextInput(input);\n } else {\n this.setPreventInput(input, false);\n }\n } else if (this.preventAutoFormatting) {\n /**\n * Using arrow keys prevents auto formatting so need to deal with\n * switching from arrow keys to inputting numbers\n **/\n if (input.value.length === 2 && !this.isKeyboardOrEvent(event)) {\n this.setInputValue(input);\n this.setPreventInput(input, true);\n this.moveToNextInput(input);\n } else {\n this.setInputValue(input);\n }\n }\n\n if (input.value.length !== 2) {\n this.setPreventInput(input, false);\n }\n } else {\n if (input.value.length === 4) {\n this.setInputValue(input);\n if (\n Object.prototype.toString.call(event) !== this.EVENT_OBJECT_STRING\n ) {\n this.moveToNextInput(input);\n }\n this.setPreventInput(input, true);\n } else {\n this.setInputValue(input, true);\n this.setPreventInput(input, false);\n }\n }\n\n // Add / remove class to make input width match size of value i.e. 2 digits' width for day / month, 4 for year\n this.setFitToValueStyling(input);\n\n if (input.value.length === 0) {\n this.setInputValue(input, true);\n this.setValidationMessage();\n }\n\n this.notifyScreenReader(input, event);\n };\n\n private handleKeyDown = (event: KeyboardEvent, isInputPrevented: boolean) => {\n const input = event.target as HTMLInputElement;\n\n const eventKey = event.key.toLowerCase();\n // Regex required due to FF allowing all characters as values for number text field.\n const regex =\n /-?\\d*\\.?\\d+(e[-+]?\\d+)?|[/-]|arrowup|arrowdown|arrowleft|arrowright|shift|tab|backspace|delete/;\n if (\n !regex.test(eventKey) &&\n !(\n (event.ctrlKey || event.metaKey) &&\n (eventKey === \"v\" || eventKey === \"c\")\n )\n ) {\n event.preventDefault();\n }\n\n switch (eventKey) {\n case \"/\":\n case \"-\":\n case \".\":\n event.preventDefault();\n this.setPasteInvalidText();\n this.moveToNextInput(input);\n break;\n case \"arrowright\":\n case \"arrowleft\":\n event.preventDefault();\n this.handleLeftRightArrowKeyPress(input, eventKey);\n break;\n case \"arrowup\":\n case \"arrowdown\":\n this.preventAutoFormatting = true;\n this.handleUpDownArrowKeyPress(input, event);\n break;\n default:\n break;\n }\n\n this.preventInput(event, isInputPrevented);\n this.isDateSetFromKeyboardEvent = true;\n };\n\n private handleFocus = (event: FocusEvent) => {\n // Highlight / select all characters in input for easy replacement\n const input = event.target as HTMLInputElement;\n\n input.select();\n };\n\n private handleBlur = (event: FocusEvent) => {\n const input = event.target as HTMLInputElement;\n\n this.setPasteInvalidText();\n this.autocompleteInput(input);\n };\n\n private handleLeftRightArrowKeyPress = (\n input: HTMLInputElement,\n key: string\n ) => {\n if (key === \"arrowright\") {\n this.moveToNextInput(input);\n } else {\n this.moveToPreviousInput(input);\n }\n\n this.setPasteInvalidText();\n };\n\n private notifyScreenReaderSelectedDate = () => {\n const dayNames = stringEnumToArray(IcDayNames);\n const months = stringEnumToArray(IcDateInputMonths);\n\n this.selectedDateInfoEl.textContent = `Selected date: ${\n dayNames[this.selectedDate.getDay()]\n }, ${this.selectedDate.getDate()} ${\n months[this.selectedDate.getMonth()]\n } ${this.selectedDate.getFullYear()}`;\n };\n\n private handleUpDownArrowKeyPress = (\n input: HTMLInputElement,\n event: KeyboardEvent\n ) => {\n const minValue = input === this.yearInputEl ? 0 : 1;\n\n let maxValue;\n\n switch (input) {\n case this.dayInputEl:\n maxValue = this.MAX_DAY;\n break;\n case this.monthInputEl:\n maxValue = this.MAX_MONTH;\n break;\n case this.yearInputEl:\n maxValue = 9999;\n }\n\n // Make value loop round when min / max reached\n if (input?.value) {\n if (event.key === \"ArrowUp\") {\n if (+input.value === maxValue) {\n event.preventDefault();\n input.value = `0${minValue}`;\n } else {\n input.value =\n +input.value + 1 < 10\n ? `0${+input.value + 1}`\n : (+input.value + 1).toString();\n }\n this.notifyScreenReader(input, event);\n }\n\n if (event.key === \"ArrowDown\") {\n if (+input.value === minValue) {\n event.preventDefault();\n input.value = maxValue.toString();\n } else {\n input.value =\n +input.value - 1 < 10\n ? `0${+input.value - 1}`\n : (+input.value - 1).toString();\n }\n this.notifyScreenReader(input, event);\n }\n } else {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n if (input === this.yearInputEl) {\n input.value = new Date().getFullYear().toString();\n } else {\n input.value = maxValue.toString();\n }\n this.notifyScreenReader(input, event);\n } else if (event.key === \"ArrowUp\") {\n event.preventDefault();\n if (input === this.yearInputEl) {\n input.value = new Date().getFullYear().toString();\n } else {\n input.value = `0${minValue}`;\n }\n this.notifyScreenReader(input, event);\n }\n }\n\n this.setInputValue(input);\n this.setFitToValueStyling(input);\n };\n\n private handleDateChange = (force: boolean) => {\n // Prevent icChange being emitted when each individual input is changed\n // This method is used within componentWillUpdate instead of using @Watch('value');\n if (force || !dateMatches(this.selectedDate, this.previousSelectedDate)) {\n if (this.value) {\n this.inputsInOrder.forEach((input) => {\n input.classList.add(this.FIT_TO_VALUE);\n });\n }\n if (this.day && this.month && this.year && this.invalidDateText === \"\") {\n this.setValueAndEmitChange(this.selectedDate);\n this.notifyScreenReaderSelectedDate();\n } else if (\n !(this.selectedDate === null && this.previousSelectedDate === null)\n ) {\n this.setValueAndEmitChange(null);\n this.selectedDateInfoEl.textContent = \"\";\n }\n this.previousSelectedDate = this.selectedDate;\n\n if (!this.isDateSetFromKeyboardEvent) {\n this.updateInputValues(this.day, this.month, this.year);\n }\n }\n };\n\n private slicePastedDate = (valueLength: number, datePart: string): string => {\n return datePart.length > valueLength\n ? datePart.slice(0, valueLength)\n : datePart;\n };\n\n private isPastedStringDateValid = (value: string) => {\n if (\n /\\d+-\\d+-\\d+$/.test(value) ||\n /\\d+\\/\\d+\\/\\d+/.test(value) ||\n /\\d+\\.\\d+\\.\\d+/.test(value)\n ) {\n return true;\n }\n\n if (\n /[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}(?::[0-9]{2}(?:\\.\\d+)?)?Z/.test(\n value\n )\n ) {\n this.isZuluTime = true;\n return true;\n }\n\n return false;\n };\n\n // Set value of each input to value of pasted date part\n // Allows formats separated by '-' or '/'\n private handlePaste = (event: ClipboardEvent) => {\n event.preventDefault();\n\n const pastedValue = event.clipboardData.getData(\"Text\");\n const isValidDate = this.isPastedStringDateValid(pastedValue);\n\n this.setPastedValueAndValidation(isValidDate, pastedValue, event);\n };\n\n private setDate = (date: string | Date) => {\n if (date === null || date === \"\" || date === undefined) {\n this.day = null;\n this.month = null;\n this.year = null;\n this.inputsInOrder.forEach((input) => {\n input.classList.remove(this.FIT_TO_VALUE);\n this.setPreventInput(input, false);\n });\n this.handleDateChange(true);\n } else {\n if (isDateOrEpoch(date)) {\n let newDate;\n if (typeof date === \"string\") {\n // Checking if epoch date time\n newDate = new Date(+date);\n } else {\n newDate = date;\n }\n\n this.day = convertToDoubleDigits(newDate.getDate());\n this.month = convertToDoubleDigits(newDate.getMonth() + 1);\n this.year = newDate.getFullYear().toString();\n } else if (typeof date === \"string\") {\n const defaultDateArray = splitStringDate(date, this.dateFormat);\n this.year = defaultDateArray[0];\n this.month = defaultDateArray[1];\n this.day = defaultDateArray[2];\n }\n }\n\n this.setValidationMessage();\n };\n\n private formatMinMax = (date: Date) => {\n let formattedDate;\n\n const day = convertToDoubleDigits(date.getDate());\n const month = convertToDoubleDigits(date.getMonth() + 1);\n const year = date.getFullYear();\n\n switch (this.dateFormat) {\n case \"DD/MM/YYYY\":\n formattedDate = `${day}/${month}/${year}`;\n break;\n case \"MM/DD/YYYY\":\n formattedDate = `${month}/${day}/${year}`;\n break;\n case \"YYYY/MM/DD\":\n formattedDate = `${year}/${month}/${day}`;\n break;\n default:\n break;\n }\n return formattedDate;\n };\n private updateInputValues = (day: string, month: string, year: string) => {\n this.dayInputEl.value = day;\n this.monthInputEl.value = month;\n this.yearInputEl.value = year;\n };\n\n // Set value in state based on input\n private setInputValue = (input: HTMLInputElement, clear = false) => {\n const newValue = clear ? \"\" : input.value;\n\n switch (input) {\n case this.dayInputEl:\n this.day = newValue;\n break;\n case this.monthInputEl:\n this.month = newValue;\n break;\n case this.yearInputEl:\n if (this.year !== newValue) {\n this.year = newValue;\n }\n }\n\n this.setValidationMessage();\n };\n\n private setValidationMessage = () => {\n this.setDateValidity();\n\n if (\n !isEmptyString(this.day) &&\n !isEmptyString(this.month) &&\n !isEmptyString(this.year)\n ) {\n // Check whether date actually exists\n // (used https://www.hectane.com/blog/javascript-date-validation-with-leap-year)\n this.selectedDate = this.convertToDate(this.year, this.month, this.day);\n this.isValidDate =\n +this.selectedDate !== 0 && this.selectedDate.getDate() == +this.day;\n this.isDisabledDate = this.isSelectedDateDisabled();\n\n if (!this.isValidDate || this.isDisabledDate) {\n this.inputsInOrder.forEach((input) =>\n input.setAttribute(this.ARIA_INVALID, \"true\")\n );\n } else {\n this.inputsInOrder.forEach((input) =>\n input.removeAttribute(this.ARIA_INVALID)\n );\n }\n } else {\n this.selectedDate = null;\n }\n\n if (!(this.isValidDay && this.isValidMonth && this.isValidDate)) {\n this.invalidDateText = this.invalidDateMessage;\n } else if (this.isDisabledDate && this.selectedDate !== null) {\n if (this.isBeforeMin) {\n if (this.disablePast) {\n this.invalidDateText = this.disablePastMessage;\n } else {\n this.invalidDateText = `Please enter a date after ${this.formatMinMax(\n this.minDate\n )}.`;\n }\n } else if (this.isAfterMax) {\n if (this.disableFuture) {\n this.invalidDateText = this.disableFutureMessage;\n } else {\n this.invalidDateText = `Please enter a date before ${this.formatMinMax(\n this.maxDate\n )}.`;\n }\n } else if (this.disableDays.length !== 0) {\n this.invalidDateText = this.disableDaysMessage;\n } else {\n if (this.disablePast) {\n this.invalidDateText = this.disablePastMessage;\n }\n if (this.disableFuture) {\n this.invalidDateText = this.disableFutureMessage;\n }\n }\n } else {\n this.invalidDateText = \"\";\n }\n };\n\n // Set refs to the input elements in the order they are displayed (based on the dateFormat)\n private setInputsInOrder = () => {\n const inputs = this.el.shadowRoot.querySelectorAll(\"input\");\n inputs.forEach((input) => this.inputsInOrder.push(input));\n };\n\n // Includes text usually added using aria-describedby\n // (which doesn't work on input component container)\n private setAriaLabelledBy = () => {\n if (\n this.disabled &&\n !isEmptyString(\n this.inputCompContainerEl?.getAttribute(this.ARIA_LABELLED_BY)\n )\n ) {\n this.removeAriaLabelledBy();\n return;\n }\n\n if (this.disabled) {\n return;\n }\n\n const labelEl = this.el.shadowRoot.querySelector(\"label\");\n const labelId = `${this.inputId}-label`;\n\n if (labelEl !== null && labelEl !== undefined) {\n labelEl.id = labelId;\n }\n\n const hasValidation =\n (!isEmptyString(this.validationStatus) &&\n !isEmptyString(this.validationText)) ||\n !isEmptyString(this.invalidDateText);\n\n const labelledBy = `${labelEl?.id ?? \"\"} ${\n this.screenReaderInfoId\n } ${getInputDescribedByText(\n this.inputId,\n this.helperText !== \"\" && this.helperText !== this.defaultHelperText,\n hasValidation\n )} ${this.selectedDate ? this.selectedDateInfoId : \"\"} ${\n this.assistiveHintId\n }`;\n\n this.inputCompContainerEl.setAttribute(this.ARIA_LABELLED_BY, labelledBy);\n };\n\n // Sets boolean for each input, used to limit the number of characters within each field (2 for day / month, 4 for year)\n private setPreventInput = (input: HTMLInputElement, isPrevented: boolean) => {\n switch (input) {\n case this.dayInputEl:\n this.preventDayInput = isPrevented;\n break;\n case this.monthInputEl:\n this.preventMonthInput = isPrevented;\n break;\n case this.yearInputEl:\n this.preventYearInput = isPrevented;\n }\n };\n\n // Get input based on letter representing each date part (\"D\", \"M\" or \"Y\")\n // (retrieved from dateFormat)\n private getInputFromDatePart = (datePart: string) => {\n const dayInput = (\n <input\n class=\"day-input\"\n id=\"day-input\"\n ref={(el) => (this.dayInputEl = el)}\n aria-label=\"day\"\n placeholder=\"DD\"\n disabled={this.disabled}\n onPaste={this.handlePaste}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onKeyDown={(event) => this.handleKeyDown(event, this.preventDayInput)}\n ></input>\n );\n\n const monthInput = (\n <input\n id=\"month-input\"\n class=\"month-input\"\n ref={(el) => (this.monthInputEl = el)}\n aria-label=\"month\"\n placeholder=\"MM\"\n disabled={this.disabled}\n onPaste={this.handlePaste}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onKeyDown={(event) => this.handleKeyDown(event, this.preventMonthInput)}\n ></input>\n );\n\n const yearInput = (\n <input\n id=\"year-input\"\n class=\"year-input\"\n ref={(el) => (this.yearInputEl = el)}\n aria-label=\"year\"\n placeholder=\"YYYY\"\n maxLength={4}\n disabled={this.disabled}\n onPaste={this.handlePaste}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onKeyDown={(event) => this.handleKeyDown(event, this.preventYearInput)}\n ></input>\n );\n\n let input;\n\n switch (datePart) {\n case \"D\":\n input = dayInput;\n break;\n case \"M\":\n input = monthInput;\n break;\n case \"Y\":\n input = yearInput;\n }\n\n return input;\n };\n\n // Get input elements in order of chosen date format\n private getInputsInOrder = () => {\n const dateParts = this.dateFormat.split(\"/\");\n\n const inputsInOrder: HTMLInputElement[] = [];\n\n dateParts.forEach((part: string) => {\n inputsInOrder.push(this.getInputFromDatePart(part.substring(0, 1)));\n });\n\n return inputsInOrder;\n };\n\n // To add to the end of assistive hint to make it clearer that each date part has its own input\n // that can be changed individually\n private getDescOfInputsOrder = () => {\n let description;\n\n switch (this.dateFormat) {\n case \"DD/MM/YYYY\":\n description = \"day, month, and year\";\n break;\n case \"MM/DD/YYYY\":\n description = \"month, day, and year\";\n break;\n case \"YYYY/MM/DD\":\n description = \"year, month, and day\";\n }\n\n return description;\n };\n\n // Add 'required' or 'invalid data' to span used in aria-labelledby\n // Many ARIA attributes aren't read out by screen reader when on the input component container\n private getScreenReaderInfo = (validationStatus: string) => {\n let inputDescriptors = \"\";\n\n if (this.required) {\n inputDescriptors += \"required\";\n }\n\n if (validationStatus === IcInformationStatus.Error) {\n inputDescriptors += \" invalid data\";\n }\n\n return inputDescriptors === \"\" ? \"\" : inputDescriptors + \", \";\n };\n\n // Prevent non-number characters being entered\n // ('e' or '.' - which are usually allowed in <input type=\"number\">)\n // And limit the number of characters within each field (2 for day / month, 4 for year)\n // (because 'maxlength' doesn't work on <input type=\"number\">)\n private preventInput = (event: KeyboardEvent, isInputPrevented: boolean) => {\n const key = event.key;\n const input = event.target as HTMLInputElement;\n let selectedString;\n\n if (input) {\n selectedString = input.value.substring(\n input.selectionStart,\n input.selectionEnd\n );\n }\n\n if (\n key === \"e\" ||\n key === \".\" ||\n key === \"-\" ||\n (event.key >= \"0\" &&\n event.key <= \"9\" &&\n isInputPrevented &&\n !selectedString)\n ) {\n event.preventDefault();\n }\n };\n\n // Get whether date has been disabled using disableFuture or disablePast prop, but always allow current day\n // Consider using dateClamp and inDateRange\n private isSelectedDateDisabled = () => {\n const currentDate = new Date();\n this.isAfterMax = false;\n this.isBeforeMin = false;\n\n let disabled = false;\n const isNotToday =\n this.selectedDate.toDateString() !== currentDate.toDateString();\n\n if (this.minDate && this.selectedDate < this.minDate && isNotToday) {\n this.isBeforeMin = true;\n disabled = true;\n }\n\n if (this.maxDate && this.selectedDate > this.maxDate && isNotToday) {\n this.isAfterMax = true;\n disabled = true;\n }\n\n if (this.disableDays.includes(this.selectedDate.getDay())) {\n disabled = true;\n }\n\n if (\n ((this.disablePast && this.selectedDate < currentDate) ||\n (this.disableFuture && this.selectedDate > currentDate)) &&\n isNotToday\n ) {\n disabled = true;\n }\n\n return disabled;\n };\n\n private moveToNextInput = (currentInput: HTMLInputElement) => {\n const currentInputPos = this.inputsInOrder.findIndex(\n (input) => input === currentInput\n );\n const nextInput = this.inputsInOrder[currentInputPos + 1];\n\n this.preventAutoFormatting = false;\n\n if (nextInput) {\n nextInput.focus();\n }\n };\n\n private moveToPreviousInput = (currentInput: HTMLInputElement) => {\n const currentInputPos = this.inputsInOrder.findIndex(\n (input) => input === currentInput\n );\n\n this.preventAutoFormatting = false;\n\n if (this.inputsInOrder[currentInputPos - 1]) {\n this.inputsInOrder[currentInputPos - 1].focus();\n }\n };\n\n private autocompleteInput = (input: HTMLInputElement) => {\n if (input === this.yearInputEl) {\n this.autocompleteYear();\n } else {\n const inputValue = input.value;\n\n // Autocomplete input as 2 characters (leading zero) when only 1 character entered (for day and month)\n if (inputValue.length === 1) {\n if (+inputValue === 0) {\n input.value = \"01\";\n } else {\n input.value = `0${inputValue}`;\n }\n }\n }\n\n if (input.value) {\n this.setInputValue(input);\n }\n };\n\n // Autocomplete year as current millennium when fewer than 4 characters entered\n private autocompleteYear = () => {\n const inputValue = this.yearInputEl.value;\n const yearNumbers = [\"2\", \"0\", \"0\"];\n\n let autocompletedInput = \"\";\n\n if (inputValue) {\n yearNumbers.forEach((number, index) => {\n if (inputValue.length + index <= 3) {\n autocompletedInput += number;\n }\n });\n\n this.yearInputEl.value = `${autocompletedInput}${inputValue}`;\n }\n };\n\n private convertToDate = (\n year: string,\n month: string,\n day: string\n ): Date | null => {\n if (!isEmptyString(year) && !isEmptyString(month) && !isEmptyString(day)) {\n return new Date(+year, +month - 1, +day);\n } else {\n return null;\n }\n };\n\n private handleHostBlur = () => {\n this.removeLabelledBy = false;\n this.icBlur.emit({ value: this.selectedDate });\n };\n\n private handleHostFocus = () => {\n if (this.el.shadowRoot.activeElement?.id.match(/(day|month|year)-input$/)) {\n this.removeLabelledBy = false;\n } else {\n this.removeLabelledBy = true;\n }\n this.icFocus.emit({ value: this.selectedDate });\n };\n\n private handleFormReset = () => {\n // Get the initial value and populate day, month and year again.\n this.setDate(this.initialValue);\n this.setValidationMessage();\n this.handleDateChange(false);\n };\n\n private getAriaLabel = (input: HTMLInputElement): string => {\n return input.getAttribute(this.ARIA_LABEL);\n };\n\n private notifyScreenReaderArrowKeys = (input: HTMLInputElement) => {\n const liveRegion = this.el.shadowRoot.querySelector(\"#live-region\");\n let announcement = \"\";\n const ariaLabel = this.getAriaLabel(input);\n\n if (liveRegion && input.value) {\n if (\n input === this.monthInputEl &&\n !!IcDateInputMonths[+input.value - 1]\n ) {\n announcement = `${input.value} - ${\n IcDateInputMonths[+input.value - 1]\n }, ${ariaLabel}`;\n }\n\n if (input === this.dayInputEl || input === this.yearInputEl) {\n announcement = `${input.value}, ${ariaLabel}`;\n }\n\n liveRegion.textContent = announcement;\n }\n };\n\n private removeAriaLabelledBy() {\n this.inputCompContainerEl.removeAttribute(this.ARIA_LABELLED_BY);\n }\n\n private setPastedValueAndValidation(\n isValidDate: boolean,\n pastedValue: string,\n event: ClipboardEvent\n ) {\n switch (true) {\n case isValidDate: {\n const nextParsedValue = this.isZuluTime\n ? extractDateFromZuluDateTime(pastedValue)\n : pastedValue;\n const dateParts = nextParsedValue.split(/-|\\/|\\./);\n this.inputsInOrder.forEach((input, index) => {\n input.classList.add(this.FIT_TO_VALUE);\n\n if (this.isZuluTime) {\n this.pasteZuluDateTime(dateParts, index);\n } else {\n let dateValue;\n\n if (input === this.dayInputEl || input === this.monthInputEl) {\n dateValue = this.slicePastedDate(2, dateParts[index]);\n } else {\n dateValue = this.slicePastedDate(4, dateParts[index]);\n }\n\n input.value = dateValue;\n\n this.setInputValue(input);\n this.autocompleteInput(input);\n }\n });\n this.isZuluTime = false;\n break;\n }\n\n case (pastedValue.length === 1 ||\n pastedValue.length === 2 ||\n pastedValue.length === 4) &&\n isNumeric(pastedValue):\n if (this.checkSingleCopiedValueIsValid(event.target, pastedValue)) {\n // Check if copied value can be pasted into input\n this.setInputPasteValue(event.target, pastedValue);\n this.setInputValue(event.target as HTMLInputElement);\n } else {\n this.displayPastedValidation(event);\n }\n break;\n\n case pastedValue.length === 3 && isNumeric(pastedValue):\n if (event.target !== this.yearInputEl) {\n this.displayPastedValidation(event);\n } else {\n this.setInputPasteValue(event.target, pastedValue);\n this.setInputValue(event.target as HTMLInputElement);\n }\n break;\n\n case pastedValue.length >= 5 && isNumeric(pastedValue):\n this.displayPastedValidation(event);\n }\n }\n\n private pasteZuluDateTime(dateParts: string[], index: number) {\n // ['YYYY', 'MM', 'DD']\n if (index === 0) {\n const dateValue = this.slicePastedDate(4, dateParts[index]);\n this.yearInputEl.value = dateValue;\n this.setInputValue(this.yearInputEl);\n } else if (index === 1) {\n // The month value is the second item in the array\n const dateValue = this.slicePastedDate(2, dateParts[index]);\n this.monthInputEl.value = dateValue;\n this.setInputValue(this.monthInputEl);\n } else {\n const dateValue = this.slicePastedDate(2, dateParts[index]);\n this.dayInputEl.value = dateValue;\n this.setInputValue(this.dayInputEl);\n }\n }\n\n private displayPastedValidation(event: ClipboardEvent) {\n if (this.invalidDateText?.length > 0) {\n this.previousInvalidDateTest = this.invalidDateText;\n }\n\n this.invalidDateText = `Please paste a valid ${this.getAriaLabel(\n event.target as HTMLInputElement\n )}`;\n\n this.validationStatus = IcInformationStatus.Error;\n this.isPasteValidationDisplayed = true;\n }\n\n private setPasteInvalidText() {\n if (this.isPasteValidationDisplayed) {\n this.invalidDateText = this.previousInvalidDateTest ?? \"\";\n this.isPasteValidationDisplayed = false;\n\n // This is to prevent setDate from triggering within componentWillUpdate\n this.isDateSetFromKeyboardEvent = true;\n }\n }\n\n private notifyScreenReader(input: HTMLInputElement, event: Event) {\n const liveRegion = this.el.shadowRoot.querySelector(\"#live-region\");\n\n if (liveRegion) {\n if (this.isKeyboardOrEvent(event)) {\n this.notifyScreenReaderArrowKeys(input);\n } else if (\n Object.prototype.toString.call(event) === this.INPUT_EVENT_OBJECT_STRING\n ) {\n this.notifyScreenReaderInput(input, liveRegion as HTMLElement);\n }\n }\n }\n\n private notifyScreenReaderInput = (\n input: HTMLInputElement,\n liveRegion: HTMLElement\n ) => {\n let announcement = \"\";\n const ariaLabel = this.getAriaLabel(input);\n\n if (input === this.dayInputEl || input === this.monthInputEl) {\n if (input.value.length === 2) {\n if (\n input === this.monthInputEl &&\n !!IcDateInputMonths[+input.value - 1] &&\n this.isValidMonth\n ) {\n announcement = `${input.value} - ${\n IcDateInputMonths[+input.value - 1]\n }, ${ariaLabel}`;\n }\n\n if (input === this.dayInputEl && this.isValidDay) {\n announcement = `${input.value}, ${ariaLabel}`;\n }\n } else {\n announcement = \"\";\n }\n } else {\n if (input.value.length === 4) {\n announcement = `${input.value}, ${ariaLabel}`;\n } else {\n announcement = \"\";\n }\n }\n liveRegion.textContent = announcement;\n };\n\n private setFitToValueStyling = (input: HTMLInputElement) => {\n if (input.value) {\n input.classList.add(this.FIT_TO_VALUE);\n } else {\n input.classList.remove(this.FIT_TO_VALUE);\n }\n };\n\n private setAriaInvalid = (\n validDay: boolean,\n validMonth: boolean,\n validDate: boolean,\n disabledDate: boolean\n ) => {\n if (this.inputsInOrder.length) {\n this.inputsInOrder.forEach((input) => {\n input.removeAttribute(this.ARIA_INVALID);\n });\n\n if (!validDay) {\n this.dayInputEl.setAttribute(this.ARIA_INVALID, \"true\");\n }\n\n if (!validMonth) {\n this.monthInputEl.setAttribute(this.ARIA_INVALID, \"true\");\n }\n\n if (!validDate || disabledDate) {\n this.inputsInOrder.forEach((input) => {\n input.setAttribute(this.ARIA_INVALID, \"true\");\n });\n }\n }\n };\n\n private handleClear = () => {\n this.inputsInOrder.forEach((input) => {\n input.classList.remove(this.FIT_TO_VALUE);\n this.setInputValue(input, true);\n this.setPreventInput(input, false);\n });\n this.isDateSetFromKeyboardEvent = false;\n this.setValidationMessage();\n this.handleDateChange(true);\n\n this.inputsInOrder[0].focus();\n };\n\n private handleCalendarOpen = (ev: MouseEvent) => {\n ev.stopImmediatePropagation();\n this.calendarButtonEl?.shadowRoot\n .querySelector(\"ic-tooltip\")\n .displayTooltip(false);\n this.calendarButtonClicked.emit({ value: this.selectedDate });\n this.calendarButtonEl?.shadowRoot\n .querySelector(\"ic-tooltip\")\n .displayTooltip(false);\n this.isDateSetFromKeyboardEvent = false;\n };\n\n private setValueAndEmitChange = (value: Date) => {\n if (!dateMatches(new Date(this.value), value)) {\n this.emitIcChange(value);\n this.value = value;\n }\n };\n\n private handleCalendarFocus = () => {\n this.calendarFocused = true;\n };\n\n private handleCalendarBlur = () => {\n this.calendarFocused = false;\n };\n\n private handleClearFocus = () => {\n this.removeLabelledBy = true;\n this.clearButtonFocused = true;\n };\n\n private handleClearBlur = (ev: FocusEvent) => {\n this.clearButtonFocused = false;\n if ((ev.relatedTarget as HTMLElement)?.id.match(/(day|year)-input$/)) {\n this.removeLabelledBy = false;\n return;\n }\n\n this.removeLabelledBy = true;\n };\n\n private emitIcChange = (d: Date) => {\n if (\n !(d === null && this.previousEmittedDate === null) &&\n !dateMatches(d, this.previousEmittedDate)\n ) {\n this.previousEmittedDate = d;\n this.icChange.emit({ value: d });\n }\n };\n\n render() {\n const {\n inputId,\n label,\n disabled,\n helperText,\n hideHelperText,\n hideLabel,\n showClearButton,\n showCalendarButton,\n size,\n } = this;\n\n const hasCustomValidation =\n !isEmptyString(this.validationStatus) &&\n !isEmptyString(this.validationText);\n\n const validationStatus = hasCustomValidation\n ? this.validationStatus\n : !isEmptyString(this.invalidDateText)\n ? IcInformationStatus.Error\n : \"\";\n\n const assistiveHint = `Type or use the up and down arrow keys to change the values for the ${this.getDescOfInputsOrder()}.`;\n\n renderHiddenInput(\n true,\n this.el,\n this.name,\n this.convertToDate(this.year, this.month, this.day),\n this.disabled\n );\n\n return (\n <Host onBlur={this.handleHostBlur} onFocus={this.handleHostFocus}>\n <ic-input-container disabled={disabled}>\n {!(hideLabel && hideHelperText) && (\n <ic-input-label\n for={inputId}\n label={label}\n hideLabel={hideLabel}\n helperText={!hideHelperText ? helperText : null}\n disabled={disabled}\n ></ic-input-label>\n )}\n <span id={this.screenReaderInfoId} class=\"sr-only\" aria-hidden=\"true\">\n {this.getScreenReaderInfo(validationStatus)}\n {hideLabel && `${label}\\n`}\n {hideHelperText && `${helperText}\\n`}\n {`${this.defaultHelperText}.`}\n </span>\n <span id={this.assistiveHintId} class=\"sr-only\" aria-hidden=\"true\">\n {assistiveHint}\n </span>\n <span id=\"live-region\" aria-live=\"assertive\" class=\"sr-only\"></span>\n <ic-input-component-container\n id={inputId}\n ref={(el: HTMLIcInputComponentContainerElement) =>\n (this.inputCompContainerEl = el)\n }\n disabled={disabled}\n validationStatus={validationStatus}\n size={size}\n role=\"group\"\n >\n <div class=\"input-container\">\n <div class=\"date-inputs\">\n {this.getInputsInOrder()[0]}/{this.getInputsInOrder()[1]}/\n {this.getInputsInOrder()[2]}\n </div>\n <div class=\"action-buttons\">\n {showClearButton && (\n <ic-button\n id=\"clear-button\"\n aria-label=\"Clear input\"\n class={{\n [\"clear-button\"]: true,\n [\"hidden\"]:\n isEmptyString(this.day) &&\n isEmptyString(this.month) &&\n isEmptyString(this.year),\n }}\n disabled={this.disabled}\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearFocus}\n onBlur={this.handleClearBlur}\n variant=\"icon\"\n appearance={\n this.clearButtonFocused\n ? IcThemeForegroundEnum.Light\n : IcThemeForegroundEnum.Dark\n }\n size={size}\n ></ic-button>\n )}\n {showCalendarButton && (\n <div class=\"show-calendar-button-wrapper\">\n <div class={{ divider: true, [size]: true }}></div>\n <ic-button\n id=\"calendar-button\"\n ref={(el: HTMLIcButtonElement) =>\n (this.calendarButtonEl = el)\n }\n aria-label=\"Display calendar\"\n aria-haspopup=\"dialog\"\n class=\"calendar-button\"\n disabled={this.disabled}\n innerHTML={Calendar}\n onClick={this.handleCalendarOpen}\n variant=\"icon\"\n size={size}\n onFocus={this.handleCalendarFocus}\n onBlur={this.handleCalendarBlur}\n appearance={\n this.calendarFocused\n ? IcThemeForegroundEnum.Light\n : IcThemeForegroundEnum.Default\n }\n ></ic-button>\n </div>\n )}\n </div>\n </div>\n </ic-input-component-container>\n <span id={this.selectedDateInfoId} class=\"sr-only\" aria-live=\"polite\">\n <span\n ref={(el) => (this.selectedDateInfoEl = el)}\n role=\"status\"\n ></span>\n </span>\n {(hasCustomValidation || !isEmptyString(this.invalidDateText)) && (\n <ic-input-validation\n status={validationStatus}\n message={\n hasCustomValidation ? this.validationText : this.invalidDateText\n }\n for={inputId}\n ></ic-input-validation>\n )}\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["icTreeItemCss","treeItemIds","TreeItem","this","treeItemId","treeItemTag","hostMutationObserver","TOOLTIP","handleTreeItemClicked","isParent","expanded","hasParentExpanded","updateAriaLabel","selected","watchSelectedHandler","setTreeItemPadding","level","parentElement","el","treeItemContent","shadowRoot","querySelector","isSiblingOfParent","Array","from","children","map","sibling","length","includes","isChild","tagName","isRouterItem","hasRouterSlot","routerSlot","classList","add","style","paddingLeft","truncateTreeItemLabel","treeItem","typographyEl","tooltip","closest","treeContent","scrollHeight","clientHeight","tooltipEl","document","createElement","setAttribute","id","textContent","appendChild","hostMutationCallback","mutationList","some","type","addedNodes","removedNodes","checkSlotInChildMutations","forceUpdate","handleDisplayTooltip","display","displayTooltip","icTreeItemSelected","emit","disconnectedCallback","_a","disconnect","componentDidLoad","childTreeItems","filter","child","isSlotUsed","onComponentRequiredPropUndefined","prop","label","propName","MutationObserver","observe","childList","componentDidUpdate","forEach","handleKeyDown","ev","key","stopImmediatePropagation","setFocus","focus","_b","treeItemElement","ariaLabel","treeItems","index","indexOf","parentChildren","disabled","render","appearance","size","Component","href","attrs","hrefLang","hreflang","referrerPolicy","referrerpolicy","rel","target","h","Host","class","name","Object","assign","tabIndex","onClick","ref","onFocus","onBlur","innerHTML","arrowDropdown"],"sources":["src/components/ic-tree-item/ic-tree-item.css?tag=ic-tree-item&encapsulation=shadow","src/components/ic-tree-item/ic-tree-item.tsx"],"sourcesContent":[":host {\n display: block;\n border: none;\n position: relative;\n}\n\n:host .tree-item-content {\n display: flex;\n align-items: center;\n height: calc(var(--ic-space-xl) + var(--ic-space-xs));\n padding: 0 var(--ic-space-xs);\n text-decoration: none;\n color: var(--ic-primary-text);\n}\n\n::slotted([slot=\"router-item\"]) {\n display: flex;\n align-items: center;\n height: calc(var(--ic-space-xl) + var(--ic-space-xs));\n text-decoration: none;\n font-family: var(--ic-font-body-family);\n color: var(--ic-primary-text);\n padding: 0 var(--ic-space-xs) !important;\n}\n\n::slotted([slot=\"router-item\"].ic-tree-item-single) {\n padding-left: calc(var(--ic-space-xl) + var(--ic-space-xs)) !important;\n}\n\n:host .tree-item-content:focus,\n::slotted([slot=\"router-item\"]:focus) {\n box-shadow: var(--ic-border-focus);\n border-radius: var(--ic-border-radius);\n transition: var(--ic-transition-duration-fast);\n outline: none;\n}\n\n:host .tree-item-content:hover,\n::slotted([slot=\"router-item\"]:hover) {\n background-color: var(--ic-action-dark-bg-hover) !important;\n cursor: pointer;\n}\n\n:host .tree-item-content:active,\n::slotted([slot=\"router-item\"]:active) {\n background-color: var(--ic-action-dark-bg-active) !important;\n}\n\n:host(.ic-tree-item-selected) .tree-item-content,\n:host(.ic-tree-item-selected) ::slotted([slot=\"router-item\"]) {\n background-color: var(--ic-action-default-bg-hover) !important;\n}\n\n:host(.ic-tree-item-small) .tree-item-content,\n:host(.ic-tree-item-small) ::slotted([slot=\"router-item\"]) {\n height: var(--ic-space-xl);\n}\n\n:host(.ic-tree-item-large) .tree-item-content,\n:host(.ic-tree-item-large) ::slotted([slot=\"router-item\"]) {\n height: var(--ic-space-xxl);\n}\n\n:host(.ic-tree-item-disabled) {\n pointer-events: none;\n}\n\n:host(.ic-tree-item-disabled) .tree-item-content,\n:host(.ic-tree-item-disabled) .arrow-dropdown,\n:host(.ic-tree-item-disabled) ::slotted([slot=\"icon\"]),\n:host(.ic-tree-item-disabled) ::slotted([slot=\"router-item\"]) {\n color: var(--ic-architectural-200) !important;\n fill: var(--ic-architectural-200);\n pointer-events: none;\n}\n\n:host(.ic-tree-item-light) .tree-item-content,\n:host(.ic-tree-item-light) .arrow-dropdown,\n:host(.ic-tree-item-light) ::slotted([slot=\"icon\"]),\n:host(.ic-tree-item-light) ::slotted([slot=\"router-item\"]) {\n color: var(--ic-architectural-white);\n fill: var(--ic-architectural-white);\n}\n\n:host .arrow-dropdown {\n color: var(--ic-action-default);\n margin-right: var(--ic-space-xs);\n}\n\n:host(.ic-tree-item-small) .arrow-dropdown {\n margin-right: var(--ic-space-xxs);\n}\n\n:host .tree-item-expanded {\n transform: rotate(180deg);\n margin-top: calc(-1 * var(--ic-space-xxs));\n}\n\n:host .ic-tree-item-single {\n padding-left: calc(var(--ic-space-xl) + var(--ic-space-xs));\n}\n\n:host(.ic-tree-item-small) .ic-tree-item-single {\n padding-left: calc(var(--ic-space-xl) + var(--ic-space-xxs));\n}\n\n.icon-container {\n width: var(--ic-space-lg);\n height: var(--ic-space-lg);\n margin: 0 var(--ic-space-xs) 0 0;\n}\n\n:host(.ic-tree-item-small) .icon-container {\n margin: 0 var(--ic-space-xxs) 0 0;\n}\n\n.ic-text-overflow {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ic-tooltip-overflow {\n overflow: hidden;\n}\n\n/** High Contrast **/\n@media (forced-colors: active) {\n ::slotted([slot=\"icon\"]) {\n fill: currentcolor;\n }\n\n :host(.ic-tree-item-disabled) .tree-item-content,\n :host(.ic-tree-item-disabled) .arrow-dropdown,\n :host(.ic-tree-item-disabled) ::slotted([slot=\"icon\"]),\n :host(.ic-tree-item-disabled) ::slotted([slot=\"router-item\"]) {\n color: GrayText !important;\n fill: GrayText !important;\n }\n\n :host .tree-item-content:focus,\n ::slotted([slot=\"router-item\"]:focus) {\n border: var(--ic-hc-border) !important;\n }\n\n :host(.ic-tree-item-selected) .tree-item-content,\n :host(.ic-tree-item-selected) ::slotted([slot=\"router-item\"]) {\n color: Highlight !important;\n }\n}\n","import {\n Component,\n h,\n Prop,\n Element,\n Event,\n EventEmitter,\n Host,\n Watch,\n State,\n Listen,\n forceUpdate,\n Method,\n} from \"@stencil/core\";\nimport { IcSizes, IcThemeForegroundNoDefault } from \"../../utils/types\";\nimport {\n isSlotUsed,\n onComponentRequiredPropUndefined,\n checkSlotInChildMutations,\n} from \"../../utils/helpers\";\nimport arrowDropdown from \"../../assets/arrow-dropdown.svg\";\n\nlet treeItemIds = 0;\n\n/**\n * @slot label - Content is set as the tree item label.\n * @slot icon - Content is placed to the left of the label.\n * @slot router-item - Handle routing by nesting your routes in this slot.\n */\n@Component({\n tag: \"ic-tree-item\",\n styleUrl: \"ic-tree-item.css\",\n shadow: true,\n})\nexport class TreeItem {\n private treeItemId = `ic-tree-item-${treeItemIds++}`;\n private treeItemElement: HTMLElement;\n private treeItemTag = \"IC-TREE-ITEM\";\n private routerSlot: HTMLElement;\n private hostMutationObserver: MutationObserver = null;\n private TOOLTIP = \"ic-tooltip\";\n\n @Element() el: HTMLIcTreeItemElement;\n\n @State() childTreeItems: HTMLIcTreeItemElement[];\n\n /**\n * @internal Determines whether the light or dark variant of the tree item should be displayed.\n */\n @Prop() appearance?: IcThemeForegroundNoDefault = \"dark\";\n\n /**\n * If `true`, the tree item appears in the disabled state.\n */\n @Prop() disabled?: boolean = false;\n\n /**\n * If `true`, the tree item appears in the expanded state.\n */\n @Prop({ mutable: true }) expanded: boolean = false;\n\n /**\n * @internal Determines if the parent tree item has been expanded.\n */\n @Prop({ mutable: true }) hasParentExpanded: boolean = false;\n\n /**\n * The URL that the tree item link points to. If set, the tree item will render as an \"a\" tag, otherwise it will render as a div.\n */\n @Prop() href?: string | undefined;\n\n /**\n * The human language of the linked URL.\n */\n @Prop() hreflang?: string = \"\";\n\n /**\n * @internal If `true`, the tree item is a parent of other tree items.\n */\n @Prop({ mutable: true }) isParent: boolean = false;\n\n /**\n * The label of the tree item.\n */\n @Prop() label: string = \"\";\n\n /**\n * How much of the referrer to send when following the link.\n */\n @Prop() referrerpolicy?: ReferrerPolicy;\n\n /**\n * The relationship of the linked URL as space-separated link types.\n */\n @Prop() rel?: string;\n\n /**\n * If `true`, the tree item appears in the selected state.\n */\n @Prop({ mutable: true }) selected: boolean = false;\n @Watch(\"selected\")\n watchSelectedHandler() {\n if (this.selected) {\n this.icTreeItemSelected.emit({ id: this.el.id });\n }\n this.updateAriaLabel();\n }\n\n /**\n * @internal Determines the size of the tree item.\n */\n @Prop() size?: IcSizes = \"default\";\n\n /**\n * The place to display the linked URL, as the name for a browsing context (a tab, window, or iframe).\n */\n @Prop() target?: string;\n\n /**\n * Emitted when tree item is selected.\n */\n @Event() icTreeItemSelected: EventEmitter<{ id: string }>;\n\n disconnectedCallback(): void {\n this.hostMutationObserver?.disconnect();\n }\n\n componentDidLoad(): void {\n this.childTreeItems = Array.from((this.el as HTMLElement).children).filter(\n (child) => child.tagName === this.treeItemTag\n ) as HTMLIcTreeItemElement[];\n\n if (this.childTreeItems.length > 0) {\n this.isParent = true;\n }\n\n this.setTreeItemPadding();\n\n this.updateAriaLabel();\n\n this.truncateTreeItemLabel(this.el);\n\n !isSlotUsed(this.el, \"label\") &&\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Tree item\"\n );\n\n this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);\n this.hostMutationObserver.observe(this.el, {\n childList: true,\n });\n }\n\n componentDidUpdate(): void {\n if (this.hasParentExpanded) {\n this.childTreeItems.forEach((child) => {\n this.truncateTreeItemLabel(child);\n });\n this.hasParentExpanded = false;\n }\n }\n\n @Listen(\"keydown\", {})\n handleKeyDown(ev: KeyboardEvent): void {\n if (ev.key === \"Enter\" || ev.key === \" \") {\n ev.stopImmediatePropagation();\n this.handleTreeItemClicked();\n }\n }\n\n /**\n * Sets focus on the native `input`.\n */\n @Method()\n async setFocus(): Promise<void> {\n if (this.hasRouterSlot()) {\n this.routerSlot?.focus();\n } else {\n this.treeItemElement?.focus();\n }\n }\n\n private handleTreeItemClicked = (): void => {\n if (this.isParent) {\n this.expanded = !this.expanded;\n this.hasParentExpanded = true;\n }\n\n this.updateAriaLabel();\n this.selected = true;\n this.watchSelectedHandler();\n };\n\n /**\n * @internal Updates the aria-label of the tree item.\n */\n @Method()\n async updateAriaLabel(): Promise<void> {\n let ariaLabel;\n\n if (this.hasRouterSlot()) {\n ariaLabel = this.routerSlot.textContent;\n } else if (isSlotUsed(this.el, \"label\")) {\n ariaLabel = this.el.querySelector('[slot=\"label\"]').textContent;\n } else {\n ariaLabel = this.label;\n }\n\n if (this.isParent) {\n ariaLabel = `${ariaLabel}, triggers submenu, ${\n this.expanded ? \"expanded\" : \"collapsed\"\n }`;\n }\n\n if (this.el.parentElement) {\n const treeItems = Array.from(\n (this.el.parentElement as HTMLElement).children\n ).filter(\n (child) => child.tagName === this.treeItemTag\n ) as HTMLIcTreeItemElement[];\n\n const index = treeItems.indexOf(this.el) + 1;\n const parentChildren = treeItems.length;\n\n ariaLabel = `${ariaLabel}, ${index} of ${parentChildren}`;\n }\n\n if (this.selected) {\n ariaLabel = `${ariaLabel}, active`;\n }\n\n if (this.disabled) {\n ariaLabel = `${ariaLabel}, dimmed`;\n }\n\n if (this.hasRouterSlot()) {\n this.routerSlot.ariaLabel = ariaLabel;\n } else {\n this.treeItemElement.ariaLabel = ariaLabel;\n }\n }\n\n private setTreeItemPadding = () => {\n let level = 1;\n let parentElement = this.el.parentElement;\n const treeItemContent = this.el.shadowRoot.querySelector(\n \".tree-item-content\"\n ) as HTMLElement;\n\n const isSiblingOfParent = Array.from(parentElement.children)\n .map((sibling) => {\n if (\n sibling !== this.el &&\n !sibling.querySelector('[slot=\"router-item\"]') &&\n !sibling.querySelector('[slot=\"label\"]')\n ) {\n return sibling.children.length > 0;\n } else {\n return false;\n }\n })\n .includes(true);\n\n const isChild = parentElement.tagName === this.treeItemTag;\n\n const isRouterItem = this.hasRouterSlot();\n\n if (\n (isSiblingOfParent && !this.el.isParent) ||\n (isChild && !this.el.isParent)\n ) {\n if (isRouterItem) {\n this.routerSlot.classList.add(\"ic-tree-item-single\");\n } else {\n treeItemContent.classList.add(\"ic-tree-item-single\");\n }\n }\n\n while (parentElement) {\n if (parentElement.tagName === this.treeItemTag) {\n level++;\n if (!this.el.isParent && isSiblingOfParent) {\n treeItemContent.style.paddingLeft = `calc(var(--ic-space-xl) + ${\n level * 16\n }px)`;\n } else if (!this.el.isParent) {\n treeItemContent.style.paddingLeft = `calc(var(--ic-space-xs) + ${\n level * 24\n }px`;\n } else {\n treeItemContent.style.paddingLeft = `${level * 16}px`;\n }\n }\n parentElement = parentElement.parentElement;\n }\n };\n\n private truncateTreeItemLabel = (treeItem: HTMLIcTreeItemElement) => {\n const typographyEl: HTMLIcTypographyElement =\n treeItem.shadowRoot.querySelector(\".tree-item-label\");\n const tooltip = typographyEl?.closest(this.TOOLTIP);\n const treeContent: HTMLElement =\n treeItem.shadowRoot.querySelector(\".tree-item-content\");\n\n if (typographyEl?.scrollHeight > treeContent?.clientHeight) {\n typographyEl.classList.add(\"ic-text-overflow\");\n\n if (!tooltip) {\n const tooltipEl = document.createElement(\"ic-tooltip\");\n tooltipEl.setAttribute(\"target\", this.el.id);\n tooltipEl.setAttribute(\"label\", typographyEl.textContent);\n tooltipEl.classList.add(\"ic-tooltip-overflow\");\n tooltipEl.setAttribute(\"placement\", \"right\");\n treeContent.appendChild(tooltipEl);\n tooltipEl.appendChild(typographyEl);\n }\n }\n };\n\n private hasRouterSlot(): boolean {\n this.routerSlot = this.el.querySelector('[slot=\"router-item\"]');\n return !!this.routerSlot;\n }\n\n private hostMutationCallback = (mutationList: MutationRecord[]): void => {\n if (\n mutationList.some(({ type, addedNodes, removedNodes }) =>\n type === \"childList\"\n ? checkSlotInChildMutations(addedNodes, removedNodes, \"icon\")\n : false\n )\n ) {\n forceUpdate(this);\n }\n };\n\n private handleDisplayTooltip = (display: boolean) => {\n const typographyEl: HTMLIcTypographyElement =\n this.el.shadowRoot.querySelector(\".tree-item-label\");\n const tooltip: HTMLIcTooltipElement = typographyEl?.closest(this.TOOLTIP);\n\n tooltip?.displayTooltip(display);\n };\n\n render() {\n const { appearance, disabled, label, selected, size, expanded } = this;\n\n const Component = this.href && !this.disabled ? \"a\" : \"div\";\n\n const attrs = Component == \"a\" && {\n href: this.href,\n hrefLang: this.hreflang,\n referrerPolicy: this.referrerpolicy,\n rel: this.rel,\n target: this.target,\n };\n\n return (\n <Host\n class={{\n [`ic-tree-item-${appearance}`]: true,\n \"ic-tree-item-disabled\": disabled,\n \"ic-tree-item-selected\": !disabled && selected,\n [`ic-tree-item-${size}`]: size !== \"default\",\n }}\n id={this.treeItemId}\n >\n {this.hasRouterSlot() ? (\n <slot name=\"router-item\" />\n ) : (\n <Component\n class={{\n \"tree-item-content\": true,\n }}\n tabIndex={disabled ? -1 : 0}\n onClick={this.handleTreeItemClicked}\n ref={(el) => (this.treeItemElement = el)}\n aria-disabled={disabled ? \"true\" : \"false\"}\n aria-live=\"polite\"\n {...attrs}\n onFocus={() => this.handleDisplayTooltip(true)}\n onBlur={() => this.handleDisplayTooltip(false)}\n >\n {this.isParent && (\n <span\n class={{\n [\"arrow-dropdown\"]: true,\n [\"tree-item-expanded\"]: expanded,\n }}\n aria-hidden=\"true\"\n innerHTML={arrowDropdown}\n />\n )}\n {isSlotUsed(this.el, \"icon\") && (\n <div class=\"icon-container\">\n <slot name=\"icon\" />\n </div>\n )}\n <ic-typography class=\"tree-item-label\">\n {isSlotUsed(this.el, \"label\") ? <slot name=\"label\" /> : label}\n </ic-typography>\n </Component>\n )}\n {expanded && (\n <div aria-hidden={`${!expanded}`}>\n <slot />\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{r as t,c as i,h as e,F as s,H as n,g as o}from"./p-8455d1bb.js";import{d as a,a as l,p as h,i as r,b as d,e as c}from"./p-7435de65.js";const u=`<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24">\n <path d="M9 3 5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"></path>\n</svg>`;const v=`<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24" style="transform: rotate(-90deg);">\n <path d="M16.01 11H4v2h12.01v3L20 12l-3.99-4z"></path>\n</svg>`;const g=`<svg focusable="false" aria-hidden="true" viewBox="0 0 24 24" style="transform: rotate(90deg)">\n <path d="M16.01 11H4v2h12.01v3L20 12l-3.99-4z"></path>\n</svg>`;const p=':host{position:relative;display:inline-flex;max-height:100%;width:var(--table-width, 100%);height:100%;min-width:var(--table-min-width);max-width:var(--table-max-width)}tbody{vertical-align:top}.table-container{position:relative;height:calc(100% - var(--ic-space-xxxs));display:flex;flex-direction:column;width:100%}.cell-container{display:flex;min-height:1.5rem;overflow-y:hidden;height:var(--row-height)}.truncation-show-hide{overflow:visible;display:block}.cell-icon.truncation-show-hide{display:flex}.cell-container:not(.data-type-element,.truncation-show-hide){overflow-x:hidden}ic-loading-indicator{position:sticky;top:20px}.table-row-container{position:relative;height:100%;overflow:auto;transition:var(--ic-easing-transition-fast);overflow-anchor:none}:host([show-pagination="true"]) .table-row-container{height:calc(100% - 3.5625rem)}table{table-layout:var(--table-layout, "fixed");border-spacing:0;width:100%;height:var(--table-height, auto)}.table-row-container:focus{outline:none;box-shadow:var(--ic-border-focus);border-radius:var(--ic-border-radius);transition:var(--ic-easing-transition-fast);z-index:1}:host([embedded="true"]) .table-row-container{border:var(--ic-border-light)}.column-header-inner-container{padding:var(--ic-space-xs);box-sizing:border-box}.column-header-sticky{position:sticky;top:0;z-index:1}.column-header-overlay{position:sticky;top:0;z-index:1;box-shadow:0 0.375rem var(--ic-space-xs) calc(var(--ic-space-xxs * -1))\n rgb(0 0 0 / 20%)}.row-header-sticky{position:sticky;left:0}.column-header,.table-row{box-sizing:border-box}.table-row-selected{background-color:var(--ic-table-row-selected) !important}.sort-button{margin-left:auto}.sort-button:hover{background-color:var(--ic-action-dark-bg-hover)}.sort-button:active{background-color:var(--ic-action-dark-bg-active)}.sort-button svg{color:var(--ic-architectural-black)}.sort-button-unsorted svg{color:var(--ic-color-tertiary-text)}.table-density-dense .column-header-inner-container,td.table-density-dense{padding:var(--ic-space-xxs) var(--ic-space-xs) !important}.text-dense{font-size:var(--ic-font-size-label)}.table-density-spacious .column-header-inner-container,td.table-density-spacious{padding:0.625rem var(--ic-space-xs) !important}.text-spacious{font-size:1.125rem}.column-header-text{font-weight:var(--ic-font-weight-bold)}.row-header,.column-header{text-align:left;padding:var(--ic-space-xs);background-color:var(--ic-architectural-40);border-right:var(--ic-border-light);border-bottom:var(--ic-border-light)}.column-header{padding:0;width:var(--column-width);min-width:var(--column-min-width, 4rem);max-width:var(--column-max-width)}.column-header:last-child{border-right:none}.scrollable .column-header:last-child{border-right:var(--ic-border-light) !important}:host([embedded="true"]) tr:last-child .table-cell,:host([embedded="true"]) tr:last-child .row-header{border-bottom:none}.column-header-alignment-left,.row-header-alignment-left,.cell-alignment-left{text-align:left !important;justify-content:start !important}.column-header-alignment-right,.row-header-alignment-right,.cell-alignment-right{text-align:right !important;justify-content:end !important}.cell-alignment-right.truncation-tooltip ic-tooltip ic-typography{padding-right:calc(var(--ic-space-xxs) + var(--ic-space-xs))}.cell-alignment-right.truncation-show-hide ic-typography{--ellipsis-padding-right:calc(var(--ic-space-xxs) + var(--ic-space-xs))}.column-header-alignment-center,.row-header-alignment-center,.cell-alignment-center{text-align:center !important;justify-content:center !important}.table-row:nth-child(even){background-color:var(--ic-architectural-20)}.table-cell{padding:var(--ic-space-xs);border-bottom:solid var(--ic-architectural-100) var(--ic-space-1px);overflow:hidden;box-sizing:border-box;max-width:var(--column-max-width);min-width:var(--column-min-width)}.table-cell.with-overflow{overflow:visible}.data-type-string,.data-type-address{text-align:left;vertical-align:top}.data-type-number,.data-type-date{text-align:right;justify-content:end;vertical-align:top}.cell-alignment-top{vertical-align:top;align-items:flex-start}.cell-alignment-middle{vertical-align:middle;align-items:center}.cell-alignment-bottom{vertical-align:bottom;align-items:flex-end}.cell-emphasis-low{color:var(--ic-color-secondary-text)}.cell-emphasis-high{font-weight:var(--ic-font-weight-bold)}.pagination-container{background-color:var(--ic-architectural-40);border-top:var(--ic-border-light)}.screen-reader-sort-text,.table-caption{position:absolute;left:-100rem}.table-cell,.column-header,.row-header{word-wrap:break-word;white-space:pre-wrap}.loading-empty{padding:var(--ic-space-xl) var(--ic-space-xxl);margin-top:var(--ic-space-xl)}.updating-state{padding:0;border-bottom:var(--ic-border-light)}.updating-state-headers{border-bottom:none}.loading{position:absolute;left:calc(50% - 5.9741rem);opacity:0;transition:opacity var(--ic-transition-duration-slow)}.loading.show-background{background-color:var(--ic-architectural-white);border:var(--ic-border-light)}.loading.show{opacity:1}.icon,::slotted(svg){height:var(--ic-space-lg);width:var(--ic-space-lg);margin-right:var(--ic-space-xxs)}.column-header-alignment-right>.icon,.row-header-alignment-right>.icon,.cell-alignment-right>.icon,.column-header-alignment-right>::slotted(svg),.row-header-alignment-right>::slotted(svg),.cell-alignment-right>::slotted(svg){margin-right:auto}.column-header-alignment-center>ic-typography,.row-header-alignment-right>ic-typography,.cell-alignment-center>ic-typography{flex:1}.icon>svg{height:var(--ic-space-lg);width:var(--ic-space-lg);display:inline-block}.truncation-tooltip ic-typography{display:-webkit-box;-webkit-line-clamp:var(--ic-line-clamp, 0);-webkit-box-orient:vertical;overflow:hidden}.truncation-tooltip ic-typography,.truncation-show-hide ic-typography{white-space:normal}.ic-tooltip-overflow{overflow:hidden;width:100%}@media screen and (min-width: 577px){.column-header-inner-container{display:flex;align-items:center}}';const f=class{constructor(n){t(this,n);this.icRowHeightChange=i(this,"icRowHeightChange",7);this.icSortChange=i(this,"icSortChange",7);this.DENSITY_HEIGHT_MULTIPLIER={dense:.8,default:1,spacious:1.2};this.DENSITY_PADDING_HEIGHT_DIFF={dense:8,default:16,spacious:20};this.SORT_ICONS={unsorted:u,ascending:v,descending:g};this.hasLoadedForOneSecond=true;this.resizeObserver=null;this.SHOW_HIDE_STRING="show-hide";this.SHOW_HIDE_CSS_CLASS=`${this.SHOW_HIDE_STRING}-wrap`;this.TOOLTIP_STRING="tooltip";this.TOOLTIP=`ic-${this.TOOLTIP_STRING}`;this.TEXT_WRAP_STRING="text-wrap";this.TEXT_WRAP_CLASS=`.${this.TEXT_WRAP_STRING}`;this.dataUpdated=false;this.rowHeightSet=false;this.initialLoad=false;this.icPageChangeEvent=false;this.itemsPerPageChange=false;this.DATA_ROW_HEIGHT_STRING="data-row-height";this.ROW_HEIGHT_CSS_VARIABLE="--row-height";this.DEFAULT_LINE_HEIGHT=24;this.densityUpdate=false;this.truncationPatternUpdated=false;this.isNewDebounceDelaySet=false;this.updateSetRowHeight=t=>{const i=parseInt(getComputedStyle(document.documentElement).fontSize);if(t){const e=this.getCellContainer(t);const s=i*parseFloat(e.getAttribute(this.DATA_ROW_HEIGHT_STRING));if(t.scrollHeight>s){e.style.removeProperty(this.ROW_HEIGHT_CSS_VARIABLE)}}else{this.getTypographyElements().forEach((t=>{const e=this.getCellContainer(t);const s=i*parseFloat(e.getAttribute(this.DATA_ROW_HEIGHT_STRING));if(t.scrollHeight>s){e.style.removeProperty(this.ROW_HEIGHT_CSS_VARIABLE)}}))}};this.debounceDataTruncation=()=>{this.getTypographyElements().forEach((t=>{const i=this.getCellContainer(t);if(!i.classList.contains(this.TEXT_WRAP_STRING)){this.resizeObserver=new ResizeObserver(a((()=>{this.dataTruncation(t);if(!this.isNewDebounceDelaySet){this.setNewDebounceDelay(200)}}),(()=>this.debounceDelay)));this.resizeObserver.observe(t)}}))};this.setNewDebounceDelay=t=>{this.debounceDelay=t;this.isNewDebounceDelaySet=true};this.getLines=t=>Math.floor(t/this.DEFAULT_LINE_HEIGHT);this.truncate=(t,i,e)=>{if((t===null||t===void 0?void 0:t.scrollHeight)>(i===null||i===void 0?void 0:i.clientHeight)){if(!t.closest(this.TEXT_WRAP_CLASS)){if(this.truncationPattern===this.TOOLTIP_STRING){this.addTooltipTruncation(t,i,e)}if(this.truncationPattern===this.SHOW_HIDE_STRING){this.addShowHideTruncation(i,t)}}}else{if(this.truncationPattern===this.TOOLTIP_STRING&&e){t.setAttribute("style",`--ic-line-clamp: 0`);i.appendChild(t);e.remove()}if(this.truncationPattern===this.SHOW_HIDE_STRING&&!l(t.getAttribute("max-lines"))){this.resetShowHideTruncation(t)}}};this.dataTruncation=t=>{const i=this.getTooltip(t);const e=this.getCellContainer(t);if((e===null||e===void 0?void 0:e.classList.contains("data-type-element"))||this.dataUpdated){return}if(this.truncationPattern===this.SHOW_HIDE_STRING&&t.shadowRoot.querySelector("button")){const i=t.shadowRoot.querySelector("button");if(i){const i=this.getTruncWrapper(t);if(this.getLines(i.scrollHeight)===+t.getAttribute("max-lines")){this.resetShowHideTruncation(t)}}}if(this.rowHeightSet&&this.truncationPattern===this.SHOW_HIDE_STRING){const i=this.getTruncWrapper(t);if(i&&e.clientHeight-this.DEFAULT_LINE_HEIGHT>i.scrollHeight){this.resetShowHideTruncation(t);return}if(t.scrollHeight>e.clientHeight){this.addShowHideTruncation(e,t);return}}if((t===null||t===void 0?void 0:t.scrollHeight)>0&&(e===null||e===void 0?void 0:e.clientHeight)>0&&(t===null||t===void 0?void 0:t.scrollHeight)===(e===null||e===void 0?void 0:e.clientHeight)){if(i){this.removeTooltip(e,t,i)}return}this.truncate(t,e,i)};this.removeTextWrap=()=>{this.getTypographyElements().forEach((t=>{const i=t.closest("td");if(i.classList.contains(this.TEXT_WRAP_STRING)){i.classList.remove(this.TEXT_WRAP_STRING)}}))};this.getCellContainer=t=>t.closest(".cell-container");this.deleteTextWrapDataKey=t=>Array.isArray(t)&&t.forEach((t=>t.textWrap&&delete t.textWrap));this.startLoadingTimer=()=>{this.hasLoadedForOneSecond=false;this.timerStarted=Date.now();setTimeout((()=>{this.hasLoadedForOneSecond=true;this.timerStarted=null}),this.minimumLoadingDisplayDuration)};this.isObject=t=>typeof t==="object";this.notDefaultDensity=()=>this.density!=="default";this.getCellContent=(t,i)=>{switch(i){case"element":return undefined;case"date":return(t instanceof Date?t:new Date(t)).toLocaleDateString();default:return t}};this.getCellAlignment=(t,i)=>{if(this.isObject(t)&&Object.keys(t).includes("cellAlignment")){return this.getObjectValue(this.getObjectValue(t,"cellAlignment"),i)}};this.getCellOptions=(t,i)=>{if(!(this.isObject(t)&&Object.keys(t).includes(i)))return;return this.getObjectValue(t,i)};this.createUpdatingIndicator=()=>{const{appearance:t,description:i,max:s,min:n,progress:o}=this.updatingOptions||{};return e("th",{colSpan:this.columns.length,class:"updating-state"},e("ic-loading-indicator",{appearance:t,description:i||"Updating table data",fullWidth:true,max:s,min:n,progress:o,type:"linear",size:"small"}))};this.setRowHeight=t=>h(`${t*this.DENSITY_HEIGHT_MULTIPLIER[this.density]-this.DENSITY_PADDING_HEIGHT_DIFF[this.density]}px`);this.setTruncationClass=()=>{if(this.truncationPattern){return{[`truncation-${this.truncationPattern}`]:true}}return{}};this.getColumnWidth=t=>{let i={};if(t){if(typeof t==="string"){i=Object.assign(Object.assign({},i),{["--column-width"]:t})}if(typeof t==="object"&&!!Object.keys(t)){if(t===null||t===void 0?void 0:t.minWidth){i=Object.assign(Object.assign({},i),{["--column-min-width"]:t===null||t===void 0?void 0:t.minWidth})}if(t===null||t===void 0?void 0:t.maxWidth){i=Object.assign(Object.assign({},i),{["--column-max-width"]:t===null||t===void 0?void 0:t.maxWidth})}}}return i};this.getRowHeight=(t,i,e,s)=>{if((this.truncationPattern||t)&&!(i===null||i===void 0?void 0:i.textWrap)&&!e&&!this.getCellOptions(s,"textWrap")&&(i===null||i===void 0?void 0:i.dataType)!=="element"){return{[this.ROW_HEIGHT_CSS_VARIABLE]:this.setRowHeight(t)}}return{}};this.createCells=(t,i)=>{var n;const o=Object.values(t);const a=Object.keys(t);const l=this.getRowOptions(a,o);let h;let d;const c=a.indexOf("header");if(c>-1){h=this.getObjectValue(o[c],"rowAlignment");d=this.getObjectValue(o[c],"emphasis")}const u=(n=this.variableRowHeight)===null||n===void 0?void 0:n.call(this,Object.assign(Object.assign({},t),{index:i}));const v=u?u!=="auto"&&u:this.globalRowHeight!=="auto"&&this.globalRowHeight;return o.map(((t,n)=>{var o,c,u,g,p,f,m,b,w,y,x,O;const j=this.columns[n];const k=`${j===null||j===void 0?void 0:j.key}-${i}`;const $=this.isObject(t)&&Object.keys(t).includes("icon");const H=i=>this.getObjectValue(t,i);if(a[n]==="header"){return e("th",{scope:"row",colSpan:H("colspan"),class:{["row-header"]:true,[`row-header-alignment-${H("cellAlignment")}`]:!!H("cellAlignment"),["row-header-sticky"]:this.stickyRowHeaders}},H("title"))}if(a[n]!=="rowOptions"){return e("td",{class:{["table-cell"]:true,[`table-density-${this.density}`]:this.notDefaultDensity(),["with-overflow"]:(j===null||j===void 0?void 0:j.dataType)==="element"},style:Object.assign({},this.getColumnWidth(j.columnWidth))},e("div",{innerHTML:(j===null||j===void 0?void 0:j.dataType)==="element"&&!r(this.el,k)?t:null,class:Object.assign({"cell-container":(j===null||j===void 0?void 0:j.dataType)!=="element",[`cell-alignment-${((o=j===null||j===void 0?void 0:j.columnAlignment)===null||o===void 0?void 0:o.vertical)||((c=l===null||l===void 0?void 0:l.rowAlignment)===null||c===void 0?void 0:c.vertical)||h||this.getCellAlignment(t,"vertical")}`]:!!((u=j===null||j===void 0?void 0:j.columnAlignment)===null||u===void 0?void 0:u.vertical)||!!((g=l===null||l===void 0?void 0:l.rowAlignment)===null||g===void 0?void 0:g.vertical)||!!h||!!this.getCellAlignment(t,"vertical"),[`cell-alignment-${((p=j===null||j===void 0?void 0:j.columnAlignment)===null||p===void 0?void 0:p.horizontal)||((f=l===null||l===void 0?void 0:l.rowAlignment)===null||f===void 0?void 0:f.horizontal)||this.getCellAlignment(t,"horizontal")}`]:!!((m=j===null||j===void 0?void 0:j.columnAlignment)===null||m===void 0?void 0:m.horizontal)||!!((b=l===null||l===void 0?void 0:l.rowAlignment)===null||b===void 0?void 0:b.horizontal)||!!this.getCellAlignment(t,"horizontal"),[`data-type-${j===null||j===void 0?void 0:j.dataType}`]:true,[this.TEXT_WRAP_STRING]:(j===null||j===void 0?void 0:j.textWrap)||(l===null||l===void 0?void 0:l.textWrap)||!!this.getCellOptions(t,"textWrap"),["cell-icon"]:$||!!((w=j===null||j===void 0?void 0:j.icon)===null||w===void 0?void 0:w.icon)},this.setTruncationClass()),style:Object.assign(Object.assign({},this.getRowHeight(v,j,l===null||l===void 0?void 0:l.textWrap,t)),this.getColumnWidth(j===null||j===void 0?void 0:j.columnWidth)),"data-row-height":this.truncationPattern||v?this.setRowHeight(v):null},r(this.el,k)?e("slot",{name:k}):e(s,null,r(this.el,`${k}-icon`)?e("slot",{name:`${k}-icon`}):($||((y=j===null||j===void 0?void 0:j.icon)===null||y===void 0?void 0:y.onAllCells))&&(H("icon")||((x=j===null||j===void 0?void 0:j.icon)===null||x===void 0?void 0:x.icon))&&e("span",{class:"icon",innerHTML:H("icon")||((O=j===null||j===void 0?void 0:j.icon)===null||O===void 0?void 0:O.icon)}),(j===null||j===void 0?void 0:j.dataType)!=="element"&&!r(this.el,k)&&e("ic-typography",{variant:"body",class:{[`cell-emphasis-${this.isObject(t)&&H("emphasis")||(j===null||j===void 0?void 0:j.emphasis)||d}`]:this.isObject(t)&&!!H("emphasis")||!!(j===null||j===void 0?void 0:j.emphasis)||!!d,[`text-${this.density}`]:this.notDefaultDensity()}},this.isObject(t)&&(j===null||j===void 0?void 0:j.dataType)!=="date"?Object.keys(t).includes("href")?e("ic-link",{href:H("href")},H("data")):H("data"):this.getCellContent(t,j===null||j===void 0?void 0:j.dataType)))))}}))};this.createColumnHeaders=()=>this.columns.map((({cellAlignment:t,colspan:i,icon:s,key:n,title:o,columnWidth:a})=>e("th",{scope:"col",class:{["column-header"]:true,[`table-density-${this.density}`]:this.notDefaultDensity(),["updating-state-headers"]:this.updating&&!this.loading},style:Object.assign({},this.getColumnWidth(a)),colSpan:i},e("div",{class:{"column-header-inner-container":true,[`column-header-alignment-${t}`]:!!t}},r(this.el,`${n}-column-icon`)?e("slot",{name:`${n}-column-icon`}):s&&!s.hideOnHeader&&e("span",{class:"icon",innerHTML:s.icon}),e("ic-typography",{variant:"body",class:{["column-header-text"]:true,[`text-${this.density}`]:this.notDefaultDensity()}},o),this.sortable&&e("ic-button",{variant:"icon",id:`sort-button-${n}`,"aria-label":this.getSortButtonLabel(n),onClick:()=>this.sortRows(n),innerHTML:this.SORT_ICONS[this.sortedColumn===n?this.sortedColumnOrder:"unsorted"],class:{["sort-button"]:true,["sort-button-unsorted"]:this.sortedColumn!==n||this.sortedColumnOrder==="unsorted"}})))));this.onRowClick=t=>{this.selectedRow=this.selectedRow!==t&&!this.loading&&!this.updating&&t};this.createRows=()=>{const t=this.showPagination?this.data.slice(this.fromRow,this.toRow):this.data.slice();const i=t.map(((t,i)=>{const e=this.columns.map((({key:t},e)=>r(this.el,`${t}-${i}`)&&{key:t,index:e})).filter((t=>!!t));return e.length>0?d(t,e,""):t}));return i.sort(!this.sortable?undefined:this.getSortFunction()).map(((t,i)=>e("tr",{onClick:()=>this.onRowClick(t),class:{["table-row"]:true,["table-row-selected"]:this.selectedRow===t}},this.createCells(t,i))))};this.getObjectValue=(t,i)=>Object.values(t)[Object.keys(t).indexOf(i)];this.getSortButtonLabel=t=>{let i="";const e=t=>{const i=this.sortOptions.sortOrders;return i[(i.indexOf(t)+1)%i.length]};if(this.sortedColumn===t){const t=e(this.sortedColumnOrder);i=t!=="unsorted"?`Sort ${t}`:"Remove sort"}else{i=`Sort ${e("unsorted")}`}return i};this.getComparison=(t,i)=>{const e=t[this.sortedColumn];const s=i[this.sortedColumn];return this.columns.find((t=>t.key===this.sortedColumn)).dataType==="date"?new Date(e).valueOf()-new Date(s).valueOf():String(this.isObject(e)?Object.values(e)[0]:e).localeCompare(String(this.isObject(s)?Object.values(s)[0]:s),undefined,{numeric:true,sensitivity:"base"})};this.getSortFunction=()=>{switch(this.sortedColumnOrder){case"ascending":return(t,i)=>this.getComparison(t,i);case"descending":return(t,i)=>this.getComparison(i,t);default:return undefined}};this.sortRows=t=>{const i=this.el.shadowRoot.querySelector(`#sort-button-${t}`);const e=this.sortOptions.sortOrders;if(t!==this.sortedColumn){if(this.sortedColumn){const i=this.el.shadowRoot.querySelector(`#sort-button-${this.sortedColumn}`);i.setAttribute("aria-label",this.getSortButtonLabel(t))}this.sortedColumn=t;this.sortedColumnOrder="unsorted"}let s=e.indexOf(this.sortedColumnOrder)+1;if(s>e.length-1){s=0}this.sortedColumnOrder=e[s];i.setAttribute("aria-label",this.getSortButtonLabel(t));this.tableSorted=true;this.icSortChange.emit({columnName:t,sorted:this.sortedColumnOrder})};this.getTypographyElements=()=>Array.from(this.el.shadowRoot.querySelectorAll("ic-typography:not(.column-header-text)"));this.getTooltip=t=>t.closest(this.TOOLTIP);this.updateTruncationTooltip=(t=false)=>{this.getTypographyElements().forEach((i=>{const e=this.getTooltip(i);const s=this.getCellContainer(i);if(i.closest(this.TEXT_WRAP_CLASS)){this.removeTooltip(s,i,e);i.setAttribute("style",`--ic-line-clamp: 0`);return}this.regenerateTooltip(s,i,e,t)}))};this.updateScrollOffset=()=>{this.scrollOffset=this.el.shadowRoot.querySelector(".table-row-container").scrollTop};this.setTableDimensions=()=>{let t={};if(this.width){t=Object.assign(Object.assign({},t),{["--table-width"]:this.width})}if(this.height){t=Object.assign(Object.assign({},t),{["--table-height"]:this.height})}if(this.maxWidth){t=Object.assign(Object.assign({},t),{["--table-max-width"]:this.maxWidth})}if(this.minWidth){t=Object.assign(Object.assign({},t),{["--table-min-width"]:this.minWidth})}return t};this.fixCellTooltips=()=>{const t=this.el.shadowRoot.querySelectorAll(".data-type-element");t.forEach((t=>{const i=c(t);i.forEach((t=>{var i;const e=t.tagName==="IC-TOOLTIP"?t:(i=t.shadowRoot)===null||i===void 0?void 0:i.querySelector("ic-tooltip");if(e){e.setExternalPopperProps({strategy:"fixed"})}}))}))};this.fromRow=0;this.previousRowsPerPage=undefined;this.rowsPerPage=undefined;this.scrollable=false;this.scrollOffset=0;this.selectedRow=undefined;this.sortedColumn=undefined;this.sortedColumnOrder=undefined;this.toRow=undefined;this.currentRowHeight=undefined;this.debounceDelay=0;this.caption=undefined;this.columns=undefined;this.data=undefined;this.density="default";this.embedded=false;this.globalRowHeight="auto";this.height=undefined;this.hideColumnHeaders=false;this.loading=false;this.loadingOptions=undefined;this.maxWidth=undefined;this.minWidth=undefined;this.minimumLoadingDisplayDuration=1e3;this.paginationBarOptions={itemsPerPageOptions:[{label:"10",value:"10"},{label:"25",value:"25"},{label:"50",value:"50"}],rangeLabelType:"page",type:"simple",showItemsPerPageControl:true,showGoToPageControl:true,alignment:"right",appearance:"default",itemLabel:"Item",pageLabel:"Page",hideRangeLabel:false,hideAllFromItemsPerPage:false};this.showPagination=false;this.sortable=false;this.sortOptions={sortOrders:["unsorted","ascending","descending"],defaultColumn:""};this.stickyColumnHeaders=false;this.stickyRowHeaders=false;this.tableLayout="fixed";this.truncationPattern=undefined;this.updating=false;this.updatingOptions=undefined;this.variableRowHeight=undefined;this.width=undefined}disconnectedCallback(){var t;(t=this.resizeObserver)===null||t===void 0?void 0:t.disconnect()}componentWillLoad(){var t;this.rowsPerPage=Number(this.paginationBarOptions.itemsPerPageOptions[0].value);this.previousRowsPerPage=this.rowsPerPage;this.toRow=this.rowsPerPage;this.sortedColumn=this.sortOptions.defaultColumn;this.sortedColumnOrder=this.sortOptions.sortOrders[0];this.loadingOptions=Object.assign(Object.assign({},this.loadingOptions),{showBackground:((t=this.data)===null||t===void 0?void 0:t.length)>0});this.initialLoad=true;this.previousItemsPerPage=this.rowsPerPage}componentDidLoad(){const t=this.el.shadowRoot.querySelector("table");const i=this.el.shadowRoot.querySelector(".table-container");if(this.dataUpdated){this.dataUpdated=false}if((t===null||t===void 0?void 0:t.clientHeight)>(i===null||i===void 0?void 0:i.clientHeight)||(t===null||t===void 0?void 0:t.clientWidth)>(i===null||i===void 0?void 0:i.clientWidth)){this.scrollable=true}if(this.loading){this.startLoadingTimer();this.showLoadingIndicator()}if(this.truncationPattern){this.getTypographyElements().forEach((t=>{const i=this.getCellContainer(t);if(!i.classList.contains(this.TEXT_WRAP_STRING)){this.dataTruncation(t)}}));this.debounceDataTruncation()}if(this.globalRowHeight!=="auto"){this.updateSetRowHeight()}}componentDidUpdate(){if(this.truncationPattern===this.SHOW_HIDE_STRING||this.truncationPattern===this.TOOLTIP_STRING){this.truncateUpdatedData()}}componentDidRender(){this.fixCellTooltips()}truncateUpdatedData(){if(this.dataUpdated){if(this.truncationPattern===this.SHOW_HIDE_STRING){this.getTypographyElements().forEach((t=>{const i=this.getTruncWrapper(t);const e=this.getCellContainer(t);if((e===null||e===void 0?void 0:e.clientHeight)-this.DEFAULT_LINE_HEIGHT>=(i===null||i===void 0?void 0:i.scrollHeight)){this.resetShowHideTruncation(t);return}setTimeout((()=>{if((t===null||t===void 0?void 0:t.scrollHeight)>(e===null||e===void 0?void 0:e.clientHeight)){this.addShowHideTruncation(e,t)}}),150)}))}if(this.truncationPattern===this.TOOLTIP_STRING){this.updateTruncationTooltip()}this.dataUpdated=false}if(this.tableSorted){if(this.truncationPattern===this.TOOLTIP_STRING){this.updateTruncationTooltip()}if(this.truncationPattern===this.SHOW_HIDE_STRING){this.getTypographyElements().forEach((t=>{const i=this.getCellContainer(t);if(!i.classList.contains(this.TEXT_WRAP_STRING)){this.createShowHideTruncation(t,i)}else{t.resetTruncation().then((()=>{i.removeAttribute("style")}))}}))}this.tableSorted=false}if(this.rowHeightSet){const t=parseInt(getComputedStyle(document.documentElement).fontSize);const i=this.globalRowHeight==="auto";this.getTypographyElements().forEach((e=>{var s;const n=this.getCellContainer(e);const o=this.getTooltip(e);if(i){n.style.height=null;if(this.truncationPattern===this.TOOLTIP_STRING){this.removeTooltip(n,e,o);e.setAttribute("style",`--ic-line-clamp: 0`)}else if(this.truncationPattern===this.SHOW_HIDE_STRING){this.resetShowHideTruncation(e)}return}const a=t*parseFloat(n.getAttribute(this.DATA_ROW_HEIGHT_STRING));if(!((s=n===null||n===void 0?void 0:n.style)===null||s===void 0?void 0:s.height)&&a>n.clientHeight&&!n.classList.contains(this.TEXT_WRAP_STRING)){n.style.setProperty(this.ROW_HEIGHT_CSS_VARIABLE,n.getAttribute(this.DATA_ROW_HEIGHT_STRING))}if(this.truncationPattern){if(this.truncationPattern===this.SHOW_HIDE_STRING){const t=this.getTruncWrapper(e);const i=e.shadowRoot.querySelector("button");if(i&&(t===null||t===void 0?void 0:t.scrollHeight)<=n.clientHeight){this.resetShowHideTruncation(e);return}}this.truncate(e,n,o)}else{this.updateSetRowHeight(e)}}));this.rowHeightSet=false}if(this.itemsPerPageChange){const t=this.el.shadowRoot.querySelectorAll(".table-row");if(this.rowsPerPage>this.previousItemsPerPage){const i=Array.from(t).slice(this.previousItemsPerPage);i.forEach((t=>{t.querySelectorAll("ic-typography").forEach((t=>{const i=this.getCellContainer(t);const e=this.getTooltip(t);this.truncate(t,i,e)}))}))}this.previousItemsPerPage=this.rowsPerPage;this.itemsPerPageChange=false}if(!this.initialLoad&&this.icPageChangeEvent){if(this.truncationPattern===this.TOOLTIP_STRING){this.updateTruncationTooltip()}if(this.truncationPattern===this.SHOW_HIDE_STRING){this.getTypographyElements().forEach((t=>{const i=this.getCellContainer(t);const e=t.shadowRoot.querySelector("button");if((t===null||t===void 0?void 0:t.scrollHeight)>i.clientHeight&&!e){this.addShowHideTruncation(i,t)}}))}this.icPageChangeEvent=false}if(this.densityUpdate){this.getTypographyElements().forEach((t=>{const i=this.getCellContainer(t);const e=this.getTooltip(t);this.truncate(t,i,e)}));this.densityUpdate=false}if(this.truncationPatternUpdated){if(this.truncationPattern===this.TOOLTIP_STRING){this.getTypographyElements().forEach((t=>{const i=this.getCellContainer(t);const e=this.getTooltip(t);if(t.scrollHeight>i.clientHeight){this.addTooltipTruncation(t,i,e)}}))}else if(this.truncationPattern===this.SHOW_HIDE_STRING){this.getTypographyElements().forEach((t=>{const i=this.getTruncWrapper(t);const e=this.getCellContainer(t);if((e===null||e===void 0?void 0:e.clientHeight)-this.DEFAULT_LINE_HEIGHT>(i===null||i===void 0?void 0:i.scrollHeight)){this.resetShowHideTruncation(t);return}if((t===null||t===void 0?void 0:t.scrollHeight)>(e===null||e===void 0?void 0:e.clientHeight)){this.addShowHideTruncation(e,t)}}))}}}createShowHideTruncation(t,i){t.checkMaxLines(t.scrollHeight);t.setAttribute("max-lines",`${Math.floor((i===null||i===void 0?void 0:i.clientHeight)/this.DEFAULT_LINE_HEIGHT)}`);t.setShowHideExpanded(false);i.style.setProperty(this.ROW_HEIGHT_CSS_VARIABLE,null)}addTooltipTruncation(t,i,e){this.addLineClampCSS(t,i);if(!e){this.createTruncationTooltip(t,i)}}addShowHideTruncation(t,i){t.classList.add(this.SHOW_HIDE_CSS_CLASS);this.createShowHideTruncation(i,t)}getTruncWrapper(t){return t.shadowRoot.querySelector(".trunc-wrapper")}handleTypographyTruncationExpandToggle({detail:t}){const{expanded:i,typographyEl:e}=t;const s=this.getCellContainer(e);if(s.style.getPropertyValue(this.ROW_HEIGHT_CSS_VARIABLE)&&i){s.style.setProperty(this.ROW_HEIGHT_CSS_VARIABLE,"inherit")}}handlePageChange({detail:t,target:i}){if(i.parentElement!==this.el){this.fromRow=(t.value-1)*this.rowsPerPage;this.toRow=this.fromRow+this.rowsPerPage;const i=this.el.shadowRoot.querySelector(".table-row-container");if(this.previousRowsPerPage===this.rowsPerPage){i.scrollTop=0}else if(this.previousRowsPerPage<this.rowsPerPage){i.scrollTop=this.scrollOffset;this.previousRowsPerPage=this.rowsPerPage}else{this.previousRowsPerPage=this.rowsPerPage}}if(!this.initialLoad&&this.previousPaginationPage!==t.value){this.icPageChangeEvent=true}this.previousPaginationPage=t.value;this.initialLoad=false}handleItemsPerPageChange({detail:t,target:i}){if(i.parentElement!==this.el){this.previousRowsPerPage=this.rowsPerPage;this.rowsPerPage=t.value}this.itemsPerPageChange=true}handleDensityChange(t){this.density=t.detail.value}clickListener(t){if(t.target!==this.el)this.selectedRow=undefined}loadingHandler(t){if(t)this.startLoadingTimer();if(this.loading){setTimeout((()=>{this.showLoadingIndicator()}),500)}}truncationPatternHandler(t){if(t===this.TOOLTIP_STRING){this.resetShowHideTruncation();this.updateTruncationTooltip(true);this.getTypographyElements().forEach((t=>{const i=this.getCellContainer(t);const e=this.getTooltip(t);this.truncate(t,i,e)}))}if(t===this.SHOW_HIDE_STRING){this.updateTruncationTooltip(true);this.getTypographyElements().forEach((t=>{const i=this.getTruncWrapper(t);const e=this.getCellContainer(t);if((e===null||e===void 0?void 0:e.clientHeight)-this.DEFAULT_LINE_HEIGHT>(i===null||i===void 0?void 0:i.scrollHeight)){this.resetShowHideTruncation(t);return}setTimeout((()=>{if((t===null||t===void 0?void 0:t.scrollHeight)>(e===null||e===void 0?void 0:e.clientHeight)){this.addShowHideTruncation(e,t)}}),150)}))}this.truncationPatternUpdated=true}async dataHandler(t){this.loadingOptions=Object.assign(Object.assign({},this.loadingOptions),{showBackground:(t===null||t===void 0?void 0:t.length)>0});if(this.loading){!this.hasLoadedForOneSecond?setTimeout((()=>this.loading=false),this.minimumLoadingDisplayDuration-(Date.now()-this.timerStarted)):this.loading=false}if(this.updating)this.updating=false;this.dataUpdated=true}async densityHandler(){this.densityUpdate=true}resetShowHideTruncation(t){if(t){const i=this.getTruncWrapper(t);const e=this.getCellContainer(t);if((i===null||i===void 0?void 0:i.scrollHeight)>(e===null||e===void 0?void 0:e.clientHeight)&&!l(t.getAttribute("max-lines"))&&Math.floor((e===null||e===void 0?void 0:e.clientHeight)/this.DEFAULT_LINE_HEIGHT)!==+t.getAttribute("max-lines")){t.checkMaxLines(i.scrollHeight);t.setAttribute("max-lines",`${Math.floor((e===null||e===void 0?void 0:e.clientHeight)/this.DEFAULT_LINE_HEIGHT)}`);t.setShowHideExpanded(false);e.style.setProperty(this.ROW_HEIGHT_CSS_VARIABLE,null)}else{t.resetTruncation().then((()=>{if(!t.closest(this.TEXT_WRAP_CLASS)){e.style.setProperty(this.ROW_HEIGHT_CSS_VARIABLE,e.getAttribute(this.DATA_ROW_HEIGHT_STRING))}}))}}else{this.getTypographyElements().forEach((t=>{const i=this.getCellContainer(t);t.resetTruncation().then((()=>{if(!t.closest(this.TEXT_WRAP_CLASS)){i.style.setProperty(this.ROW_HEIGHT_CSS_VARIABLE,i.getAttribute(this.DATA_ROW_HEIGHT_STRING))}}))}))}}rowHeightChangeHandler(t,i){if(+t!==+i){this.deleteTextWrapDataKey(this.data);this.deleteTextWrapDataKey(this.columns);this.removeTextWrap();this.icRowHeightChange.emit();this.rowHeightSet=true}}async resetRowHeights(t){this.globalRowHeight=t||"auto";this.variableRowHeight=null}showLoadingIndicator(){this.loadingIndicator.classList.add("show")}getRowOptions(t,i){const e=t.indexOf("rowOptions");return e>-1&&i[e]}regenerateTooltip(t,i,e,s){if(e){if(this.tableSorted){e.setAttribute("target",i.id);e.setAttribute("label",i.textContent)}else{this.removeTooltip(t,i,e)}if(s){return}}if(!i.getAttribute("style")&&this.dataUpdated){this.addLineClampCSS(i,t)}if((i===null||i===void 0?void 0:i.scrollHeight)>(t===null||t===void 0?void 0:t.clientHeight)&&this.truncationPattern===this.TOOLTIP_STRING){if(!i.getAttribute("style")||i.style.cssText.includes("--ic-line-clamp: 0;")){this.addLineClampCSS(i,t)}this.createTruncationTooltip(i,t)}}removeTooltip(t,i,e){t.appendChild(i);if(e){e.remove()}}addLineClampCSS(t,i){t.setAttribute("style",`--ic-line-clamp: ${this.getLines(i===null||i===void 0?void 0:i.clientHeight)}`)}createTruncationTooltip(t,i){const e=document.createElement("ic-tooltip");e.setAttribute("target",t.id);e.setAttribute("label",t.textContent);e.classList.add("ic-tooltip-overflow");e.setExternalPopperProps({strategy:"fixed"});i.appendChild(e);e.appendChild(t)}render(){const{caption:t,createColumnHeaders:i,createRows:s,createUpdatingIndicator:o,data:a,hideColumnHeaders:l,loading:h,loadingOptions:d,paginationBarOptions:c,scrollable:u,scrollOffset:v,showPagination:g,sortable:p,sortedColumnOrder:f,sortedColumn:m,stickyColumnHeaders:b,updateScrollOffset:w,updating:y}=this;return e(n,{style:Object.assign({},this.setTableDimensions())},e("div",{class:"table-container"},r(this.el,"title-bar")&&e("slot",{name:"title-bar"}),e("div",{class:{["table-row-container"]:true,scrollable:u},tabIndex:u?0:null,onScroll:w},r(this.el,"title-bar")&&e("slot",{name:"title-bar"}),e("table",{style:{["--table-layout"]:this.tableLayout}},e("caption",{class:"table-caption"},t),!l&&e("thead",{class:{["column-header-sticky"]:b,["column-header-overlay"]:b&&v!==0}},e("tr",null,i())),y&&!h&&(l?e("thead",null,o()):o()),(a===null||a===void 0?void 0:a.length)>0&&!h&&e("tbody",null,s())),!(a===null||a===void 0?void 0:a.length)&&!h&&(r(this.el,"empty-state")?e("slot",{name:"empty-state"}):e("ic-empty-state",{aligned:"center",heading:"No Data",class:"loading-empty"}))),h&&e("ic-loading-indicator",{appearance:d===null||d===void 0?void 0:d.appearance,class:{"loading-empty":h,loading:true,"show-background":d.showBackground},description:d.description||"Loading table data",label:d.label||"Loading...",labelDuration:d===null||d===void 0?void 0:d.labelDuration,max:d===null||d===void 0?void 0:d.max,min:d===null||d===void 0?void 0:d.min,progress:d===null||d===void 0?void 0:d.progress,ref:t=>this.loadingIndicator=t}),(g||r(this.el,"pagination-bar"))&&e("div",{class:"pagination-container"},r(this.el,"pagination-bar")?e("slot",{name:"pagination-bar"}):e("ic-pagination-bar",{totalItems:a.length,type:c.type,rangeLabelType:c.rangeLabelType,showItemsPerPageControl:c.showItemsPerPageControl,showGoToPageControl:c.showGoToPageControl,itemsPerPageOptions:c.itemsPerPageOptions,alignment:c.alignment,appearance:c.appearance,itemLabel:c.itemLabel,pageLabel:c.pageLabel,hideRangeLabel:c.hideRangeLabel,hideAllFromItemsPerPage:c.hideAllFromItemsPerPage})),p&&e("div",{class:"screen-reader-sort-text","aria-live":"polite"},f!=="unsorted"&&m?`${m} sorted ${f}`:"table unsorted")))}get el(){return o(this)}static get watchers(){return{loading:["loadingHandler"],truncationPattern:["truncationPatternHandler"],data:["dataHandler"],density:["densityHandler"],globalRowHeight:["rowHeightChangeHandler"],variableRowHeight:["rowHeightChangeHandler"]}}};f.style=p;export{f as ic_data_table};
2
- //# sourceMappingURL=p-bdb5addb.entry.js.map