q2-tecton-elements 1.38.2 → 1.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/click-elsewhere_2.cjs.entry.js +1 -1
- package/dist/cjs/click-elsewhere_2.cjs.entry.js.map +1 -1
- package/dist/cjs/{index-09c712ea.js → index-9113a9da.js} +2 -2
- package/dist/cjs/{index-09c712ea.js.map → index-9113a9da.js.map} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/q2-action-sheet.cjs.entry.js +1 -1
- package/dist/cjs/q2-action-sheet.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-btn_2.cjs.entry.js +2 -2
- package/dist/cjs/q2-btn_2.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-calendar.cjs.entry.js +11 -2
- package/dist/cjs/q2-calendar.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-card.cjs.entry.js +20 -23
- package/dist/cjs/q2-card.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-carousel-pane.cjs.entry.js +1 -1
- package/dist/cjs/q2-carousel-pane.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-carousel.cjs.entry.js +30 -4
- package/dist/cjs/q2-carousel.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-chart-area.cjs.entry.js +1 -1
- package/dist/cjs/q2-chart-area.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-chart-bar.cjs.entry.js +1 -1
- package/dist/cjs/q2-chart-donut.cjs.entry.js +14 -14
- package/dist/cjs/q2-chart-donut.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-checkbox-group.cjs.entry.js +1 -1
- package/dist/cjs/q2-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/q2-checkbox.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-data-table.cjs.entry.js +43 -21
- package/dist/cjs/q2-data-table.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-dropdown-item.cjs.entry.js +1 -1
- package/dist/cjs/q2-dropdown.cjs.entry.js +1 -1
- package/dist/cjs/q2-editable-field.cjs.entry.js +1 -1
- package/dist/cjs/q2-editable-field.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-icon.cjs.entry.js +1 -1
- package/dist/cjs/q2-input.cjs.entry.js +6 -3
- package/dist/cjs/q2-input.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-loc.cjs.entry.js +1 -1
- package/dist/cjs/q2-message.cjs.entry.js +1 -1
- package/dist/cjs/q2-month-picker.cjs.entry.js +1 -1
- package/dist/cjs/q2-optgroup_2.cjs.entry.js +1 -1
- package/dist/cjs/q2-optgroup_2.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-option-list.cjs.entry.js +1 -1
- package/dist/cjs/q2-option-list.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-pagination.cjs.entry.js +1 -1
- package/dist/cjs/q2-pagination.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-pill.cjs.entry.js +1 -1
- package/dist/cjs/q2-pill.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-radio-group.cjs.entry.js +1 -1
- package/dist/cjs/q2-radio-group.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-radio.cjs.entry.js +1 -1
- 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 +1 -1
- package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper-pane.cjs.entry.js +1 -1
- package/dist/cjs/q2-stepper-pane.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js +4 -4
- package/dist/cjs/q2-stepper-vertical.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-stepper.cjs.entry.js +1 -1
- package/dist/cjs/q2-stepper.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tab-container.cjs.entry.js +1 -1
- package/dist/cjs/q2-tab-container.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tab-pane.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tag.cjs.entry.js +1 -1
- 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 +1 -1
- package/dist/cjs/q2-textarea.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-tooltip.cjs.entry.js +1 -1
- package/dist/cjs/tecton-tab-pane.cjs.entry.js.map +1 -1
- package/dist/collection/components/click-elsewhere/index.js +1 -1
- package/dist/collection/components/click-elsewhere/index.js.map +1 -1
- package/dist/collection/components/q2-action-sheet/index.js +6 -3
- package/dist/collection/components/q2-action-sheet/index.js.map +1 -1
- package/dist/collection/components/q2-btn/styles.css +11 -11
- package/dist/collection/components/q2-calendar/index.js +23 -11
- package/dist/collection/components/q2-calendar/index.js.map +1 -1
- package/dist/collection/components/q2-card/index.js +21 -27
- package/dist/collection/components/q2-card/index.js.map +1 -1
- package/dist/collection/components/q2-card/styles.css +57 -0
- package/dist/collection/components/q2-carousel/index.js +33 -5
- package/dist/collection/components/q2-carousel/index.js.map +1 -1
- package/dist/collection/components/q2-carousel-pane/index.js +8 -4
- package/dist/collection/components/q2-carousel-pane/index.js.map +1 -1
- package/dist/collection/components/q2-chart-area/index.js +9 -4
- package/dist/collection/components/q2-chart-area/index.js.map +1 -1
- package/dist/collection/components/q2-chart-donut/index.js +58 -22
- package/dist/collection/components/q2-chart-donut/index.js.map +1 -1
- package/dist/collection/components/q2-checkbox/index.js +5 -2
- package/dist/collection/components/q2-checkbox/index.js.map +1 -1
- package/dist/collection/components/q2-checkbox-group/index.js +12 -5
- package/dist/collection/components/q2-checkbox-group/index.js.map +1 -1
- package/dist/collection/components/q2-data-table/index.js +73 -29
- package/dist/collection/components/q2-data-table/index.js.map +1 -1
- package/dist/collection/components/q2-editable-field/index.js +6 -6
- package/dist/collection/components/q2-editable-field/index.js.map +1 -1
- package/dist/collection/components/q2-input/formatting/phone.js +1 -1
- package/dist/collection/components/q2-input/formatting/phone.js.map +1 -1
- package/dist/collection/components/q2-input/index.js +23 -19
- package/dist/collection/components/q2-input/index.js.map +1 -1
- package/dist/collection/components/q2-input/types.js.map +1 -1
- package/dist/collection/components/q2-option/index.js +5 -2
- package/dist/collection/components/q2-option/index.js.map +1 -1
- package/dist/collection/components/q2-option-list/index.js +15 -9
- package/dist/collection/components/q2-option-list/index.js.map +1 -1
- package/dist/collection/components/q2-pagination/index.js +8 -5
- package/dist/collection/components/q2-pagination/index.js.map +1 -1
- package/dist/collection/components/q2-pill/index.js +5 -2
- package/dist/collection/components/q2-pill/index.js.map +1 -1
- package/dist/collection/components/q2-popover/index.js +1 -1
- package/dist/collection/components/q2-popover/index.js.map +1 -1
- package/dist/collection/components/q2-radio/index.js +3 -3
- package/dist/collection/components/q2-radio/index.js.map +1 -1
- package/dist/collection/components/q2-radio-group/index.js +7 -4
- package/dist/collection/components/q2-radio-group/index.js.map +1 -1
- package/dist/collection/components/q2-section/index.js +7 -4
- package/dist/collection/components/q2-section/index.js.map +1 -1
- package/dist/collection/components/q2-section/styles.css +8 -6
- package/dist/collection/components/q2-select/index.js +8 -5
- package/dist/collection/components/q2-select/index.js.map +1 -1
- package/dist/collection/components/q2-stepper/index.js +5 -2
- package/dist/collection/components/q2-stepper/index.js.map +1 -1
- package/dist/collection/components/q2-stepper-pane/index.js +11 -8
- package/dist/collection/components/q2-stepper-pane/index.js.map +1 -1
- package/dist/collection/components/q2-stepper-vertical/index.js +13 -6
- package/dist/collection/components/q2-stepper-vertical/index.js.map +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-pane/index.js +5 -2
- package/dist/collection/components/q2-tab-pane/index.js.map +1 -1
- package/dist/collection/components/q2-tag/index.js +1 -1
- package/dist/collection/components/q2-tag/index.js.map +1 -1
- package/dist/collection/components/q2-textarea/index.js +14 -8
- package/dist/collection/components/q2-textarea/index.js.map +1 -1
- package/dist/collection/components/tecton-tab-pane/index.js +5 -2
- package/dist/collection/components/tecton-tab-pane/index.js.map +1 -1
- package/dist/collection/utils/index.js +1 -1
- package/dist/collection/utils/index.js.map +1 -1
- package/dist/components/index13.js.map +1 -1
- package/dist/components/index14.js.map +1 -1
- package/dist/components/index15.js.map +1 -1
- package/dist/components/index16.js +1 -1
- package/dist/components/index16.js.map +1 -1
- package/dist/components/index2.js.map +1 -1
- package/dist/components/index5.js +1 -1
- package/dist/components/index5.js.map +1 -1
- package/dist/components/index6.js.map +1 -1
- package/dist/components/index9.js +5 -2
- package/dist/components/index9.js.map +1 -1
- package/dist/components/q2-action-sheet.js.map +1 -1
- package/dist/components/q2-calendar.js +10 -1
- package/dist/components/q2-calendar.js.map +1 -1
- package/dist/components/q2-card.js +19 -22
- package/dist/components/q2-card.js.map +1 -1
- package/dist/components/q2-carousel-pane.js.map +1 -1
- package/dist/components/q2-carousel.js +32 -4
- package/dist/components/q2-carousel.js.map +1 -1
- package/dist/components/q2-chart-area.js.map +1 -1
- package/dist/components/q2-chart-donut.js +16 -15
- package/dist/components/q2-chart-donut.js.map +1 -1
- package/dist/components/q2-checkbox-group.js.map +1 -1
- package/dist/components/q2-data-table.js +43 -21
- package/dist/components/q2-data-table.js.map +1 -1
- package/dist/components/q2-editable-field.js.map +1 -1
- package/dist/components/q2-pagination.js.map +1 -1
- package/dist/components/q2-pill.js.map +1 -1
- package/dist/components/q2-radio-group.js.map +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.map +1 -1
- package/dist/components/q2-stepper-pane.js.map +1 -1
- package/dist/components/q2-stepper-vertical.js +3 -3
- package/dist/components/q2-stepper-vertical.js.map +1 -1
- package/dist/components/q2-stepper.js.map +1 -1
- package/dist/components/q2-tab-container.js.map +1 -1
- package/dist/components/q2-tab-pane.js.map +1 -1
- package/dist/components/q2-tag.js.map +1 -1
- package/dist/components/q2-textarea.js.map +1 -1
- package/dist/components/tecton-tab-pane.js.map +1 -1
- package/dist/esm/click-elsewhere_2.entry.js +1 -1
- package/dist/esm/click-elsewhere_2.entry.js.map +1 -1
- package/dist/esm/{index-84f1034e.js → index-fbe28822.js} +2 -2
- package/dist/esm/{index-84f1034e.js.map → index-fbe28822.js.map} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/q2-action-sheet.entry.js +1 -1
- package/dist/esm/q2-action-sheet.entry.js.map +1 -1
- package/dist/esm/q2-btn_2.entry.js +2 -2
- package/dist/esm/q2-btn_2.entry.js.map +1 -1
- package/dist/esm/q2-calendar.entry.js +11 -2
- package/dist/esm/q2-calendar.entry.js.map +1 -1
- package/dist/esm/q2-card.entry.js +20 -23
- package/dist/esm/q2-card.entry.js.map +1 -1
- package/dist/esm/q2-carousel-pane.entry.js +1 -1
- package/dist/esm/q2-carousel-pane.entry.js.map +1 -1
- package/dist/esm/q2-carousel.entry.js +30 -4
- package/dist/esm/q2-carousel.entry.js.map +1 -1
- package/dist/esm/q2-chart-area.entry.js +1 -1
- package/dist/esm/q2-chart-area.entry.js.map +1 -1
- package/dist/esm/q2-chart-bar.entry.js +1 -1
- package/dist/esm/q2-chart-donut.entry.js +14 -14
- package/dist/esm/q2-chart-donut.entry.js.map +1 -1
- package/dist/esm/q2-checkbox-group.entry.js +1 -1
- package/dist/esm/q2-checkbox-group.entry.js.map +1 -1
- package/dist/esm/q2-checkbox.entry.js +1 -1
- package/dist/esm/q2-checkbox.entry.js.map +1 -1
- package/dist/esm/q2-data-table.entry.js +43 -21
- package/dist/esm/q2-data-table.entry.js.map +1 -1
- package/dist/esm/q2-dropdown-item.entry.js +1 -1
- package/dist/esm/q2-dropdown.entry.js +1 -1
- package/dist/esm/q2-editable-field.entry.js +1 -1
- package/dist/esm/q2-editable-field.entry.js.map +1 -1
- package/dist/esm/q2-icon.entry.js +1 -1
- package/dist/esm/q2-input.entry.js +6 -3
- package/dist/esm/q2-input.entry.js.map +1 -1
- package/dist/esm/q2-loc.entry.js +1 -1
- package/dist/esm/q2-message.entry.js +1 -1
- package/dist/esm/q2-month-picker.entry.js +1 -1
- package/dist/esm/q2-optgroup_2.entry.js +1 -1
- package/dist/esm/q2-optgroup_2.entry.js.map +1 -1
- package/dist/esm/q2-option-list.entry.js +1 -1
- package/dist/esm/q2-option-list.entry.js.map +1 -1
- package/dist/esm/q2-pagination.entry.js +1 -1
- package/dist/esm/q2-pagination.entry.js.map +1 -1
- package/dist/esm/q2-pill.entry.js +1 -1
- package/dist/esm/q2-pill.entry.js.map +1 -1
- package/dist/esm/q2-radio-group.entry.js +1 -1
- package/dist/esm/q2-radio-group.entry.js.map +1 -1
- package/dist/esm/q2-radio.entry.js +1 -1
- 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 +1 -1
- package/dist/esm/q2-select.entry.js.map +1 -1
- package/dist/esm/q2-stepper-pane.entry.js +1 -1
- package/dist/esm/q2-stepper-pane.entry.js.map +1 -1
- package/dist/esm/q2-stepper-vertical.entry.js +4 -4
- package/dist/esm/q2-stepper-vertical.entry.js.map +1 -1
- package/dist/esm/q2-stepper.entry.js +1 -1
- package/dist/esm/q2-stepper.entry.js.map +1 -1
- package/dist/esm/q2-tab-container.entry.js +1 -1
- package/dist/esm/q2-tab-container.entry.js.map +1 -1
- package/dist/esm/q2-tab-pane.entry.js.map +1 -1
- package/dist/esm/q2-tag.entry.js +1 -1
- 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 +1 -1
- package/dist/esm/q2-textarea.entry.js.map +1 -1
- package/dist/esm/q2-tooltip.entry.js +1 -1
- package/dist/esm/tecton-tab-pane.entry.js.map +1 -1
- package/dist/q2-tecton-elements/p-0253a00b.entry.js +2 -0
- package/dist/q2-tecton-elements/p-0253a00b.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-72b4ecc6.entry.js → p-07229496.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-07229496.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-a6b03db1.entry.js → p-0ecff52c.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-a6b03db1.entry.js.map → p-0ecff52c.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-f198f77b.entry.js → p-1179b32c.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-1179b32c.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-311f37e2.entry.js → p-15c69543.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-9220365b.entry.js → p-212c6301.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-212c6301.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-3090b655.entry.js +2 -0
- package/dist/q2-tecton-elements/p-3090b655.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-8f8d5362.entry.js → p-3569e648.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-3569e648.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-0cade28b.entry.js → p-36bff57a.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-57e81863.entry.js → p-39e94e12.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-57e81863.entry.js.map → p-39e94e12.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-3f20d610.entry.js +2 -0
- package/dist/q2-tecton-elements/p-3f20d610.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-29a7ca63.entry.js → p-44c2d7a2.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-29a7ca63.entry.js.map → p-44c2d7a2.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-deb773a5.entry.js → p-461dca3d.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-deb773a5.entry.js.map → p-461dca3d.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-3d82d94f.entry.js → p-5964fd50.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-3d82d94f.entry.js.map → p-5964fd50.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-e98d9cf2.entry.js → p-5b4c30b8.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-5b4c30b8.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-69dcf12e.entry.js → p-5d6c2534.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-5d6c2534.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-a09c90c1.entry.js → p-66bc9475.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-a09c90c1.entry.js.map → p-66bc9475.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-e4dadcd7.entry.js → p-6ba6d83e.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-6ba6d83e.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-5843f6c8.entry.js → p-78d5707b.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-78d5707b.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-85dc889e.entry.js → p-7e276297.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-7e276297.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-059ea7c9.entry.js → p-81e36fcd.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-8f273db2.entry.js → p-88b303a7.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-8f273db2.entry.js.map → p-88b303a7.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/p-9889692d.entry.js +2 -0
- package/dist/q2-tecton-elements/p-9889692d.entry.js.map +1 -0
- package/dist/q2-tecton-elements/p-9da0db14.entry.js.map +1 -1
- package/dist/q2-tecton-elements/{p-c057134f.entry.js → p-9dff6592.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-9dff6592.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-145849d0.entry.js → p-a5a23edc.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-a5a23edc.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-db3bbfb8.entry.js → p-a9c40d3b.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-a9c40d3b.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-15179d55.entry.js → p-aa96f160.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-5c033ed9.entry.js → p-b3a32a46.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-5c033ed9.entry.js.map → p-b3a32a46.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-f3868a77.entry.js → p-b6ed1342.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-f3868a77.entry.js.map → p-b6ed1342.entry.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-52132d80.entry.js → p-ba19d09f.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-ba19d09f.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-81b917a5.entry.js → p-cc7ba0cb.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-107f07f2.entry.js → p-ce009987.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-d7fb3534.entry.js.map +1 -1
- package/dist/q2-tecton-elements/{p-959f47ef.entry.js → p-de7352f5.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-6ae87415.entry.js → p-ef2e2991.entry.js} +2 -2
- package/dist/q2-tecton-elements/{p-b83568e7.entry.js → p-f1479052.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-f1479052.entry.js.map +1 -0
- package/dist/q2-tecton-elements/{p-f34521a4.js → p-fb903495.js} +2 -2
- package/dist/q2-tecton-elements/{p-f34521a4.js.map → p-fb903495.js.map} +1 -1
- package/dist/q2-tecton-elements/{p-2812f9d2.entry.js → p-ff137358.entry.js} +2 -2
- package/dist/q2-tecton-elements/p-ff137358.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-btn-test.e2e.js +31 -0
- package/dist/test/elements/q2-btn-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-card-test.e2e.js +69 -11
- package/dist/test/elements/q2-card-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-carousel-test.e2e.js +41 -3
- package/dist/test/elements/q2-carousel-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-chart-donut-test.e2e.js +64 -9
- package/dist/test/elements/q2-chart-donut-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-data-table-test.e2e.js +91 -2
- package/dist/test/elements/q2-data-table-test.e2e.js.map +1 -1
- package/dist/test/elements/q2-input-test.e2e.js +151 -67
- package/dist/test/elements/q2-input-test.e2e.js.map +1 -1
- package/dist/test/helpers.js +48 -0
- package/dist/test/helpers.js.map +1 -1
- package/dist/types/components/click-elsewhere/index.d.ts +3 -0
- package/dist/types/components/q2-action-sheet/index.d.ts +7 -0
- package/dist/types/components/q2-calendar/index.d.ts +23 -3
- package/dist/types/components/q2-card/index.d.ts +14 -4
- package/dist/types/components/q2-carousel/index.d.ts +8 -0
- package/dist/types/components/q2-carousel-pane/index.d.ts +7 -1
- package/dist/types/components/q2-chart-area/index.d.ts +7 -1
- package/dist/types/components/q2-chart-donut/index.d.ts +18 -3
- package/dist/types/components/q2-checkbox/index.d.ts +4 -0
- package/dist/types/components/q2-checkbox-group/index.d.ts +8 -1
- package/dist/types/components/q2-data-table/index.d.ts +43 -3
- package/dist/types/components/q2-editable-field/index.d.ts +18 -2
- package/dist/types/components/q2-input/index.d.ts +19 -2
- package/dist/types/components/q2-input/types.d.ts +1 -0
- package/dist/types/components/q2-option/index.d.ts +4 -0
- package/dist/types/components/q2-option-list/index.d.ts +15 -1
- package/dist/types/components/q2-pagination/index.d.ts +8 -2
- package/dist/types/components/q2-pill/index.d.ts +4 -0
- package/dist/types/components/q2-popover/index.d.ts +3 -0
- package/dist/types/components/q2-radio/index.d.ts +6 -1
- package/dist/types/components/q2-radio-group/index.d.ts +7 -1
- package/dist/types/components/q2-section/index.d.ts +7 -1
- package/dist/types/components/q2-select/index.d.ts +16 -1
- package/dist/types/components/q2-stepper/index.d.ts +4 -0
- package/dist/types/components/q2-stepper-pane/index.d.ts +11 -1
- package/dist/types/components/q2-stepper-vertical/index.d.ts +10 -2
- package/dist/types/components/q2-tab-container/index.d.ts +12 -2
- package/dist/types/components/q2-tab-pane/index.d.ts +4 -0
- package/dist/types/components/q2-tag/index.d.ts +5 -0
- package/dist/types/components/q2-textarea/index.d.ts +14 -2
- package/dist/types/components/tecton-tab-pane/index.d.ts +4 -0
- package/dist/types/components.d.ts +223 -27
- package/dist/types/workspace/workspace/{tecton-production_release_1.38.x → _Gitlab_tecton-production_master}/packages/q2-tecton-elements/.stencil/test/helpers.d.ts +1 -0
- package/package.json +4 -3
- package/dist/q2-tecton-elements/p-072bda73.entry.js +0 -2
- package/dist/q2-tecton-elements/p-072bda73.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-145849d0.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-2812f9d2.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-52132d80.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-5843f6c8.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-69dcf12e.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-72b4ecc6.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-85dc889e.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-8f8d5362.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-9220365b.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-a4017e55.entry.js +0 -2
- package/dist/q2-tecton-elements/p-a4017e55.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-af98db79.entry.js +0 -2
- package/dist/q2-tecton-elements/p-af98db79.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-b83568e7.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-c0334e63.entry.js +0 -2
- package/dist/q2-tecton-elements/p-c0334e63.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-c057134f.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-db3bbfb8.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-e4dadcd7.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-e98d9cf2.entry.js.map +0 -1
- package/dist/q2-tecton-elements/p-f198f77b.entry.js.map +0 -1
- /package/dist/q2-tecton-elements/{p-311f37e2.entry.js.map → p-15c69543.entry.js.map} +0 -0
- /package/dist/q2-tecton-elements/{p-0cade28b.entry.js.map → p-36bff57a.entry.js.map} +0 -0
- /package/dist/q2-tecton-elements/{p-059ea7c9.entry.js.map → p-81e36fcd.entry.js.map} +0 -0
- /package/dist/q2-tecton-elements/{p-15179d55.entry.js.map → p-aa96f160.entry.js.map} +0 -0
- /package/dist/q2-tecton-elements/{p-81b917a5.entry.js.map → p-cc7ba0cb.entry.js.map} +0 -0
- /package/dist/q2-tecton-elements/{p-107f07f2.entry.js.map → p-ce009987.entry.js.map} +0 -0
- /package/dist/q2-tecton-elements/{p-959f47ef.entry.js.map → p-de7352f5.entry.js.map} +0 -0
- /package/dist/q2-tecton-elements/{p-6ae87415.entry.js.map → p-ef2e2991.entry.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["formatNumber","val","options","prefix","suffix","decimals","decimalSeparator","thousandsSeparator","allowDecimal","allowNegative","explicit","isNegative","value","parsedValue","replace","Number","toFixed","integerString","decimalString","splitValue","negativeSymbol","formattedValue","fullyFormattedValue","formattingCharacterCount","length","maxlength","MAX_SAFE_INTEGER","toString","unformattedValue","splitIndex","substring","padStart","formatValue","mask","trim","generateMask","minFormattedLength","getMinimumFormattedLength","optionalValidatingChars","isOptionalValidatingChar","character","includes","knownValidatingChars","isKnownValidatingChar","getStaticFormattingChars","knownChars","join","formattingChars","RegExp","split","Set","isStaticFormattingChar","has","getValidatedChar","char","matcher","toUpperCase","maskArray","currentValueIndex","reduce","acc","getNextNonFormattingCharIndex","validChar","currencyFormats","AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLF","CLP","CNY","COP","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EEK","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SKK","SLL","SOS","SRD","STN","SVC","SYP","SZL","THB","TJS","TMM","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VEF","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWD","formatCurrency","currencyCode","processedCurrencyCode","currencyFormat","Object","assign","phoneNumberFormats","AF","AL","DZ","AD","AO","AI","AG","AR","AM","AQ","AW","AU","AT","AZ","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BA","BW","BR","BN","BG","BF","BI","KH","CM","CA","CV","KY","CF","TD","CL","CN","CO","KM","CD","CG","CR","CI","HR","CU","CY","CZ","DK","DJ","DM","DO","TL","EC","EG","SV","GQ","EE","ET","FK","FO","FJ","FI","FR","GF","PF","GA","GM","GE","DE","GH","GI","GR","GL","GD","GP","GU","GT","GN","GW","GY","HK","HN","HT","HU","IS","IN","ID","IR","IQ","IE","IL","IT","JM","JP","JO","KZ","KE","KI","KR","KW","KG","LA","LV","LB","LS","LY","LI","LT","LU","MO","MK","MG","MW","MY","MV","ML","MT","MH","MQ","MU","MX","MD","MC","MN","MS","MA","MZ","MM","NA","NP","NL","AN","NC","NZ","NI","NE","NG","MP","NO","OM","PK","PW","PA","PG","PE","PH","PL","PT","PR","QA","RE","RO","RU","RW","SH","KN","LC","VC","ST","SA","SN","SC","SL","SG","SK","SI","SB","ZA","ES","LK","SD","SR","SZ","SE","CH","SY","TJ","TZ","TH","TG","TT","TN","TR","TM","TC","UG","UA","AE","GB","UY","UZ","VE","VN","VG","VI","YE","ZM","ZW","AC","ME","PS","RS","TW","CW","US","formatPhoneNumber","isoCode","formatSSN","formatTIN","formatAlphanumeric","formatAlpha","modifier","numberFormats","delimited","integer","dec","getNumberFormat","key","numberFormat","formatNumeric","formatPercentage","undefined","postalCodeFormats","AS","CX","CC","GG","GS","IM","JE","XK","LR","YT","FM","NF","PY","PM","PN","WS","SM","SO","SJ","YU","WF","formatPostalCode","dateFormats","formatDate","format","formattedValueObject","detectedType","formatCreditCard","detectCreditCardTypeFromValue","creditCardFormatters","leftIcon","unknownFormatter","unknownFn","valueObject","type","leftIconMuted","amexFormatter","amexFn","discoverFormatter","discoverFn","masterCardFormatter","masterCardFn","visaFormatter","visaFn","dinersClubInternationalFormatter","dinersClub","discover","amex","masterCard","visa","unknown","firstInt","parseInt","charAt","secondInt","firstfour","substr","thirdInt","firstthree","firstsix","stylesCss","inputTypeMap","text","tel","number","password","search","url","email","currency","phone","ssn","alphanumeric","alpha","numeric","percentage","postal","date","Q2Input","this","scheduledAfterRender","isMobile","onMutationObserved","checkSlotCount","guid","createGuid","onToggleVisibility","hostElement","dispatchEvent","FocusEvent","textHidden","onInputClick","shouldCursorStayAtEnd","placeCursorAtEnd","onInputFocus","inputField","tagName","push","setCursorPosition","calculateCursorPositionOnFocus","hasFocus","setMessageHeight","valueOnFocus","onInputBlur","change","emit","onInputInput","event","stopPropagation","handleCurrencyDeletion","newFormattedValue","getFormattedValue","target","handleDataInput","onInputPaste","clipboardData","getData","preventDefault","handleValueAndCursor","cursorPosition","calculateCursorPositionOnInput","input","clear","handleCurrencyKeydown","inputElement","textSelectedForDeletion","selectionStart","selectionEnd","onInputKeydown","keysThatMoveCursor","onClearInput","eventDetail","focus","componentWillLoad","isNaN","stringValue","defineProperty","get","_a","_b","handleAriaLabel","manageClearableResizeObserver","clearable","componentDidLoad","pseudo","autofocus","overrideFocus","observer","MutationObserver","observe","childList","mutationObserver","componentDidRender","forEach","fn","disconnectedCallback","disconnect","valueChangedFromProperty","formattingFunctions","tin","formatModifier","hasCustomDisplaySlot","querySelector","canClear","hasError","Array","isArray","errors","messages","hints","shadowRoot","showMessages","hideMessages","inputId","inputDescribedBy","hasInputLeftSlot","hasSlotContent","hasInputRightSlot","isMaskedType","maskedTypes","wrapperClasses","classNames","isSmall","computedIconLeft","showIconSeparator","iconRight","computedType","computedAutocomplete","autocomplete","iconLeft","computedClassForIconLeft","className","String","canSetSelection","visibilityToggleText","loc","formatAndUpdateValueFromProp","setValue","inputMode","inputModeMap","isSmallThreshold","resizeObserver","ResizeObserver","entry","contentRect","width","unobserve","ariaLabelObserver","valueObserver","formattedValueObjectObserver","formatted","typeObserver","formatModifierObserver","hintsObserver","errorsObserver","InputEvent","clearValue","onHostElementFocus","isEventFromElement","onHostElementChange","onchange","detail","inputType","cursorMap","valueBeforeCursor","isPrevCharAlphaNum","test","leftIndex","rightIndex","afterCursorOffset","newCursorOffset","valueAfterCursor","isNextCharAlphaNum","newValue","charactersAfterCursor","newCursorPosition","Math","max","setSelectionRange","nextPaint","render","h","class","labelDOM","countDOM","inputContainerDOM","messagesDOM","showCount","tabindex","name","pseudoInputDOM","standardInputDOM","ariaLabel","label","onClick","showVisibilityToggle","badgeValue","size","theme","badgeTheme","inputClasses","Fragment","id","min","step","current","optional","ariaControls","ariaOwns","ariaHaspopup","ariaExpanded","ariaActivedescendant","autocapitalize","autocorrect","placeholder","role","readonly","disabled","onFocus","onBlur","onKeyDown","onInput","onPaste","inputmode","showPlaceholder","formattedLength","currentValueLength","defaultPosition","startingPosition","valueLength","previousValueLength","hasSelection","_c","getSelection","cursorData","difference","newPosition"],"sources":["./src/components/q2-input/formatting/number.ts","./src/components/q2-input/formatting/generic.ts","./src/components/q2-input/formatting/currency.ts","./src/components/q2-input/formatting/phone.ts","./src/components/q2-input/formatting/ssn.ts","./src/components/q2-input/formatting/tin.ts","./src/components/q2-input/formatting/alphanumeric.ts","./src/components/q2-input/formatting/alpha.ts","./src/components/q2-input/formatting/numeric.ts","./src/components/q2-input/formatting/postal.ts","./src/components/q2-input/formatting/date.ts","./src/components/q2-input/formatting/credit-card.ts","./src/components/q2-input/styles.scss?tag=q2-input&encapsulation=shadow","./src/components/q2-input/index.tsx"],"sourcesContent":["import { IFormatterValueObject, INumberInputFormatOptions } from '../types';\n\nexport default function formatNumber(\n val: string = '',\n options: INumberInputFormatOptions = {\n prefix: '',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: '',\n allowDecimal: false,\n allowNegative: true,\n },\n explicit: boolean = false\n): IFormatterValueObject {\n const isNegative = val[0] === '-';\n\n let value = val;\n\n const allowDecimal = !!options.allowDecimal && !!options.decimals;\n\n if (explicit) {\n const parsedValue = value.replace(/[^\\d.]/g, '');\n value = (parsedValue && Number(parsedValue).toFixed(allowDecimal ? options.decimals : 0)) || '';\n }\n\n value = value.replace(/[^\\d]/g, '');\n\n let { integerString, decimalString } = splitValue(value, allowDecimal, options.decimals);\n\n // define decimalString\n let decimalSeparator = options.decimalSeparator;\n if (!allowDecimal) {\n decimalSeparator = '';\n decimalString = '';\n }\n\n // define negative\n const negativeSymbol = options.allowNegative && isNegative ? '-' : '';\n\n value = `${negativeSymbol}${integerString}${decimalSeparator}${decimalString}`;\n\n // format integerString\n integerString = integerString.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousandsSeparator);\n\n const formattedValue: string =\n negativeSymbol || integerString ? `${negativeSymbol}${integerString}${decimalSeparator}${decimalString}` : '';\n\n const fullyFormattedValue: string =\n negativeSymbol || integerString\n ? `${negativeSymbol}${options.prefix}${integerString}${decimalSeparator}${decimalString}${options.suffix}`\n : '';\n\n let formattingCharacterCount = formattedValue.length - value.length;\n\n if (decimalSeparator) {\n formattingCharacterCount = formattingCharacterCount + options.decimalSeparator.length;\n }\n\n const prefix = options.prefix || options.suffix;\n const maxlength = Number.MAX_SAFE_INTEGER.toString().length + formattingCharacterCount + decimalString.length;\n\n const unformattedValue = `${integerString.replace(/[^0-9]/g, '')}${decimalString}`.replace(/^0+/, '');\n\n return {\n value,\n formattedValue,\n fullyFormattedValue,\n prefix,\n suffix: '',\n formattingCharacterCount,\n maxlength,\n unformattedValue,\n };\n}\n\nfunction splitValue(\n value: string,\n allowDecimal: boolean = false,\n decimals: number\n): { integerString: string; decimalString: string } {\n if (!allowDecimal) {\n return {\n integerString: value,\n decimalString: '',\n };\n }\n\n const splitIndex = value.length - decimals;\n\n let integerString = value.substring(0, splitIndex).padStart(1, '0');\n if (integerString.length > 1 && integerString[0] === '0') {\n integerString = integerString.substring(1);\n }\n\n const decimalString = value.substring(splitIndex).padStart(decimals, '0');\n\n return {\n integerString,\n decimalString,\n };\n}\n","import { IFormatterValueObject } from '../types';\n\nexport default function formatValue(\n value: string = '',\n mask: string = '',\n options?: {\n prefix?: string;\n suffix?: string;\n }\n): IFormatterValueObject {\n const prefix = (options && options.prefix) || '';\n const suffix = (options && options.suffix) || '';\n\n if (!value || !mask) {\n const fullyFormattedValue = `${prefix}${value}${suffix}`;\n return {\n value,\n formattedValue: value,\n fullyFormattedValue,\n prefix: prefix.trim() || suffix.trim(),\n formattingCharacterCount: 0,\n unformattedValue: value,\n };\n }\n\n const { unformattedValue, formattedValue, formattingCharacterCount } = generateMask(value, mask);\n\n const fullyFormattedValue = `${prefix}${formattedValue}${suffix}`;\n const maxlength = mask.length;\n const minFormattedLength = getMinimumFormattedLength(mask, prefix, suffix);\n\n return {\n value: unformattedValue,\n formattedValue,\n fullyFormattedValue,\n prefix: prefix.trim() || suffix.trim(),\n formattingCharacterCount,\n maxlength,\n minFormattedLength,\n unformattedValue,\n };\n}\n\nconst optionalValidatingChars = ['?'];\nfunction isOptionalValidatingChar(character: string): boolean {\n return optionalValidatingChars.includes(character);\n}\n\nconst knownValidatingChars = ['#', '@', '*', ...optionalValidatingChars];\nfunction isKnownValidatingChar(character: string): boolean {\n return knownValidatingChars.includes(character);\n}\n\nfunction getStaticFormattingChars(mask: string): Set<string> {\n const knownChars = knownValidatingChars.join('|');\n const formattingChars = mask.replace(new RegExp(`[${knownChars}]`, 'g'), '').split('');\n return new Set(formattingChars);\n}\n\nfunction isStaticFormattingChar(character: string, formattingChars: Set<string>): boolean {\n return formattingChars.has(character);\n}\n\nfunction getValidatedChar(char: string, matcher: string) {\n switch (matcher) {\n case '#':\n char = char.replace(/[^\\d]/g, '');\n break;\n case '@':\n char = char.toUpperCase().replace(/[^A-Z]+/g, ''); // allows only upper case\n break;\n case '*':\n char = char.toUpperCase().replace(/[^\\dA-Z]+/g, '');\n break;\n case '?':\n char = char.replace(/[^\\d]/g, '');\n break;\n default:\n return char;\n }\n return char;\n}\n\nfunction generateMask(value: string, mask: string) {\n const maskArray = mask.split('');\n const formattingChars = getStaticFormattingChars(mask);\n let currentValueIndex: number = 0;\n let formattingCharacterCount: number = 0;\n let unformattedValue: string = '';\n\n const formattedValue = maskArray.reduce((acc: string, character: string) => {\n if (currentValueIndex >= value.length) {\n return acc;\n }\n\n if (isOptionalValidatingChar(character) && isStaticFormattingChar(value[currentValueIndex], formattingChars)) {\n return acc;\n }\n\n if (isKnownValidatingChar(character)) {\n // Step value index if formatting character pushed out of place by user input\n currentValueIndex = getNextNonFormattingCharIndex(value, currentValueIndex, formattingChars);\n\n if (currentValueIndex >= value.length) {\n return acc;\n }\n\n const validChar = getValidatedChar(value[currentValueIndex], character);\n acc += validChar;\n unformattedValue += validChar;\n currentValueIndex++;\n } else {\n // Static formatting characters added directly to formatted string\n acc += character;\n formattingCharacterCount++;\n\n if (character === value[currentValueIndex]) {\n // Continue to walk value if next value at this index matches formatting character\n currentValueIndex++;\n }\n }\n\n return acc;\n }, '');\n\n return {\n unformattedValue,\n formattedValue,\n formattingCharacterCount,\n };\n}\n\nfunction getNextNonFormattingCharIndex(value: string, currentValueIndex: number, formattingChars: Set<string>): number {\n if (isStaticFormattingChar(value[currentValueIndex], formattingChars)) {\n currentValueIndex++;\n return getNextNonFormattingCharIndex(value, currentValueIndex, formattingChars);\n }\n\n return currentValueIndex;\n}\n\nfunction getMinimumFormattedLength(mask: string, prefix: string, suffix: string): number {\n return (\n mask.replace(new RegExp(`[${optionalValidatingChars.join('|')}]`, 'g'), '').length +\n prefix.length +\n suffix.length\n );\n}\n","import formatNumber from './number';\nimport formatValue from './generic';\nimport { IFormatterValueObject, INumberInputFormatOptions } from '../types';\n\n// decimal data source: http://www.iso.org/iso/home/standards/currency_codes.htm 09/Nov/2016\nexport const currencyFormats = {\n AED: {\n prefix: '',\n suffix: 'د.إ',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.إ'\n AFN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ALL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n AMD: {\n prefix: 'դր.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'դր.9,999.99'\n ANG: {\n prefix: 'ƒ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ƒ9,999.99'\n AOA: {\n prefix: 'Kz',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Kz9,999.99'\n ARS: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n AUD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n AWG: {\n prefix: 'ƒ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ƒ9,999.99'\n AZN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n BAM: {\n prefix: 'КМ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'КМ9,999.99'\n BBD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BDT: {\n prefix: '৳',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '৳9,999.99'\n BGN: {\n prefix: '৳',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '৳9,999.99'\n BHD: {\n prefix: '',\n suffix: 'ب.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ب.د'\n BIF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n BMD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BND: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BOB: {\n prefix: 'Bs.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Bs.9,999.99'\n BRL: {\n prefix: 'R$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'R$9,999.99'\n BSD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n BTN: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n BWP: {\n prefix: 'P',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'P9,999.99'\n BYN: {\n prefix: 'Br',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Br9,999'\n BZD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CAD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CDF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999.99'\n CHF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999.99'\n CLF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 4,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9.999.9999'\n CLP: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n CNY: {\n prefix: '¥',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¥9,999.99'\n COP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CRC: {\n prefix: '₡',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₡9,999.99'\n CUC: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CUP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n CVE: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n CZK: {\n prefix: 'Kč',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Kč9,999.99'\n DJF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n DKK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n DOP: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n DZD: {\n prefix: '',\n suffix: 'د.ج',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.ج'\n EEK: {\n prefix: 'KR',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'KR9,999.99'\n EGP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n ERN: {\n prefix: 'Nfk',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Nfk9,999.99'\n ETB: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n EUR: {\n prefix: '€',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '€9,999.99'\n FJD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n FKP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GBP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GEL: {\n prefix: 'ლ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ლ9,999.99'\n GHS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n GIP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n GMD: {\n prefix: 'D',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'D9,999.99'\n GNF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n GTQ: {\n prefix: 'Q',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Q9,999.99'\n GYD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n HKD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.9'\n HNL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n HRK: {\n prefix: 'kn',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kn9,999.99'\n HTG: {\n prefix: 'G',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'G9,999.99'\n HUF: {\n prefix: 'Ft',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Ft9,999.99'\n IDR: {\n prefix: 'Rs',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Rs9,999.99'\n ILS: {\n prefix: '₪',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₪9,999.99'\n INR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n IQD: {\n prefix: '',\n suffix: 'ع.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ع.د'\n IRR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ISK: {\n prefix: 'kr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999'\n JMD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n JOD: {\n prefix: '',\n suffix: 'د.ا',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.ا'\n JPY: {\n prefix: '¥',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¥9,999'\n KES: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n KGS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n KHR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n KMF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n KPW: {\n prefix: '₩',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₩9,999.99'\n KRW: {\n prefix: '₩',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₩9,999.99'\n KWD: {\n prefix: 'د.ك',\n suffix: '',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999د.ك'\n KYD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n KZT: {\n prefix: '〒',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '〒9,999.99'\n LAK: {\n prefix: '₭',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₭9,999.99'\n LBP: {\n prefix: '',\n suffix: 'ل.ل',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ل.ل9,999.99'\n LKR: {\n prefix: 'Rs',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Rs9,999.99'\n LRD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n LSL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n LTL: {\n prefix: 'Lt',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Lt9,999.99'\n LVL: {\n prefix: 'Ls',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Ls9,999.99'\n LYD: {\n prefix: '',\n suffix: 'ل.د',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ل.د'\n MAD: {\n prefix: '',\n suffix: 'د.م.',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99د.م.'\n MDL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n MGA: {\n prefix: '¤',\n suffix: '',\n decimals: 1,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.9'\n MKD: {\n prefix: 'ден',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ден9,999.99'\n MMK: {\n prefix: 'K',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'K9,999.99'\n MNT: {\n prefix: '₮',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₮9,999.99'\n MOP: {\n prefix: 'P',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'P9,999.99'\n MRU: {\n prefix: 'UM',\n suffix: '',\n decimals: 1,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'UM9,999.9'\n MUR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n MVR: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n MWK: {\n prefix: 'MK',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'MK9,999.99'\n MXN: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n MYR: {\n prefix: 'RM',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'RM9,999.99'\n MZN: {\n prefix: 'MTn',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'MTn9,999.99'\n NAD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n NGN: {\n prefix: '₦',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₦9,999.99'\n NIO: {\n prefix: 'C$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'C$9,999.99'\n NOK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n NPR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n NZD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n OMR: {\n prefix: '',\n suffix: 'ر.ع.',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999ر.ع.'\n PAB: {\n prefix: 'B/.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'B/.9,999.99'\n PEN: {\n prefix: 'S/.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'S/.9,999.99'\n PGK: {\n prefix: 'K',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'K9,999.99'\n PHP: {\n prefix: 'p',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'p9,999.99'\n PKR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n PLN: {\n prefix: 'zł',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'zł9,999.99'\n PYG: {\n prefix: '¤',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999'\n QAR: {\n prefix: '',\n suffix: 'ر.ق',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99ر.ق'\n RON: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n RSD: {\n prefix: 'дин.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'дин.9,999.99'\n RUB: {\n prefix: 'руб.',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'руб.9,999.99'\n RWF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n SAR: {\n prefix: '',\n suffix: 'ر.س',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.99ر.س'\n SBD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n SCR: {\n prefix: '₨',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₨9,999.99'\n SDG: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SEK: {\n prefix: 'kr',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'kr9,999.99'\n SGD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n SHP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SKK: {\n prefix: 'Sk',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sk9,999.99'\n SLL: {\n prefix: 'Le',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Le9,999.99'\n SOS: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n SRD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n STN: {\n prefix: 'Db',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Db9,999.99'\n SVC: {\n prefix: '₡',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₡9,999.99'\n SYP: {\n prefix: '£',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '£9,999.99'\n SZL: {\n prefix: 'L',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'L9,999.99'\n THB: {\n prefix: '฿',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '฿9,999.99'\n TJS: {\n prefix: 'ЅМ',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ЅМ9,999.99'\n TMM: {\n prefix: 'm',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'm9,999.99'\n TND: {\n prefix: '',\n suffix: 'د.ت',\n decimals: 3,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '9,999.999د.ت'\n TOP: {\n prefix: 'T$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'T$9,999.99'\n TRY: {\n prefix: 'YTL',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'YTL9,999.99'\n TTD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n TWD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n TZS: {\n prefix: 'Sh',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999.99'\n UAH: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n UGX: {\n prefix: 'Sh',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Sh9,999'\n USD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n UYU: {\n prefix: '$',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999'\n UZS: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n VEF: {\n prefix: 'Bs F',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Bs F9,999.99'\n VND: {\n prefix: '₫',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '₫9,999'\n VUV: {\n prefix: 'Vt',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Vt9,999'\n WST: {\n prefix: 'T',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'T9,999.99'\n XAF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n XCD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n XOF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n XPF: {\n prefix: 'Fr',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'Fr9,999'\n YER: {\n prefix: '¤',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '¤9,999.99'\n ZAR: {\n prefix: 'R',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'R9,999.99'\n ZMW: {\n prefix: 'ZK',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // 'ZK9,999.99'\n ZWD: {\n prefix: '$',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n }, // '$9,999.99'\n};\n\nexport default function formatCurrency(\n value: string,\n currencyCode: string = 'USD',\n explicit: boolean = false\n): IFormatterValueObject {\n let processedCurrencyCode = currencyCode || '';\n let allowDecimal = true;\n\n if (processedCurrencyCode.includes('-integer')) {\n processedCurrencyCode = processedCurrencyCode.split('-integer')[0];\n allowDecimal = false;\n }\n\n const currencyFormat = currencyFormats[processedCurrencyCode];\n\n if (!currencyFormat) {\n return formatValue(value);\n }\n\n const options: INumberInputFormatOptions = {\n ...currencyFormat,\n allowDecimal: allowDecimal && currencyFormat.decimals > 0,\n allowNegative: false,\n };\n\n return formatNumber(value, options, explicit);\n}\n","import { IFormatterValueObject } from '../types';\nimport formatValue from './generic';\n\nexport const phoneNumberFormats = {\n AF: {\n mask: '(##) #######',\n prefix: '+93 ',\n },\n AL: {\n mask: '#######',\n prefix: '+355 ',\n },\n DZ: {\n mask: '(##) ###-###',\n prefix: '+213 ',\n },\n // AS\n AD: {\n mask: '(#) #####',\n prefix: '+376 ',\n },\n AO: {\n mask: '#########',\n prefix: '+244 ',\n },\n AI: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n AG: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n AR: {\n mask: '##########',\n prefix: '+54 ',\n },\n AM: {\n mask: '########',\n prefix: '+375 ',\n },\n AQ: {\n mask: '##-####',\n prefix: '+672 ',\n },\n AW: {\n mask: '###-####',\n prefix: '+297 ',\n },\n AU: {\n mask: '(##) ####-####',\n prefix: '+61 ',\n },\n /* AT: {\n mask:'####?????????',\n prefix: ''\n }, */\n AT: {\n mask: '#############',\n prefix: '+43 ',\n },\n /* AZ: {\n mask:'########?',\n prefix: ''\n }, */\n AZ: {\n mask: '#########',\n prefix: '+994 ',\n },\n BS: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BH: {\n mask: '####-####',\n prefix: '+973 ',\n },\n /* BD: {\n mask:'#######??',\n prefix: ''\n }, */\n BD: {\n mask: '#########',\n prefix: '+880 ',\n },\n BB: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BY: {\n mask: '#########',\n prefix: '+375 ',\n },\n BE: {\n mask: '########??',\n prefix: '+32 ',\n },\n BZ: {\n mask: '#######',\n prefix: '+501 ',\n },\n BJ: {\n mask: '(##) ###-###',\n prefix: '+229 ',\n },\n BM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n BT: {\n mask: '(#) ###-###',\n prefix: '+975 ',\n },\n BO: {\n mask: '(#) ###-####',\n prefix: '+591 ',\n },\n BA: {\n mask: '(##) ##-##-##',\n prefix: '+387 ',\n },\n /* BW: {\n mask:'#######?',\n prefix: ''\n }, */\n BW: {\n mask: '########',\n prefix: '+267 ',\n },\n BR: {\n mask: '(##) ####-####',\n prefix: '+55 ',\n },\n BN: {\n mask: '###-####',\n prefix: '+673 ',\n },\n BG: {\n mask: '#######?',\n prefix: '+359 ',\n },\n BF: {\n mask: '##-##-##-##',\n prefix: '+226 ',\n },\n BI: {\n mask: '####-####',\n prefix: '+257 ',\n },\n KH: {\n mask: '(##) ######',\n prefix: '+855 ',\n },\n CM: {\n mask: '####-####',\n prefix: '+237 ',\n },\n CA: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n CV: {\n mask: '###-####',\n prefix: '+238 ',\n },\n KY: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n CF: {\n mask: '###-###',\n prefix: '+236 ',\n },\n TD: {\n mask: '###-##-##',\n prefix: '+235 ',\n },\n /* CL: {\n mask:'########?',\n prefix: ''\n }, */\n CL: {\n mask: '#########',\n prefix: '+56 ',\n },\n /* CN: {\n mask:'########???',\n prefix: ''\n }, */\n CN: {\n mask: '###########',\n prefix: '+86 ',\n },\n /* CO: {\n mask:'########??',\n prefix: ''\n }, */\n CO: {\n mask: '##########',\n prefix: '57 ',\n },\n KM: {\n mask: '###-####',\n prefix: '+269 ',\n },\n CD: {\n mask: '###-####',\n prefix: '+243 ',\n },\n CG: {\n mask: '###-####',\n prefix: '+242 ',\n },\n // CK\n CR: {\n mask: '####-####',\n prefix: '+506 ',\n },\n CI: {\n mask: '####-####',\n prefix: '+225 ',\n },\n HR: {\n mask: '########?',\n prefix: '+385 ',\n },\n /* CU: {\n mask:'#####?ID:?????',\n prefix: ''\n }, */\n CU: {\n mask: '###########',\n prefix: '+53 ',\n },\n CY: {\n mask: '####-####',\n prefix: '+357 ',\n },\n CZ: {\n mask: '#########',\n prefix: '+420 ',\n },\n DK: {\n mask: '####-####',\n prefix: '+45 ',\n },\n DJ: {\n mask: '##-##-##-##',\n prefix: '+253 ',\n },\n DM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n DO: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n TL: {\n mask: '###-####',\n prefix: '+670 ',\n },\n EC: {\n mask: '(##) ###-####',\n prefix: '+593 ',\n },\n /* EG: {\n mask:'########??',\n prefix: ''\n }, */\n EG: {\n mask: '##########',\n prefix: '+20 ',\n },\n SV: {\n mask: '####-####',\n prefix: '+503 ',\n },\n GQ: {\n mask: '##-####',\n prefix: '+240 ',\n },\n // ER:\n EE: {\n mask: '#######?',\n prefix: '+372 ',\n },\n ET: {\n mask: '(##) ###-####',\n prefix: '+251 ',\n },\n FK: {\n mask: '#####',\n prefix: '+500 ',\n },\n FO: {\n mask: '######',\n prefix: '+298 ',\n },\n FJ: {\n mask: '###-####',\n prefix: '+679 ',\n },\n /* FI: {\n mask:'#####???????',\n prefix: ''\n }, */\n FI: {\n mask: '############',\n prefix: '+358 ',\n },\n FR: {\n mask: '#########',\n prefix: '+33 ',\n },\n /* GF: {\n mask:'#########?',\n prefix: ''\n }, */\n GF: {\n mask: '##########',\n prefix: '+594 ',\n },\n PF: {\n mask: '######',\n prefix: '+689 ',\n },\n GA: {\n mask: '######?',\n prefix: '+241 ',\n },\n GM: {\n mask: '###-####',\n prefix: '+220 ',\n },\n GE: {\n mask: '########',\n prefix: '+995 ',\n },\n /* DE: {\n mask:'######?????',\n prefix: ''\n }, */\n DE: {\n mask: '###########',\n prefix: '+49 ',\n },\n /* GH: {\n mask:'########?',\n prefix: ''\n }, */\n GH: {\n mask: '#########',\n prefix: '+233 ',\n },\n GI: {\n mask: '####-####',\n prefix: '+350 ',\n },\n GR: {\n mask: '##########',\n prefix: '+30 ',\n },\n GL: {\n mask: '###-###',\n prefix: '+299 ',\n },\n GD: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n GP: {\n mask: '##########',\n prefix: '+590 ',\n },\n GU: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n GT: {\n mask: '####-####',\n prefix: '+502 ',\n },\n GN: {\n mask: '####-####',\n prefix: '+224 ',\n },\n GW: {\n mask: '###-####',\n prefix: '+245 ',\n },\n GY: {\n mask: '(###) ####',\n prefix: '+592 ',\n },\n HK: {\n mask: '####-####',\n prefix: '+852 ',\n },\n HN: {\n mask: '########',\n prefix: '+504 ',\n },\n HT: {\n mask: '####-####',\n prefix: '+509 ',\n },\n HU: {\n mask: '########??',\n prefix: '+36 ',\n },\n /* IS: {\n mask:'#######??',\n prefix: ''\n }, */\n IS: {\n mask: '#########',\n prefix: '+354 ',\n },\n IN: {\n mask: '##########',\n prefix: '+91 ',\n },\n /* ID: {\n mask:'#######???',\n prefix: ''\n }, */\n ID: {\n mask: '#######??????', // allows 7 ~ 13 digits\n prefix: '+62 ',\n },\n IR: {\n mask: '##########',\n prefix: '+98 ',\n },\n /* IQ: {\n mask:'########??',\n prefix: ''\n }, */\n IQ: {\n mask: '##########',\n prefix: '+964 ',\n },\n /* IE: {\n mask:'#######??',\n prefix: ''\n }, */\n IE: {\n mask: '#########',\n prefix: '+353 ',\n },\n /* IL: {\n mask:'########?',\n prefix: ''\n }, */\n IL: {\n mask: '#########',\n prefix: '+972 ',\n },\n /* IT: {\n mask:'######????',\n prefix: ''\n }, */\n IT: {\n mask: '##########',\n prefix: '+39 ',\n },\n JM: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n JP: {\n mask: '#########',\n prefix: '+81 ',\n },\n /* JO: {\n mask:'#######??',\n prefix: ''\n }, */\n JO: {\n mask: '#########',\n prefix: '+962 ',\n },\n KZ: {\n mask: '(###) ####-###',\n prefix: '+7 ',\n },\n /* KE: {\n mask:'######????',\n prefix: ''\n }, */\n KE: {\n mask: '##########',\n prefix: '+254 ',\n },\n KI: {\n mask: '##-###',\n prefix: '+686 ',\n },\n // kp\n /* KR: {\n mask:'####??????',\n prefix: ''\n }, */\n KR: {\n mask: '##########',\n prefix: '+82 ',\n },\n KW: {\n mask: '####-####',\n prefix: '+965 ',\n },\n KG: {\n mask: '#########',\n prefix: '+996 ',\n },\n LA: {\n mask: '########?',\n prefix: '+856 ',\n },\n LV: {\n mask: '####-####',\n prefix: '+371 ',\n },\n LB: {\n mask: '#######?',\n prefix: '+961 ',\n },\n LS: {\n mask: '##-###-###',\n prefix: '+266 ',\n },\n // LR\n /* LY: {\n mask:'########?',\n prefix: ''\n }, */\n LY: {\n mask: '########?',\n prefix: '+218 ',\n },\n LI: {\n mask: '###-####',\n prefix: '+423 ',\n },\n LT: {\n mask: '########',\n prefix: '+370 ',\n },\n /* LU: {\n mask:'#####??????',\n prefix: '+352 '\n }, */\n LU: {\n mask: '###########',\n prefix: '+352 ',\n },\n MO: {\n mask: '####-####',\n prefix: '+853 ',\n },\n MK: {\n mask: '########',\n prefix: '+389 ',\n },\n MG: {\n mask: '##-##-###-##',\n prefix: '+261 ',\n },\n /* MW: {\n mask:'#######??',\n prefix: '+265 '\n }, */\n MW: {\n mask: '#########',\n prefix: '+265 ',\n },\n /* MY: {\n mask:'#######???',\n prefix: '+60 '\n }, */\n MY: {\n mask: '##########',\n prefix: '+60 ',\n },\n MV: {\n mask: '###-####',\n prefix: '+960 ',\n },\n ML: {\n mask: '####-####',\n prefix: '+223 ',\n },\n MT: {\n mask: '##-##-##-##',\n prefix: '+356 ',\n },\n MH: {\n mask: '###-####',\n prefix: '+692 ',\n },\n MQ: {\n mask: '###-######',\n prefix: '+596 ',\n },\n // MR\n MU: {\n mask: '###-####',\n prefix: '+230 ',\n },\n // YT\n MX: {\n mask: '(###) ###-####',\n prefix: '+52 ',\n },\n // FM\n MD: {\n mask: '########',\n prefix: '+373 ',\n },\n MC: {\n mask: '####-####',\n prefix: '+377 ',\n },\n /* MN: {\n mask:'######?????',\n prefix: '+976 '\n }, */\n MN: {\n mask: '###########',\n prefix: '+976 ',\n },\n MS: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n MA: {\n mask: '#########?', // allows 9 ~ 10 digits\n prefix: '+212 ',\n },\n /* MZ: {\n mask:'########?',\n prefix: '+258 '\n }, */\n MZ: {\n mask: '#########',\n prefix: '+258 ',\n },\n /* MM: {\n mask:'#######?',\n prefix: '+95 '\n }, */\n MM: {\n mask: '########',\n prefix: '+95 ',\n },\n /* NA: {\n mask:'######????',\n prefix: '+264 '\n }, */\n NA: {\n mask: '##########',\n prefix: '+264 ',\n },\n // NR\n /* NP: {\n mask:'########??',\n prefix: '+977 '\n }, */\n NP: {\n mask: '##########',\n prefix: '+977 ',\n },\n NL: {\n mask: '#########',\n prefix: '+31 ',\n },\n /* AN: {\n mask:'#######?',\n prefix: '+599 '\n }, */\n AN: {\n mask: '########',\n prefix: '+599 ',\n },\n NC: {\n mask: '###-###',\n prefix: '+687 ',\n },\n /* NZ: {\n mask:'########??',\n prefix: '+64 '\n }, */\n NZ: {\n mask: '##########',\n prefix: '+64 ',\n },\n NI: {\n mask: '####-####',\n prefix: '+505 ',\n },\n NE: {\n mask: '##-###-###',\n prefix: '+227 ',\n },\n /* NG: {\n mask:'########??',\n prefix: '+234 '\n }, */\n NG: {\n mask: '##########',\n prefix: '+234 ',\n },\n // NU\n MP: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n NO: {\n mask: '####-####',\n prefix: '+47 ',\n },\n OM: {\n mask: '####-####',\n prefix: '+968 ',\n },\n /* PK: {\n mask:'#########?',\n prefix: '+92 '\n }, */\n PK: {\n mask: '##########',\n prefix: '+92 ',\n },\n PW: {\n mask: '###-####',\n prefix: '+680 ',\n },\n /* PA: {\n mask:'#######?',\n prefix: '+507 '\n }, */\n PA: {\n mask: '########',\n prefix: '+507 ',\n },\n /* PG: {\n mask:'#######?',\n prefix: '+675 '\n }, */\n PG: {\n mask: '########',\n prefix: '+675 ',\n },\n // PY\n /* PE: {\n mask:'#######????',\n prefix: '+51 '\n }, */\n PE: {\n mask: '###########',\n prefix: '+51 ',\n },\n /* PH: {\n mask:'########??',\n prefix: '+63 '\n }, */\n PH: {\n mask: '##########',\n prefix: '+63 ',\n },\n PL: {\n mask: '#########',\n prefix: '+48 ',\n },\n PT: {\n mask: '#-####-####',\n prefix: '+351 ',\n },\n PR: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n QA: {\n mask: '###-####',\n prefix: '+974 ',\n },\n RE: {\n mask: '###-###-###',\n prefix: '+262 ',\n },\n RO: {\n mask: '#########',\n prefix: '+40 ',\n },\n RU: {\n mask: '##########',\n prefix: '+7 ',\n },\n RW: {\n mask: '###-###-###',\n prefix: '+250 ',\n },\n SH: {\n mask: '#-###',\n prefix: '+290 ',\n },\n // PM\n KN: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n LC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n VC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // WS\n // SM\n ST: {\n mask: '##-####',\n prefix: '+239 ',\n },\n /* SA: {\n mask:'########?',\n prefix: '+966 '\n }, */\n SA: {\n mask: '#########',\n prefix: '+966 ',\n },\n SN: {\n mask: '##-###-####',\n prefix: '+221 ',\n },\n SC: {\n mask: '###-###',\n prefix: '+248 ',\n },\n SL: {\n mask: '(##) ###-###',\n prefix: '+232 ',\n },\n SG: {\n mask: '####-####',\n prefix: '+65 ',\n },\n SK: {\n mask: '#########',\n prefix: '+421 ',\n },\n SI: {\n mask: '########',\n prefix: '+386 ',\n },\n SB: {\n mask: '##-###',\n prefix: '+677 ',\n },\n // SO\n ZA: {\n mask: '(##) ###-####',\n prefix: '+27 ',\n },\n ES: {\n mask: '###-###-###',\n prefix: '+34 ',\n },\n LK: {\n mask: '(##) ###-####',\n prefix: '+94 ',\n },\n SD: {\n mask: '##-###-####',\n prefix: '+249 ',\n },\n SR: {\n mask: '######?',\n prefix: '+597 ',\n },\n SZ: {\n mask: '###-####',\n prefix: '+268 ',\n },\n /* SE: {\n mask:'######?????',\n prefix: '+46 '\n }, */\n SE: {\n mask: '###########',\n prefix: '+46 ',\n },\n CH: {\n mask: '(##) ###-####',\n prefix: '+41 ',\n },\n /* SY: {\n mask:'########?',\n prefix: '+963 '\n }, */\n SY: {\n mask: '#########',\n prefix: '+963 ',\n },\n TJ: {\n mask: '#########',\n prefix: '+992 ',\n },\n TZ: {\n mask: '#########',\n prefix: '+255 ',\n },\n /* TH: {\n mask:'########?',\n prefix: '+66 '\n }, */\n TH: {\n mask: '#########',\n prefix: '+66 ',\n },\n TG: {\n mask: '###-####',\n prefix: '+228 ',\n },\n // TK\n // TO\n TT: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n TN: {\n mask: '##-###-###',\n prefix: '+216 ',\n },\n TR: {\n mask: '(###) ###-####',\n prefix: '+90 ',\n },\n TM: {\n mask: '########',\n prefix: '+993 ',\n },\n TC: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // TV\n UG: {\n mask: '#########',\n prefix: '+256 ',\n },\n UA: {\n mask: '(##) ###-####',\n prefix: '+380 ',\n },\n /* AE: {\n mask:'########?',\n prefix: '+971 '\n }, */\n AE: {\n mask: '#########',\n prefix: '+971 ',\n },\n /* GB: {\n mask:'##########???',\n prefix: '+44 '\n }, */\n GB: {\n mask: '#########????',\n prefix: '+44 ',\n },\n UY: {\n mask: '########?',\n prefix: '+598 ',\n },\n UZ: {\n mask: '(##) ###-####',\n prefix: '+998 ',\n },\n // VU\n // VA\n VE: {\n mask: '(###) ###-####',\n prefix: '+58 ',\n },\n VN: {\n mask: '#######????',\n prefix: '+84 ',\n },\n VG: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n VI: {\n mask: '(###) ###-####',\n prefix: '+1 ',\n },\n // WF\n /* YE: {\n mask:'#######??',\n prefix: '+967 '\n }, */\n YE: {\n mask: '#########',\n prefix: '+967 ',\n },\n // YU\n ZM: {\n mask: '#########',\n prefix: '+260 ',\n },\n /* ZW: {\n mask:'####?????',\n prefix: '+263 '\n }, */\n ZW: {\n mask: '#########',\n prefix: '+263 ',\n },\n AC: {\n mask: '####',\n prefix: '+247 ',\n },\n ME: {\n mask: '(##) ###-####',\n prefix: '+382 ',\n },\n /* PS: {\n mask:'########?',\n prefix: '+970 '\n }, */\n PS: {\n mask: '#########',\n prefix: '+970 ',\n },\n /* RS: {\n mask:'#######??',\n prefix: '+381 '\n }, */\n RS: {\n mask: '#########',\n prefix: '+381 ',\n },\n /* TW: {\n mask:'########?',\n prefix: '+886 '\n }, */\n TW: {\n mask: '#########',\n prefix: '+886 ',\n },\n CW: {\n mask: '#-###-####',\n prefix: '+599 ',\n },\n US: {\n mask: '(###) ###-####',\n prefix: '',\n },\n};\n\nexport default function formatPhoneNumber(value: string, isoCode: string = 'US'): IFormatterValueObject {\n const { mask, prefix } = phoneNumberFormats[isoCode] || phoneNumberFormats.US;\n\n const options = {\n prefix,\n };\n\n const val = value || '';\n // Brazil need edge case handle, mobile: (xx) xxxxx-xxxx, land phone: (xx) xxxx-xxxx\n if (isoCode === 'BR' && val.replace(/[^0-9]/g, '').length === 11) {\n return formatValue(val, '(##) #####-####', options);\n } else {\n return formatValue(val, mask, options);\n }\n}\n","import formatValue from './generic';\n\nexport default function formatSSN(value: string) {\n return formatValue(value, '###-##-####');\n}\n","import formatValue from './generic';\n\nexport default function formatTIN(value: string) {\n return formatValue(value, '##-#######');\n}\n","import formatValue from './generic';\n\nexport default function formatAlphanumeric(value: string) {\n const val = (value || '').replace(/[^\\da-zA-Z]/g, '');\n return formatValue(val);\n}\n","import formatValue from './generic';\n\nexport default function formatAlpha(value: string, modifier?: string) {\n let val = value || '';\n\n if (modifier === 'spaced') {\n val = val.replace(/[^a-zA-Z ]/g, '');\n } else {\n val = val.replace(/[^a-zA-Z]/g, '');\n }\n\n return formatValue(val);\n}\n","import formatNumber from './number';\nimport formatValue from './generic';\nimport { IDict } from '../../../util';\nimport { INumberInputFormatOptions } from '../types';\n\nconst numberFormats: IDict<INumberInputFormatOptions> = {\n delimited: {\n prefix: '',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n allowDecimal: false,\n allowNegative: true,\n },\n integer: {\n prefix: '',\n suffix: '',\n decimals: 0,\n decimalSeparator: '.',\n thousandsSeparator: '',\n allowDecimal: true,\n allowNegative: true,\n },\n dec: {\n prefix: '',\n suffix: '',\n decimals: 2,\n decimalSeparator: '.',\n thousandsSeparator: ',',\n allowDecimal: true,\n allowNegative: true,\n },\n};\n\nfunction getNumberFormat(key: string): INumberInputFormatOptions | undefined {\n let decimals: number;\n if (key.includes('dec')) {\n decimals = Number(key.replace('dec', ''));\n key = 'dec';\n }\n\n let numberFormat = numberFormats[key];\n\n if (!numberFormat) {\n return;\n }\n\n numberFormat = { ...numberFormat };\n\n if (decimals) {\n numberFormat.decimals = decimals;\n }\n\n return numberFormat;\n}\n\nfunction formatNumeric(value: string = '', modifier: string = '', explicit: boolean = false) {\n const numberFormat = getNumberFormat(modifier);\n\n if (!numberFormat) {\n const val = (value || '').replace(/[^\\d.,-]/g, '');\n return formatValue(val);\n }\n\n return formatNumber(value, numberFormat, explicit);\n}\n\nexport function formatPercentage(value: string = '', modifier: string = '', explicit: boolean = false) {\n const numberFormat = getNumberFormat(modifier);\n\n if (!numberFormat) {\n const val = (value || '').replace(/[^\\d.,-]/g, '');\n return formatValue(val, undefined, { suffix: '%' });\n }\n\n numberFormat.suffix = '%';\n\n return formatNumber(value, numberFormat, explicit);\n}\n\nexport default formatNumeric;\n","import formatValue from './generic';\nimport formatAlphanumeric from './alphanumeric';\n\nconst postalCodeFormats = {\n AF: '####',\n AL: '####',\n DZ: '#####',\n AC: 'ASCN 1ZZ',\n AD: 'AD###', // pre\n AR: '####',\n 'AR+': '@####@@@',\n AI: 'AI-2640',\n AM: '####',\n AS: '#####',\n 'AS+4': '#####-####',\n AU: '####',\n AT: '####',\n AZ: 'AZ ####', // pre\n BH: '###?',\n BD: '####',\n BB: 'BB#####', // pre\n BY: '######',\n BE: '####',\n BM: '@@ **',\n BT: '#####',\n BA: '######',\n BR: '#####',\n 'BR+3': '#####-###',\n VG: 'VG####', // pre\n BN: '@@####',\n BG: '####',\n KH: '#####',\n KY: 'KY#-####', // pre\n CA: '@#@ #@#',\n CL: '###-####',\n CN: '######',\n CX: '####',\n CC: '####',\n CO: '######',\n CR: '#####',\n 'CR+4': '#####-####',\n CV: '####',\n HR: '#####',\n CU: '#####',\n CY: '####',\n CZ: '### ##',\n DK: '####',\n DO: '#####',\n EC: '######',\n SV: '####',\n EG: '#####',\n EE: '#####',\n ET: '####',\n FK: 'FIQQ 1ZZ',\n FO: '###',\n FI: '#####',\n FR: '#####',\n GF: '973##', // pre?\n PF: '987##', // pre?\n GI: 'GX11 1AA',\n GE: '####',\n DE: '#####',\n GR: '### ##',\n GL: '####',\n GP: '971##', // pre?\n GU: '#####',\n 'GU+4': '#####-####',\n GT: '#####',\n GG: 'GY#? #@@',\n GN: '###',\n GS: 'SIQQ 1ZZ',\n GW: '####',\n HT: '####',\n HN: '@@####',\n 'HN-': '#####',\n HU: '####',\n IS: '###',\n IN: '### ###',\n ID: '#####',\n IE: '*** ****',\n IR: '##########',\n IQ: '#####',\n IM: 'IM#? #@@', // pre\n IL: '#######',\n IT: '#####',\n JM: '##',\n JP: '###-####',\n JE: 'JE#? #@@', // pre\n JO: '#####',\n KZ: '######',\n KE: '#####',\n KR: '#####',\n KN: 'KN####',\n XK: '#####',\n KW: '#####',\n KG: '######',\n LA: '#####',\n LV: 'LV-####', // pre\n LB: '####? ????', // also 00000\n LS: '###',\n LR: '####',\n LI: '####',\n LT: '#####', // pre-\n LU: '####',\n MK: '####',\n MG: '###',\n MY: '#####',\n MV: '#####',\n MT: '@@@ ####',\n MH: '#####',\n 'MH+4': '#####-####',\n MU: '#####',\n MQ: '972##', // pre?\n MW: '######',\n YT: '976##', // pre?\n MX: '#####',\n FM: '#####',\n 'FM+4': '#####-####',\n MD: '####', // pre\n MC: '980##', // pre?\n MN: '#####',\n ME: '#####',\n MA: '#####',\n MZ: '####',\n MM: '#####',\n NA: '#####',\n NP: '#####',\n NC: '988##', // pre?\n NZ: '####',\n NI: '#####',\n NE: '####',\n NG: '######',\n NF: '####',\n MP: '#####',\n NO: '####',\n OM: '###',\n PK: '#####',\n PW: '#####',\n 'PW+4': '#####-####',\n PS: '###',\n PA: '####',\n PG: '###',\n PY: '####',\n PE: '#####',\n 'PE+': '####', // pre\n PH: '####',\n PL: '##-###',\n PT: '####',\n 'PT+3': '####-###',\n PR: '#####',\n 'PR+4': '#####-####',\n RE: '974##', // pre?\n PM: '975##',\n PN: 'PCRN 1ZZ',\n RO: '######',\n RU: '######',\n LC: 'LC## ###', // pre\n VC: '####', // pre\n WS: '####', // pre\n SM: '4879#', // pre?\n SA: '#####',\n 'SA+4': '#####-####',\n SN: '#####',\n RS: '#####',\n SG: '######',\n SH: '@@@@ 1ZZ',\n SK: '### ##',\n SI: '####', // pre?\n SO: '@@ #####',\n ZA: '####',\n ES: '#####',\n LK: '#####',\n SD: '#####',\n SZ: '@###',\n SE: '### ##',\n CH: '####',\n SJ: '####',\n TW: '###',\n 'TW+2': '###-##?',\n TJ: '######',\n TZ: '#####',\n TH: '#####',\n TT: '######',\n TN: '####',\n TR: '#####',\n TM: '######',\n UA: '#####',\n UY: '#####',\n VI: '#####',\n 'VI+4': '#####-####',\n UZ: '######',\n VE: '####',\n 'VE-': '####-@',\n VN: '#####?',\n YU: '#####',\n WF: '986##', // pre?\n ZM: '#####',\n US: '#####',\n 'US+4': '#####-####',\n};\nexport default function formatPostalCode(value: string, modifier: string = 'US') {\n const mask = postalCodeFormats[modifier];\n\n if (!mask) {\n return formatAlphanumeric(value);\n }\n\n return formatValue(value, mask);\n}\n","import formatValue from './generic';\n\nconst dateFormats = {\n 'MM/DD/YYYY': '##/##/####',\n 'M/D/YYYY': '#?/#?/####',\n 'MM/DD/YY': '##/##/##',\n 'M/D/YY': '#?/#?/##',\n 'MM/YY': '##/##',\n 'M/YY': '#?/##',\n 'DD/MM/YYYY': '##/##/####',\n 'D/M/YYYY': '#?/#?/####',\n 'DD/MM/YY': '##/##/##',\n 'D/M/YY': '#?/#?/##',\n 'MM-DD-YYYY': '##-##-####',\n 'M-D-YYYY': '#?-#?-####',\n 'MM-DD-YY': '##-##-##',\n 'M-D-YY': '#?-#?-##',\n 'MM-YY': '##-##',\n 'M-YY': '#?-##',\n 'DD-MM-YYYY': '##-##-####',\n 'D-M-YYYY': '#?-#?-####',\n 'DD-MM-YY': '##-##-##',\n 'D-M-YY': '#?-#?-##',\n};\n\nexport default function formatDate(value: string, format: string = 'MM/DD/YYYY') {\n const mask = dateFormats[format?.toUpperCase()] || dateFormats['MM/DD/YYYY'];\n\n const formattedValueObject = formatValue(value, mask);\n\n return {\n ...formattedValueObject,\n value: formattedValueObject.formattedValue,\n };\n}\n","import formatValue from './generic';\nimport { IFormatterValueObject } from '../types';\n\ninterface FormattedCreditCardObject extends IFormatterValueObject {\n type: string;\n leftIcon: string;\n leftIconMuted: boolean;\n}\n\ntype Formatter = (value: string) => FormattedCreditCardObject;\n\nfunction format(value: string): FormattedCreditCardObject {\n // have a initial generic mask which then converts to specific mask\n const detectedType = formatCreditCard.detectCreditCardTypeFromValue(value);\n const formattedValueObject = creditCardFormatters[detectedType](value);\n\n if (value.length < 2 && detectedType === 'unknown') {\n formattedValueObject.leftIcon = 'card';\n }\n return formattedValueObject;\n}\n\nconst unknownFormatter: Formatter = function unknownFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'unknown',\n leftIcon: 'card-unknown',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst amexFormatter: Formatter = function amexFn(value) {\n const valueObject = formatValue(value, '#### ###### #####');\n\n return {\n ...valueObject,\n type: 'amex',\n leftIcon: 'card-amex-color',\n leftIconMuted: value.length < 15,\n };\n};\n\nconst discoverFormatter: Formatter = function discoverFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'discover',\n leftIcon: 'card-discover-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst masterCardFormatter: Formatter = function masterCardFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'masterCard',\n leftIcon: 'card-mastercard-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst visaFormatter: Formatter = function visaFn(value) {\n const valueObject = formatValue(value, '#### #### #### ####');\n\n return {\n ...valueObject,\n type: 'visa',\n leftIcon: 'card-visa-color',\n leftIconMuted: value.length < 16,\n };\n};\n\nconst dinersClubInternationalFormatter: Formatter = function dinersClub(value) {\n const valueObject = formatValue(value, '#### ###### ####');\n\n return {\n ...valueObject,\n type: 'dinersClub',\n leftIcon: 'card-dinersclub-color',\n leftIconMuted: value.length < 14,\n };\n};\n\nconst creditCardFormatters = {\n discover: discoverFormatter,\n amex: amexFormatter,\n masterCard: masterCardFormatter,\n visa: visaFormatter,\n dinersClub: dinersClubInternationalFormatter,\n unknown: unknownFormatter,\n};\n\n/* tslint:disable:cyclomatic-complexity */\nfunction detectCreditCardTypeFromValue(value: string): string {\n // use value and some algorithm from the internet to detect and return card type based on string\n // return string 'unknown' if algorithm cannot detect or returns a type that is not one of our 5 supported types\n const firstInt = parseInt(value.charAt(0));\n const secondInt = parseInt(value.charAt(1));\n\n switch (firstInt) {\n case 2:\n if (secondInt > 1 && secondInt < 8) {\n if (value.length >= 4) {\n const firstfour = parseInt(value.substr(0, 4));\n if (firstfour >= 2221 && firstfour < 2721) {\n return 'masterCard';\n }\n } else {\n return 'masterCard';\n }\n }\n break;\n case 3:\n if (secondInt === 4 || secondInt === 7) {\n return 'amex';\n }\n if (secondInt === 0) {\n if (value.length > 2) {\n const thirdInt = parseInt(value.charAt(2));\n if (thirdInt < 6 || thirdInt === 9) {\n return 'dinersClub';\n }\n } else {\n return 'dinersClub';\n }\n }\n if (secondInt === 6 || secondInt === 8 || secondInt === 9) {\n return 'dinersClub';\n }\n break;\n case 4:\n return 'visa';\n case 5:\n if (secondInt > 0 && secondInt < 6) {\n return 'masterCard';\n }\n break;\n case 6:\n if (secondInt === 0) {\n if (value.length > 3) {\n const firstfour = value.substr(0, 4);\n if (firstfour === '6011') {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n if (secondInt === 4) {\n if (value.length > 2) {\n const firstthree = parseInt(value.substr(0, 3));\n if (firstthree > 643) {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n if (secondInt === 5) {\n return 'discover';\n }\n if (secondInt === 2) {\n if (value.length > 5) {\n const firstsix = parseInt(value.substr(0, 6));\n if (firstsix >= 622126 && firstsix <= 622925) {\n return 'discover';\n }\n } else {\n return 'discover';\n }\n }\n break;\n default:\n return 'unknown';\n }\n return 'unknown';\n}\n/* tslint:enable:cyclomatic-complexity */\n\nconst formatCreditCard = {\n detectCreditCardTypeFromValue,\n format,\n amexFormatter,\n dinersClubInternationalFormatter,\n discoverFormatter,\n masterCardFormatter,\n visaFormatter,\n unknownFormatter,\n};\n\nexport default formatCreditCard;\n","@import '../../styles/host';\n@import '../../styles/functions';\n\n:host {\n display: block;\n margin: var-list(var-prefixer(input-margin-top), --app-scale-6x, 30px) 0\n var-list(var-prefixer(input-margin-bottom), --app-scale-6x, 30px);\n font-size: var-list(var-prefixer(input-font-size), --app-font-size, inherit);\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.field-container,\n.input-container {\n position: relative;\n}\n.field-container {\n --comp-input-tween: #{var-list(var-prefixer(input-tween), --tct-tween-2, --app-tween-2, unquote('0.4s ease'))};\n\n &.is-small {\n .btn-clear {\n --tct-btn-icon-width: 20px;\n --tct-icon-size: 17px;\n }\n }\n}\n\nlabel {\n --comp-label-padding: #{var-list(\n --tct-input-label-padding,\n unquote(\n '0 #{var-list(var-prefixer(input-label-padding-right), 0)} 0 #{var-list(var-prefixer(input-label-padding-left), 0)}'\n )\n )};\n display: block;\n padding: var(--comp-label-padding);\n color: var-list(var-prefixer(input-label-font-color), inherit);\n font-size: var-list(var-prefixer(input-label-font-size), inherit);\n font-weight: var-list(var-prefixer(input-label-font-weight), 600);\n text-transform: var-list(var-prefixer(input-label-text-transform), none);\n letter-spacing: var-list(var-prefixer(input-label-letter-spacing), normal);\n transition: color var(--comp-input-tween);\n}\n\n.optional-tag {\n --comp-label-optional-margin: #{var-list(\n --tct-input-label-optional-margin,\n unquote(\n '0 0 0 #{var-list(var-prefixer(input-label-optional-margin-left), --tct-scale-1, --app-scale-1x, 5px)}'\n )\n )};\n margin: var(--comp-label-optional-margin);\n color: var-list(\n var-prefixer(input-label-optional-font-color),\n --t-textA,\n --t-a11y-gray-color,\n rgba(77, 77, 77, 0.77)\n );\n font-size: var-list(var-prefixer(input-label-optional-font-size), --app-font-size-small, 12px);\n font-weight: var-list(var-prefixer(input-label-optional-font-weight), 400);\n}\n\n.count-tag {\n color: var-list(--tct-input-count-font-color, --t-textA, --t-a11y-gray-color, rgba(77, 77, 77, 0.77));\n font-size: var-list(--tct-input-count-font-size, --app-font-size-small, 12px);\n font-weight: var-list(--tct-input-count-font-weight, 400);\n text-align: right;\n width: var(--tct-input-count-width, auto);\n}\n\n.label-wrapper {\n --comp-label-margin: #{var-list(\n --tct-input-label-margin,\n unquote(\n '#{var-list(var-prefixer(input-label-margin-top), 0)} 0 #{var-list(var-prefixer(input-label-margin-bottom), --tct-scale-1, --app-scale-1x, 5px)}'\n )\n )};\n display: flex;\n gap: var-list(--tct-input-label-gap, --app-scale-2x, 10px);\n justify-content: space-between;\n align-items: end;\n margin: var(--comp-label-margin);\n line-height: var-list(var-prefixer(input-label-line-height), inherit);\n\n &:has(label.sr) {\n margin: 0;\n }\n}\n\n.input-container {\n --comp-input-background: #{var-list(--tct-input-background, var-prefixer(input-bg), --t-gray-14, #fcfcfd)};\n --comp-input-horizontal-gap: #{var-list(var-prefixer(input-horizontal-gap), 0)};\n --comp-input-border-top-left-radius: #{var-list(\n var-prefixer(input-border-top-left-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 3px\n )};\n --comp-input-border-top-right-radius: #{var-list(\n var-prefixer(input-border-top-right-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 3px\n )};\n --comp-input-border-bottom-right-radius: #{var-list(\n var-prefixer(input-border-bottom-right-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 3px\n )};\n --comp-input-border-bottom-left-radius: #{var-list(\n var-prefixer(input-border-bottom-left-radius),\n --tct-border-radius-1,\n --app-border-radius-1,\n 3px\n )};\n --comp-input-border-radius: var(--comp-input-border-top-left-radius) var(--comp-input-border-top-right-radius)\n var(--comp-input-border-bottom-right-radius) var(--comp-input-border-bottom-left-radius);\n --comp-input-border-width: var(--tct-input-border-top-width, 1px) var(--tct-input-border-right-width, 1px)\n var(--tct-input-border-bottom-width, 1px) var(--tct-input-border-left-width, 1px);\n --comp-input-focus-border-width: var(--tct-input-focus-border-top-width, 1px)\n var(--tct-input-focus-border-right-width, 1px) var(--tct-input-focus-border-bottom-width, 1px)\n var(--tct-input-focus-border-left-width, 1px);\n --comp-input-border-color: #{var-list(var-prefixer(input-border-color), --t-a11y-gray-color-AA, #404040)};\n --comp-input-prefix-clearance: calc(3 * var(--tct-input-prefix-font-size, 14px) + var(--tct-scale-1, 5px));\n --comp-input-icon-clearance: 34px;\n --comp-input-min-height: #{var-list(var-prefixer(input-min-height), 44px)};\n --comp-input-max-height: #{var-list(var-prefixer(input-max-height))};\n\n --comp-input-hover-ring-color: #{var-list(var-prefixer(input-hover-ring-color))};\n --comp-input-hover-ring: #{0 0 0 2px var(--t-base), 0 0 0 4px var(--comp-input-hover-ring-color),\n var-list(var-prefixer(input-hover-box-shadow), unquote('0 0 transparent'))};\n\n background: var(--comp-input-background);\n display: flex;\n align-items: center;\n gap: var-list(--tct-input-container-gap, --app-scale-2x, 10px);\n padding-inline: var-list(--tct-input-container-padding-inline);\n border-width: var(--comp-input-border-width);\n border-style: solid;\n border-color: var(--comp-input-border-color);\n border-radius: var(--comp-input-border-radius);\n box-shadow: var-list(var-prefixer(input-box-shadow), none);\n transition: border-width var(--comp-input-tween), border-color var(--comp-input-tween),\n box-shadow var(--comp-input-tween);\n\n :host([disabled]:not([disabled='false'])) & {\n cursor: not-allowed;\n opacity: var-list(var-prefixer(input-disabled-opacity), --tct-disabled-opacity, --app-disabled-opacity, 0.4);\n }\n\n .has-error & {\n border-color: var-list(--tct-input-error-border-color, --const-stoplight-alert, #c30000);\n background: var-list(--tct-input-error-background, --comp-input-background);\n box-shadow: var-list(--tct-input-error-box-shadow, --comp-input-hover-ring);\n }\n\n &:hover {\n border-color: var-list(--tct-input-hover-border-color, --comp-input-border-color);\n background: var-list(--tct-input-hover-background, --comp-input-background);\n box-shadow: var-list(--tct-input-hover-box-shadow, --comp-input-hover-ring);\n\n .has-error & {\n border-color: var-list(\n --tct-input-error-hover-border-color,\n --tct-input-error-border-color,\n --const-stoplight-alert,\n #c30000\n );\n background: var-list(\n --tct-input-error-hover-background,\n --tct-input-error-background,\n --comp-input-background\n );\n box-shadow: var-list(\n --tct-input-error-hover-box-shadow,\n --tct-input-error-box-shadow,\n --comp-input-hover-ring\n );\n }\n }\n\n .has-focus & {\n border-color: var-list(var-prefixer(input-focus-border-color), --comp-input-border-color);\n background: var-list(--tct-input-focus-background, --comp-input-background);\n box-shadow: var-list(--tct-input-focus-box-shadow, --const-double-focus-ring);\n }\n\n .has-focus.has-error &,\n .has-focus.has-error &:hover {\n border-color: var-list(\n --tct-input-error-focus-border-color,\n --tct-input-error-border-color,\n --const-stoplight-alert,\n #c30000\n );\n background: var-list(--tct-input-error-focus-background, --tct-input-error-background, --comp-input-background);\n box-shadow: var-list(\n --tct-input-error-focus-box-shadow,\n --tct-input-error-box-shadow,\n --const-double-focus-ring\n );\n }\n}\n\n.input-field {\n flex: 1;\n border: 0;\n -webkit-appearance: none;\n appearance: none;\n box-sizing: border-box;\n min-height: var(--comp-input-min-height);\n max-height: var(--comp-input-max-height);\n overflow-y: hidden;\n height: var-list(var-prefixer(input-height), 44px);\n width: 100%;\n padding: var(--tct-input-padding, 0);\n background: transparent;\n color: var-list(var-prefixer(input-font-color), --t-text, inherit);\n display: inline-block;\n text-align: var(--tct-input-align, 'start');\n font-weight: var-list(var-prefixer(input-font-weight), 400);\n\n &:focus {\n outline: none;\n box-shadow: none;\n }\n /* To remove up/down arrow in number field for webkit based browser */\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* For Firefox */\n &[type='number'] {\n -moz-appearance: textfield;\n }\n\n &::-ms-clear {\n display: none;\n }\n\n &[type='search'] {\n &::-webkit-search-decoration,\n &::-webkit-search-cancel-button,\n &::-webkit-search-results-button,\n &::-webkit-search-results-decoration {\n display: none;\n }\n }\n\n &[disabled]:not([disabled='false']) {\n cursor: not-allowed;\n }\n\n .right-aligned & {\n text-align: right;\n }\n\n &:is(input) {\n flex: 1;\n }\n\n &:is(button) {\n display: inline-flex;\n align-items: center;\n\n .has-custom-display & {\n height: auto;\n padding: 0;\n }\n\n span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n }\n}\n\n.custom-display-container {\n max-width: 100%;\n\n .has-custom-display & {\n --comp-default-padding: var(--app-scale-2x, 10px) var(--app-scale-2x, 10px) var(--app-scale-3x, 15px);\n padding: var-list(var-prefixer(input-padding), --comp-default-padding);\n width: 100%;\n }\n}\n\n.input-field::placeholder,\n.placeholder-text {\n color: var-list(var-prefixer(input-placeholder-font-color), --t-textA, --app-gray-d1, rgba(77, 77, 77, 0.77));\n}\n\n.pseudo-input-container {\n min-width: 0;\n flex: 1;\n}\n\n.input-icons-container-left,\n.input-icons-container-right {\n --tct-btn-icon-hover-background: var(--tct-input-btn-hover-background);\n --tct-btn-hover-background: var(--tct-input-btn-hover-background);\n\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--comp-input-horizontal-gap);\n\n > div:not(.vertical-separator) {\n min-width: var-list(--tct-input-icon-container-icon-min-width, 44px);\n display: flex;\n justify-content: center;\n align-items: center;\n font-size: var-list(--tct-input-icon-container-font-size, inherit);\n }\n\n &:empty {\n display: var(--tct-input-icon-container-empty-display, block);\n }\n}\n\n.input-icons-container-left {\n padding-left: var(--comp-input-horizontal-gap);\n}\n\n.input-icons-container-right {\n padding-right: var(--comp-input-horizontal-gap);\n --comp-visibility-toggle-padding: 0px #{var-list(--app-scale-2x, 10px)};\n\n .btn-visibility-toggle {\n --tct-btn-height: var(--comp-input-min-height);\n --tct-btn-padding-inline: #{var-list(--tct-input-visibility-toggle-padding, --app-scale-2x, 10px)};\n --tct-btn-font-weight: #{var-list(--tct-input-visibility-toggle-font-weight, 400)};\n\n color: var-list(--tct-input-visibility-toggle-font-color, --t-primary, #006eb2);\n font-size: var-list(--tct-input-visibility-toggle-font-size, --app-font-size-small, 12px);\n }\n}\n\nq2-icon {\n margin-top: calc(#{var-list(var-prefixer(input-border-top-width), 1px)} / 2);\n margin-bottom: calc(#{var-list(var-prefixer(input-border-bottom-width), 1px)} / 2);\n pointer-events: none;\n color: var-list(var-prefixer(input-icon-stroke-primary), --t-a11y-gray-color, --t-textA, --app-gray, #747474);\n --tct-icon-stroke-primary: #{var-list(\n var-prefixer(input-icon-stroke-primary),\n --t-a11y-gray-color,\n --t-textA,\n --app-gray,\n #747474\n )};\n}\n\n.icon-left-muted {\n opacity: 0.5;\n}\n\n.input-prefix,\n.input-suffix {\n min-height: var(--comp-input-min-height);\n max-height: var(--comp-input-max-height);\n height: var-list(var-prefixer(input-height), 44px);\n font-size: var-list(var-prefixer(input-prefix-font-size), inherit);\n color: var-list(var-prefixer(input-prefix-font-color), inherit);\n background: var-list(\n --tct-input-prefix-background,\n var-prefixer(input-prefix-bg),\n --tct-input-background,\n var-prefixer(input-bg),\n var-prefixer(gray-14),\n #f2f2f2\n );\n transition: color var(--comp-input-tween), background var(--comp-input-tween);\n}\n\n.input-prefix {\n border-top-left-radius: calc(\n var(--comp-input-border-top-left-radius) - #{var-list(var-prefixer(input-border-top-width), 1px)} - #{var-list(\n var-prefixer(input-border-left-width),\n 1px\n )}\n );\n border-bottom-left-radius: calc(\n var(--comp-input-border-bottom-left-radius) - #{var-list(var-prefixer(input-border-bottom-width), 1px)} - #{var-list(\n var-prefixer(input-border-left-width),\n 1px\n )}\n );\n pointer-events: none; /* used to allow iOS voiceover to display keyboard in input TCT-1194 */\n}\n\n.input-suffix {\n border-top-right-radius: calc(\n var(--comp-input-border-top-right-radius) - #{var-list(var-prefixer(input-border-top-width), 1px)} - #{var-list(\n var-prefixer(input-border-right-width),\n 1px\n )}\n );\n border-bottom-right-radius: calc(\n var(--comp-input-border-bottom-right-radius) - #{var-list(var-prefixer(input-border-bottom-width), 1px)} - #{var-list(\n var-prefixer(input-border-right-width),\n 1px\n )}\n );\n}\n\n.icon-error {\n color: var-list(--tct-stoplight-error, --const-stoplight-alert, #c30000);\n --tct-icon-stroke-primary: #{var-list(--tct-stoplight-error, --const-stoplight-alert, #c30000)};\n}\n\n.messages-container {\n height: 0px;\n overflow: hidden;\n background: var-list(\n --tct-message-background,\n var-prefixer(message-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n box-shadow: var-list(\n var-prefixer(input-message-box-shadow),\n --tct-box-shadow-1,\n --app-shadow-1,\n unquote('0 2px 4px rgba(0, 0, 0, 0.3)')\n );\n transition: height var-list(var-prefixer(input-messages-tween), --tct-tween-1, --app-tween-1, unquote('0.2s ease'));\n margin-top: var-list(--tct-input-messages-margin-top, 2px);\n z-index: var-list(--tct-input-messages-z-index, 5);\n position: absolute;\n width: 100%;\n color: var-list(var-prefixer(input-messages-font-color), inherit);\n\n // Sync up border radius with q2-message\n border-radius: var(--tct-message-border-radius, inherit);\n}\n\n.has-error label {\n color: var-list(var-prefixer(input-error-label-font-color), var-prefixer(input-label-font-color), inherit);\n}\n\n.has-error:not(.has-focus) .input-prefix,\n.has-error:not(.has-focus) .input-suffix {\n color: var-list(var-prefixer(input-error-prefix-font-color), inherit);\n background: var-list(\n --tct-input-error-prefix-background,\n var-prefixer(input-error-prefix-bg),\n --tct-input-background,\n var-prefixer(input-bg),\n var-prefixer(gray-14),\n --tct-gray-l3,\n --app-gray-l3,\n #f2f2f2\n );\n}\n\n.icon-left {\n width: 26px;\n height: 26px;\n}\n\n.vertical-separator {\n height: calc(var(--comp-input-min-height) - 2px);\n border-right-width: var(--tct-input-prefix-border-width, 1px);\n border-right-style: solid;\n border-right-color: var-list(\n var-prefixer(input-prefix-border-color),\n var-prefixer(input-border-color),\n --t-a11y-gray-color-AA,\n #404040\n );\n}\n","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"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["stylesCss","Q2EditableField","this","scheduledAfterRender","defaultValue","value","inputInput","event","stopPropagation","input","emit","detail","formattedValue","innerValue","inputChange","e","inputKeyDown","key","preventDefault","cancelClick","saveClick","inputClick","valueFromInputProp","hostElement","shadowRoot","querySelector","change","editing","name","setTimeout","errors","length","focus","editClick","inputElement","setValue","locLabel","label","loc","componentWillLoad","handleAriaLabel","componentDidRender","forEach","fn","componentDidLoad","overrideFocus","errorsObserver","focusedElement","activeElement","isInputFocused","_a","tagName","hasErrors","ariaLabelObserver","observesEditing","newValue","oldValue","push","wrapperClass","onHostElementChange","isEventFromElement","onchange","delegateFocus","clickEdit","editBtnElement","click","clickCancel","cancelBtnElement","clickSave","saveBtnElement","async","options","waitForNextPaint","render","h","generateEditStateDOM","generateReadStateDOM","class","hidden","ref","el","hideLabel","hints","Array","isArray","map","str","undefined","type","disabled","formatModifier","maxlength","onInput","onChange","onKeyDown","onClick","persistentLabel","generateEditBtn"],"sources":["./src/components/q2-editable-field/styles.scss?tag=q2-editable-field&encapsulation=shadow","./src/components/q2-editable-field/index.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n\n:host {\n display: inline-block;\n max-width: 100%;\n}\n\n.q2-editable-field-wrapper:not([hidden]) {\n display: flex;\n}\n\n.q2-editable-field-wrapper.editing {\n align-items: flex-end;\n}\n\n:host([block]) {\n display:block;\n width: 100%;\n .q2-editable-field-wrapper:not([hidden]) {\n display: grid;\n grid-template-columns: 1fr auto auto;\n }\n}\n\nq2-input,\n.text-wrapper {\n margin: 0 var(--tct-scale-2, var(--app-scale-2x, 10px)) 0 0;\n}\n\nq2-input {\n flex: 1 1 auto;\n min-width: 170px;\n}\n\n.text-wrapper {\n flex: 0 auto;\n align-self: center;\n display: inline-block;\n}\n\n:host([truncated]) .text-wrapper {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\nq2-btn {\n flex: 0 0 44px;\n}\n\ndl {\n margin: var(--tct-scale-0, var(--app-scale-0x, 0));\n}\n\ndt {\n font-weight: 600;\n}\n\ndd {\n margin-left: var(--tct-scale-0, var(--app-scale-0x, 0));\n display: flex;\n align-items: center;\n}\n","import { Component, State, Prop, h, Listen, Element, Event, EventEmitter, Method, Watch } from '@stencil/core';\nimport { IEventDetail, Q2InputCustomEvent } from 'src/components';\nimport { handleAriaLabel, isEventFromElement, loc, overrideFocus, waitForNextPaint } from 'src/utils';\nimport { Q2Input } from '../q2-input';\nimport { IFormatterValueObject } from '../q2-input/types';\n\ninterface IExtendedQ2InputElement extends HTMLQ2InputElement {\n formattedValue: IFormatterValueObject['formattedValue'];\n}\n\n@Component({\n tag: 'q2-editable-field',\n shadow: true,\n styleUrl: 'styles.scss',\n})\nexport class Q2EditableField {\n @Prop({ reflect: true, mutable: true }) value: string = '';\n @Prop({ reflect: true, mutable: true }) editing: boolean = false;\n @Prop({ reflect: true, mutable: true }) label: string = '';\n @Prop({ reflect: true, mutable: true }) hideLabel: boolean;\n @Prop({ reflect: true }) type: Q2Input['type'];\n @Prop({ reflect: true }) formatModifier: string;\n @Prop({ reflect: true }) truncated: boolean;\n @Prop({ reflect: true }) maxlength: number;\n @Prop({ reflect: true }) persistentLabel: boolean;\n @Prop({ reflect: true }) disabled: boolean;\n @Prop({ reflect: true }) block: boolean;\n @Prop() hints: string[];\n @Prop() errors: string[];\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true }) ariaLabel: string;\n\n scheduledAfterRender: (() => void)[] = [];\n\n @Element() hostElement: HTMLElement;\n inputElement: HTMLQ2InputElement;\n editBtnElement: HTMLQ2BtnElement;\n cancelBtnElement: HTMLQ2BtnElement;\n saveBtnElement: HTMLQ2BtnElement;\n\n @State() formattedValue: string;\n innerValue: string;\n defaultValue: string = this.value;\n\n get locLabel() {\n return (this.label && loc(this.label)) || '';\n }\n\n /////// LIFECYCLE HOOKS ///////\n\n componentWillLoad() {\n handleAriaLabel(this);\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n this.formattedValue = (this.inputElement as IExtendedQ2InputElement).formattedValue;\n }\n\n componentDidLoad() {\n overrideFocus(this.hostElement);\n }\n\n //////// OBSERVERS ////////\n\n @Watch('errors')\n errorsObserver() {\n const { editing, errors = [] } = this;\n const focusedElement = this.hostElement.shadowRoot.activeElement;\n const isInputFocused = focusedElement?.tagName === 'Q2-INPUT' ?? false;\n const hasErrors = errors.length;\n if (isInputFocused || !focusedElement || !editing || !hasErrors) return;\n this.inputElement.focus();\n }\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('editing')\n observesEditing(newValue: boolean, oldValue: boolean) {\n if (newValue === oldValue) return;\n this.scheduledAfterRender.push(this.hostElement.focus);\n }\n\n get wrapperClass() {\n return `q2-editable-field-wrapper ${this.editing ? 'editing' : ''}`;\n }\n\n ///////// HOST ELEMENT EVENTS //////\n\n @Listen('change')\n onHostElementChange(event: CustomEvent) {\n if (!isEventFromElement(event, this.hostElement) || this.hostElement.onchange) return;\n switch (event.detail.name) {\n case 'save':\n this.value = event.detail.value;\n break;\n\n case 'cancel':\n this.inputElement.value = this.value;\n break;\n }\n\n this.editing = event.detail.editing;\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.hostElement.shadowRoot.querySelector<HTMLElement>(this.editing ? 'q2-input' : 'q2-btn.begin-edit').focus();\n }\n\n ///////// EVENTS /////////\n\n @Event() input: EventEmitter;\n @Event() change: EventEmitter;\n\n /// Methods ///\n /**\n * Emulates clicking the edit button, which will display the `<q2-input>` field.\n *\n * @testOnly\n */\n @Method()\n clickEdit() {\n if (this.editing) return;\n this.editBtnElement?.click();\n }\n\n /**\n * Emulates clicking the cancel button, which will hide the `<q2-input>` field.\n *\n * @testOnly\n */\n @Method()\n clickCancel() {\n if (!this.editing) return;\n this.cancelBtnElement?.click();\n }\n\n /**\n * Emulates clicking the save button, saving value in the `<q2-input>` field, and emitting a `change` event.\n *\n * @testOnly\n */\n @Method()\n clickSave() {\n if (!this.editing) return;\n this.saveBtnElement?.click();\n }\n\n /**\n * Emulates clicking the edit button, and setting the value of the `<q2-input>` field.\n *\n * If the `clickSave` argument is `true` (default), the save button will be clicked after the value is set, and a\\\n * `change` event will be emitted.\n *\n * @testOnly\n */\n @Method()\n async setValue(value: string, options: { clickSave?: boolean } = { clickSave: true }) {\n await this.clickEdit();\n await waitForNextPaint();\n\n await this.inputElement.setValue(value);\n\n if (options.clickSave) {\n await this.clickSave();\n await waitForNextPaint();\n }\n }\n\n //////// ACTIONS /////////\n\n inputInput = (event: Q2InputCustomEvent<IEventDetail> & InputEvent) => {\n event.stopPropagation();\n this.input.emit(event.detail);\n this.formattedValue = event.detail.formattedValue;\n this.innerValue = event.detail.value;\n };\n\n inputChange = (e: CustomEvent) => {\n e.stopPropagation();\n };\n\n inputKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n e.preventDefault();\n this.cancelClick();\n return;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n this.saveClick();\n return;\n }\n };\n\n inputClick = (event: MouseEvent) => {\n event.stopPropagation();\n };\n\n saveClick = (event?: MouseEvent) => {\n event && event.stopPropagation();\n const valueFromInputProp = this.hostElement.shadowRoot.querySelector('q2-input').value;\n this.defaultValue = valueFromInputProp;\n this.change.emit({\n editing: false,\n name: 'save',\n value: this.innerValue || valueFromInputProp,\n formattedValue: this.formattedValue || valueFromInputProp,\n });\n\n setTimeout(() => {\n const { errors = [] } = this;\n if (!errors.length) return;\n this.hostElement.focus();\n }, 1);\n };\n\n editClick = (event: MouseEvent) => {\n event?.stopPropagation();\n this.change.emit({ editing: true, name: 'edit' });\n };\n\n cancelClick = (event?: MouseEvent) => {\n event?.stopPropagation();\n this.change.emit({ editing: false, name: 'cancel' });\n this.inputElement.setValue(this.defaultValue);\n };\n\n render() {\n return (\n <div>\n {this.generateEditStateDOM()}\n {this.generateReadStateDOM()}\n </div>\n );\n }\n\n generateEditStateDOM() {\n return (\n <div\n class={this.wrapperClass}\n hidden={!this.editing}\n >\n <q2-input\n ref={el => (this.inputElement = el)}\n label={this.locLabel}\n hideLabel={this.hideLabel}\n value={this.value}\n hints={(Array.isArray(this.hints) && this.hints.map(str => loc(str))) || undefined}\n errors={(Array.isArray(this.errors) && this.errors.map(str => loc(str))) || undefined}\n type={this.type}\n disabled={this.disabled}\n formatModifier={this.formatModifier}\n maxlength={this.maxlength}\n test-id=\"editableInput\"\n onInput={this.inputInput}\n onChange={this.inputChange}\n onKeyDown={this.inputKeyDown}\n onClick={this.inputClick}\n />\n <q2-btn\n ref={el => (this.cancelBtnElement = el)}\n class=\"cancel-edit\"\n label={`${loc('tecton.element.editableField.cancel')} ${this.locLabel}`}\n hide-label\n test-id=\"cancelButton\"\n onClick={this.cancelClick}\n >\n <q2-icon type=\"close\" />\n </q2-btn>\n <q2-btn\n ref={el => (this.saveBtnElement = el)}\n class=\"save-edit\"\n label={`${loc('tecton.element.editableField.save')} ${this.locLabel}`}\n hide-label\n test-id=\"saveButton\"\n onClick={this.saveClick}\n >\n <q2-icon type=\"checkmark\" />\n </q2-btn>\n </div>\n );\n }\n\n generateReadStateDOM() {\n if (this.persistentLabel && this.locLabel) {\n return (\n <div\n class={this.wrapperClass}\n hidden={this.editing}\n >\n <dl>\n <dt class=\"read-state-label\">{this.locLabel}</dt>\n <dd>\n <span class=\"text-wrapper\">{this.formattedValue || this.value}</span>\n {this.generateEditBtn()}\n </dd>\n </dl>\n </div>\n );\n }\n return (\n <div\n class={this.wrapperClass}\n hidden={this.editing}\n >\n <div class=\"text-wrapper\">{this.formattedValue || this.value}</div>\n {this.generateEditBtn()}\n </div>\n );\n }\n\n generateEditBtn() {\n return (\n <q2-btn\n ref={el => (this.editBtnElement = el)}\n class=\"begin-edit\"\n label={`${loc('tecton.element.editableField.edit')} ${this.locLabel}`}\n hide-label\n disabled={this.disabled}\n test-id=\"editButton\"\n onClick={this.editClick}\n >\n <q2-icon type=\"edit\" />\n </q2-btn>\n );\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["stylesCss","addSmoothScrollPolyfill","Q2Stepper","this","scheduledAfterRender","onSlotChange","checkForPanes","checkScrollState","onScrollBtnClick","direction","scrollAmount","Math","floor","listElement","clientWidth","scrollBy","left","behavior","onStepClick","event","selectedStep","stopPropagation","currentStep","stepCount","lastEnabledStep","change","emit","onStepKeyDown","stepNumber","key","preventDefault","max","min","focusStep","allPanes","length","scrollLeft","scrollWidth","scrollEnabled","showScrollLeft","showScrollRight","componentWillLoad","resizeObserver","ResizeObserver","componentDidLoad","observe","overrideFocus","hostElement","setTimeout","showStep","componentDidRender","forEach","fn","disconnectedCallback","disconnect","currentStepChanged","defaultChangeHandler","target","getAttribute","detail","delegateFocus","isEventFromElement","statusChangeHandler","index","Array","from","findIndex","el","id","status","renderStepBtn","contentChangeHandler","contentChangeTriggerCount","querySelectorAll","push","resizeIframe","showStepPane","_b","_a","window","TectonElements","call","pane","isActive","scrollIntoView","forceFocus","stepListItem","children","document","activeElement","firstElementChild","focus","offsetLeft","scrollTo","getPaneSlotOrProperty","slotName","slot","querySelector","outerHTML","loc","stepIndex","label","description","isCurrentStep","labelId","descriptionId","btnLabel","statusIcon","stepClasses","isLocked","disabled","h","role","class","join","type","tabIndex","onKeyDown","ev","onClick","Fragment","innerHTML","render","containerClasses","hidden","onScroll","ref","keys","map","onSlotchange"],"sources":["./src/components/q2-stepper/styles.scss?tag=q2-stepper&encapsulation=shadow","./src/components/q2-stepper/index.tsx"],"sourcesContent":["@import '../../styles/host.scss';\n@import '../../styles/functions';\n\n:host {\n display: block;\n position: relative;\n}\n\nul {\n --comp-bullet-background: #{var-list(\n --tct-stepper-bullet-active-background,\n var-prefixer(stepper-bullet-active-bg),\n --t-primary,\n #0079c1\n )};\n --comp-bullet-font-color: #{var-list(\n var-prefixer(stepper-bullet-active-font-color),\n --t-primary-font-color,\n #ffffff\n )};\n --comp-bullet-size: #{var-list(var-prefixer(stepper-btn-icon-size), 24px)};\n --comp-bullet-gap: #{var-list(var-prefixer(stepper-btn-gap), --app-scale-3x, 15px)};\n --comp-bullet-border-offset: #{var-list(var-prefixer(stepper-bullet-border-offset), 4px)};\n --comp-bullet-border: #{var-list(\n var-prefixer(stepper-bullet-border),\n unquote('2px solid var(--t-primary-l3, #21acff)')\n )};\n --comp-bullet-font-size: var-list(var-prefixer(stepper-btn-label-font-size), 16px);\n\n --comp-step-width: #{var-list(var-prefixer(stepper-step-width), --t-stepper-step-width, 80px)};\n --comp-step-gap: #{var-list(var-prefixer(stepper-step-gap), 5px)};\n\n --comp-top-btn-icon-size: #{var-list(var-prefixer(stepper-btn-icon-size), 24px)};\n --comp-btn-icon-size: #{var(--comp-top-btn-icon-size)};\n --comp-btn-content-gap: #{var-list(var-prefixer(stepper-btn-gap), --app-scale-3x, 15px)};\n --comp-btn-label-font-size: var-list(var-prefixer(stepper-btn-label-font-size), 16px);\n --comp-btn-label-color: #{var-list(var-prefixer(stepper-label-color), --t-text, #4d4d4d)};\n --comp-tween: #{var-list(var-prefixer(stepper-tween), --app-tween-1, unquote('0.2s ease'))};\n\n overflow-x: auto;\n display: flex;\n justify-content: center;\n list-style: none;\n padding: 0;\n padding: var-list(var-prefixer(stepper-list-padding), 2px);\n margin: 0;\n gap: var(--comp-step-gap);\n @include tiny-scrollbar();\n\n .has-scroll & {\n justify-content: unset;\n }\n}\n\nli {\n min-height: var-list(var-prefixer(stepper-min-height), 50px);\n flex: 0 0 auto;\n position: relative;\n width: var(--comp-step-width);\n text-align: center;\n max-width: 150px;\n min-width: 80px;\n}\n\n.step-btn {\n position: relative;\n background: transparent;\n border: 0;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: calc(100% - 4px);\n width: 100%;\n transition: var(--comp-tween);\n padding: 0;\n transition-property: box-shadow;\n outline: none;\n margin-top: 2px;\n\n --comp-active-color: var(--comp-bullet-background);\n &.status-complete {\n --comp-active-color: var(--const-stoplight-success, #0e8a00);\n }\n &.status-error {\n --comp-active-color: var(--const-stoplight-alert, #c30000);\n }\n\n &[aria-disabled] {\n cursor: not-allowed;\n\n &,\n & + .step-divider {\n --comp-bullet-font-color: #{var-list(var-prefixer(stepper-bullet-inactive-font-color), --t-text, #4d4d4d)};\n --comp-bullet-background: #{var-list(\n --tct-stepper-bullet-inactive-background,\n var-prefixer(stepper-bullet-inactive-bg),\n --t-gray-12,\n #d9d9d9\n )};\n }\n }\n}\n.step-icon,\n.step-bubble {\n display: flex;\n justify-content: center;\n align-items: center;\n line-height: 0;\n margin: var(--comp-bullet-gap) auto;\n color: var(--comp-bullet-font-color);\n width: var(--comp-btn-icon-size);\n height: var(--comp-btn-icon-size);\n min-height: var(--comp-btn-icon-size);\n font-size: var(--comp-bullet-font-size);\n transition: var(--comp-tween);\n transition-property: background, color;\n border-radius: 50%;\n position: relative;\n\n q2-icon {\n --tct-icon-fill: var(--comp-active-color);\n &:before {\n content: '';\n display: block;\n background: var(--comp-bullet-font-color);\n position: absolute;\n width: 80%;\n height: 80%;\n left: 11%;\n top: 11%;\n border-radius: 50%;\n }\n }\n .status-complete &,\n .status-error & {\n background: var(--comp-active-color);\n }\n [aria-selected] & {\n box-shadow: 0 0 0 2px var(--t-base, #ffffff), 0 0 0 4px var(--comp-active-color);\n font-weight: var-list(var-prefixer(stepper-bullet-active-font-weight), 600);\n }\n}\n\n.step-bubble {\n background: var(--comp-bullet-background);\n}\n\n.step-divider {\n width: calc(var(--comp-step-width) - var(--comp-step-gap) - var(--comp-bullet-gap) - var(--comp-bullet-size));\n top: calc(calc(var(--comp-bullet-size) / 2) + var(--comp-bullet-gap));\n left: calc(calc(var(--comp-step-width) * -0.5) + var(--comp-step-gap) + var(--comp-bullet-gap));\n border: 0;\n border-top: 1px solid var(--comp-bullet-background);\n height: 0;\n position: absolute;\n margin: 0;\n transition: border var(--comp-tween);\n}\n\n.step-container {\n position: relative;\n}\n\n.step-label {\n color: var-list(--tct-stepper-label-color, var-prefixer(stepper-title-color), --t-text, #4d4d4d);\n font-size: var-list(\n --tct-stepper-label-font-size,\n var-prefixer(stepper-title-font-size),\n --app-font-size-small,\n 12px\n );\n line-height: var-list(--tct-stepper-label-line-height, 1.5em);\n @include line-clamp(var(--tct-stepper-label-line-count, 2));\n\n [aria-selected] & {\n font-weight: var-list(var-prefixer(stepper-active-font-weight), 600);\n }\n\n [aria-describedby] & {\n -webkit-line-clamp: var(--tct-stepper-label-line-count, 1);\n }\n}\n\n.step-description {\n color: var-list(var-prefixer(stepper-description-color), --t-textA, rgba(77, 77, 77, 0.77));\n font-size: var-list(var-prefixer(stepper-description-font-size), --app-font-size-small, 12px);\n @include line-clamp(var(--tct-stepper-description-line-count, 4));\n\n // Add padding for descenders\n padding-bottom: 0.2em;\n\n // For description slot on q2-stepper-pane\n .ellipsize {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: var(--comp-step-width);\n display: block;\n }\n}\n\n.gradient-left,\n.gradient-right {\n z-index: 1;\n position: absolute;\n top: 0;\n height: 100%;\n width: 18px;\n}\n\n.gradient-left {\n background-image: linear-gradient(\n to left,\n var(--t-base-a0, rgba(255, 255, 255, 0)),\n var(--t-base-a2, rgba(255, 255, 255, 0.5)) 10%,\n var(--t-base, #ffffff) 100%\n );\n left: 0;\n}\n\n.gradient-right {\n background-image: linear-gradient(\n to right,\n var(--t-base-a0, rgba(255, 255, 255, 0)),\n var(--t-base-a2, rgba(255, 255, 255, 0.5)) 10%,\n var(--t-base, #ffffff) 100%\n );\n right: 0;\n}\n\n.btn-left,\n.btn-right {\n --tct-icon-size: 18px;\n --tct-btn-icon-hover-background: transparent;\n --tct-btn-icon-width: 22px;\n --tct-icon-stroke-primary: #{var-list(var-prefixer(stepper-scroll-arrow-color), --t-text, #4d4d4d)};\n\n position: absolute;\n top: calc(50% - 22px);\n z-index: 2;\n q2-icon {\n --tct-icon-stroke-width: 3;\n }\n}\n\n.btn-left {\n left: 0;\n}\n\n.btn-right {\n right: 0;\n}\n","import {\n Component,\n Prop,\n h,\n Element,\n ComponentInterface,\n State,\n Watch,\n Listen,\n Event,\n EventEmitter,\n Fragment,\n} from '@stencil/core';\nimport { loc, addSmoothScrollPolyfill, overrideFocus, isEventFromElement } from 'src/utils';\n\naddSmoothScrollPolyfill();\n\n@Component({\n tag: 'q2-stepper',\n shadow: true,\n styleUrl: 'styles.scss',\n})\nexport class Q2Stepper implements ComponentInterface {\n @Prop({ reflect: true, mutable: true }) currentStep: number = 1;\n /**\n * Used to determine the number of steps in the stepper.\n * @private\n */\n @Prop({ mutable: true }) stepCount: number;\n @Prop({ mutable: true }) lastEnabledStep: number;\n\n @Element() hostElement: HTMLElement;\n\n @Event() change: EventEmitter;\n @State() contentChangeTriggerCount: number = 0;\n @State() scrollEnabled: boolean = false;\n @State() showScrollLeft: boolean = false;\n @State() showScrollRight: boolean = false;\n listElement: HTMLUListElement;\n resizeObserver: ResizeObserver;\n scheduledAfterRender: (() => void)[] = [];\n\n ////////// LIFECYCLE HOOKS ////////\n\n componentWillLoad() {\n if (!this.lastEnabledStep) this.lastEnabledStep = this.currentStep || 1;\n this.resizeObserver = new ResizeObserver(() => this.checkScrollState());\n this.checkForPanes();\n }\n\n componentDidLoad() {\n this.resizeObserver.observe(this.listElement);\n this.checkScrollState();\n overrideFocus(this.hostElement);\n setTimeout(() => this.showStep(this.currentStep || 1), 0);\n }\n\n componentDidRender() {\n this.scheduledAfterRender.forEach(fn => fn());\n this.scheduledAfterRender = [];\n }\n\n disconnectedCallback() {\n this.resizeObserver.disconnect();\n }\n\n ////////// WATCHER METHODS ////////\n\n @Watch('currentStep')\n currentStepChanged(stepNumber: number) {\n this.showStep(stepNumber);\n }\n\n ////////// HOST EVENTS ////////\n\n @Listen('change')\n defaultChangeHandler(event: CustomEvent) {\n const { hostElement } = this;\n if (event.target === hostElement && !hostElement.getAttribute('onchange') && !!event.detail) {\n this.currentStep = event.detail.selectedStep;\n }\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.focusStep(this.currentStep, true, true);\n }\n\n @Listen('statusChange')\n statusChangeHandler(event: CustomEvent) {\n const index = Array.from(this.allPanes).findIndex(el => event.detail.id === el.id);\n if (index > -1) {\n this.allPanes[index].status = event.detail.status;\n this.renderStepBtn(index);\n }\n }\n\n @Listen('contentChange')\n contentChangeHandler() {\n this.contentChangeTriggerCount += 1;\n }\n\n ////////// GETTER METHODS ////////\n\n get allPanes() {\n return this.hostElement.querySelectorAll<HTMLQ2StepperPaneElement>('q2-stepper-pane');\n }\n\n ////////// EVENT HANDLERS ////////\n\n onSlotChange = () => {\n this.checkForPanes();\n this.checkScrollState();\n };\n\n onScrollBtnClick = (direction: 'left' | 'right') => {\n const scrollAmount = Math.floor(this.listElement.clientWidth / 2);\n\n this.listElement.scrollBy({\n left: direction === 'left' ? -scrollAmount : scrollAmount,\n behavior: 'smooth',\n });\n };\n\n onStepClick = (event, selectedStep: number) => {\n event.stopPropagation();\n const { currentStep, stepCount, lastEnabledStep } = this;\n if (selectedStep > lastEnabledStep || selectedStep === currentStep) return;\n\n this.change.emit({\n selectedStep,\n lastEnabledStep,\n currentStep,\n stepCount,\n });\n };\n\n onStepKeyDown = (event: KeyboardEvent, stepNumber: number) => {\n const { lastEnabledStep, stepCount } = this;\n const { key } = event;\n\n let selectedStep;\n switch (key) {\n case 'ArrowLeft':\n event.preventDefault();\n selectedStep = Math.max(stepNumber - 1, 0);\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n selectedStep = Math.min(stepNumber + 1, stepCount);\n break;\n\n case 'Home':\n event.preventDefault();\n selectedStep = 1;\n break;\n\n case 'End':\n event.preventDefault();\n selectedStep = lastEnabledStep;\n break;\n }\n\n if (!selectedStep) return;\n this.focusStep(selectedStep, true);\n };\n\n ////////// HELPER METHODS ////////\n\n showStep(stepNumber: number) {\n if (stepNumber > this.lastEnabledStep) {\n const { currentStep, stepCount } = this;\n this.lastEnabledStep = stepNumber;\n this.change.emit({\n selectedStep: null,\n lastEnabledStep: stepNumber,\n currentStep,\n stepCount,\n });\n }\n\n this.scheduledAfterRender.push(this.resizeIframe);\n this.showStepPane(stepNumber);\n this.focusStep(stepNumber, this.scrollEnabled);\n }\n\n checkForPanes = () => {\n const { allPanes } = this;\n if (!allPanes.length) return;\n\n this.stepCount = allPanes.length;\n };\n\n checkScrollState = () => {\n if (!this.listElement) return;\n const { scrollLeft, scrollWidth, clientWidth } = this.listElement;\n this.scrollEnabled = scrollWidth > clientWidth;\n this.showScrollLeft = !!scrollLeft;\n this.showScrollRight = scrollWidth !== scrollLeft + clientWidth;\n };\n\n resizeIframe() {\n return window?.TectonElements?.resizeIframe?.();\n }\n\n showStepPane(stepNumber: number) {\n this.allPanes.forEach((pane, index) => {\n pane.isActive = stepNumber === index + 1;\n });\n }\n\n focusStep(stepNumber: number, scrollIntoView?: boolean, forceFocus?: boolean) {\n const stepListItem = this.listElement.children[stepNumber - 1] as HTMLLIElement;\n const isActive = document.activeElement === this.hostElement;\n if (!stepListItem) return;\n if (isActive || forceFocus) {\n (stepListItem.firstElementChild as HTMLButtonElement)?.focus();\n }\n\n if (scrollIntoView) {\n const left = stepListItem.offsetLeft - this.listElement.clientWidth / 2;\n this.listElement.scrollTo({\n left,\n behavior: 'smooth',\n });\n }\n }\n\n ////////// RENDER METHODS ////////\n getPaneSlotOrProperty(pane: HTMLQ2StepperPaneElement, slotName: 'description' | 'label') {\n const slot = pane.querySelector<HTMLElement>(`[slot=\"${slotName}\"]`);\n return slot?.outerHTML ?? loc(pane[slotName]);\n }\n\n renderStepBtn(stepIndex: number) {\n const { allPanes, stepCount, currentStep, lastEnabledStep } = this;\n const pane = allPanes?.[stepIndex] ?? null;\n const { id, status } = pane;\n const label = this.getPaneSlotOrProperty(pane, 'label');\n const description = this.getPaneSlotOrProperty(pane, 'description');\n\n const stepNumber = stepIndex + 1;\n const isCurrentStep = stepNumber === currentStep;\n const labelId = !!label && `label-${id}`;\n const descriptionId = !!label && !!description && `description-${id}`;\n const btnLabel = !label && loc('tecton.element.stepper.number', [`${stepNumber}`, `${stepCount}`]);\n\n let statusIcon;\n if (status === 'complete') statusIcon = 'success-filled';\n else if (status === 'error') statusIcon = 'warning-filled';\n\n const stepClasses = ['step-btn'];\n if (status) stepClasses.push(`status-${status}`);\n const isLocked = status === 'locked';\n const disabled = isLocked || stepNumber > lastEnabledStep;\n\n return (\n <li role=\"presentation\">\n <button\n class={stepClasses.join(' ')}\n type=\"button\"\n aria-labelledby={labelId}\n aria-describedBy={descriptionId}\n aria-label={btnLabel}\n aria-selected={isCurrentStep}\n aria-controls={id}\n aria-disabled={disabled ? 'true' : null}\n role=\"tab\"\n tabIndex={isCurrentStep ? 0 : -1}\n onKeyDown={ev => this.onStepKeyDown(ev, stepNumber)}\n onClick={ev => !isLocked && this.onStepClick(ev, stepNumber)}\n >\n <Fragment>\n {statusIcon ? (\n <div class=\"step-icon\">\n <q2-icon type={statusIcon}></q2-icon>\n </div>\n ) : (\n <div class=\"step-bubble\">{stepNumber}</div>\n )}\n {labelId && (\n <div\n class=\"step-label\"\n id={labelId}\n innerHTML={label}\n ></div>\n )}\n {labelId && descriptionId && (\n <div\n class=\"step-description\"\n id={descriptionId}\n innerHTML={description}\n ></div>\n )}\n </Fragment>\n </button>\n {stepIndex ? <div class=\"step-divider\"></div> : ''}\n </li>\n );\n }\n\n render() {\n const { stepCount, scrollEnabled, showScrollLeft, showScrollRight } = this;\n const containerClasses = ['step-container'];\n if (scrollEnabled) containerClasses.push('has-scroll');\n\n return (\n <Fragment>\n <div class={containerClasses.join(' ')}>\n {scrollEnabled && (\n <Fragment>\n <div\n class=\"gradient-left\"\n hidden={!showScrollLeft}\n ></div>\n <div\n class=\"gradient-right\"\n hidden={!showScrollRight}\n ></div>\n\n <q2-btn\n class=\"btn-left\"\n hidden={!this.showScrollLeft}\n onClick={() => this.onScrollBtnClick('left')}\n >\n <q2-icon type=\"chevron-left\"></q2-icon>\n </q2-btn>\n\n <q2-btn\n class=\"btn-right\"\n hidden={!this.showScrollRight}\n onClick={() => this.onScrollBtnClick('right')}\n >\n <q2-icon type=\"chevron-right\"></q2-icon>\n </q2-btn>\n </Fragment>\n )}\n\n <ul\n onScroll={this.checkScrollState}\n ref={el => (this.listElement = el)}\n role=\"tablist\"\n >\n {stepCount > 0 && [...Array(stepCount).keys()].map(stepIndex => this.renderStepBtn(stepIndex))}\n </ul>\n </div>\n <div>\n <slot onSlotchange={() => this.onSlotChange()} />\n </div>\n </Fragment>\n );\n }\n}\n"],"mappings":"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"}
|