q2-tecton-elements 1.37.1 → 1.38.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/click-elsewhere_2.cjs.entry.js +68 -58
- package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
- package/dist/cjs/{index-6f9f259c.js → index-09c712ea.js} +13 -2
- package/dist/cjs/index-09c712ea.js.map +1 -0
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/q2-action-sheet.cjs.entry.js +2 -2
- package/dist/cjs/q2-action-sheet.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-avatar.cjs.entry.js +1 -1
- package/dist/cjs/q2-avatar.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-badge.cjs.entry.js +1 -1
- package/dist/cjs/q2-badge.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-btn_2.cjs.entry.js +3 -3
- package/dist/cjs/q2-btn_2.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-calendar.cjs.entry.js +38 -4
- package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-card.cjs.entry.js +2 -2
- package/dist/cjs/q2-card.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-carousel-pane.cjs.entry.js +2 -2
- package/dist/cjs/q2-carousel-pane.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-carousel.cjs.entry.js +2 -2
- package/dist/cjs/q2-carousel.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-chart-area.cjs.entry.js +2 -2
- package/dist/cjs/q2-chart-area.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-chart-bar.cjs.entry.js +2 -2
- package/dist/cjs/q2-chart-bar.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-chart-donut.cjs.entry.js +11 -2
- package/dist/cjs/q2-chart-donut.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-checkbox-group.cjs.entry.js +7 -2
- package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/q2-checkbox.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-data-table.cjs.entry.js +2 -2
- package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-dropdown-item.cjs.entry.js +2 -2
- package/dist/cjs/q2-dropdown-item.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-dropdown.cjs.entry.js +2 -2
- package/dist/cjs/q2-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-editable-field.cjs.entry.js +26 -3
- package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-icon.cjs.entry.js +2 -2
- package/dist/cjs/q2-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-input.cjs.entry.js +125 -12
- package/dist/cjs/q2-input.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-loc.cjs.entry.js +2 -2
- package/dist/cjs/q2-loc.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-message.cjs.entry.js +5 -2
- package/dist/cjs/q2-message.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-month-picker.cjs.entry.js +2 -2
- package/dist/cjs/q2-month-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-optgroup_2.cjs.entry.js +3 -3
- package/dist/cjs/q2-optgroup_2.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-option-list.cjs.entry.js +19 -11
- package/dist/cjs/q2-option-list.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-pagination.cjs.entry.js +2 -2
- package/dist/cjs/q2-pagination.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-pill.cjs.entry.js +2 -2
- package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-radio-group.cjs.entry.js +7 -2
- package/dist/cjs/q2-radio-group.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-radio.cjs.entry.js +2 -2
- package/dist/cjs/q2-radio.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-section.cjs.entry.js +2 -2
- package/dist/cjs/q2-section.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-select.cjs.entry.js +73 -20
- package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper-pane.cjs.entry.js +2 -2
- package/dist/cjs/q2-stepper-pane.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js +2 -2
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper.cjs.entry.js +2 -2
- package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tab-container.cjs.entry.js +16 -10
- package/dist/cjs/q2-tab-container.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tab-pane.cjs.entry.js +1 -1
- package/dist/cjs/q2-tab-pane.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tag.cjs.entry.js +2 -2
- package/dist/cjs/q2-tag.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tecton-elements.cjs.js +1 -1
- package/dist/cjs/q2-textarea.cjs.entry.js +39 -6
- package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tooltip.cjs.entry.js +2 -2
- package/dist/cjs/q2-tooltip.cjs.entry.js.map +1 -1
- package/dist/cjs/tecton-tab-pane.cjs.entry.js +1 -1
- package/dist/cjs/tecton-tab-pane.cjs.entry.js.map +1 -1
- package/dist/collection/components/q2-action-sheet/styles.css +1 -1
- package/dist/collection/components/q2-avatar/styles.css +1 -1
- package/dist/collection/components/q2-badge/styles.css +1 -1
- package/dist/collection/components/q2-btn/styles.css +18 -3
- package/dist/collection/components/q2-calendar/index.js +59 -10
- package/dist/collection/components/q2-calendar/index.js.map +1 -1
- package/dist/collection/components/q2-calendar/q2-month-picker.css +1 -1
- package/dist/collection/components/q2-calendar/styles.css +1 -1
- package/dist/collection/components/q2-card/styles.css +1 -1
- package/dist/collection/components/q2-carousel/styles.css +1 -1
- package/dist/collection/components/q2-carousel-pane/styles.css +1 -1
- package/dist/collection/components/q2-chart-area/styles.css +1 -1
- package/dist/collection/components/q2-chart-bar/styles.css +1 -1
- package/dist/collection/components/q2-chart-donut/index.js +12 -3
- package/dist/collection/components/q2-chart-donut/index.js.map +1 -1
- package/dist/collection/components/q2-chart-donut/styles.css +1 -1
- package/dist/collection/components/q2-checkbox/styles.css +84 -20
- package/dist/collection/components/q2-checkbox-group/index.js +10 -2
- package/dist/collection/components/q2-checkbox-group/index.js.map +1 -1
- package/dist/collection/components/q2-checkbox-group/styles.css +1 -1
- package/dist/collection/components/q2-data-table/index.js +6 -6
- package/dist/collection/components/q2-data-table/styles.css +1 -1
- package/dist/collection/components/q2-dropdown/styles.css +1 -1
- package/dist/collection/components/q2-dropdown-item/styles.css +1 -1
- package/dist/collection/components/q2-editable-field/index.js +44 -9
- package/dist/collection/components/q2-editable-field/index.js.map +1 -1
- package/dist/collection/components/q2-editable-field/styles.css +1 -1
- package/dist/collection/components/q2-icon/styles.css +1 -1
- package/dist/collection/components/q2-input/formatting/date.js +1 -1
- package/dist/collection/components/q2-input/formatting/date.js.map +1 -1
- package/dist/collection/components/q2-input/index.js +156 -16
- package/dist/collection/components/q2-input/index.js.map +1 -1
- package/dist/collection/components/q2-input/styles.css +64 -51
- package/dist/collection/components/q2-loading/styles.css +1 -1
- package/dist/collection/components/q2-loc/styles.css +1 -1
- package/dist/collection/components/q2-message/index.js +4 -1
- package/dist/collection/components/q2-message/index.js.map +1 -1
- package/dist/collection/components/q2-message/styles.css +1 -1
- package/dist/collection/components/q2-optgroup/styles.css +2 -2
- package/dist/collection/components/q2-option/styles.css +1 -1
- package/dist/collection/components/q2-option-list/index.js +19 -11
- package/dist/collection/components/q2-option-list/index.js.map +1 -1
- package/dist/collection/components/q2-option-list/styles.css +1 -1
- package/dist/collection/components/q2-pagination/styles.css +1 -1
- package/dist/collection/components/q2-pill/styles.css +7 -7
- package/dist/collection/components/q2-popover/index.js +90 -73
- package/dist/collection/components/q2-popover/index.js.map +1 -1
- package/dist/collection/components/q2-popover/styles.css +13 -13
- package/dist/collection/components/q2-radio/styles.css +36 -13
- package/dist/collection/components/q2-radio-group/index.js +10 -2
- package/dist/collection/components/q2-radio-group/index.js.map +1 -1
- package/dist/collection/components/q2-radio-group/styles.css +1 -1
- package/dist/collection/components/q2-section/styles.css +1 -1
- package/dist/collection/components/q2-select/index.js +96 -26
- package/dist/collection/components/q2-select/index.js.map +1 -1
- package/dist/collection/components/q2-select/styles.css +18 -10
- package/dist/collection/components/q2-stepper/styles.css +2 -12
- package/dist/collection/components/q2-stepper-pane/index.js +2 -2
- package/dist/collection/components/q2-stepper-pane/styles.css +1 -1
- package/dist/collection/components/q2-stepper-vertical/styles.css +1 -1
- package/dist/collection/components/q2-tab-container/index.js +14 -8
- package/dist/collection/components/q2-tab-container/index.js.map +1 -1
- package/dist/collection/components/q2-tab-container/styles.css +1 -1
- package/dist/collection/components/q2-tab-pane/styles.css +1 -1
- package/dist/collection/components/q2-tag/styles.css +4 -4
- package/dist/collection/components/q2-textarea/index.js +44 -8
- package/dist/collection/components/q2-textarea/index.js.map +1 -1
- package/dist/collection/components/q2-textarea/styles.css +69 -11
- package/dist/collection/components/q2-tooltip/styles.css +1 -1
- package/dist/collection/components/tecton-tab-pane/styles.css +1 -1
- package/dist/collection/utils/index.js +11 -1
- package/dist/collection/utils/index.js.map +1 -1
- package/dist/components/index10.js +1 -1
- package/dist/components/index10.js.map +1 -1
- package/dist/components/index11.js +5 -2
- package/dist/components/index11.js.map +1 -1
- package/dist/components/index12.js +1 -1
- package/dist/components/index12.js.map +1 -1
- package/dist/components/index13.js +1 -1
- package/dist/components/index13.js.map +1 -1
- package/dist/components/index14.js +18 -10
- package/dist/components/index14.js.map +1 -1
- package/dist/components/index15.js +69 -59
- package/dist/components/index15.js.map +1 -1
- package/dist/components/index16.js +12 -2
- package/dist/components/index16.js.map +1 -1
- package/dist/components/index3.js +1 -1
- package/dist/components/index3.js.map +1 -1
- package/dist/components/index4.js +1 -1
- package/dist/components/index4.js.map +1 -1
- package/dist/components/index5.js +1 -1
- package/dist/components/index5.js.map +1 -1
- package/dist/components/index6.js +1 -1
- package/dist/components/index6.js.map +1 -1
- package/dist/components/index7.js +1 -1
- package/dist/components/index7.js.map +1 -1
- package/dist/components/index8.js +1 -1
- package/dist/components/index8.js.map +1 -1
- package/dist/components/index9.js +127 -12
- package/dist/components/index9.js.map +1 -1
- package/dist/components/q2-action-sheet.js +1 -1
- package/dist/components/q2-action-sheet.js.map +1 -1
- package/dist/components/q2-calendar.js +37 -3
- package/dist/components/q2-calendar.js.map +1 -1
- package/dist/components/q2-card.js +1 -1
- package/dist/components/q2-card.js.map +1 -1
- package/dist/components/q2-carousel-pane.js +1 -1
- package/dist/components/q2-carousel-pane.js.map +1 -1
- package/dist/components/q2-carousel.js +1 -1
- package/dist/components/q2-carousel.js.map +1 -1
- package/dist/components/q2-chart-area.js +1 -1
- package/dist/components/q2-chart-area.js.map +1 -1
- package/dist/components/q2-chart-bar.js +1 -1
- package/dist/components/q2-chart-bar.js.map +1 -1
- package/dist/components/q2-chart-donut.js +10 -1
- package/dist/components/q2-chart-donut.js.map +1 -1
- package/dist/components/q2-checkbox-group.js +6 -1
- package/dist/components/q2-checkbox-group.js.map +1 -1
- package/dist/components/q2-data-table.js +1 -1
- package/dist/components/q2-data-table.js.map +1 -1
- package/dist/components/q2-dropdown.js +1 -1
- package/dist/components/q2-dropdown.js.map +1 -1
- package/dist/components/q2-editable-field.js +25 -2
- package/dist/components/q2-editable-field.js.map +1 -1
- package/dist/components/q2-loc.js +1 -1
- package/dist/components/q2-loc.js.map +1 -1
- package/dist/components/q2-month-picker.js +1 -1
- package/dist/components/q2-month-picker.js.map +1 -1
- package/dist/components/q2-pagination.js +1 -1
- package/dist/components/q2-pagination.js.map +1 -1
- package/dist/components/q2-pill.js +1 -1
- package/dist/components/q2-pill.js.map +1 -1
- package/dist/components/q2-radio-group.js +6 -1
- package/dist/components/q2-radio-group.js.map +1 -1
- package/dist/components/q2-radio.js +1 -1
- package/dist/components/q2-radio.js.map +1 -1
- package/dist/components/q2-section.js +1 -1
- package/dist/components/q2-section.js.map +1 -1
- package/dist/components/q2-select.js +74 -19
- package/dist/components/q2-select.js.map +1 -1
- package/dist/components/q2-stepper-pane.js +1 -1
- package/dist/components/q2-stepper-pane.js.map +1 -1
- package/dist/components/q2-stepper-vertical.js +1 -1
- package/dist/components/q2-stepper-vertical.js.map +1 -1
- package/dist/components/q2-stepper.js +1 -1
- package/dist/components/q2-stepper.js.map +1 -1
- package/dist/components/q2-tab-container.js +15 -9
- package/dist/components/q2-tab-container.js.map +1 -1
- package/dist/components/q2-tab-pane.js +1 -1
- package/dist/components/q2-tab-pane.js.map +1 -1
- package/dist/components/q2-tag.js +1 -1
- package/dist/components/q2-tag.js.map +1 -1
- package/dist/components/q2-textarea.js +38 -5
- package/dist/components/q2-textarea.js.map +1 -1
- package/dist/components/q2-tooltip.js +1 -1
- package/dist/components/q2-tooltip.js.map +1 -1
- package/dist/components/tecton-tab-pane.js +1 -1
- package/dist/components/tecton-tab-pane.js.map +1 -1
- package/dist/esm/click-elsewhere_2.entry.js +68 -58
- package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
- package/dist/esm/{index-74a659a5.js → index-84f1034e.js} +13 -3
- package/dist/esm/index-84f1034e.js.map +1 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/q2-action-sheet.entry.js +2 -2
- package/dist/esm/q2-action-sheet.entry.js.map +1 -1
- package/dist/esm/q2-avatar.entry.js +1 -1
- package/dist/esm/q2-avatar.entry.js.map +1 -1
- package/dist/esm/q2-badge.entry.js +1 -1
- package/dist/esm/q2-badge.entry.js.map +1 -1
- package/dist/esm/q2-btn_2.entry.js +3 -3
- package/dist/esm/q2-btn_2.entry.js.map +1 -1
- package/dist/esm/q2-calendar.entry.js +38 -4
- package/dist/esm/q2-calendar.entry.js.map +1 -1
- package/dist/esm/q2-card.entry.js +2 -2
- package/dist/esm/q2-card.entry.js.map +1 -1
- package/dist/esm/q2-carousel-pane.entry.js +2 -2
- package/dist/esm/q2-carousel-pane.entry.js.map +1 -1
- package/dist/esm/q2-carousel.entry.js +2 -2
- package/dist/esm/q2-carousel.entry.js.map +1 -1
- package/dist/esm/q2-chart-area.entry.js +2 -2
- package/dist/esm/q2-chart-area.entry.js.map +1 -1
- package/dist/esm/q2-chart-bar.entry.js +2 -2
- package/dist/esm/q2-chart-bar.entry.js.map +1 -1
- package/dist/esm/q2-chart-donut.entry.js +11 -2
- package/dist/esm/q2-chart-donut.entry.js.map +1 -1
- package/dist/esm/q2-checkbox-group.entry.js +7 -2
- package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
- package/dist/esm/q2-checkbox.entry.js +2 -2
- package/dist/esm/q2-checkbox.entry.js.map +1 -1
- package/dist/esm/q2-data-table.entry.js +2 -2
- package/dist/esm/q2-data-table.entry.js.map +1 -1
- package/dist/esm/q2-dropdown-item.entry.js +2 -2
- package/dist/esm/q2-dropdown-item.entry.js.map +1 -1
- package/dist/esm/q2-dropdown.entry.js +2 -2
- package/dist/esm/q2-dropdown.entry.js.map +1 -1
- package/dist/esm/q2-editable-field.entry.js +26 -3
- package/dist/esm/q2-editable-field.entry.js.map +1 -1
- package/dist/esm/q2-icon.entry.js +2 -2
- package/dist/esm/q2-icon.entry.js.map +1 -1
- package/dist/esm/q2-input.entry.js +125 -12
- package/dist/esm/q2-input.entry.js.map +1 -1
- package/dist/esm/q2-loc.entry.js +2 -2
- package/dist/esm/q2-loc.entry.js.map +1 -1
- package/dist/esm/q2-message.entry.js +5 -2
- package/dist/esm/q2-message.entry.js.map +1 -1
- package/dist/esm/q2-month-picker.entry.js +2 -2
- package/dist/esm/q2-month-picker.entry.js.map +1 -1
- package/dist/esm/q2-optgroup_2.entry.js +3 -3
- package/dist/esm/q2-optgroup_2.entry.js.map +1 -1
- package/dist/esm/q2-option-list.entry.js +19 -11
- package/dist/esm/q2-option-list.entry.js.map +1 -1
- package/dist/esm/q2-pagination.entry.js +2 -2
- package/dist/esm/q2-pagination.entry.js.map +1 -1
- package/dist/esm/q2-pill.entry.js +2 -2
- package/dist/esm/q2-pill.entry.js.map +1 -1
- package/dist/esm/q2-radio-group.entry.js +7 -2
- package/dist/esm/q2-radio-group.entry.js.map +1 -1
- package/dist/esm/q2-radio.entry.js +2 -2
- package/dist/esm/q2-radio.entry.js.map +1 -1
- package/dist/esm/q2-section.entry.js +2 -2
- package/dist/esm/q2-section.entry.js.map +1 -1
- package/dist/esm/q2-select.entry.js +73 -20
- package/dist/esm/q2-select.entry.js.map +1 -1
- package/dist/esm/q2-stepper-pane.entry.js +2 -2
- package/dist/esm/q2-stepper-pane.entry.js.map +1 -1
- package/dist/esm/q2-stepper-vertical.entry.js +2 -2
- package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
- package/dist/esm/q2-stepper.entry.js +2 -2
- package/dist/esm/q2-stepper.entry.js.map +1 -1
- package/dist/esm/q2-tab-container.entry.js +16 -10
- package/dist/esm/q2-tab-container.entry.js.map +1 -1
- package/dist/esm/q2-tab-pane.entry.js +1 -1
- package/dist/esm/q2-tab-pane.entry.js.map +1 -1
- package/dist/esm/q2-tag.entry.js +2 -2
- package/dist/esm/q2-tag.entry.js.map +1 -1
- package/dist/esm/q2-tecton-elements.js +1 -1
- package/dist/esm/q2-textarea.entry.js +39 -6
- package/dist/esm/q2-textarea.entry.js.map +1 -1
- package/dist/esm/q2-tooltip.entry.js +2 -2
- package/dist/esm/q2-tooltip.entry.js.map +1 -1
- package/dist/esm/tecton-tab-pane.entry.js +1 -1
- package/dist/esm/tecton-tab-pane.entry.js.map +1 -1
- package/dist/q2-tecton-elements/p-059ea7c9.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-bfd69d42.entry.js.map → p-059ea7c9.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-072bda73.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-077107c1.entry.js.map → p-072bda73.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-0cade28b.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-47c60d4a.entry.js.map → p-0cade28b.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-0fb2be4c.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-536978fe.entry.js.map → p-0fb2be4c.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-107f07f2.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-4abbd0b1.entry.js.map → p-107f07f2.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-145849d0.entry.js +2 -0
- package/dist/q2-tecton-elements/p-145849d0.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-14e3c48f.entry.js +2 -0
- package/dist/q2-tecton-elements/p-14e3c48f.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-15179d55.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-46287c02.entry.js.map → p-15179d55.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-2812f9d2.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-58cdb9c7.entry.js.map → p-2812f9d2.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-29a7ca63.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-a52371cf.entry.js.map → p-29a7ca63.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-311f37e2.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-1c993698.entry.js.map → p-311f37e2.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-9ef2829e.entry.js → p-3d82d94f.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-9ef2829e.entry.js.map → p-3d82d94f.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-8e7b762a.entry.js → p-52132d80.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-8e7b762a.entry.js.map → p-52132d80.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-57e81863.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-e45856f7.entry.js.map → p-57e81863.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-5843f6c8.entry.js +2 -0
- package/dist/q2-tecton-elements/p-5843f6c8.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-5c033ed9.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-09d4b3d3.entry.js.map → p-5c033ed9.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-a60f82c0.entry.js → p-69dcf12e.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-a60f82c0.entry.js.map → p-69dcf12e.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-6ae87415.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-9d743327.entry.js.map → p-6ae87415.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-72b4ecc6.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-597f8656.entry.js.map → p-72b4ecc6.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-81b917a5.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-9c9a2550.entry.js.map → p-81b917a5.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-85dc889e.entry.js +2 -0
- package/dist/q2-tecton-elements/p-85dc889e.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-8f273db2.entry.js +2 -0
- package/dist/q2-tecton-elements/p-8f273db2.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-8f8d5362.entry.js +2 -0
- package/dist/q2-tecton-elements/p-8f8d5362.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-9220365b.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-6cacc879.entry.js.map → p-9220365b.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-75fd6df5.entry.js → p-959f47ef.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-75fd6df5.entry.js.map → p-959f47ef.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-9da0db14.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-6170e44c.entry.js.map → p-9da0db14.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-a09c90c1.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-efbe6c17.entry.js.map → p-a09c90c1.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-a4017e55.entry.js +2 -0
- package/dist/q2-tecton-elements/p-a4017e55.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-a6b03db1.entry.js +2 -0
- package/dist/q2-tecton-elements/p-a6b03db1.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-af98db79.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-59d34a17.entry.js.map → p-af98db79.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-e8858d0d.entry.js → p-b83568e7.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-b83568e7.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-bb0d4f5a.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-ff6afb42.entry.js.map → p-bb0d4f5a.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-c057134f.entry.js +2 -0
- package/dist/q2-tecton-elements/p-c057134f.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-d7fb3534.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-3505f25c.entry.js.map → p-d7fb3534.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-db3bbfb8.entry.js +2 -0
- package/dist/q2-tecton-elements/p-db3bbfb8.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-deb773a5.entry.js +2 -0
- package/dist/q2-tecton-elements/p-deb773a5.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-e4dadcd7.entry.js +2 -0
- package/dist/q2-tecton-elements/{p-9a28b93a.entry.js.map → p-e4dadcd7.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-e98d9cf2.entry.js +2 -0
- package/dist/q2-tecton-elements/p-e98d9cf2.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-f198f77b.entry.js +2 -0
- package/dist/q2-tecton-elements/p-f198f77b.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-f34521a4.js +2 -0
- package/dist/q2-tecton-elements/p-f34521a4.js.map +1 -0
- package/dist/q2-tecton-elements/p-f3868a77.entry.js +2 -0
- package/dist/q2-tecton-elements/p-f3868a77.entry.js.map +1 -0
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js +1 -1
- package/dist/q2-tecton-elements/q2-tecton-elements.esm.js.map +1 -1
- package/dist/test/elements/q2-calendar-test.e2e.js +109 -47
- package/dist/test/elements/q2-calendar-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-checkbox-test.e2e.js +156 -0
- package/dist/test/elements/q2-checkbox-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-editable-field-test.e2e.js +27 -0
- package/dist/test/elements/q2-editable-field-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-input-test.e2e.js +88 -4
- package/dist/test/elements/q2-input-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-option-list-test.e2e.js +40 -10
- package/dist/test/elements/q2-option-list-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-popover-test.e2e.js +269 -79
- package/dist/test/elements/q2-popover-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-select-test.e2e.js +117 -42
- package/dist/test/elements/q2-select-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-tab-container-test.e2e.js +2 -2
- package/dist/test/elements/q2-tab-container-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-textarea-test.e2e.js +879 -199
- package/dist/test/elements/q2-textarea-test.e2e.js.map +1 -1
- package/dist/test/helpers.js +2 -1
- package/dist/test/helpers.js.map +1 -1
- package/dist/types/components/q2-calendar/index.d.ts +31 -0
- package/dist/types/components/q2-chart-donut/index.d.ts +9 -0
- package/dist/types/components/q2-checkbox-group/index.d.ts +5 -0
- package/dist/types/components/q2-editable-field/index.d.ts +23 -0
- package/dist/types/components/q2-input/index.d.ts +28 -2
- package/dist/types/components/q2-message/index.d.ts +3 -0
- package/dist/types/components/q2-popover/index.d.ts +9 -1
- package/dist/types/components/q2-radio-group/index.d.ts +5 -0
- package/dist/types/components/q2-select/index.d.ts +33 -3
- package/dist/types/components/q2-textarea/index.d.ts +12 -1
- package/dist/types/components.d.ts +93 -2
- package/dist/types/global.d.ts +2 -1
- package/dist/types/utils/index.d.ts +1 -0
- package/package.json +3 -3
- package/dist/cjs/index-6f9f259c.js.map +0 -1
- package/dist/docs.d.ts +0 -322
- package/dist/docs.json +0 -10294
- package/dist/esm/index-74a659a5.js.map +0 -1
- package/dist/q2-tecton-elements/p-077107c1.entry.js +0 -2
- package/dist/q2-tecton-elements/p-09d4b3d3.entry.js +0 -2
- package/dist/q2-tecton-elements/p-0d4aec6e.entry.js +0 -2
- package/dist/q2-tecton-elements/p-0d4aec6e.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-1c993698.entry.js +0 -2
- package/dist/q2-tecton-elements/p-252889b7.entry.js +0 -2
- package/dist/q2-tecton-elements/p-252889b7.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-25bd1b18.entry.js +0 -2
- package/dist/q2-tecton-elements/p-25bd1b18.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-2a975246.entry.js +0 -2
- package/dist/q2-tecton-elements/p-2a975246.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-30facf35.entry.js +0 -2
- package/dist/q2-tecton-elements/p-30facf35.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-3505f25c.entry.js +0 -2
- package/dist/q2-tecton-elements/p-46287c02.entry.js +0 -2
- package/dist/q2-tecton-elements/p-47c60d4a.entry.js +0 -2
- package/dist/q2-tecton-elements/p-4abbd0b1.entry.js +0 -2
- package/dist/q2-tecton-elements/p-536978fe.entry.js +0 -2
- package/dist/q2-tecton-elements/p-570c1d3d.entry.js +0 -2
- package/dist/q2-tecton-elements/p-570c1d3d.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-578e3f98.entry.js +0 -2
- package/dist/q2-tecton-elements/p-578e3f98.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-58cdb9c7.entry.js +0 -2
- package/dist/q2-tecton-elements/p-597f8656.entry.js +0 -2
- package/dist/q2-tecton-elements/p-59d34a17.entry.js +0 -2
- package/dist/q2-tecton-elements/p-5bc4d94c.entry.js +0 -2
- package/dist/q2-tecton-elements/p-5bc4d94c.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-6170e44c.entry.js +0 -2
- package/dist/q2-tecton-elements/p-67f33354.entry.js +0 -2
- package/dist/q2-tecton-elements/p-67f33354.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-680929be.entry.js +0 -2
- package/dist/q2-tecton-elements/p-680929be.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-6cacc879.entry.js +0 -2
- package/dist/q2-tecton-elements/p-7366d36d.entry.js +0 -2
- package/dist/q2-tecton-elements/p-7366d36d.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-9a28b93a.entry.js +0 -2
- package/dist/q2-tecton-elements/p-9c9a2550.entry.js +0 -2
- package/dist/q2-tecton-elements/p-9d743327.entry.js +0 -2
- package/dist/q2-tecton-elements/p-a52371cf.entry.js +0 -2
- package/dist/q2-tecton-elements/p-a53e9f1e.entry.js +0 -2
- package/dist/q2-tecton-elements/p-a53e9f1e.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-ac82ea35.entry.js +0 -2
- package/dist/q2-tecton-elements/p-ac82ea35.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-bfd69d42.entry.js +0 -2
- package/dist/q2-tecton-elements/p-db6921fb.entry.js +0 -2
- package/dist/q2-tecton-elements/p-db6921fb.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-e45856f7.entry.js +0 -2
- package/dist/q2-tecton-elements/p-e8858d0d.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-ef856249.js +0 -2
- package/dist/q2-tecton-elements/p-ef856249.js.map +0 -1
- package/dist/q2-tecton-elements/p-efbe6c17.entry.js +0 -2
- package/dist/q2-tecton-elements/p-ff6afb42.entry.js +0 -2
- /package/dist/types/workspace/workspace/{tecton-production_release_1.37.x → tecton-production_release_1.38.x}/packages/q2-tecton-elements/.stencil/test/helpers.d.ts +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { h, Fragment, } from '@stencil/core';
|
|
2
|
-
import { createGuid, labelDOM, loc, messagesDOM, setMessageHeight, handleAriaLabel, overrideFocus, isEventFromElement, isMobile, } from 'src/utils';
|
|
2
|
+
import { createGuid, labelDOM, loc, messagesDOM, setMessageHeight, handleAriaLabel, overrideFocus, isEventFromElement, isMobile, hasSlotContent, nextPaint, } from 'src/utils';
|
|
3
3
|
import formatCurrency from './formatting/currency';
|
|
4
4
|
import formatPhoneNumber from './formatting/phone';
|
|
5
5
|
import formatSSN from './formatting/ssn';
|
|
@@ -33,6 +33,10 @@ export class Q2Input {
|
|
|
33
33
|
constructor() {
|
|
34
34
|
this.scheduledAfterRender = [];
|
|
35
35
|
this.isMobile = isMobile();
|
|
36
|
+
this.onMutationObserved = () => {
|
|
37
|
+
// Updating checkSlotCount to force re-render when slot content changes
|
|
38
|
+
this.checkSlotCount = this.checkSlotCount + 1;
|
|
39
|
+
};
|
|
36
40
|
this.guid = createGuid();
|
|
37
41
|
///// ACTIONS ////////
|
|
38
42
|
this.onToggleVisibility = () => {
|
|
@@ -63,6 +67,8 @@ export class Q2Input {
|
|
|
63
67
|
};
|
|
64
68
|
this.onInputInput = (event) => {
|
|
65
69
|
event.stopPropagation();
|
|
70
|
+
if (this.type === 'currency')
|
|
71
|
+
this.handleCurrencyDeletion(event);
|
|
66
72
|
const newFormattedValue = this.getFormattedValue(event.target.value, false);
|
|
67
73
|
this.handleDataInput(newFormattedValue);
|
|
68
74
|
};
|
|
@@ -86,9 +92,19 @@ export class Q2Input {
|
|
|
86
92
|
}
|
|
87
93
|
this.setCursorPosition(cursorPosition);
|
|
88
94
|
};
|
|
95
|
+
// Sets textSelectedForDeletion to true if the user has selected text for deletion
|
|
96
|
+
// This is used to prevent other logic from running when text is deleted
|
|
97
|
+
this.handleCurrencyKeydown = (event) => {
|
|
98
|
+
if (event.key !== 'Backspace' && event.key !== 'Delete')
|
|
99
|
+
return;
|
|
100
|
+
const inputElement = this.inputField;
|
|
101
|
+
this.textSelectedForDeletion = inputElement.selectionStart !== inputElement.selectionEnd;
|
|
102
|
+
};
|
|
89
103
|
this.onInputKeydown = (event) => {
|
|
90
104
|
const keysThatMoveCursor = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];
|
|
91
105
|
const { key } = event;
|
|
106
|
+
if (this.type === 'currency')
|
|
107
|
+
this.handleCurrencyKeydown(event);
|
|
92
108
|
if (this.shouldCursorStayAtEnd && keysThatMoveCursor.includes(key))
|
|
93
109
|
event.preventDefault();
|
|
94
110
|
if (key === 'Enter' && this.valueOnFocus !== this.formattedValueObject.value) {
|
|
@@ -121,6 +137,7 @@ export class Q2Input {
|
|
|
121
137
|
this.iconLeft = undefined;
|
|
122
138
|
this.iconRight = undefined;
|
|
123
139
|
this.readonly = undefined;
|
|
140
|
+
this.showCount = undefined;
|
|
124
141
|
this.clearable = undefined;
|
|
125
142
|
this.optional = undefined;
|
|
126
143
|
this.min = undefined;
|
|
@@ -146,6 +163,7 @@ export class Q2Input {
|
|
|
146
163
|
this.formattedValueObject = undefined;
|
|
147
164
|
this.hasFocus = undefined;
|
|
148
165
|
this.isSmall = false;
|
|
166
|
+
this.checkSlotCount = 0;
|
|
149
167
|
}
|
|
150
168
|
/////// LIFECYCLE HOOKS ////////
|
|
151
169
|
componentWillLoad() {
|
|
@@ -170,13 +188,19 @@ export class Q2Input {
|
|
|
170
188
|
this.inputField.focus();
|
|
171
189
|
}
|
|
172
190
|
overrideFocus(this.hostElement);
|
|
191
|
+
const observer = new MutationObserver(this.onMutationObserved);
|
|
192
|
+
observer.observe(this.hostElement, { childList: true });
|
|
193
|
+
this.mutationObserver = observer;
|
|
173
194
|
}
|
|
174
195
|
componentDidRender() {
|
|
175
196
|
this.scheduledAfterRender.forEach(fn => fn());
|
|
176
197
|
this.scheduledAfterRender = [];
|
|
177
198
|
}
|
|
178
199
|
disconnectedCallback() {
|
|
200
|
+
var _a;
|
|
179
201
|
this.manageClearableResizeObserver();
|
|
202
|
+
(_a = this.mutationObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
|
|
203
|
+
this.mutationObserver = null;
|
|
180
204
|
}
|
|
181
205
|
getFormattedValue(value, valueChangedFromProperty) {
|
|
182
206
|
const formattingFunctions = {
|
|
@@ -203,9 +227,12 @@ export class Q2Input {
|
|
|
203
227
|
unformattedValue: value,
|
|
204
228
|
};
|
|
205
229
|
}
|
|
230
|
+
get hasCustomDisplaySlot() {
|
|
231
|
+
return !!this.hostElement.querySelector('[slot=custom-display]');
|
|
232
|
+
}
|
|
206
233
|
get canClear() {
|
|
207
|
-
var _a
|
|
208
|
-
return this.clearable && !!((
|
|
234
|
+
var _a;
|
|
235
|
+
return this.clearable && !!(((_a = this.inputField) === null || _a === void 0 ? void 0 : _a.value) || this.value);
|
|
209
236
|
}
|
|
210
237
|
get shouldCursorStayAtEnd() {
|
|
211
238
|
return this.isMobile && this.type === 'currency';
|
|
@@ -230,6 +257,12 @@ export class Q2Input {
|
|
|
230
257
|
get inputDescribedBy() {
|
|
231
258
|
return this.showMessages ? `${this.inputId}-description` : undefined;
|
|
232
259
|
}
|
|
260
|
+
get hasInputLeftSlot() {
|
|
261
|
+
return hasSlotContent(this.hostElement, 'input-left');
|
|
262
|
+
}
|
|
263
|
+
get hasInputRightSlot() {
|
|
264
|
+
return hasSlotContent(this.hostElement, 'input-right');
|
|
265
|
+
}
|
|
233
266
|
get isMaskedType() {
|
|
234
267
|
const maskedTypes = [
|
|
235
268
|
'currency',
|
|
@@ -384,6 +417,14 @@ export class Q2Input {
|
|
|
384
417
|
this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));
|
|
385
418
|
}
|
|
386
419
|
/// Methods ///
|
|
420
|
+
/**
|
|
421
|
+
* Emulates focusing the `<input>`, entering the provided value, and emitting an `input` event.
|
|
422
|
+
*
|
|
423
|
+
* This method leaves the focus on the `<input>` and as a result does not trigger the `change` event. If you want
|
|
424
|
+
* to trigger the` change` event, move the focus to another element after calling this method.
|
|
425
|
+
*
|
|
426
|
+
* @testOnly
|
|
427
|
+
*/
|
|
387
428
|
setValue(value) {
|
|
388
429
|
const { inputField } = this;
|
|
389
430
|
inputField.focus();
|
|
@@ -391,6 +432,14 @@ export class Q2Input {
|
|
|
391
432
|
inputField.value = value;
|
|
392
433
|
inputField.dispatchEvent(new InputEvent('input'));
|
|
393
434
|
}
|
|
435
|
+
/**
|
|
436
|
+
* Emulates clicking the clear button when the input is clearable.
|
|
437
|
+
*
|
|
438
|
+
* @warning
|
|
439
|
+
* Only applicable when the input is clearable.
|
|
440
|
+
*
|
|
441
|
+
* @testOnly
|
|
442
|
+
*/
|
|
394
443
|
clearValue() {
|
|
395
444
|
if (!this.clearable)
|
|
396
445
|
return;
|
|
@@ -408,6 +457,60 @@ export class Q2Input {
|
|
|
408
457
|
this.value = event.detail.value;
|
|
409
458
|
}
|
|
410
459
|
}
|
|
460
|
+
handleCurrencyDeletion(event) {
|
|
461
|
+
// Don't do anything if text was selected for deletion
|
|
462
|
+
if (this.textSelectedForDeletion) {
|
|
463
|
+
this.textSelectedForDeletion = false;
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
466
|
+
// We only care about "Backspace" and "Delete" events
|
|
467
|
+
if (event.inputType !== 'deleteContentBackward' && event.inputType !== 'deleteContentForward')
|
|
468
|
+
return;
|
|
469
|
+
const input = event.target;
|
|
470
|
+
const cursorPosition = input.selectionStart;
|
|
471
|
+
const { formattedValue } = this.formattedValueObject;
|
|
472
|
+
if (cursorPosition === null)
|
|
473
|
+
return;
|
|
474
|
+
let cursorMap;
|
|
475
|
+
switch (event.inputType) {
|
|
476
|
+
case 'deleteContentBackward':
|
|
477
|
+
const valueBeforeCursor = formattedValue.substring(0, cursorPosition + 1);
|
|
478
|
+
const isPrevCharAlphaNum = /[a-zA-Z0-9]$/.test(valueBeforeCursor);
|
|
479
|
+
cursorMap = {
|
|
480
|
+
leftIndex: isPrevCharAlphaNum ? cursorPosition : cursorPosition - 1,
|
|
481
|
+
rightIndex: isPrevCharAlphaNum ? cursorPosition + 1 : cursorPosition,
|
|
482
|
+
afterCursorOffset: 0,
|
|
483
|
+
newCursorOffset: 1,
|
|
484
|
+
};
|
|
485
|
+
break;
|
|
486
|
+
case 'deleteContentForward':
|
|
487
|
+
const valueAfterCursor = formattedValue.substring(cursorPosition);
|
|
488
|
+
const isNextCharAlphaNum = /^[a-zA-Z0-9]/.test(valueAfterCursor);
|
|
489
|
+
cursorMap = {
|
|
490
|
+
leftIndex: isNextCharAlphaNum ? cursorPosition : cursorPosition + 1,
|
|
491
|
+
rightIndex: isNextCharAlphaNum ? cursorPosition + 1 : cursorPosition + 2,
|
|
492
|
+
afterCursorOffset: 1,
|
|
493
|
+
newCursorOffset: 0,
|
|
494
|
+
};
|
|
495
|
+
break;
|
|
496
|
+
default:
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
// Ensure the cursor doesn't move with a newly formatted value
|
|
500
|
+
const newValue = [
|
|
501
|
+
formattedValue.substring(0, cursorMap.leftIndex),
|
|
502
|
+
formattedValue.substring(cursorMap.rightIndex),
|
|
503
|
+
].join('');
|
|
504
|
+
const charactersAfterCursor = formattedValue.length - cursorPosition - cursorMap.afterCursorOffset;
|
|
505
|
+
const newFormattedValue = this.getFormattedValue(newValue, false).formattedValue;
|
|
506
|
+
const newCursorPosition = Math.max(newFormattedValue.length - charactersAfterCursor + cursorMap.newCursorOffset, 0);
|
|
507
|
+
input.value = newFormattedValue;
|
|
508
|
+
input.setSelectionRange(newCursorPosition, newCursorPosition);
|
|
509
|
+
// This handles a runtime issue when a character is deleted from the beginning of the input
|
|
510
|
+
if (newCursorPosition === 0) {
|
|
511
|
+
nextPaint(() => input.setSelectionRange(newCursorPosition, newCursorPosition));
|
|
512
|
+
}
|
|
513
|
+
}
|
|
411
514
|
handleDataInput(newFormattedValue) {
|
|
412
515
|
if (this.maxlength === undefined ||
|
|
413
516
|
newFormattedValue.unformattedValue.length <= this.maxlength ||
|
|
@@ -422,14 +525,18 @@ export class Q2Input {
|
|
|
422
525
|
}
|
|
423
526
|
/////// VIEW METHODS ///////
|
|
424
527
|
render() {
|
|
425
|
-
return (h("div", { class: this.wrapperClasses }, labelDOM(this), this.inputContainerDOM(), messagesDOM(this)));
|
|
528
|
+
return (h("div", { class: this.wrapperClasses }, h("div", { class: "label-wrapper" }, labelDOM(this), this.countDOM()), this.inputContainerDOM(), messagesDOM(this)));
|
|
426
529
|
}
|
|
427
|
-
|
|
428
|
-
|
|
530
|
+
countDOM() {
|
|
531
|
+
if (!this.showCount)
|
|
532
|
+
return;
|
|
533
|
+
const { maxlength, formattedValueObject } = this;
|
|
534
|
+
return (h("div", { class: "count-tag" }, formattedValueObject.unformattedValue.length, maxlength && `/${maxlength}`));
|
|
429
535
|
}
|
|
430
536
|
/* tslint:disable:cyclomatic-complexity */
|
|
431
537
|
inputContainerDOM() {
|
|
432
|
-
|
|
538
|
+
const { hasInputLeftSlot, hasInputRightSlot } = this;
|
|
539
|
+
return (h("div", { class: "input-container", tabindex: -1, "test-id": "inputContainer" }, h("div", { class: "input-icons-container-left" }, this.formattedValueObject.prefix && (h("div", { class: "input-prefix" }, this.formattedValueObject.prefix)), this.computedIconLeft && (h("div", null, h("q2-icon", { type: this.computedIconLeft, class: this.computedClassForIconLeft }))), hasInputLeftSlot && h("slot", { name: "input-left" }), this.showIconSeparator && h("div", { class: "vertical-separator" }), this.hasError && this.type === 'currency' && (h("div", null, h("q2-icon", { type: "error", class: "icon-error", "test-id": "iconError" })))), this.pseudo ? this.pseudoInputDOM() : this.standardInputDOM(), h("div", { class: "input-icons-container-right" }, this.canClear && (h("q2-btn", { class: "btn-clear", ariaLabel: loc('tecton.element.input.clear', [this.label]), "test-id": "clearButton", onClick: this.onClearInput }, h("q2-icon", { type: "close", class: "icon-clear" }))), ['password', 'text', 'ssn', 'tin'].includes(this.type) && this.showVisibilityToggle && (h("q2-btn", { class: "btn-visibility-toggle", "test-id": "toggleVisibilityButton", onClick: this.onToggleVisibility }, this.visibilityToggleText)), this.formattedValueObject.suffix && (h("span", { class: "input-suffix" }, this.formattedValueObject.suffix)), this.badgeValue && (h("q2-badge", { size: "large", theme: this.badgeTheme }, this.badgeValue)), this.hasError && this.type !== 'currency' && (h("div", null, h("q2-icon", { type: "error", class: "icon-error", "test-id": "iconError" }))), this.iconRight && !this.formattedValueObject.suffix && (h("div", null, h("q2-icon", { type: this.iconRight, class: "icon-right" }))), hasInputRightSlot && h("slot", { name: "input-right" }))));
|
|
433
540
|
}
|
|
434
541
|
/* tslint:enable:cyclomatic-complexity */
|
|
435
542
|
/* tslint:disable:cyclomatic-complexity */
|
|
@@ -477,10 +584,16 @@ export class Q2Input {
|
|
|
477
584
|
if (this.canSetSelection && !cursorData.hasSelection) {
|
|
478
585
|
const input = this.inputField;
|
|
479
586
|
const { valueLength, previousValueLength, startingPosition } = cursorData;
|
|
480
|
-
if (
|
|
481
|
-
|
|
587
|
+
if (this.type === 'currency') {
|
|
588
|
+
if (previousValueLength - valueLength === 1) {
|
|
589
|
+
input.setSelectionRange(startingPosition - 1, startingPosition - 1);
|
|
590
|
+
}
|
|
591
|
+
else {
|
|
592
|
+
const difference = previousValueLength - valueLength;
|
|
593
|
+
input.setSelectionRange(startingPosition - difference, startingPosition - difference);
|
|
594
|
+
}
|
|
482
595
|
}
|
|
483
|
-
|
|
596
|
+
if (this.type !== 'currency') {
|
|
484
597
|
const difference = valueLength - previousValueLength;
|
|
485
598
|
// Never allow the cursor to move in reverse
|
|
486
599
|
const newPosition = startingPosition + (difference > 0 ? difference : 0);
|
|
@@ -562,7 +675,7 @@ export class Q2Input {
|
|
|
562
675
|
"references": {
|
|
563
676
|
"InputType": {
|
|
564
677
|
"location": "local",
|
|
565
|
-
"path": "/workspace/workspace/tecton-production_release_1.
|
|
678
|
+
"path": "/workspace/workspace/tecton-production_release_1.38.x/packages/q2-tecton-elements/src/components/q2-input/index.tsx"
|
|
566
679
|
}
|
|
567
680
|
}
|
|
568
681
|
},
|
|
@@ -757,6 +870,23 @@ export class Q2Input {
|
|
|
757
870
|
"attribute": "readonly",
|
|
758
871
|
"reflect": true
|
|
759
872
|
},
|
|
873
|
+
"showCount": {
|
|
874
|
+
"type": "boolean",
|
|
875
|
+
"mutable": false,
|
|
876
|
+
"complexType": {
|
|
877
|
+
"original": "boolean",
|
|
878
|
+
"resolved": "boolean",
|
|
879
|
+
"references": {}
|
|
880
|
+
},
|
|
881
|
+
"required": false,
|
|
882
|
+
"optional": false,
|
|
883
|
+
"docs": {
|
|
884
|
+
"tags": [],
|
|
885
|
+
"text": ""
|
|
886
|
+
},
|
|
887
|
+
"attribute": "show-count",
|
|
888
|
+
"reflect": true
|
|
889
|
+
},
|
|
760
890
|
"clearable": {
|
|
761
891
|
"type": "boolean",
|
|
762
892
|
"mutable": false,
|
|
@@ -1142,7 +1272,8 @@ export class Q2Input {
|
|
|
1142
1272
|
return {
|
|
1143
1273
|
"formattedValueObject": {},
|
|
1144
1274
|
"hasFocus": {},
|
|
1145
|
-
"isSmall": {}
|
|
1275
|
+
"isSmall": {},
|
|
1276
|
+
"checkSlotCount": {}
|
|
1146
1277
|
};
|
|
1147
1278
|
}
|
|
1148
1279
|
static get events() {
|
|
@@ -1241,8 +1372,11 @@ export class Q2Input {
|
|
|
1241
1372
|
"return": "Promise<void>"
|
|
1242
1373
|
},
|
|
1243
1374
|
"docs": {
|
|
1244
|
-
"text": "",
|
|
1245
|
-
"tags": [
|
|
1375
|
+
"text": "Emulates focusing the `<input>`, entering the provided value, and emitting an `input` event.\n\nThis method leaves the focus on the `<input>` and as a result does not trigger the `change` event. If you want\nto trigger the` change` event, move the focus to another element after calling this method.",
|
|
1376
|
+
"tags": [{
|
|
1377
|
+
"name": "testOnly",
|
|
1378
|
+
"text": undefined
|
|
1379
|
+
}]
|
|
1246
1380
|
}
|
|
1247
1381
|
},
|
|
1248
1382
|
"clearValue": {
|
|
@@ -1253,8 +1387,14 @@ export class Q2Input {
|
|
|
1253
1387
|
"return": "Promise<void>"
|
|
1254
1388
|
},
|
|
1255
1389
|
"docs": {
|
|
1256
|
-
"text": "",
|
|
1257
|
-
"tags": [
|
|
1390
|
+
"text": "Emulates clicking the clear button when the input is clearable.",
|
|
1391
|
+
"tags": [{
|
|
1392
|
+
"name": "warning",
|
|
1393
|
+
"text": "Only applicable when the input is clearable."
|
|
1394
|
+
}, {
|
|
1395
|
+
"name": "testOnly",
|
|
1396
|
+
"text": undefined
|
|
1397
|
+
}]
|
|
1258
1398
|
}
|
|
1259
1399
|
}
|
|
1260
1400
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/q2-input/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n h,\n Watch,\n Listen,\n Fragment,\n Method,\n} from '@stencil/core';\nimport {\n createGuid,\n labelDOM,\n loc,\n messagesDOM,\n setMessageHeight,\n handleAriaLabel,\n overrideFocus,\n isEventFromElement,\n isMobile,\n} from 'src/utils';\nimport { IFormatterValueObject, ICursorData, IEventDetail } from './types';\nimport formatCurrency from './formatting/currency';\nimport formatPhoneNumber from './formatting/phone';\nimport formatSSN from './formatting/ssn';\nimport formatTIN from './formatting/tin';\nimport formatAlphanumeric from './formatting/alphanumeric';\nimport formatAlpha from './formatting/alpha';\nimport formatNumeric, { formatPercentage } from './formatting/numeric';\nimport formatPostalCode from './formatting/postal';\nimport formatDate from './formatting/date';\nimport formatCreditCard from './formatting/credit-card';\nimport { Q2Icon } from '../q2-icon';\nimport { Q2Badge } from '../q2-badge';\n\nconst inputTypeMap = {\n text: 'text',\n tel: 'tel',\n number: 'number',\n password: 'text',\n search: 'search',\n url: 'url',\n email: 'email',\n currency: 'text',\n phone: 'tel',\n ssn: 'text',\n alphanumeric: 'text',\n alpha: 'text',\n numeric: 'text',\n percentage: 'text',\n postal: 'text',\n date: 'text',\n 'credit-card': 'text',\n};\n\nexport type InputType = keyof typeof inputTypeMap;\n\n@Component({\n tag: 'q2-input',\n shadow: true,\n styleUrl: 'styles.scss',\n})\nexport class Q2Input {\n @Prop({ mutable: true }) value: string;\n @Prop({ reflect: true, mutable: true }) label: string;\n @Prop({ reflect: true, mutable: true }) hideLabel: boolean;\n @Prop({ reflect: true }) type: InputType = 'text';\n @Prop({ reflect: true }) placeholder: string;\n @Prop({ reflect: true }) disabled: boolean = false;\n @Prop({ reflect: true }) autocomplete: string;\n @Prop({ reflect: true }) autocorrect: 'on' | 'off';\n @Prop({ reflect: true }) autocapitalize: string;\n @Prop({ reflect: true }) autofocus: boolean;\n @Prop({ reflect: true }) hideMessages: boolean;\n @Prop({ reflect: true }) iconLeft: Q2Icon['type'];\n @Prop({ reflect: true }) iconRight: Q2Icon['type'];\n @Prop({ reflect: true }) readonly: boolean;\n @Prop({ reflect: true }) clearable: boolean;\n @Prop({ reflect: true }) optional: boolean;\n @Prop({ reflect: true }) min: number;\n @Prop({ reflect: true }) max: number;\n @Prop({ reflect: true }) step: number;\n @Prop({ reflect: true }) formatModifier: string;\n @Prop({ reflect: true, mutable: true }) maxlength: number;\n @Prop({ reflect: true }) pseudo: boolean;\n @Prop({ reflect: true }) showVisibilityToggle: boolean = false;\n @Prop({ reflect: true, mutable: true }) textHidden: boolean;\n @Prop({ reflect: true }) badgeValue: string;\n @Prop({ reflect: true }) badgeTheme: Q2Badge['theme'];\n @Prop() role: string;\n @Prop() ariaControls: string;\n @Prop() ariaOwns: string;\n @Prop() ariaHaspopup: string;\n @Prop() ariaExpanded: string;\n @Prop() ariaActivedescendant: string;\n @Prop() current: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false';\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true }) ariaLabel: string;\n\n @Prop() errors: string[];\n @Prop() hints: string[];\n\n @State() formattedValueObject: IFormatterValueObject;\n @State() hasFocus: boolean;\n @State() isSmall: boolean = false;\n\n resizeObserver: ResizeObserver;\n scheduledAfterRender: (() => void)[] = [];\n valueOnFocus: string;\n isMobile: boolean = isMobile();\n\n /////// LIFECYCLE HOOKS ////////\n\n componentWillLoad() {\n if (isNaN(this.maxlength)) {\n this.maxlength = undefined;\n }\n this.formattedValueObject = this.getFormattedValue(this.stringValue, true);\n\n Object.defineProperty(this.hostElement, 'formattedValue', {\n get: () => this.formattedValueObject?.formattedValue ?? '',\n });\n\n handleAriaLabel(this);\n if (this.textHidden === undefined) {\n this.textHidden = this.type === 'password';\n }\n\n this.manageClearableResizeObserver(this.clearable);\n }\n\n componentDidLoad() {\n if (!this.pseudo) {\n this.inputField.value = this.formattedValueObject.formattedValue;\n }\n\n if (this.autofocus === true) {\n this.inputField.focus();\n }\n\n overrideFocus(this.hostElement);\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n disconnectedCallback() {\n this.manageClearableResizeObserver();\n }\n\n getFormattedValue(value: string, valueChangedFromProperty: boolean): IFormatterValueObject {\n const formattingFunctions = {\n currency: formatCurrency,\n phone: formatPhoneNumber,\n ssn: formatSSN,\n tin: formatTIN,\n alphanumeric: formatAlphanumeric,\n alpha: formatAlpha,\n numeric: formatNumeric,\n percentage: formatPercentage,\n postal: formatPostalCode,\n date: formatDate,\n 'credit-card': formatCreditCard.format,\n };\n\n if (formattingFunctions[this.type]) {\n return formattingFunctions[this.type](value, this.formatModifier, valueChangedFromProperty);\n }\n\n return {\n value,\n formattedValue: value,\n fullyFormattedValue: value,\n formattingCharacterCount: 0,\n unformattedValue: value,\n };\n }\n\n @Element() hostElement: HTMLElement;\n\n get canClear() {\n return this.clearable && !!(this.inputField?.value ?? this.value);\n }\n\n get shouldCursorStayAtEnd() {\n return this.isMobile && this.type === 'currency';\n }\n\n get hasError() {\n return Array.isArray(this.errors) && this.errors.length > 0;\n }\n\n get messages(): string[] {\n return (\n (this.errors && this.errors.length > 0 && this.errors) ||\n (this.hints && this.hints.length > 0 && this.hints) ||\n []\n );\n }\n\n get inputField() {\n return this.hostElement.shadowRoot.querySelector<HTMLInputElement>('.input-field');\n }\n\n get showMessages() {\n return this.messages.length > 0 && !this.hideMessages;\n }\n\n guid = createGuid();\n\n get inputId() {\n return `input-guid-${this.guid}`;\n }\n\n get inputDescribedBy() {\n return this.showMessages ? `${this.inputId}-description` : undefined;\n }\n\n get isMaskedType(): boolean {\n const maskedTypes: string[] = [\n 'currency',\n 'phone',\n 'ssn',\n 'tin',\n 'alphanumeric',\n 'alpha',\n 'numeric',\n 'percentage',\n 'postal',\n 'date',\n 'credit-card',\n ];\n\n return maskedTypes.includes(this.type);\n }\n\n get wrapperClasses() {\n const classNames = ['field-container'];\n if (this.hasError) classNames.push('has-error');\n if (!!this.value) classNames.push('has-value');\n if (this.clearable && !!this.value) classNames.push('has-clear');\n if (this.hasFocus) classNames.push('has-focus');\n if (this.isSmall) classNames.push('is-small');\n if (this.formattedValueObject.prefix) classNames.push('has-prefix');\n if (this.computedIconLeft) classNames.push('has-icon-left');\n if (this.showIconSeparator) classNames.push('has-icon-separator');\n if (this.formattedValueObject.suffix) classNames.push('has-suffix');\n if (!this.formattedValueObject.suffix && this.iconRight) classNames.push('has-icon-right');\n if (this.type === 'currency') classNames.push('right-aligned');\n else classNames.push('left-aligned');\n if (this.hasCustomDisplaySlot) classNames.push('has-custom-display');\n\n return classNames.join(' ');\n }\n\n get computedType() {\n if (['password', 'text', 'ssn'].includes(this.type) && this.textHidden) {\n return 'password';\n } else {\n return (this.type && inputTypeMap[this.type]) || 'text';\n }\n }\n\n get computedAutocomplete() {\n // force off for currency type\n if (this.type === 'currency') return 'transaction-amount';\n return this.autocomplete || 'off';\n }\n\n get computedIconLeft(): string | undefined {\n if (this.formattedValueObject.prefix) {\n return;\n }\n\n if (this.type === 'search') {\n return 'search';\n }\n\n if (this.formattedValueObject.leftIcon) {\n return this.formattedValueObject.leftIcon;\n }\n\n return this.iconLeft;\n }\n\n get showIconSeparator(): boolean {\n return this.type === 'credit-card' || !!this.formattedValueObject.prefix;\n }\n\n get computedClassForIconLeft(): string | undefined {\n let className = 'icon-left';\n if (this.formattedValueObject.leftIconMuted) {\n className += ' icon-left-muted';\n }\n return className;\n }\n\n get stringValue(): string {\n return (this.value && String(this.value)) || '';\n }\n\n get canSetSelection(): boolean {\n // email and number type don't support setSelectionRange\n return !['email', 'number'].includes(this.computedType);\n }\n\n get visibilityToggleText(): string {\n return loc(`tecton.element.input.toggle.${this.textHidden ? 'show' : 'hide'}`);\n }\n\n formatAndUpdateValueFromProp() {\n this.formattedValueObject = this.getFormattedValue(this.stringValue, true);\n\n if (!this.pseudo) {\n const setValue = () => {\n this.inputField.value = this.formattedValueObject.formattedValue;\n };\n\n this.inputField ? setValue() : this.scheduledAfterRender.push(() => setValue());\n }\n }\n\n get inputMode() {\n const inputModeMap = {\n currency: 'numeric',\n ssn: 'numeric',\n tin: 'numeric',\n numeric: 'decimal',\n percentage: 'decimal',\n postal: 'numeric',\n date: 'numeric',\n 'credit-card': 'numeric',\n };\n\n return (this.type && inputModeMap[this.type]) || undefined;\n }\n\n //////// OBSERVERS //////////\n\n @Watch('clearable')\n manageClearableResizeObserver(clearable?: boolean) {\n const isSmallThreshold = 190;\n if (clearable) {\n if (this.resizeObserver) return;\n this.resizeObserver = new ResizeObserver(([entry]) => {\n this.isSmall = isSmallThreshold > entry.contentRect.width;\n });\n this.resizeObserver.observe(this.hostElement);\n } else {\n this.isSmall = false;\n this.resizeObserver?.unobserve(this.hostElement);\n this.resizeObserver = null;\n }\n }\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('value')\n valueObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('formattedValueObject')\n formattedValueObjectObserver() {\n this.formatted.emit(this.formattedValueObject);\n }\n\n @Watch('type')\n typeObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('formatModifier')\n formatModifierObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('hints')\n hintsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('errors')\n errorsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n /// Methods ///\n @Method()\n setValue(value: string) {\n const { inputField } = this;\n inputField.focus();\n inputField.dispatchEvent(new FocusEvent('focus'));\n inputField.value = value;\n inputField.dispatchEvent(new InputEvent('input'));\n }\n\n @Method()\n clearValue() {\n if (!this.clearable) return;\n this.onClearInput();\n }\n\n ///////// HOST ELEMENT EVENTS //////\n @Listen('focus')\n onHostElementFocus(event) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.inputField.focus();\n }\n\n @Listen('change')\n onHostElementChange(event: CustomEvent) {\n event.stopPropagation();\n if (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n ///////// Events /////////\n\n @Event() input: EventEmitter<IEventDetail>;\n @Event() change: EventEmitter<IEventDetail>;\n @Event() clear: EventEmitter<IEventDetail>;\n @Event() formatted: EventEmitter<IEventDetail>;\n\n ///// ACTIONS ////////\n\n onToggleVisibility = () => {\n this.hostElement.dispatchEvent(new FocusEvent('focus'));\n this.textHidden = !this.textHidden;\n };\n\n onInputClick = () => {\n if (this.shouldCursorStayAtEnd) this.placeCursorAtEnd();\n };\n\n onInputFocus = () => {\n if (this.inputField.tagName === 'INPUT') {\n this.scheduledAfterRender.push(() =>\n this.shouldCursorStayAtEnd\n ? this.placeCursorAtEnd()\n : this.setCursorPosition(this.calculateCursorPositionOnFocus())\n );\n }\n this.hasFocus = true;\n setMessageHeight(this);\n this.valueOnFocus = this.value;\n };\n\n onInputBlur = () => {\n this.hasFocus = false;\n setMessageHeight(this);\n if (this.valueOnFocus !== this.formattedValueObject.value) {\n this.valueOnFocus = this.formattedValueObject.value;\n this.change.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n }\n };\n\n onInputInput = (event: InputEvent) => {\n event.stopPropagation();\n const newFormattedValue = this.getFormattedValue((event.target as HTMLInputElement).value, false);\n this.handleDataInput(newFormattedValue);\n };\n\n onInputPaste = (event: ClipboardEvent) => {\n if (this.type === 'currency') {\n const clipboardData = event.clipboardData.getData('text');\n const newFormattedValue = this.getFormattedValue(clipboardData, true);\n event.preventDefault();\n this.handleDataInput(newFormattedValue);\n }\n };\n\n handleDataInput(newFormattedValue: IFormatterValueObject) {\n if (\n this.maxlength === undefined ||\n newFormattedValue.unformattedValue.length <= this.maxlength ||\n newFormattedValue.unformattedValue.length <= this.formattedValueObject.unformattedValue.length\n ) {\n this.formattedValueObject = newFormattedValue;\n } else if (this.maxlength) {\n newFormattedValue = this.getFormattedValue(\n newFormattedValue.unformattedValue.substring(0, this.maxlength),\n false\n );\n this.formattedValueObject = newFormattedValue;\n }\n this.handleValueAndCursor();\n }\n\n handleValueAndCursor = () => {\n // ORDER IMPORTANT: calculate cursor position -> set value -> set cursor position\n const cursorPosition = this.calculateCursorPositionOnInput();\n // when type=number: returns only valid decimal on input event, should not update itself (e.g. typing \"1.\" )\n if (this.type !== 'number') this.inputField.value = this.formattedValueObject.formattedValue;\n this.input.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n if (!this.formattedValueObject.value) {\n this.clear.emit();\n }\n this.setCursorPosition(cursorPosition);\n };\n\n onInputKeydown = (event: KeyboardEvent) => {\n const keysThatMoveCursor = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];\n const { key } = event;\n if (this.shouldCursorStayAtEnd && keysThatMoveCursor.includes(key)) event.preventDefault();\n if (key === 'Enter' && this.valueOnFocus !== this.formattedValueObject.value) {\n this.valueOnFocus = this.formattedValueObject.value;\n this.change.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n }\n };\n\n onClearInput = () => {\n const eventDetail = {\n value: '',\n formattedValue: '',\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n };\n this.input.emit(eventDetail);\n this.change.emit(eventDetail);\n this.clear.emit();\n this.inputField.focus();\n };\n /////// VIEW METHODS ///////\n\n render() {\n return (\n <div class={this.wrapperClasses}>\n {labelDOM(this)}\n {this.inputContainerDOM()}\n {messagesDOM(this)}\n </div>\n );\n }\n\n get hasCustomDisplaySlot() {\n return !!this.hostElement.querySelector('[slot=custom-display]');\n }\n\n /* tslint:disable:cyclomatic-complexity */\n inputContainerDOM() {\n return (\n <div\n class=\"input-container\"\n tabindex={-1}\n test-id=\"inputContainer\"\n >\n <div class=\"input-icons-container-left\">\n {this.formattedValueObject.prefix && (\n <div class=\"input-prefix\">{this.formattedValueObject.prefix}</div>\n )}\n {this.computedIconLeft && (\n <div>\n <q2-icon\n type={this.computedIconLeft}\n class={this.computedClassForIconLeft}\n />\n </div>\n )}\n <slot name=\"input-left\" />\n {this.showIconSeparator && <div class=\"vertical-separator\" />}\n {this.hasError && this.type === 'currency' && (\n <div>\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n test-id=\"iconError\"\n />\n </div>\n )}\n </div>\n {this.pseudo ? this.pseudoInputDOM() : this.standardInputDOM()}\n <div class=\"input-icons-container-right\">\n {this.canClear && (\n <q2-btn\n class=\"btn-clear\"\n ariaLabel={loc('tecton.element.input.clear', [this.label])}\n test-id=\"clearButton\"\n onClick={this.onClearInput}\n >\n <q2-icon\n type=\"close\"\n class=\"icon-clear\"\n />\n </q2-btn>\n )}\n {['password', 'text', 'ssn', 'tin'].includes(this.type) && this.showVisibilityToggle && (\n <q2-btn\n class=\"btn-visibility-toggle\"\n test-id=\"toggleVisibilityButton\"\n onClick={this.onToggleVisibility}\n >\n {this.visibilityToggleText}\n </q2-btn>\n )}\n {this.formattedValueObject.suffix && (\n <span class=\"input-suffix\">{this.formattedValueObject.suffix}</span>\n )}\n {this.badgeValue && (\n <q2-badge\n size=\"large\"\n theme={this.badgeTheme}\n >\n {this.badgeValue}\n </q2-badge>\n )}\n {this.hasError && this.type !== 'currency' && (\n <div>\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n test-id=\"iconError\"\n />\n </div>\n )}\n {this.iconRight && !this.formattedValueObject.suffix && (\n <div>\n <q2-icon\n type={this.iconRight}\n class=\"icon-right\"\n />\n </div>\n )}\n <slot name=\"input-right\" />\n </div>\n </div>\n );\n }\n /* tslint:enable:cyclomatic-complexity */\n\n /* tslint:disable:cyclomatic-complexity */\n standardInputDOM() {\n const { hasCustomDisplaySlot } = this;\n const inputClasses = ['input-field'];\n if (hasCustomDisplaySlot) inputClasses.push('sr');\n return (\n <Fragment>\n {hasCustomDisplaySlot && (\n <div class=\"custom-display-container\">\n <slot name=\"custom-display\"></slot>\n </div>\n )}\n <input\n class={inputClasses.join(' ')}\n id={this.inputId}\n type={this.computedType}\n size={this.formattedValueObject.prefix ? 10 : undefined}\n max={this.max}\n min={this.min}\n step={this.step}\n aria-current={this.current || undefined}\n aria-describedby={this.inputDescribedBy}\n aria-required={`${!this.optional}`}\n aria-invalid={`${this.hasError}`}\n aria-controls={(this.ariaControls && `${this.ariaControls}`) || undefined}\n aria-owns={(this.ariaOwns && `${this.ariaOwns}`) || undefined}\n aria-haspopup={(this.ariaHaspopup && `${this.ariaHaspopup}`) || undefined}\n aria-expanded={(!!this.ariaExpanded && `${!!this.ariaExpanded}`) || undefined}\n aria-activedescendant={this.ariaActivedescendant && `${this.ariaActivedescendant}`}\n autocomplete={this.computedAutocomplete}\n autocapitalize={this.autocapitalize}\n autocorrect={this.autocorrect === 'on' ? 'on' : 'off'}\n autofocus={this.autofocus}\n placeholder={(this.placeholder && loc(this.placeholder)) || undefined}\n role={(this.role && `${this.role}`) || undefined}\n test-id=\"inputField\"\n readonly={!!this.readonly}\n disabled={!!this.disabled}\n onFocus={this.onInputFocus}\n onBlur={this.onInputBlur}\n onClick={this.onInputClick}\n onKeyDown={this.onInputKeydown}\n onInput={this.onInputInput}\n onPaste={this.onInputPaste}\n inputmode={this.inputMode}\n />\n </Fragment>\n );\n }\n /* tslint:enable:cyclomatic-complexity */\n\n pseudoInputDOM() {\n const showPlaceholder = !this.value && !!this.placeholder;\n return (\n <div class=\"pseudo-input-container\">\n <button\n class=\"input-field\"\n type=\"button\"\n id={this.inputId}\n aria-describedby={this.inputDescribedBy}\n aria-invalid={`${this.hasError}`}\n aria-controls={(this.ariaControls && `${this.ariaControls}`) || undefined}\n aria-owns={(this.ariaOwns && `${this.ariaOwns}`) || undefined}\n aria-haspopup={(this.ariaHaspopup && `${this.ariaHaspopup}`) || undefined}\n aria-expanded={this.ariaExpanded === 'true' ? 'true' : undefined}\n aria-activedescendant={this.ariaActivedescendant && `${this.ariaActivedescendant}`}\n role={(this.role && `${this.role}`) || undefined}\n disabled={!!this.disabled}\n test-id=\"q2InputInnerClearButton\"\n onFocus={this.onInputFocus}\n onBlur={this.onInputBlur}\n >\n <div class=\"custom-display-container\">\n <slot name=\"custom-display\">\n <span class={showPlaceholder ? 'placeholder-text' : ''}>\n {showPlaceholder ? this.placeholder : this.value}\n </span>\n </slot>\n </div>\n </button>\n </div>\n );\n }\n\n placeCursorAtEnd() {\n const { inputField } = this;\n inputField.selectionStart = inputField.selectionEnd = inputField.value.length;\n }\n\n calculateCursorPositionOnInput(): ICursorData {\n const input = this.inputField;\n const formattedLength = this.formattedValueObject.formattedValue.length;\n const currentValueLength = input.value.length;\n const defaultPosition = this.type === 'currency' ? formattedLength : 0;\n return {\n startingPosition: (input && input.selectionStart) || defaultPosition,\n valueLength: formattedLength,\n previousValueLength: input && currentValueLength,\n hasSelection: false,\n };\n }\n\n calculateCursorPositionOnFocus(): ICursorData {\n const { inputField } = this;\n const valueLength = inputField?.value?.length ?? 0;\n const startingPosition = inputField?.selectionStart ?? valueLength;\n\n return {\n startingPosition,\n valueLength,\n previousValueLength: valueLength,\n hasSelection: getSelection().toString().length > 0,\n };\n }\n\n setCursorPosition(cursorData: ICursorData) {\n if (this.canSetSelection && !cursorData.hasSelection) {\n const input = this.inputField;\n const { valueLength, previousValueLength, startingPosition } = cursorData;\n if (startingPosition === valueLength && valueLength >= previousValueLength && this.type === 'currency') {\n input.setSelectionRange(valueLength, valueLength);\n } else {\n const difference = valueLength - previousValueLength;\n // Never allow the cursor to move in reverse\n const newPosition = startingPosition + (difference > 0 ? difference : 0);\n input.setSelectionRange(newPosition, newPosition);\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/q2-input/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACH,SAAS,EACT,IAAI,EACJ,OAAO,EACP,KAAK,EACL,KAAK,EAEL,CAAC,EACD,KAAK,EACL,MAAM,EACN,QAAQ,EACR,MAAM,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,UAAU,EACV,QAAQ,EACR,GAAG,EACH,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,SAAS,GACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,cAAc,MAAM,uBAAuB,CAAC;AACnD,OAAO,iBAAiB,MAAM,oBAAoB,CAAC;AACnD,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,SAAS,MAAM,kBAAkB,CAAC;AACzC,OAAO,kBAAkB,MAAM,2BAA2B,CAAC;AAC3D,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAC7C,OAAO,aAAa,EAAE,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AACnD,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,gBAAgB,MAAM,0BAA0B,CAAC;AAIxD,MAAM,YAAY,GAAG;EACjB,IAAI,EAAE,MAAM;EACZ,GAAG,EAAE,KAAK;EACV,MAAM,EAAE,QAAQ;EAChB,QAAQ,EAAE,MAAM;EAChB,MAAM,EAAE,QAAQ;EAChB,GAAG,EAAE,KAAK;EACV,KAAK,EAAE,OAAO;EACd,QAAQ,EAAE,MAAM;EAChB,KAAK,EAAE,KAAK;EACZ,GAAG,EAAE,MAAM;EACX,YAAY,EAAE,MAAM;EACpB,KAAK,EAAE,MAAM;EACb,OAAO,EAAE,MAAM;EACf,UAAU,EAAE,MAAM;EAClB,MAAM,EAAE,MAAM;EACd,IAAI,EAAE,MAAM;EACZ,aAAa,EAAE,MAAM;CACxB,CAAC;AASF,MAAM,OAAO,OAAO;;IAkDhB,yBAAoB,GAAmB,EAAE,CAAC;IAE1C,aAAQ,GAAY,QAAQ,EAAE,CAAC;IAkD/B,uBAAkB,GAAG,GAAG,EAAE;MACtB,uEAAuE;MACvE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IAClD,CAAC,CAAC;IA8DF,SAAI,GAAG,UAAU,EAAE,CAAC;IAoPpB,sBAAsB;IAEtB,uBAAkB,GAAG,GAAG,EAAE;MACtB,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;MACxD,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;IACvC,CAAC,CAAC;IAEF,iBAAY,GAAG,GAAG,EAAE;MAChB,IAAI,IAAI,CAAC,qBAAqB;QAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5D,CAAC,CAAC;IAEF,iBAAY,GAAG,GAAG,EAAE;MAChB,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,KAAK,OAAO,EAAE;QACrC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,CAChC,IAAI,CAAC,qBAAqB;UACtB,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE;UACzB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,CACtE,CAAC;OACL;MACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;MACrB,gBAAgB,CAAC,IAAI,CAAC,CAAC;MACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;IACnC,CAAC,CAAC;IAEF,gBAAW,GAAG,GAAG,EAAE;MACf,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;MACtB,gBAAgB,CAAC,IAAI,CAAC,CAAC;MACvB,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;QACvD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,IAAI,iBACZ,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,EACtC,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAC7D,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,IAC7D,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EACjF,CAAC;OACN;IACL,CAAC,CAAC;IAEF,iBAAY,GAAG,CAAC,KAAiB,EAAE,EAAE;MACjC,KAAK,CAAC,eAAe,EAAE,CAAC;MAExB,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;MACjE,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAE,KAAK,CAAC,MAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;MAClG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC,CAAC;IAgEF,iBAAY,GAAG,CAAC,KAAqB,EAAE,EAAE;MACrC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;QAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QACtE,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;OAC3C;IACL,CAAC,CAAC;IAmBF,yBAAoB,GAAG,GAAG,EAAE;MACxB,kFAAkF;MAClF,MAAM,cAAc,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;MAC7D,4GAA4G;MAC5G,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;MAC7F,IAAI,CAAC,KAAK,CAAC,IAAI,iBACX,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,EACtC,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAC7D,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,IAC7D,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EACjF,CAAC;MACH,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;QAClC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;OACrB;MACD,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,kFAAkF;IAClF,wEAAwE;IACxE,0BAAqB,GAAG,CAAC,KAAoB,EAAE,EAAE;MAC7C,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ;QAAE,OAAO;MAChE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;MACrC,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAC,cAAc,KAAK,YAAY,CAAC,YAAY,CAAC;IAC7F,CAAC,CAAC;IAEF,mBAAc,GAAG,CAAC,KAAoB,EAAE,EAAE;MACtC,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;MAC9F,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;MAEtB,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;QAAE,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;MAChE,IAAI,IAAI,CAAC,qBAAqB,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,KAAK,CAAC,cAAc,EAAE,CAAC;MAC3F,IAAI,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;QAC1E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,IAAI,iBACZ,KAAK,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,EACtC,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAC7D,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,IAC7D,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EACjF,CAAC;OACN;IACL,CAAC,CAAC;IAEF,iBAAY,GAAG,GAAG,EAAE;MAChB,MAAM,WAAW,GAAG;QAChB,KAAK,EAAE,EAAE;QACT,cAAc,EAAE,EAAE;QAClB,kBAAkB,EAAE,IAAI,CAAC,oBAAoB,CAAC,kBAAkB;OACnE,CAAC;MACF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;MAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;MAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;MAClB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC,CAAC;;;;gBAjlByC,MAAM;;oBAEJ,KAAK;;;;;;;;;;;;;;;;;;gCAkBO,KAAK;;;;;;;;;;;;;;;;mBAoBlC,KAAK;0BACC,CAAC;;EAWnC,gCAAgC;EAEhC,iBAAiB;IACb,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;MACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC9B;IACD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAE3E,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,EAAE;MACtD,GAAG,EAAE,GAAG,EAAE,eAAC,OAAA,MAAA,MAAA,IAAI,CAAC,oBAAoB,0CAAE,cAAc,mCAAI,EAAE,CAAA,EAAA;KAC7D,CAAC,CAAC;IAEH,eAAe,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;MAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;KAC9C;IAED,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EACvD,CAAC;EAED,gBAAgB;IACZ,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;MACd,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;KACpE;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;MACzB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;KAC3B;IAED,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/D,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;EACrC,CAAC;EAED,kBAAkB;IACd,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;EACnC,CAAC;EAED,oBAAoB;;IAChB,IAAI,CAAC,6BAA6B,EAAE,CAAC;IACrC,MAAA,IAAI,CAAC,gBAAgB,0CAAE,UAAU,EAAE,CAAC;IACpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;EACjC,CAAC;EAOD,iBAAiB,CAAC,KAAa,EAAE,wBAAiC;IAC9D,MAAM,mBAAmB,GAAG;MACxB,QAAQ,EAAE,cAAc;MACxB,KAAK,EAAE,iBAAiB;MACxB,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS;MACd,YAAY,EAAE,kBAAkB;MAChC,KAAK,EAAE,WAAW;MAClB,OAAO,EAAE,aAAa;MACtB,UAAU,EAAE,gBAAgB;MAC5B,MAAM,EAAE,gBAAgB;MACxB,IAAI,EAAE,UAAU;MAChB,aAAa,EAAE,gBAAgB,CAAC,MAAM;KACzC,CAAC;IAEF,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;MAChC,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,wBAAwB,CAAC,CAAC;KAC/F;IAED,OAAO;MACH,KAAK;MACL,cAAc,EAAE,KAAK;MACrB,mBAAmB,EAAE,KAAK;MAC1B,wBAAwB,EAAE,CAAC;MAC3B,gBAAgB,EAAE,KAAK;KAC1B,CAAC;EACN,CAAC;EAED,IAAI,oBAAoB;IACpB,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;EACrE,CAAC;EAED,IAAI,QAAQ;;IACR,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,KAAK,KAAI,IAAI,CAAC,KAAK,CAAC,CAAC;EACtE,CAAC;EAED,IAAI,qBAAqB;IACrB,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;EACrD,CAAC;EAED,IAAI,QAAQ;IACR,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;EAChE,CAAC;EAED,IAAI,QAAQ;IACR,OAAO,CACH,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;MACtD,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;MACnD,EAAE,CACL,CAAC;EACN,CAAC;EAED,IAAI,UAAU;IACV,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,CAAmB,cAAc,CAAC,CAAC;EACvF,CAAC;EAED,IAAI,YAAY;IACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;EAC1D,CAAC;EAID,IAAI,OAAO;IACP,OAAO,cAAc,IAAI,CAAC,IAAI,EAAE,CAAC;EACrC,CAAC;EAED,IAAI,gBAAgB;IAChB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;EACzE,CAAC;EAED,IAAI,gBAAgB;IAChB,OAAO,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;EAC1D,CAAC;EAED,IAAI,iBAAiB;IACjB,OAAO,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;EAC3D,CAAC;EAED,IAAI,YAAY;IACZ,MAAM,WAAW,GAAa;MAC1B,UAAU;MACV,OAAO;MACP,KAAK;MACL,KAAK;MACL,cAAc;MACd,OAAO;MACP,SAAS;MACT,YAAY;MACZ,QAAQ;MACR,MAAM;MACN,aAAa;KAChB,CAAC;IAEF,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC3C,CAAC;EAED,IAAI,cAAc;IACd,MAAM,UAAU,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,QAAQ;MAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK;MAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK;MAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,QAAQ;MAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,IAAI,CAAC,OAAO;MAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM;MAAE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpE,IAAI,IAAI,CAAC,gBAAgB;MAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5D,IAAI,IAAI,CAAC,iBAAiB;MAAE,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAClE,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM;MAAE,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpE,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS;MAAE,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC3F,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;MAAE,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;;MAC1D,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrC,IAAI,IAAI,CAAC,oBAAoB;MAAE,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAErE,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EAChC,CAAC;EAED,IAAI,YAAY;IACZ,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;MACpE,OAAO,UAAU,CAAC;KACrB;SAAM;MACH,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;KAC3D;EACL,CAAC;EAED,IAAI,oBAAoB;IACpB,8BAA8B;IAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;MAAE,OAAO,oBAAoB,CAAC;IAC1D,OAAO,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC;EACtC,CAAC;EAED,IAAI,gBAAgB;IAChB,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE;MAClC,OAAO;KACV;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;MACxB,OAAO,QAAQ,CAAC;KACnB;IAED,IAAI,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE;MACpC,OAAO,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;KAC7C;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC;EACzB,CAAC;EAED,IAAI,iBAAiB;IACjB,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;EAC7E,CAAC;EAED,IAAI,wBAAwB;IACxB,IAAI,SAAS,GAAG,WAAW,CAAC;IAC5B,IAAI,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE;MACzC,SAAS,IAAI,kBAAkB,CAAC;KACnC;IACD,OAAO,SAAS,CAAC;EACrB,CAAC;EAED,IAAI,WAAW;IACX,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;EACpD,CAAC;EAED,IAAI,eAAe;IACf,wDAAwD;IACxD,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;EAC5D,CAAC;EAED,IAAI,oBAAoB;IACpB,OAAO,GAAG,CAAC,+BAA+B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;EACnF,CAAC;EAED,4BAA4B;IACxB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAE3E,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;MACd,MAAM,QAAQ,GAAG,GAAG,EAAE;QAClB,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC;MACrE,CAAC,CAAC;MAEF,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;KACnF;EACL,CAAC;EAED,IAAI,SAAS;IACT,MAAM,YAAY,GAAG;MACjB,QAAQ,EAAE,SAAS;MACnB,GAAG,EAAE,SAAS;MACd,GAAG,EAAE,SAAS;MACd,OAAO,EAAE,SAAS;MAClB,UAAU,EAAE,SAAS;MACrB,MAAM,EAAE,SAAS;MACjB,IAAI,EAAE,SAAS;MACf,aAAa,EAAE,SAAS;KAC3B,CAAC;IAEF,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC;EAC/D,CAAC;EAED,6BAA6B;EAG7B,6BAA6B,CAAC,SAAmB;;IAC7C,MAAM,gBAAgB,GAAG,GAAG,CAAC;IAC7B,IAAI,SAAS,EAAE;MACX,IAAI,IAAI,CAAC,cAAc;QAAE,OAAO;MAChC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE;QACjD,IAAI,CAAC,OAAO,GAAG,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;MAC9D,CAAC,CAAC,CAAC;MACH,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACjD;SAAM;MACH,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;MACrB,MAAA,IAAI,CAAC,cAAc,0CAAE,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;MACjD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC9B;EACL,CAAC;EAGD,iBAAiB;IACb,eAAe,CAAC,IAAI,CAAC,CAAC;EAC1B,CAAC;EAGD,aAAa;IACT,IAAI,CAAC,4BAA4B,EAAE,CAAC;EACxC,CAAC;EAGD,4BAA4B;IACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;EACnD,CAAC;EAGD,YAAY;IACR,IAAI,CAAC,4BAA4B,EAAE,CAAC;EACxC,CAAC;EAGD,sBAAsB;IAClB,IAAI,CAAC,4BAA4B,EAAE,CAAC;EACxC,CAAC;EAGD,aAAa;IACT,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;EAClF,CAAC;EAGD,cAAc;IACV,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;EAClF,CAAC;EAED,eAAe;EACf;;;;;;;KAOG;EAEH,QAAQ,CAAC,KAAa;IAClB,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,KAAK,EAAE,CAAC;IACnB,UAAU,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;IACzB,UAAU,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;EACtD,CAAC;EAED;;;;;;;KAOG;EAEH,UAAU;IACN,IAAI,CAAC,IAAI,CAAC,SAAS;MAAE,OAAO;IAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;EACxB,CAAC;EAED,oCAAoC;EAEpC,kBAAkB,CAAC,KAAK;IACpB,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;MAAE,OAAO;IACzD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;EAC5B,CAAC;EAGD,mBAAmB,CAAC,KAAkB;IAClC,KAAK,CAAC,eAAe,EAAE,CAAC;IACxB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;MACjE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;KACnC;EACL,CAAC;EAuDD,sBAAsB,CAAC,KAAiB;IACpC,sDAAsD;IACtD,IAAI,IAAI,CAAC,uBAAuB,EAAE;MAC9B,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;MACrC,OAAO;KACV;IACD,qDAAqD;IACrD,IAAI,KAAK,CAAC,SAAS,KAAK,uBAAuB,IAAI,KAAK,CAAC,SAAS,KAAK,sBAAsB;MAAE,OAAO;IAEtG,MAAM,KAAK,GAAG,KAAK,CAAC,MAA0B,CAAC;IAC/C,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;IAC5C,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC;IAErD,IAAI,cAAc,KAAK,IAAI;MAAE,OAAO;IAEpC,IAAI,SAAS,CAAC;IACd,QAAQ,KAAK,CAAC,SAAS,EAAE;MACrB,KAAK,uBAAuB;QACxB,MAAM,iBAAiB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;QAC1E,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClE,SAAS,GAAG;UACR,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC;UACnE,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc;UACpE,iBAAiB,EAAE,CAAC;UACpB,eAAe,EAAE,CAAC;SACrB,CAAC;QACF,MAAM;MACV,KAAK,sBAAsB;QACvB,MAAM,gBAAgB,GAAG,cAAc,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAClE,MAAM,kBAAkB,GAAG,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACjE,SAAS,GAAG;UACR,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC;UACnE,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC;UACxE,iBAAiB,EAAE,CAAC;UACpB,eAAe,EAAE,CAAC;SACrB,CAAC;QACF,MAAM;MACV;QACI,OAAO;KACd;IAED,8DAA8D;IAC9D,MAAM,QAAQ,GAAG;MACb,cAAc,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC;MAChD,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC;KACjD,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,qBAAqB,GAAG,cAAc,CAAC,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC,iBAAiB,CAAC;IACnG,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,cAAc,CAAC;IACjF,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAC9B,iBAAiB,CAAC,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAC,eAAe,EAC5E,CAAC,CACJ,CAAC;IAEF,KAAK,CAAC,KAAK,GAAG,iBAAiB,CAAC;IAChC,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;IAE9D,2FAA2F;IAC3F,IAAI,iBAAiB,KAAK,CAAC,EAAE;MACzB,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,CAAC;KAClF;EACL,CAAC;EAWD,eAAe,CAAC,iBAAwC;IACpD,IACI,IAAI,CAAC,SAAS,KAAK,SAAS;MAC5B,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS;MAC3D,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,EAChG;MACE,IAAI,CAAC,oBAAoB,GAAG,iBAAiB,CAAC;KACjD;SAAM,IAAI,IAAI,CAAC,SAAS,EAAE;MACvB,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CACtC,iBAAiB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,EAC/D,KAAK,CACR,CAAC;MACF,IAAI,CAAC,oBAAoB,GAAG,iBAAiB,CAAC;KACjD;IACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;EAChC,CAAC;EAwDD,4BAA4B;EAE5B,MAAM;IACF,OAAO,CACH,WAAK,KAAK,EAAE,IAAI,CAAC,cAAc;MAC3B,WAAK,KAAK,EAAC,eAAe;QACrB,QAAQ,CAAC,IAAI,CAAC;QACd,IAAI,CAAC,QAAQ,EAAE,CACd;MACL,IAAI,CAAC,iBAAiB,EAAE;MACxB,WAAW,CAAC,IAAI,CAAC,CAChB,CACT,CAAC;EACN,CAAC;EAED,QAAQ;IACJ,IAAI,CAAC,IAAI,CAAC,SAAS;MAAE,OAAO;IAC5B,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAEjD,OAAO,CACH,WAAK,KAAK,EAAC,WAAW;MACjB,oBAAoB,CAAC,gBAAgB,CAAC,MAAM;MAC5C,SAAS,IAAI,IAAI,SAAS,EAAE,CAC3B,CACT,CAAC;EACN,CAAC;EAED,0CAA0C;EAC1C,iBAAiB;IACb,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,IAAI,CAAC;IACrD,OAAO,CACH,WACI,KAAK,EAAC,iBAAiB,EACvB,QAAQ,EAAE,CAAC,CAAC,aACJ,gBAAgB;MAExB,WAAK,KAAK,EAAC,4BAA4B;QAClC,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,CACjC,WAAK,KAAK,EAAC,cAAc,IAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAO,CACrE;QACA,IAAI,CAAC,gBAAgB,IAAI,CACtB;UACI,eACI,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAC3B,KAAK,EAAE,IAAI,CAAC,wBAAwB,GACtC,CACA,CACT;QACA,gBAAgB,IAAI,YAAM,IAAI,EAAC,YAAY,GAAG;QAC9C,IAAI,CAAC,iBAAiB,IAAI,WAAK,KAAK,EAAC,oBAAoB,GAAG;QAC5D,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAC1C;UACI,eACI,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,YAAY,aACV,WAAW,GACrB,CACA,CACT,CACC;MACL,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE;MAC9D,WAAK,KAAK,EAAC,6BAA6B;QACnC,IAAI,CAAC,QAAQ,IAAI,CACd,cACI,KAAK,EAAC,WAAW,EACjB,SAAS,EAAE,GAAG,CAAC,4BAA4B,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAClD,aAAa,EACrB,OAAO,EAAE,IAAI,CAAC,YAAY;UAE1B,eACI,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,YAAY,GACpB,CACG,CACZ;QACA,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,oBAAoB,IAAI,CACpF,cACI,KAAK,EAAC,uBAAuB,aACrB,wBAAwB,EAChC,OAAO,EAAE,IAAI,CAAC,kBAAkB,IAE/B,IAAI,CAAC,oBAAoB,CACrB,CACZ;QACA,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,CACjC,YAAM,KAAK,EAAC,cAAc,IAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAQ,CACvE;QACA,IAAI,CAAC,UAAU,IAAI,CAChB,gBACI,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,IAAI,CAAC,UAAU,IAErB,IAAI,CAAC,UAAU,CACT,CACd;QACA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,CAC1C;UACI,eACI,IAAI,EAAC,OAAO,EACZ,KAAK,EAAC,YAAY,aACV,WAAW,GACrB,CACA,CACT;QACA,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,CACpD;UACI,eACI,IAAI,EAAE,IAAI,CAAC,SAAS,EACpB,KAAK,EAAC,YAAY,GACpB,CACA,CACT;QACA,iBAAiB,IAAI,YAAM,IAAI,EAAC,aAAa,GAAG,CAC/C,CACJ,CACT,CAAC;EACN,CAAC;EACD,yCAAyC;EAEzC,0CAA0C;EAC1C,gBAAgB;IACZ,MAAM,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IACtC,MAAM,YAAY,GAAG,CAAC,aAAa,CAAC,CAAC;IACrC,IAAI,oBAAoB;MAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,CACH,EAAC,QAAQ;MACJ,oBAAoB,IAAI,CACrB,WAAK,KAAK,EAAC,0BAA0B;QACjC,YAAM,IAAI,EAAC,gBAAgB,GAAQ,CACjC,CACT;MACD,aACI,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,EAC7B,EAAE,EAAE,IAAI,CAAC,OAAO,EAChB,IAAI,EAAE,IAAI,CAAC,YAAY,EACvB,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EACvD,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,GAAG,EAAE,IAAI,CAAC,GAAG,EACb,IAAI,EAAE,IAAI,CAAC,IAAI,kBACD,IAAI,CAAC,OAAO,IAAI,SAAS,sBACrB,IAAI,CAAC,gBAAgB,mBACxB,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,kBACpB,GAAG,IAAI,CAAC,QAAQ,EAAE,mBACjB,CAAC,IAAI,CAAC,YAAY,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,SAAS,eAC9D,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,SAAS,mBAC9C,CAAC,IAAI,CAAC,YAAY,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,SAAS,mBAC1D,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,SAAS,2BACtD,IAAI,CAAC,oBAAoB,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,EAClF,YAAY,EAAE,IAAI,CAAC,oBAAoB,EACvC,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,WAAW,EAAE,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EACrD,SAAS,EAAE,IAAI,CAAC,SAAS,EACzB,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,SAAS,EACrE,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,SAAS,aACxC,YAAY,EACpB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EACzB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,EACzB,OAAO,EAAE,IAAI,CAAC,YAAY,EAC1B,MAAM,EAAE,IAAI,CAAC,WAAW,EACxB,OAAO,EAAE,IAAI,CAAC,YAAY,EAC1B,SAAS,EAAE,IAAI,CAAC,cAAc,EAC9B,OAAO,EAAE,IAAI,CAAC,YAAY,EAC1B,OAAO,EAAE,IAAI,CAAC,YAAY,EAC1B,SAAS,EAAE,IAAI,CAAC,SAAS,GAC3B,CACK,CACd,CAAC;EACN,CAAC;EACD,yCAAyC;EAEzC,cAAc;IACV,MAAM,eAAe,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;IAC1D,OAAO,CACH,WAAK,KAAK,EAAC,wBAAwB;MAC/B,cACI,KAAK,EAAC,aAAa,EACnB,IAAI,EAAC,QAAQ,EACb,EAAE,EAAE,IAAI,CAAC,OAAO,sBACE,IAAI,CAAC,gBAAgB,kBACzB,GAAG,IAAI,CAAC,QAAQ,EAAE,mBACjB,CAAC,IAAI,CAAC,YAAY,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,SAAS,eAC9D,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,SAAS,mBAC9C,CAAC,IAAI,CAAC,YAAY,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,SAAS,mBAC1D,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,2BACzC,IAAI,CAAC,oBAAoB,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,EAClF,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,SAAS,EAChD,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,aACjB,yBAAyB,EACjC,OAAO,EAAE,IAAI,CAAC,YAAY,EAC1B,MAAM,EAAE,IAAI,CAAC,WAAW;QAExB,WAAK,KAAK,EAAC,0BAA0B;UACjC,YAAM,IAAI,EAAC,gBAAgB;YACvB,YAAM,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,IACjD,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAC7C,CACJ,CACL,CACD,CACP,CACT,CAAC;EACN,CAAC;EAED,gBAAgB;IACZ,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,cAAc,GAAG,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;EAClF,CAAC;EAED,8BAA8B;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;IAC9B,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC;IACxE,MAAM,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO;MACH,gBAAgB,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,eAAe;MACpE,WAAW,EAAE,eAAe;MAC5B,mBAAmB,EAAE,KAAK,IAAI,kBAAkB;MAChD,YAAY,EAAE,KAAK;KACtB,CAAC;EACN,CAAC;EAED,8BAA8B;;IAC1B,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC5B,MAAM,WAAW,GAAG,MAAA,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,0CAAE,MAAM,mCAAI,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,cAAc,mCAAI,WAAW,CAAC;IAEnE,OAAO;MACH,gBAAgB;MAChB,WAAW;MACX,mBAAmB,EAAE,WAAW;MAChC,YAAY,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC;KACrD,CAAC;EACN,CAAC;EAED,iBAAiB,CAAC,UAAuB;IACrC,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;MAClD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;MAC9B,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,GAAG,UAAU,CAAC;MAE1E,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;QAC1B,IAAI,mBAAmB,GAAG,WAAW,KAAK,CAAC,EAAE;UACzC,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC;SACvE;aAAM;UACH,MAAM,UAAU,GAAG,mBAAmB,GAAG,WAAW,CAAC;UACrD,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,GAAG,UAAU,EAAE,gBAAgB,GAAG,UAAU,CAAC,CAAC;SACzF;OACJ;MAED,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;QAC1B,MAAM,UAAU,GAAG,WAAW,GAAG,mBAAmB,CAAC;QACrD,4CAA4C;QAC5C,MAAM,WAAW,GAAG,gBAAgB,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzE,KAAK,CAAC,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;OACrD;KACJ;EACL,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACJ","sourcesContent":["import {\n Component,\n Prop,\n Element,\n State,\n Event,\n EventEmitter,\n h,\n Watch,\n Listen,\n Fragment,\n Method,\n} from '@stencil/core';\nimport {\n createGuid,\n labelDOM,\n loc,\n messagesDOM,\n setMessageHeight,\n handleAriaLabel,\n overrideFocus,\n isEventFromElement,\n isMobile,\n hasSlotContent,\n nextPaint,\n} from 'src/utils';\nimport { IFormatterValueObject, ICursorData, IEventDetail } from './types';\nimport formatCurrency from './formatting/currency';\nimport formatPhoneNumber from './formatting/phone';\nimport formatSSN from './formatting/ssn';\nimport formatTIN from './formatting/tin';\nimport formatAlphanumeric from './formatting/alphanumeric';\nimport formatAlpha from './formatting/alpha';\nimport formatNumeric, { formatPercentage } from './formatting/numeric';\nimport formatPostalCode from './formatting/postal';\nimport formatDate from './formatting/date';\nimport formatCreditCard from './formatting/credit-card';\nimport { Q2Icon } from '../q2-icon';\nimport { Q2Badge } from '../q2-badge';\n\nconst inputTypeMap = {\n text: 'text',\n tel: 'tel',\n number: 'number',\n password: 'text',\n search: 'search',\n url: 'url',\n email: 'email',\n currency: 'text',\n phone: 'tel',\n ssn: 'text',\n alphanumeric: 'text',\n alpha: 'text',\n numeric: 'text',\n percentage: 'text',\n postal: 'text',\n date: 'text',\n 'credit-card': 'text',\n};\n\nexport type InputType = keyof typeof inputTypeMap;\n\n@Component({\n tag: 'q2-input',\n shadow: true,\n styleUrl: 'styles.scss',\n})\nexport class Q2Input {\n @Prop({ mutable: true }) value: string;\n @Prop({ reflect: true, mutable: true }) label: string;\n @Prop({ reflect: true, mutable: true }) hideLabel: boolean;\n @Prop({ reflect: true }) type: InputType = 'text';\n @Prop({ reflect: true }) placeholder: string;\n @Prop({ reflect: true }) disabled: boolean = false;\n @Prop({ reflect: true }) autocomplete: string;\n @Prop({ reflect: true }) autocorrect: 'on' | 'off';\n @Prop({ reflect: true }) autocapitalize: string;\n @Prop({ reflect: true }) autofocus: boolean;\n @Prop({ reflect: true }) hideMessages: boolean;\n @Prop({ reflect: true }) iconLeft: Q2Icon['type'];\n @Prop({ reflect: true }) iconRight: Q2Icon['type'];\n @Prop({ reflect: true }) readonly: boolean;\n @Prop({ reflect: true }) showCount: boolean;\n @Prop({ reflect: true }) clearable: boolean;\n @Prop({ reflect: true }) optional: boolean;\n @Prop({ reflect: true }) min: number;\n @Prop({ reflect: true }) max: number;\n @Prop({ reflect: true }) step: number;\n @Prop({ reflect: true }) formatModifier: string;\n @Prop({ reflect: true, mutable: true }) maxlength: number;\n @Prop({ reflect: true }) pseudo: boolean;\n @Prop({ reflect: true }) showVisibilityToggle: boolean = false;\n @Prop({ reflect: true, mutable: true }) textHidden: boolean;\n @Prop({ reflect: true }) badgeValue: string;\n @Prop({ reflect: true }) badgeTheme: Q2Badge['theme'];\n @Prop() role: string;\n @Prop() ariaControls: string;\n @Prop() ariaOwns: string;\n @Prop() ariaHaspopup: string;\n @Prop() ariaExpanded: string;\n @Prop() ariaActivedescendant: string;\n @Prop() current: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false';\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true }) ariaLabel: string;\n\n @Prop() errors: string[];\n @Prop() hints: string[];\n\n @State() formattedValueObject: IFormatterValueObject;\n @State() hasFocus: boolean;\n @State() isSmall: boolean = false;\n @State() checkSlotCount: number = 0;\n\n @Element() hostElement: HTMLElement;\n\n resizeObserver: ResizeObserver;\n scheduledAfterRender: (() => void)[] = [];\n valueOnFocus: string;\n isMobile: boolean = isMobile();\n mutationObserver: MutationObserver;\n textSelectedForDeletion: boolean;\n\n /////// LIFECYCLE HOOKS ////////\n\n componentWillLoad() {\n if (isNaN(this.maxlength)) {\n this.maxlength = undefined;\n }\n this.formattedValueObject = this.getFormattedValue(this.stringValue, true);\n\n Object.defineProperty(this.hostElement, 'formattedValue', {\n get: () => this.formattedValueObject?.formattedValue ?? '',\n });\n\n handleAriaLabel(this);\n if (this.textHidden === undefined) {\n this.textHidden = this.type === 'password';\n }\n\n this.manageClearableResizeObserver(this.clearable);\n }\n\n componentDidLoad() {\n if (!this.pseudo) {\n this.inputField.value = this.formattedValueObject.formattedValue;\n }\n\n if (this.autofocus === true) {\n this.inputField.focus();\n }\n\n overrideFocus(this.hostElement);\n const observer = new MutationObserver(this.onMutationObserved);\n observer.observe(this.hostElement, { childList: true });\n this.mutationObserver = observer;\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n disconnectedCallback() {\n this.manageClearableResizeObserver();\n this.mutationObserver?.disconnect();\n this.mutationObserver = null;\n }\n\n onMutationObserved = () => {\n // Updating checkSlotCount to force re-render when slot content changes\n this.checkSlotCount = this.checkSlotCount + 1;\n };\n\n getFormattedValue(value: string, valueChangedFromProperty: boolean): IFormatterValueObject {\n const formattingFunctions = {\n currency: formatCurrency,\n phone: formatPhoneNumber,\n ssn: formatSSN,\n tin: formatTIN,\n alphanumeric: formatAlphanumeric,\n alpha: formatAlpha,\n numeric: formatNumeric,\n percentage: formatPercentage,\n postal: formatPostalCode,\n date: formatDate,\n 'credit-card': formatCreditCard.format,\n };\n\n if (formattingFunctions[this.type]) {\n return formattingFunctions[this.type](value, this.formatModifier, valueChangedFromProperty);\n }\n\n return {\n value,\n formattedValue: value,\n fullyFormattedValue: value,\n formattingCharacterCount: 0,\n unformattedValue: value,\n };\n }\n\n get hasCustomDisplaySlot() {\n return !!this.hostElement.querySelector('[slot=custom-display]');\n }\n\n get canClear() {\n return this.clearable && !!(this.inputField?.value || this.value);\n }\n\n get shouldCursorStayAtEnd() {\n return this.isMobile && this.type === 'currency';\n }\n\n get hasError() {\n return Array.isArray(this.errors) && this.errors.length > 0;\n }\n\n get messages(): string[] {\n return (\n (this.errors && this.errors.length > 0 && this.errors) ||\n (this.hints && this.hints.length > 0 && this.hints) ||\n []\n );\n }\n\n get inputField() {\n return this.hostElement.shadowRoot.querySelector<HTMLInputElement>('.input-field');\n }\n\n get showMessages() {\n return this.messages.length > 0 && !this.hideMessages;\n }\n\n guid = createGuid();\n\n get inputId() {\n return `input-guid-${this.guid}`;\n }\n\n get inputDescribedBy() {\n return this.showMessages ? `${this.inputId}-description` : undefined;\n }\n\n get hasInputLeftSlot() {\n return hasSlotContent(this.hostElement, 'input-left');\n }\n\n get hasInputRightSlot() {\n return hasSlotContent(this.hostElement, 'input-right');\n }\n\n get isMaskedType(): boolean {\n const maskedTypes: string[] = [\n 'currency',\n 'phone',\n 'ssn',\n 'tin',\n 'alphanumeric',\n 'alpha',\n 'numeric',\n 'percentage',\n 'postal',\n 'date',\n 'credit-card',\n ];\n\n return maskedTypes.includes(this.type);\n }\n\n get wrapperClasses() {\n const classNames = ['field-container'];\n if (this.hasError) classNames.push('has-error');\n if (!!this.value) classNames.push('has-value');\n if (this.clearable && !!this.value) classNames.push('has-clear');\n if (this.hasFocus) classNames.push('has-focus');\n if (this.isSmall) classNames.push('is-small');\n if (this.formattedValueObject.prefix) classNames.push('has-prefix');\n if (this.computedIconLeft) classNames.push('has-icon-left');\n if (this.showIconSeparator) classNames.push('has-icon-separator');\n if (this.formattedValueObject.suffix) classNames.push('has-suffix');\n if (!this.formattedValueObject.suffix && this.iconRight) classNames.push('has-icon-right');\n if (this.type === 'currency') classNames.push('right-aligned');\n else classNames.push('left-aligned');\n if (this.hasCustomDisplaySlot) classNames.push('has-custom-display');\n\n return classNames.join(' ');\n }\n\n get computedType() {\n if (['password', 'text', 'ssn'].includes(this.type) && this.textHidden) {\n return 'password';\n } else {\n return (this.type && inputTypeMap[this.type]) || 'text';\n }\n }\n\n get computedAutocomplete() {\n // force off for currency type\n if (this.type === 'currency') return 'transaction-amount';\n return this.autocomplete || 'off';\n }\n\n get computedIconLeft(): string | undefined {\n if (this.formattedValueObject.prefix) {\n return;\n }\n\n if (this.type === 'search') {\n return 'search';\n }\n\n if (this.formattedValueObject.leftIcon) {\n return this.formattedValueObject.leftIcon;\n }\n\n return this.iconLeft;\n }\n\n get showIconSeparator(): boolean {\n return this.type === 'credit-card' || !!this.formattedValueObject.prefix;\n }\n\n get computedClassForIconLeft(): string | undefined {\n let className = 'icon-left';\n if (this.formattedValueObject.leftIconMuted) {\n className += ' icon-left-muted';\n }\n return className;\n }\n\n get stringValue(): string {\n return (this.value && String(this.value)) || '';\n }\n\n get canSetSelection(): boolean {\n // email and number type don't support setSelectionRange\n return !['email', 'number'].includes(this.computedType);\n }\n\n get visibilityToggleText(): string {\n return loc(`tecton.element.input.toggle.${this.textHidden ? 'show' : 'hide'}`);\n }\n\n formatAndUpdateValueFromProp() {\n this.formattedValueObject = this.getFormattedValue(this.stringValue, true);\n\n if (!this.pseudo) {\n const setValue = () => {\n this.inputField.value = this.formattedValueObject.formattedValue;\n };\n\n this.inputField ? setValue() : this.scheduledAfterRender.push(() => setValue());\n }\n }\n\n get inputMode() {\n const inputModeMap = {\n currency: 'numeric',\n ssn: 'numeric',\n tin: 'numeric',\n numeric: 'decimal',\n percentage: 'decimal',\n postal: 'numeric',\n date: 'numeric',\n 'credit-card': 'numeric',\n };\n\n return (this.type && inputModeMap[this.type]) || undefined;\n }\n\n //////// OBSERVERS //////////\n\n @Watch('clearable')\n manageClearableResizeObserver(clearable?: boolean) {\n const isSmallThreshold = 190;\n if (clearable) {\n if (this.resizeObserver) return;\n this.resizeObserver = new ResizeObserver(([entry]) => {\n this.isSmall = isSmallThreshold > entry.contentRect.width;\n });\n this.resizeObserver.observe(this.hostElement);\n } else {\n this.isSmall = false;\n this.resizeObserver?.unobserve(this.hostElement);\n this.resizeObserver = null;\n }\n }\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('value')\n valueObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('formattedValueObject')\n formattedValueObjectObserver() {\n this.formatted.emit(this.formattedValueObject);\n }\n\n @Watch('type')\n typeObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('formatModifier')\n formatModifierObserver() {\n this.formatAndUpdateValueFromProp();\n }\n\n @Watch('hints')\n hintsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n @Watch('errors')\n errorsObserver() {\n this.hasFocus && this.scheduledAfterRender.push(() => setMessageHeight(this));\n }\n\n /// Methods ///\n /**\n * Emulates focusing the `<input>`, entering the provided value, and emitting an `input` event.\n *\n * This method leaves the focus on the `<input>` and as a result does not trigger the `change` event. If you want\n * to trigger the` change` event, move the focus to another element after calling this method.\n *\n * @testOnly\n */\n @Method()\n setValue(value: string) {\n const { inputField } = this;\n inputField.focus();\n inputField.dispatchEvent(new FocusEvent('focus'));\n inputField.value = value;\n inputField.dispatchEvent(new InputEvent('input'));\n }\n\n /**\n * Emulates clicking the clear button when the input is clearable.\n *\n * @warning\n * Only applicable when the input is clearable.\n *\n * @testOnly\n */\n @Method()\n clearValue() {\n if (!this.clearable) return;\n this.onClearInput();\n }\n\n ///////// HOST ELEMENT EVENTS //////\n @Listen('focus')\n onHostElementFocus(event) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.inputField.focus();\n }\n\n @Listen('change')\n onHostElementChange(event: CustomEvent) {\n event.stopPropagation();\n if (event.target === this.hostElement && !this.hostElement.onchange) {\n this.value = event.detail.value;\n }\n }\n\n ///////// Events /////////\n\n @Event() input: EventEmitter<IEventDetail>;\n @Event() change: EventEmitter<IEventDetail>;\n @Event() clear: EventEmitter<IEventDetail>;\n @Event() formatted: EventEmitter<IEventDetail>;\n\n ///// ACTIONS ////////\n\n onToggleVisibility = () => {\n this.hostElement.dispatchEvent(new FocusEvent('focus'));\n this.textHidden = !this.textHidden;\n };\n\n onInputClick = () => {\n if (this.shouldCursorStayAtEnd) this.placeCursorAtEnd();\n };\n\n onInputFocus = () => {\n if (this.inputField.tagName === 'INPUT') {\n this.scheduledAfterRender.push(() =>\n this.shouldCursorStayAtEnd\n ? this.placeCursorAtEnd()\n : this.setCursorPosition(this.calculateCursorPositionOnFocus())\n );\n }\n this.hasFocus = true;\n setMessageHeight(this);\n this.valueOnFocus = this.value;\n };\n\n onInputBlur = () => {\n this.hasFocus = false;\n setMessageHeight(this);\n if (this.valueOnFocus !== this.formattedValueObject.value) {\n this.valueOnFocus = this.formattedValueObject.value;\n this.change.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n }\n };\n\n onInputInput = (event: InputEvent) => {\n event.stopPropagation();\n\n if (this.type === 'currency') this.handleCurrencyDeletion(event);\n const newFormattedValue = this.getFormattedValue((event.target as HTMLInputElement).value, false);\n this.handleDataInput(newFormattedValue);\n };\n\n handleCurrencyDeletion(event: InputEvent) {\n // Don't do anything if text was selected for deletion\n if (this.textSelectedForDeletion) {\n this.textSelectedForDeletion = false;\n return;\n }\n // We only care about \"Backspace\" and \"Delete\" events\n if (event.inputType !== 'deleteContentBackward' && event.inputType !== 'deleteContentForward') return;\n\n const input = event.target as HTMLInputElement;\n const cursorPosition = input.selectionStart;\n const { formattedValue } = this.formattedValueObject;\n\n if (cursorPosition === null) return;\n\n let cursorMap;\n switch (event.inputType) {\n case 'deleteContentBackward':\n const valueBeforeCursor = formattedValue.substring(0, cursorPosition + 1);\n const isPrevCharAlphaNum = /[a-zA-Z0-9]$/.test(valueBeforeCursor);\n cursorMap = {\n leftIndex: isPrevCharAlphaNum ? cursorPosition : cursorPosition - 1,\n rightIndex: isPrevCharAlphaNum ? cursorPosition + 1 : cursorPosition,\n afterCursorOffset: 0,\n newCursorOffset: 1,\n };\n break;\n case 'deleteContentForward':\n const valueAfterCursor = formattedValue.substring(cursorPosition);\n const isNextCharAlphaNum = /^[a-zA-Z0-9]/.test(valueAfterCursor);\n cursorMap = {\n leftIndex: isNextCharAlphaNum ? cursorPosition : cursorPosition + 1,\n rightIndex: isNextCharAlphaNum ? cursorPosition + 1 : cursorPosition + 2,\n afterCursorOffset: 1,\n newCursorOffset: 0,\n };\n break;\n default:\n return;\n }\n\n // Ensure the cursor doesn't move with a newly formatted value\n const newValue = [\n formattedValue.substring(0, cursorMap.leftIndex),\n formattedValue.substring(cursorMap.rightIndex),\n ].join('');\n const charactersAfterCursor = formattedValue.length - cursorPosition - cursorMap.afterCursorOffset;\n const newFormattedValue = this.getFormattedValue(newValue, false).formattedValue;\n const newCursorPosition = Math.max(\n newFormattedValue.length - charactersAfterCursor + cursorMap.newCursorOffset,\n 0\n );\n\n input.value = newFormattedValue;\n input.setSelectionRange(newCursorPosition, newCursorPosition);\n\n // This handles a runtime issue when a character is deleted from the beginning of the input\n if (newCursorPosition === 0) {\n nextPaint(() => input.setSelectionRange(newCursorPosition, newCursorPosition));\n }\n }\n\n onInputPaste = (event: ClipboardEvent) => {\n if (this.type === 'currency') {\n const clipboardData = event.clipboardData.getData('text');\n const newFormattedValue = this.getFormattedValue(clipboardData, true);\n event.preventDefault();\n this.handleDataInput(newFormattedValue);\n }\n };\n\n handleDataInput(newFormattedValue: IFormatterValueObject) {\n if (\n this.maxlength === undefined ||\n newFormattedValue.unformattedValue.length <= this.maxlength ||\n newFormattedValue.unformattedValue.length <= this.formattedValueObject.unformattedValue.length\n ) {\n this.formattedValueObject = newFormattedValue;\n } else if (this.maxlength) {\n newFormattedValue = this.getFormattedValue(\n newFormattedValue.unformattedValue.substring(0, this.maxlength),\n false\n );\n this.formattedValueObject = newFormattedValue;\n }\n this.handleValueAndCursor();\n }\n\n handleValueAndCursor = () => {\n // ORDER IMPORTANT: calculate cursor position -> set value -> set cursor position\n const cursorPosition = this.calculateCursorPositionOnInput();\n // when type=number: returns only valid decimal on input event, should not update itself (e.g. typing \"1.\" )\n if (this.type !== 'number') this.inputField.value = this.formattedValueObject.formattedValue;\n this.input.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n if (!this.formattedValueObject.value) {\n this.clear.emit();\n }\n this.setCursorPosition(cursorPosition);\n };\n\n // Sets textSelectedForDeletion to true if the user has selected text for deletion\n // This is used to prevent other logic from running when text is deleted\n handleCurrencyKeydown = (event: KeyboardEvent) => {\n if (event.key !== 'Backspace' && event.key !== 'Delete') return;\n const inputElement = this.inputField;\n this.textSelectedForDeletion = inputElement.selectionStart !== inputElement.selectionEnd;\n };\n\n onInputKeydown = (event: KeyboardEvent) => {\n const keysThatMoveCursor = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'];\n const { key } = event;\n\n if (this.type === 'currency') this.handleCurrencyKeydown(event);\n if (this.shouldCursorStayAtEnd && keysThatMoveCursor.includes(key)) event.preventDefault();\n if (key === 'Enter' && this.valueOnFocus !== this.formattedValueObject.value) {\n this.valueOnFocus = this.formattedValueObject.value;\n this.change.emit({\n value: this.formattedValueObject.value,\n formattedValue: this.formattedValueObject.fullyFormattedValue,\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n ...(this.formattedValueObject.type && { type: this.formattedValueObject.type }),\n });\n }\n };\n\n onClearInput = () => {\n const eventDetail = {\n value: '',\n formattedValue: '',\n minFormattedLength: this.formattedValueObject.minFormattedLength,\n };\n this.input.emit(eventDetail);\n this.change.emit(eventDetail);\n this.clear.emit();\n this.inputField.focus();\n };\n\n /////// VIEW METHODS ///////\n\n render() {\n return (\n <div class={this.wrapperClasses}>\n <div class=\"label-wrapper\">\n {labelDOM(this)}\n {this.countDOM()}\n </div>\n {this.inputContainerDOM()}\n {messagesDOM(this)}\n </div>\n );\n }\n\n countDOM() {\n if (!this.showCount) return;\n const { maxlength, formattedValueObject } = this;\n\n return (\n <div class=\"count-tag\">\n {formattedValueObject.unformattedValue.length}\n {maxlength && `/${maxlength}`}\n </div>\n );\n }\n\n /* tslint:disable:cyclomatic-complexity */\n inputContainerDOM() {\n const { hasInputLeftSlot, hasInputRightSlot } = this;\n return (\n <div\n class=\"input-container\"\n tabindex={-1}\n test-id=\"inputContainer\"\n >\n <div class=\"input-icons-container-left\">\n {this.formattedValueObject.prefix && (\n <div class=\"input-prefix\">{this.formattedValueObject.prefix}</div>\n )}\n {this.computedIconLeft && (\n <div>\n <q2-icon\n type={this.computedIconLeft}\n class={this.computedClassForIconLeft}\n />\n </div>\n )}\n {hasInputLeftSlot && <slot name=\"input-left\" />}\n {this.showIconSeparator && <div class=\"vertical-separator\" />}\n {this.hasError && this.type === 'currency' && (\n <div>\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n test-id=\"iconError\"\n />\n </div>\n )}\n </div>\n {this.pseudo ? this.pseudoInputDOM() : this.standardInputDOM()}\n <div class=\"input-icons-container-right\">\n {this.canClear && (\n <q2-btn\n class=\"btn-clear\"\n ariaLabel={loc('tecton.element.input.clear', [this.label])}\n test-id=\"clearButton\"\n onClick={this.onClearInput}\n >\n <q2-icon\n type=\"close\"\n class=\"icon-clear\"\n />\n </q2-btn>\n )}\n {['password', 'text', 'ssn', 'tin'].includes(this.type) && this.showVisibilityToggle && (\n <q2-btn\n class=\"btn-visibility-toggle\"\n test-id=\"toggleVisibilityButton\"\n onClick={this.onToggleVisibility}\n >\n {this.visibilityToggleText}\n </q2-btn>\n )}\n {this.formattedValueObject.suffix && (\n <span class=\"input-suffix\">{this.formattedValueObject.suffix}</span>\n )}\n {this.badgeValue && (\n <q2-badge\n size=\"large\"\n theme={this.badgeTheme}\n >\n {this.badgeValue}\n </q2-badge>\n )}\n {this.hasError && this.type !== 'currency' && (\n <div>\n <q2-icon\n type=\"error\"\n class=\"icon-error\"\n test-id=\"iconError\"\n />\n </div>\n )}\n {this.iconRight && !this.formattedValueObject.suffix && (\n <div>\n <q2-icon\n type={this.iconRight}\n class=\"icon-right\"\n />\n </div>\n )}\n {hasInputRightSlot && <slot name=\"input-right\" />}\n </div>\n </div>\n );\n }\n /* tslint:enable:cyclomatic-complexity */\n\n /* tslint:disable:cyclomatic-complexity */\n standardInputDOM() {\n const { hasCustomDisplaySlot } = this;\n const inputClasses = ['input-field'];\n if (hasCustomDisplaySlot) inputClasses.push('sr');\n return (\n <Fragment>\n {hasCustomDisplaySlot && (\n <div class=\"custom-display-container\">\n <slot name=\"custom-display\"></slot>\n </div>\n )}\n <input\n class={inputClasses.join(' ')}\n id={this.inputId}\n type={this.computedType}\n size={this.formattedValueObject.prefix ? 10 : undefined}\n max={this.max}\n min={this.min}\n step={this.step}\n aria-current={this.current || undefined}\n aria-describedby={this.inputDescribedBy}\n aria-required={`${!this.optional}`}\n aria-invalid={`${this.hasError}`}\n aria-controls={(this.ariaControls && `${this.ariaControls}`) || undefined}\n aria-owns={(this.ariaOwns && `${this.ariaOwns}`) || undefined}\n aria-haspopup={(this.ariaHaspopup && `${this.ariaHaspopup}`) || undefined}\n aria-expanded={(!!this.ariaExpanded && `${!!this.ariaExpanded}`) || undefined}\n aria-activedescendant={this.ariaActivedescendant && `${this.ariaActivedescendant}`}\n autocomplete={this.computedAutocomplete}\n autocapitalize={this.autocapitalize}\n autocorrect={this.autocorrect === 'on' ? 'on' : 'off'}\n autofocus={this.autofocus}\n placeholder={(this.placeholder && loc(this.placeholder)) || undefined}\n role={(this.role && `${this.role}`) || undefined}\n test-id=\"inputField\"\n readonly={!!this.readonly}\n disabled={!!this.disabled}\n onFocus={this.onInputFocus}\n onBlur={this.onInputBlur}\n onClick={this.onInputClick}\n onKeyDown={this.onInputKeydown}\n onInput={this.onInputInput}\n onPaste={this.onInputPaste}\n inputmode={this.inputMode}\n />\n </Fragment>\n );\n }\n /* tslint:enable:cyclomatic-complexity */\n\n pseudoInputDOM() {\n const showPlaceholder = !this.value && !!this.placeholder;\n return (\n <div class=\"pseudo-input-container\">\n <button\n class=\"input-field\"\n type=\"button\"\n id={this.inputId}\n aria-describedby={this.inputDescribedBy}\n aria-invalid={`${this.hasError}`}\n aria-controls={(this.ariaControls && `${this.ariaControls}`) || undefined}\n aria-owns={(this.ariaOwns && `${this.ariaOwns}`) || undefined}\n aria-haspopup={(this.ariaHaspopup && `${this.ariaHaspopup}`) || undefined}\n aria-expanded={this.ariaExpanded === 'true' ? 'true' : undefined}\n aria-activedescendant={this.ariaActivedescendant && `${this.ariaActivedescendant}`}\n role={(this.role && `${this.role}`) || undefined}\n disabled={!!this.disabled}\n test-id=\"q2InputInnerClearButton\"\n onFocus={this.onInputFocus}\n onBlur={this.onInputBlur}\n >\n <div class=\"custom-display-container\">\n <slot name=\"custom-display\">\n <span class={showPlaceholder ? 'placeholder-text' : ''}>\n {showPlaceholder ? this.placeholder : this.value}\n </span>\n </slot>\n </div>\n </button>\n </div>\n );\n }\n\n placeCursorAtEnd() {\n const { inputField } = this;\n inputField.selectionStart = inputField.selectionEnd = inputField.value.length;\n }\n\n calculateCursorPositionOnInput(): ICursorData {\n const input = this.inputField;\n const formattedLength = this.formattedValueObject.formattedValue.length;\n const currentValueLength = input.value.length;\n const defaultPosition = this.type === 'currency' ? formattedLength : 0;\n return {\n startingPosition: (input && input.selectionStart) || defaultPosition,\n valueLength: formattedLength,\n previousValueLength: input && currentValueLength,\n hasSelection: false,\n };\n }\n\n calculateCursorPositionOnFocus(): ICursorData {\n const { inputField } = this;\n const valueLength = inputField?.value?.length ?? 0;\n const startingPosition = inputField?.selectionStart ?? valueLength;\n\n return {\n startingPosition,\n valueLength,\n previousValueLength: valueLength,\n hasSelection: getSelection().toString().length > 0,\n };\n }\n\n setCursorPosition(cursorData: ICursorData) {\n if (this.canSetSelection && !cursorData.hasSelection) {\n const input = this.inputField;\n const { valueLength, previousValueLength, startingPosition } = cursorData;\n\n if (this.type === 'currency') {\n if (previousValueLength - valueLength === 1) {\n input.setSelectionRange(startingPosition - 1, startingPosition - 1);\n } else {\n const difference = previousValueLength - valueLength;\n input.setSelectionRange(startingPosition - difference, startingPosition - difference);\n }\n }\n\n if (this.type !== 'currency') {\n const difference = valueLength - previousValueLength;\n // Never allow the cursor to move in reverse\n const newPosition = startingPosition + (difference > 0 ? difference : 0);\n input.setSelectionRange(newPosition, newPosition);\n }\n }\n }\n}\n"]}
|