@ptsecurity/mosaic 12.0.2 → 12.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_theming.scss +475 -101
- package/_visual.scss +131 -13
- package/bundles/ptsecurity-mosaic-autocomplete.umd.js +18 -20
- package/bundles/ptsecurity-mosaic-autocomplete.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-button-toggle.umd.js +15 -17
- package/bundles/ptsecurity-mosaic-button-toggle.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-button.umd.js +17 -19
- package/bundles/ptsecurity-mosaic-button.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-card.umd.js +11 -13
- package/bundles/ptsecurity-mosaic-card.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-checkbox.umd.js +14 -16
- package/bundles/ptsecurity-mosaic-checkbox.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-core.umd.js +259 -172
- package/bundles/ptsecurity-mosaic-core.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-datepicker.umd.js +47 -48
- package/bundles/ptsecurity-mosaic-datepicker.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-design-tokens.umd.js +231 -26
- package/bundles/ptsecurity-mosaic-design-tokens.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-divider.umd.js +11 -13
- package/bundles/ptsecurity-mosaic-divider.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-dropdown.umd.js +67 -59
- package/bundles/ptsecurity-mosaic-dropdown.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-form-field.umd.js +737 -738
- package/bundles/ptsecurity-mosaic-form-field.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-icon.umd.js +14 -16
- package/bundles/ptsecurity-mosaic-icon.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-input.umd.js +45 -33
- package/bundles/ptsecurity-mosaic-input.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-link.umd.js +11 -13
- package/bundles/ptsecurity-mosaic-link.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-list.umd.js +177 -89
- package/bundles/ptsecurity-mosaic-list.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-modal.umd.js +52 -44
- package/bundles/ptsecurity-mosaic-modal.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-navbar.umd.js +46 -43
- package/bundles/ptsecurity-mosaic-navbar.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-popover.umd.js +215 -34
- package/bundles/ptsecurity-mosaic-popover.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-progress-bar.umd.js +12 -14
- package/bundles/ptsecurity-mosaic-progress-bar.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-progress-spinner.umd.js +12 -14
- package/bundles/ptsecurity-mosaic-progress-spinner.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-radio.umd.js +14 -16
- package/bundles/ptsecurity-mosaic-radio.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-select.umd.js +22 -24
- package/bundles/ptsecurity-mosaic-select.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-sidebar.umd.js +17 -19
- package/bundles/ptsecurity-mosaic-sidebar.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-sidepanel.umd.js +62 -58
- package/bundles/ptsecurity-mosaic-sidepanel.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-splitter.umd.js +31 -21
- package/bundles/ptsecurity-mosaic-splitter.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-table.umd.js +11 -13
- package/bundles/ptsecurity-mosaic-table.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-tabs.umd.js +150 -74
- package/bundles/ptsecurity-mosaic-tabs.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-tags.umd.js +28 -29
- package/bundles/ptsecurity-mosaic-tags.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-textarea.umd.js +12 -14
- package/bundles/ptsecurity-mosaic-textarea.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-timepicker.umd.js +16 -17
- package/bundles/ptsecurity-mosaic-timepicker.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-toggle.umd.js +11 -13
- package/bundles/ptsecurity-mosaic-toggle.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-tooltip.umd.js +72 -23
- package/bundles/ptsecurity-mosaic-tooltip.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-tree-select.umd.js +24 -29
- package/bundles/ptsecurity-mosaic-tree-select.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic-tree.umd.js +1018 -261
- package/bundles/ptsecurity-mosaic-tree.umd.js.map +1 -1
- package/bundles/ptsecurity-mosaic.umd.js +2 -2
- package/core/option/action.d.ts +42 -0
- package/core/option/index.d.ts +1 -0
- package/core/option/option-module.d.ts +4 -3
- package/core/pop-up/pop-up-trigger.d.ts +9 -12
- package/design-tokens/style-dictionary/build.js +6 -0
- package/design-tokens/style-dictionary/configs/index.js +2 -1
- package/design-tokens/tokens/components/badge.json5 +177 -7
- package/design-tokens/tokens/components/list.json5 +0 -4
- package/design-tokens/tokens/components/tree.json5 +3 -3
- package/design-tokens/tokens/properties/globals.json5 +1 -1
- package/design-tokens/tokens/properties/typography.json5 +16 -0
- package/design-tokens/tokens.d.ts +115 -13
- package/dropdown/dropdown-item.component.d.ts +1 -0
- package/dropdown/dropdown-trigger.directive.d.ts +3 -8
- package/dropdown/dropdown.component.d.ts +1 -0
- package/esm2015/autocomplete/autocomplete-origin.directive.js +4 -4
- package/esm2015/autocomplete/autocomplete-trigger.directive.js +4 -4
- package/esm2015/autocomplete/autocomplete.component.js +4 -4
- package/esm2015/autocomplete/autocomplete.module.js +5 -5
- package/esm2015/button/button.component.js +10 -10
- package/esm2015/button/button.module.js +5 -5
- package/esm2015/button-toggle/button-toggle.component.js +7 -7
- package/esm2015/button-toggle/button-toggle.module.js +5 -5
- package/esm2015/card/card.component.js +4 -4
- package/esm2015/card/card.module.js +5 -5
- package/esm2015/checkbox/checkbox-module.js +5 -5
- package/esm2015/checkbox/checkbox-required-validator.js +4 -4
- package/esm2015/checkbox/checkbox.js +4 -4
- package/esm2015/core/common-behaviors/common-module.js +5 -5
- package/esm2015/core/error/error-options.js +7 -7
- package/esm2015/core/formatters/date/formatter.js +6 -5
- package/esm2015/core/formatters/index.js +5 -5
- package/esm2015/core/formatters/number/formatter.js +5 -5
- package/esm2015/core/forms/forms-module.js +5 -5
- package/esm2015/core/forms/forms.directive.js +7 -7
- package/esm2015/core/highlight/highlight.pipe.js +4 -4
- package/esm2015/core/highlight/index.js +5 -5
- package/esm2015/core/line/line.js +8 -8
- package/esm2015/core/option/action.js +131 -0
- package/esm2015/core/option/index.js +2 -1
- package/esm2015/core/option/optgroup.js +4 -4
- package/esm2015/core/option/option-module.js +8 -7
- package/esm2015/core/option/option.js +4 -4
- package/esm2015/core/pop-up/pop-up-trigger.js +32 -64
- package/esm2015/core/pop-up/pop-up.js +4 -4
- package/esm2015/core/selection/pseudo-checkbox/pseudo-checkbox.js +4 -4
- package/esm2015/core/selection/pseudo-checkbox/pseudo-checkbox.module.js +5 -5
- package/esm2015/core/services/measure-scrollbar.service.js +4 -4
- package/esm2015/datepicker/calendar-body.component.js +4 -4
- package/esm2015/datepicker/calendar.component.js +7 -7
- package/esm2015/datepicker/datepicker-input.directive.js +6 -5
- package/esm2015/datepicker/datepicker-intl.js +4 -4
- package/esm2015/datepicker/datepicker-module.js +5 -5
- package/esm2015/datepicker/datepicker-toggle.component.js +7 -7
- package/esm2015/datepicker/datepicker.component.js +7 -7
- package/esm2015/datepicker/month-view.component.js +4 -4
- package/esm2015/datepicker/multi-year-view.component.js +4 -4
- package/esm2015/datepicker/year-view.component.js +4 -4
- package/esm2015/design-tokens/tokens.js +116 -14
- package/esm2015/divider/divider.component.js +4 -4
- package/esm2015/divider/divider.module.js +5 -5
- package/esm2015/dropdown/dropdown-content.directive.js +4 -4
- package/esm2015/dropdown/dropdown-item.component.js +11 -4
- package/esm2015/dropdown/dropdown-trigger.directive.js +39 -39
- package/esm2015/dropdown/dropdown.component.js +9 -5
- package/esm2015/dropdown/dropdown.module.js +5 -5
- package/esm2015/form-field/cleaner.js +9 -5
- package/esm2015/form-field/form-field.js +7 -7
- package/esm2015/form-field/form-field.module.js +5 -5
- package/esm2015/form-field/hint.js +4 -4
- package/esm2015/form-field/prefix.js +4 -4
- package/esm2015/form-field/stepper.js +4 -4
- package/esm2015/form-field/suffix.js +4 -4
- package/esm2015/icon/icon.component.js +7 -7
- package/esm2015/icon/icon.module.js +5 -5
- package/esm2015/input/input-number-validators.js +28 -14
- package/esm2015/input/input-number.js +4 -4
- package/esm2015/input/input.js +7 -7
- package/esm2015/input/input.module.js +5 -5
- package/esm2015/link/link.component.js +4 -4
- package/esm2015/link/link.module.js +5 -5
- package/esm2015/list/list-selection.component.js +155 -66
- package/esm2015/list/list.component.js +7 -7
- package/esm2015/list/list.module.js +5 -5
- package/esm2015/modal/css-unit.pipe.js +4 -4
- package/esm2015/modal/modal-control.service.js +4 -4
- package/esm2015/modal/modal.component.js +6 -4
- package/esm2015/modal/modal.directive.js +13 -13
- package/esm2015/modal/modal.module.js +9 -7
- package/esm2015/modal/modal.service.js +16 -9
- package/esm2015/navbar/navbar-item.component.js +21 -21
- package/esm2015/navbar/navbar.component.js +7 -7
- package/esm2015/navbar/navbar.module.js +5 -5
- package/esm2015/navbar/vertical-navbar.component.js +14 -9
- package/esm2015/popover/popover-confirm.component.js +116 -0
- package/esm2015/popover/popover.component.js +63 -20
- package/esm2015/popover/popover.module.js +13 -10
- package/esm2015/popover/public-api.js +2 -1
- package/esm2015/progress-bar/progress-bar.component.js +4 -4
- package/esm2015/progress-bar/progress-bar.module.js +5 -5
- package/esm2015/progress-spinner/progress-spinner.component.js +4 -4
- package/esm2015/progress-spinner/progress-spinner.module.js +5 -5
- package/esm2015/radio/radio.component.js +7 -7
- package/esm2015/radio/radio.module.js +5 -5
- package/esm2015/select/select.component.js +14 -14
- package/esm2015/select/select.module.js +5 -5
- package/esm2015/sidebar/sidebar.component.js +10 -10
- package/esm2015/sidebar/sidebar.module.js +5 -5
- package/esm2015/sidepanel/sidepanel-container.component.js +14 -13
- package/esm2015/sidepanel/sidepanel-directives.js +22 -18
- package/esm2015/sidepanel/sidepanel.module.js +12 -8
- package/esm2015/sidepanel/sidepanel.service.js +6 -5
- package/esm2015/splitter/splitter.component.js +24 -13
- package/esm2015/splitter/splitter.module.js +5 -5
- package/esm2015/table/table.component.js +4 -4
- package/esm2015/table/table.module.js +5 -5
- package/esm2015/tabs/paginated-tab-header.js +5 -5
- package/esm2015/tabs/tab-body.component.js +7 -7
- package/esm2015/tabs/tab-content.directive.js +4 -4
- package/esm2015/tabs/tab-group.component.js +56 -26
- package/esm2015/tabs/tab-header.component.js +4 -4
- package/esm2015/tabs/tab-label-wrapper.directive.js +21 -6
- package/esm2015/tabs/tab-label.directive.js +4 -4
- package/esm2015/tabs/tab-nav-bar/tab-nav-bar.js +7 -7
- package/esm2015/tabs/tab.component.js +36 -13
- package/esm2015/tabs/tabs.module.js +5 -5
- package/esm2015/tags/tag-input.js +4 -4
- package/esm2015/tags/tag-list.component.js +4 -4
- package/esm2015/tags/tag.component.js +14 -13
- package/esm2015/tags/tag.module.js +5 -5
- package/esm2015/textarea/textarea.component.js +4 -4
- package/esm2015/textarea/textarea.module.js +5 -5
- package/esm2015/timepicker/timepicker.directive.js +9 -8
- package/esm2015/timepicker/timepicker.module.js +5 -5
- package/esm2015/toggle/toggle.component.js +4 -4
- package/esm2015/toggle/toggle.module.js +5 -5
- package/esm2015/tooltip/tooltip.component.js +55 -16
- package/esm2015/tooltip/tooltip.module.js +5 -5
- package/esm2015/tree/control/base-tree-control.js +60 -0
- package/esm2015/tree/control/flat-tree-control.js +123 -0
- package/esm2015/tree/control/nested-tree-control.js +41 -0
- package/esm2015/tree/control/tree-control.js +2 -0
- package/esm2015/tree/data-source/flat-data-source.js +1 -1
- package/esm2015/tree/node.js +31 -0
- package/esm2015/tree/outlet.js +15 -0
- package/esm2015/tree/padding.directive.js +90 -23
- package/esm2015/tree/public-api.js +9 -2
- package/esm2015/tree/toggle.js +46 -52
- package/esm2015/tree/tree-base.js +243 -0
- package/esm2015/tree/tree-errors.js +36 -0
- package/esm2015/tree/tree-option.component.js +75 -32
- package/esm2015/tree/tree-selection.component.js +122 -73
- package/esm2015/tree/tree.js +23 -0
- package/esm2015/tree/tree.module.js +24 -13
- package/esm2015/tree-select/tree-select.component.js +11 -12
- package/esm2015/tree-select/tree-select.module.js +5 -9
- package/fesm2015/ptsecurity-mosaic-autocomplete.js +13 -13
- package/fesm2015/ptsecurity-mosaic-autocomplete.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-button-toggle.js +10 -10
- package/fesm2015/ptsecurity-mosaic-button-toggle.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-button.js +13 -13
- package/fesm2015/ptsecurity-mosaic-button.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-card.js +7 -7
- package/fesm2015/ptsecurity-mosaic-card.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-checkbox.js +10 -10
- package/fesm2015/ptsecurity-mosaic-checkbox.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-core.js +231 -140
- package/fesm2015/ptsecurity-mosaic-core.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-datepicker.js +42 -41
- package/fesm2015/ptsecurity-mosaic-datepicker.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-design-tokens.js +116 -14
- package/fesm2015/ptsecurity-mosaic-design-tokens.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-divider.js +7 -7
- package/fesm2015/ptsecurity-mosaic-divider.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-dropdown.js +63 -52
- package/fesm2015/ptsecurity-mosaic-dropdown.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-form-field.js +30 -27
- package/fesm2015/ptsecurity-mosaic-form-field.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-icon.js +10 -10
- package/fesm2015/ptsecurity-mosaic-icon.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-input.js +40 -26
- package/fesm2015/ptsecurity-mosaic-input.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-link.js +7 -7
- package/fesm2015/ptsecurity-mosaic-link.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-list.js +164 -76
- package/fesm2015/ptsecurity-mosaic-list.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-modal.js +46 -35
- package/fesm2015/ptsecurity-mosaic-modal.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-navbar.js +43 -38
- package/fesm2015/ptsecurity-mosaic-navbar.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-popover.js +179 -30
- package/fesm2015/ptsecurity-mosaic-popover.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-progress-bar.js +7 -7
- package/fesm2015/ptsecurity-mosaic-progress-bar.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-progress-spinner.js +7 -7
- package/fesm2015/ptsecurity-mosaic-progress-spinner.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-radio.js +10 -10
- package/fesm2015/ptsecurity-mosaic-radio.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-select.js +17 -17
- package/fesm2015/ptsecurity-mosaic-select.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-sidebar.js +13 -13
- package/fesm2015/ptsecurity-mosaic-sidebar.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-sidepanel.js +50 -41
- package/fesm2015/ptsecurity-mosaic-sidepanel.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-splitter.js +27 -16
- package/fesm2015/ptsecurity-mosaic-splitter.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-table.js +7 -7
- package/fesm2015/ptsecurity-mosaic-table.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tabs.js +240 -174
- package/fesm2015/ptsecurity-mosaic-tabs.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tags.js +23 -22
- package/fesm2015/ptsecurity-mosaic-tags.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-textarea.js +7 -7
- package/fesm2015/ptsecurity-mosaic-textarea.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-timepicker.js +12 -11
- package/fesm2015/ptsecurity-mosaic-timepicker.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-toggle.js +7 -7
- package/fesm2015/ptsecurity-mosaic-toggle.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tooltip.js +57 -18
- package/fesm2015/ptsecurity-mosaic-tooltip.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tree-select.js +14 -18
- package/fesm2015/ptsecurity-mosaic-tree-select.js.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tree.js +874 -190
- package/fesm2015/ptsecurity-mosaic-tree.js.map +1 -1
- package/form-field/cleaner.d.ts +2 -0
- package/input/input-number-validators.d.ts +2 -2
- package/list/list-selection.component.d.ts +28 -6
- package/modal/modal.component.d.ts +2 -0
- package/modal/modal.module.d.ts +1 -1
- package/package.json +5 -5
- package/popover/popover-confirm.component.d.ts +33 -0
- package/popover/popover.component.d.ts +14 -4
- package/popover/popover.module.d.ts +6 -3
- package/popover/public-api.d.ts +1 -0
- package/prebuilt-themes/dark-theme.css +1 -1
- package/prebuilt-themes/default-theme.css +1 -1
- package/prebuilt-visual/default-visual.css +1 -1
- package/select/select.component.d.ts +2 -7
- package/sidepanel/sidepanel-directives.d.ts +2 -0
- package/sidepanel/sidepanel.module.d.ts +2 -1
- package/splitter/splitter.component.d.ts +6 -3
- package/tabs/tab-group.component.d.ts +11 -4
- package/tabs/tab-label-wrapper.directive.d.ts +7 -1
- package/tabs/tab.component.d.ts +10 -4
- package/tooltip/tooltip.component.d.ts +12 -3
- package/tree/control/base-tree-control.d.ts +40 -0
- package/tree/control/flat-tree-control.d.ts +48 -0
- package/tree/control/nested-tree-control.d.ts +19 -0
- package/tree/control/tree-control.d.ts +44 -0
- package/tree/data-source/flat-data-source.d.ts +2 -1
- package/tree/node.d.ts +34 -0
- package/tree/outlet.d.ts +9 -0
- package/tree/padding.directive.d.ts +35 -7
- package/tree/public-api.d.ts +8 -1
- package/tree/toggle.d.ts +17 -17
- package/tree/tree-base.d.ts +97 -0
- package/tree/tree-errors.d.ts +25 -0
- package/tree/tree-option.component.d.ts +13 -5
- package/tree/tree-selection.component.d.ts +32 -13
- package/tree/tree.d.ts +6 -0
- package/tree/tree.module.d.ts +10 -8
- package/tree-select/tree-select.component.d.ts +2 -7
- package/tree-select/tree-select.module.d.ts +5 -6
- package/esm2015/tree/node.directive.js +0 -19
- package/tree/node.directive.d.ts +0 -7
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ptsecurity-mosaic-textarea.js","sources":["../../../packages/mosaic/textarea/textarea.component.ts","../../../packages/mosaic/textarea/textarea.module.ts","../../../packages/mosaic/textarea/ptsecurity-mosaic-textarea.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n Directive, DoCheck, ElementRef, Inject,\n Input, OnChanges, OnDestroy, Optional,\n Self, InjectionToken, NgZone, OnInit,\n AfterContentInit\n} from '@angular/core';\nimport { FormGroupDirective, NG_VALIDATORS, NgControl, NgForm, NgModel, Validator } from '@angular/forms';\nimport {\n CanUpdateErrorState,\n CanUpdateErrorStateCtor,\n ErrorStateMatcher,\n MC_VALIDATION,\n McValidationOptions,\n setMosaicValidation,\n mixinErrorState\n} from '@ptsecurity/mosaic/core';\nimport { McFormFieldControl } from '@ptsecurity/mosaic/form-field';\nimport { fromEvent, Subscription, Subject } from 'rxjs';\n\n\nexport const MC_TEXTAREA_VALUE_ACCESSOR = new InjectionToken<{ value: any }>('MC_TEXTAREA_VALUE_ACCESSOR');\n\nlet nextUniqueId = 0;\n\n\nexport class McTextareaBase {\n constructor(\n public defaultErrorStateMatcher: ErrorStateMatcher,\n public parentForm: NgForm,\n public parentFormGroup: FormGroupDirective,\n public ngControl: NgControl\n ) {}\n}\n\n// tslint:disable-next-line:naming-convention\nexport const McTextareaMixinBase: CanUpdateErrorStateCtor & typeof McTextareaBase = mixinErrorState(McTextareaBase);\n\n@Directive({\n selector: 'textarea[mcTextarea]',\n exportAs: 'mcTextarea',\n host: {\n class: 'mc-textarea',\n '[class.mc-textarea-resizable]': '!canGrow',\n\n '[attr.id]': 'id',\n '[attr.placeholder]': 'placeholder',\n '[attr.aria-invalid]': 'errorState',\n '[attr.disabled]': 'disabled || null',\n '[attr.required]': 'required',\n\n '(blur)': 'focusChanged(false)',\n '(focus)': 'focusChanged(true)'\n },\n providers: [{ provide: McFormFieldControl, useExisting: McTextarea }]\n})\nexport class McTextarea extends McTextareaMixinBase implements McFormFieldControl<any>, OnInit, OnChanges,\n OnDestroy, DoCheck, CanUpdateErrorState, AfterContentInit {\n\n @Input() canGrow: boolean = true;\n\n /** An object used to control when error messages are shown. */\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n focused: boolean = false;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n readonly stateChanges: Subject<void> = new Subject<void>();\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n controlType: string = 'textarea';\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled !== null) {\n return this.ngControl.disabled;\n }\n\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value || this.uid;\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input() placeholder: string;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get value(): string {\n return this.valueAccessor.value;\n }\n\n set value(value: string) {\n if (value !== this.value) {\n this.valueAccessor.value = value;\n this.stateChanges.next();\n }\n }\n\n protected uid = `mc-textsrea-${nextUniqueId++}`;\n protected previousNativeValue: any;\n private _disabled = false;\n private _id: string;\n private _required = false;\n\n private valueAccessor: { value: any };\n private growSubscription: Subscription;\n\n private lineHeight: number = 0;\n private freeRowsHeight: number = 0;\n private minHeight: number = 0;\n\n constructor(\n protected elementRef: ElementRef,\n @Optional() @Self() public ngControl: NgControl,\n @Optional() parentForm: NgForm,\n @Optional() @Self() @Inject(NG_VALIDATORS) public rawValidators: Validator[],\n @Optional() @Inject(MC_VALIDATION) private mcValidation: McValidationOptions,\n @Optional() @Self() public ngModel: NgModel,\n @Optional() parentFormGroup: FormGroupDirective,\n defaultErrorStateMatcher: ErrorStateMatcher,\n @Optional() @Self() @Inject(MC_TEXTAREA_VALUE_ACCESSOR) inputValueAccessor: any,\n private ngZone: NgZone\n ) {\n super(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);\n // If no input value accessor was explicitly specified, use the element as the textarea value\n // accessor.\n this.valueAccessor = inputValueAccessor || this.elementRef.nativeElement;\n\n this.previousNativeValue = this.value;\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n\n const growObserver = fromEvent(elementRef.nativeElement, 'input');\n\n this.growSubscription = growObserver.subscribe(this.grow.bind(this));\n }\n\n ngOnInit() {\n setTimeout(() => this.grow(), 0);\n this.lineHeight = parseInt(getComputedStyle(this.elementRef.nativeElement).lineHeight!, 10);\n\n const paddingTop = parseInt(getComputedStyle(this.elementRef.nativeElement).paddingTop!, 10);\n const paddingBottom = parseInt(getComputedStyle(this.elementRef.nativeElement).paddingBottom!, 10);\n\n // tslint:disable-next-line:no-magic-numbers\n this.minHeight = this.lineHeight * 2 + paddingTop + paddingBottom;\n this.freeRowsHeight = this.lineHeight;\n }\n\n ngOnChanges() {\n this.stateChanges.next();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this.growSubscription.unsubscribe();\n }\n\n ngAfterContentInit(): void {\n if (!this.ngControl) { return; }\n\n if (this.mcValidation.useValidation) {\n setMosaicValidation(this);\n }\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n\n // We need to dirty-check the native element's value, because there are some cases where\n // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n // updating the value using `emitEvent: false`).\n this.dirtyCheckNativeValue();\n }\n\n /** Grow textarea height to avoid vertical scroll */\n grow() {\n if (!this.canGrow) {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n const textarea = this.elementRef.nativeElement;\n\n const outerHeight = parseInt(window.getComputedStyle(textarea).height!, 10);\n const diff = outerHeight - textarea.clientHeight;\n\n textarea.style.minHeight = 0; // this line is important to height recalculation\n\n const height = Math.max(this.minHeight, +textarea.scrollHeight + diff + this.freeRowsHeight);\n textarea.style.minHeight = `${height}px`;\n });\n }\n\n /** Focuses the textarea. */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n /** Callback for the cases where the focused state of the textarea changes. */\n focusChanged(isFocused: boolean) {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.stateChanges.next();\n }\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return !this.elementRef.nativeElement.value && !this.isBadInput();\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n }\n\n /** Does some manual dirty checking on the native textarea `value` property. */\n protected dirtyCheckNativeValue() {\n const newValue = this.value;\n\n if (this.previousNativeValue !== newValue) {\n this.previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n\n /** Checks whether the textarea is invalid based on the native validation. */\n protected isBadInput(): boolean {\n // The `validity` property won't be present on platform-server.\n const validity = (this.elementRef.nativeElement as HTMLTextAreaElement).validity;\n\n return validity && validity.badInput;\n }\n\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { McCommonModule } from '@ptsecurity/mosaic/core';\n\nimport { McTextarea } from './textarea.component';\n\n\n@NgModule({\n imports: [CommonModule, A11yModule, McCommonModule, FormsModule],\n exports: [McTextarea],\n declarations: [McTextarea]\n})\nexport class McTextareaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"ptsecurity-mosaic-textarea.js","sources":["../../../packages/mosaic/textarea/textarea.component.ts","../../../packages/mosaic/textarea/textarea.module.ts","../../../packages/mosaic/textarea/ptsecurity-mosaic-textarea.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n Directive, DoCheck, ElementRef, Inject,\n Input, OnChanges, OnDestroy, Optional,\n Self, InjectionToken, NgZone, OnInit,\n AfterContentInit\n} from '@angular/core';\nimport { FormGroupDirective, NG_VALIDATORS, NgControl, NgForm, NgModel, Validator } from '@angular/forms';\nimport {\n CanUpdateErrorState,\n CanUpdateErrorStateCtor,\n ErrorStateMatcher,\n MC_VALIDATION,\n McValidationOptions,\n setMosaicValidation,\n mixinErrorState\n} from '@ptsecurity/mosaic/core';\nimport { McFormFieldControl } from '@ptsecurity/mosaic/form-field';\nimport { fromEvent, Subscription, Subject } from 'rxjs';\n\n\nexport const MC_TEXTAREA_VALUE_ACCESSOR = new InjectionToken<{ value: any }>('MC_TEXTAREA_VALUE_ACCESSOR');\n\nlet nextUniqueId = 0;\n\n\nexport class McTextareaBase {\n constructor(\n public defaultErrorStateMatcher: ErrorStateMatcher,\n public parentForm: NgForm,\n public parentFormGroup: FormGroupDirective,\n public ngControl: NgControl\n ) {}\n}\n\n// tslint:disable-next-line:naming-convention\nexport const McTextareaMixinBase: CanUpdateErrorStateCtor & typeof McTextareaBase = mixinErrorState(McTextareaBase);\n\n@Directive({\n selector: 'textarea[mcTextarea]',\n exportAs: 'mcTextarea',\n host: {\n class: 'mc-textarea',\n '[class.mc-textarea-resizable]': '!canGrow',\n\n '[attr.id]': 'id',\n '[attr.placeholder]': 'placeholder',\n '[attr.aria-invalid]': 'errorState',\n '[attr.disabled]': 'disabled || null',\n '[attr.required]': 'required',\n\n '(blur)': 'focusChanged(false)',\n '(focus)': 'focusChanged(true)'\n },\n providers: [{ provide: McFormFieldControl, useExisting: McTextarea }]\n})\nexport class McTextarea extends McTextareaMixinBase implements McFormFieldControl<any>, OnInit, OnChanges,\n OnDestroy, DoCheck, CanUpdateErrorState, AfterContentInit {\n\n @Input() canGrow: boolean = true;\n\n /** An object used to control when error messages are shown. */\n @Input() errorStateMatcher: ErrorStateMatcher;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n focused: boolean = false;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n readonly stateChanges: Subject<void> = new Subject<void>();\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n controlType: string = 'textarea';\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled !== null) {\n return this.ngControl.disabled;\n }\n\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value || this.uid;\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input() placeholder: string;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get value(): string {\n return this.valueAccessor.value;\n }\n\n set value(value: string) {\n if (value !== this.value) {\n this.valueAccessor.value = value;\n this.stateChanges.next();\n }\n }\n\n protected uid = `mc-textsrea-${nextUniqueId++}`;\n protected previousNativeValue: any;\n private _disabled = false;\n private _id: string;\n private _required = false;\n\n private valueAccessor: { value: any };\n private growSubscription: Subscription;\n\n private lineHeight: number = 0;\n private freeRowsHeight: number = 0;\n private minHeight: number = 0;\n\n constructor(\n protected elementRef: ElementRef,\n @Optional() @Self() public ngControl: NgControl,\n @Optional() parentForm: NgForm,\n @Optional() @Self() @Inject(NG_VALIDATORS) public rawValidators: Validator[],\n @Optional() @Inject(MC_VALIDATION) private mcValidation: McValidationOptions,\n @Optional() @Self() public ngModel: NgModel,\n @Optional() parentFormGroup: FormGroupDirective,\n defaultErrorStateMatcher: ErrorStateMatcher,\n @Optional() @Self() @Inject(MC_TEXTAREA_VALUE_ACCESSOR) inputValueAccessor: any,\n private ngZone: NgZone\n ) {\n super(defaultErrorStateMatcher, parentForm, parentFormGroup, ngControl);\n // If no input value accessor was explicitly specified, use the element as the textarea value\n // accessor.\n this.valueAccessor = inputValueAccessor || this.elementRef.nativeElement;\n\n this.previousNativeValue = this.value;\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n\n const growObserver = fromEvent(elementRef.nativeElement, 'input');\n\n this.growSubscription = growObserver.subscribe(this.grow.bind(this));\n }\n\n ngOnInit() {\n setTimeout(() => this.grow(), 0);\n this.lineHeight = parseInt(getComputedStyle(this.elementRef.nativeElement).lineHeight!, 10);\n\n const paddingTop = parseInt(getComputedStyle(this.elementRef.nativeElement).paddingTop!, 10);\n const paddingBottom = parseInt(getComputedStyle(this.elementRef.nativeElement).paddingBottom!, 10);\n\n // tslint:disable-next-line:no-magic-numbers\n this.minHeight = this.lineHeight * 2 + paddingTop + paddingBottom;\n this.freeRowsHeight = this.lineHeight;\n }\n\n ngOnChanges() {\n this.stateChanges.next();\n }\n\n ngOnDestroy() {\n this.stateChanges.complete();\n this.growSubscription.unsubscribe();\n }\n\n ngAfterContentInit(): void {\n if (!this.ngControl) { return; }\n\n if (this.mcValidation.useValidation) {\n setMosaicValidation(this);\n }\n }\n\n ngDoCheck() {\n if (this.ngControl) {\n // We need to re-evaluate this on every change detection cycle, because there are some\n // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n // that whatever logic is in here has to be super lean or we risk destroying the performance.\n this.updateErrorState();\n }\n\n // We need to dirty-check the native element's value, because there are some cases where\n // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n // updating the value using `emitEvent: false`).\n this.dirtyCheckNativeValue();\n }\n\n /** Grow textarea height to avoid vertical scroll */\n grow() {\n if (!this.canGrow) {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n const textarea = this.elementRef.nativeElement;\n\n const outerHeight = parseInt(window.getComputedStyle(textarea).height!, 10);\n const diff = outerHeight - textarea.clientHeight;\n\n textarea.style.minHeight = 0; // this line is important to height recalculation\n\n const height = Math.max(this.minHeight, +textarea.scrollHeight + diff + this.freeRowsHeight);\n textarea.style.minHeight = `${height}px`;\n });\n }\n\n /** Focuses the textarea. */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n /** Callback for the cases where the focused state of the textarea changes. */\n focusChanged(isFocused: boolean) {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.stateChanges.next();\n }\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return !this.elementRef.nativeElement.value && !this.isBadInput();\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n }\n\n /** Does some manual dirty checking on the native textarea `value` property. */\n protected dirtyCheckNativeValue() {\n const newValue = this.value;\n\n if (this.previousNativeValue !== newValue) {\n this.previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n\n /** Checks whether the textarea is invalid based on the native validation. */\n protected isBadInput(): boolean {\n // The `validity` property won't be present on platform-server.\n const validity = (this.elementRef.nativeElement as HTMLTextAreaElement).validity;\n\n return validity && validity.badInput;\n }\n\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { McCommonModule } from '@ptsecurity/mosaic/core';\n\nimport { McTextarea } from './textarea.component';\n\n\n@NgModule({\n imports: [CommonModule, A11yModule, McCommonModule, FormsModule],\n exports: [McTextarea],\n declarations: [McTextarea]\n})\nexport class McTextareaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
@@ -6,7 +6,7 @@ import { forwardRef, EventEmitter, Directive, Optional, Input, Output, NgModule
|
|
6
6
|
import { NG_VALUE_ACCESSOR, NG_VALIDATORS, Validators, FormsModule } from '@angular/forms';
|
7
7
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
8
8
|
import * as i1 from '@ptsecurity/cdk/datetime';
|
9
|
-
import { isLetterKey, hasModifierKey, isVerticalMovement, isHorizontalMovement, DELETE, BACKSPACE, SPACE, HOME, PAGE_UP, END, PAGE_DOWN, UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW } from '@ptsecurity/cdk/keycodes';
|
9
|
+
import { isLetterKey, hasModifierKey, isVerticalMovement, isHorizontalMovement, DELETE, BACKSPACE, TAB, SPACE, HOME, PAGE_UP, END, PAGE_DOWN, UP_ARROW, DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW } from '@ptsecurity/cdk/keycodes';
|
10
10
|
import { validationTooltipShowDelay, validationTooltipHideDelay } from '@ptsecurity/mosaic/core';
|
11
11
|
import { McFormFieldControl } from '@ptsecurity/mosaic/form-field';
|
12
12
|
import '@ptsecurity/mosaic/tooltip';
|
@@ -298,9 +298,9 @@ class McTimepicker {
|
|
298
298
|
event.preventDefault();
|
299
299
|
this.incorrectInput.emit();
|
300
300
|
}
|
301
|
-
else if ((hasModifierKey(event) && (isVerticalMovement(
|
301
|
+
else if ((hasModifierKey(event) && (isVerticalMovement(event) || isHorizontalMovement(event))) ||
|
302
302
|
event.ctrlKey || event.metaKey ||
|
303
|
-
[DELETE, BACKSPACE].includes(keyCode)) {
|
303
|
+
[DELETE, BACKSPACE, TAB].includes(keyCode)) {
|
304
304
|
noop();
|
305
305
|
}
|
306
306
|
else if (keyCode === SPACE) {
|
@@ -589,7 +589,8 @@ class McTimepicker {
|
|
589
589
|
return null;
|
590
590
|
}
|
591
591
|
// tslint:enable
|
592
|
-
const
|
592
|
+
const date = this.value || this.dateAdapter.today();
|
593
|
+
const resultDate = this.dateAdapter.createDateTime(this.dateAdapter.getYear(date), this.dateAdapter.getMonth(date), this.dateAdapter.getDate(date), hours, minutes || 0, seconds || 0, this.dateAdapter.getMilliseconds(date));
|
593
594
|
return this.getValidDateOrNull(resultDate);
|
594
595
|
}
|
595
596
|
compareTime(first, second) {
|
@@ -621,13 +622,13 @@ class McTimepicker {
|
|
621
622
|
}
|
622
623
|
}
|
623
624
|
}
|
624
|
-
/** @nocollapse */ McTimepicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
625
|
-
/** @nocollapse */ McTimepicker.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.
|
625
|
+
/** @nocollapse */ McTimepicker.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McTimepicker, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.DateAdapter, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
626
|
+
/** @nocollapse */ McTimepicker.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.13", type: McTimepicker, selector: "input[mcTimepicker]", inputs: { placeholder: "placeholder", disabled: "disabled", id: "id", required: "required", format: "format", min: "min", max: "max", value: "value", mcValidationTooltip: "mcValidationTooltip" }, outputs: { incorrectInput: "incorrectInput" }, host: { listeners: { "blur": "onBlur()", "focus": "focusChanged(true)", "paste": "onPaste($event)", "keydown": "onKeyDown($event)" }, properties: { "attr.id": "id", "attr.placeholder": "placeholder", "attr.disabled": "disabled || null", "attr.required": "required", "attr.size": "getSize()", "attr.autocomplete": "\"off\"" }, classAttribute: "mc-input mc-timepicker" }, providers: [
|
626
627
|
MC_TIMEPICKER_VALIDATORS,
|
627
628
|
MC_TIMEPICKER_VALUE_ACCESSOR,
|
628
629
|
{ provide: McFormFieldControl, useExisting: McTimepicker }
|
629
630
|
], exportAs: ["mcTimepicker"], ngImport: i0 });
|
630
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
631
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McTimepicker, decorators: [{
|
631
632
|
type: Directive,
|
632
633
|
args: [{
|
633
634
|
selector: 'input[mcTimepicker]',
|
@@ -679,18 +680,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
|
|
679
680
|
|
680
681
|
class McTimepickerModule {
|
681
682
|
}
|
682
|
-
/** @nocollapse */ McTimepickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
683
|
-
/** @nocollapse */ McTimepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.
|
683
|
+
/** @nocollapse */ McTimepickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McTimepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
684
|
+
/** @nocollapse */ McTimepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McTimepickerModule, declarations: [McTimepicker], imports: [CommonModule,
|
684
685
|
A11yModule,
|
685
686
|
PlatformModule,
|
686
687
|
FormsModule], exports: [McTimepicker] });
|
687
|
-
/** @nocollapse */ McTimepickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.
|
688
|
+
/** @nocollapse */ McTimepickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McTimepickerModule, imports: [[
|
688
689
|
CommonModule,
|
689
690
|
A11yModule,
|
690
691
|
PlatformModule,
|
691
692
|
FormsModule
|
692
693
|
]] });
|
693
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
694
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McTimepickerModule, decorators: [{
|
694
695
|
type: NgModule,
|
695
696
|
args: [{
|
696
697
|
imports: [
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ptsecurity-mosaic-timepicker.js","sources":["../../../packages/mosaic/timepicker/timepicker.constants.ts","../../../packages/mosaic/timepicker/timepicker.directive.ts","../../../packages/mosaic/timepicker/timepicker.module.ts","../../../packages/mosaic/timepicker/ptsecurity-mosaic-timepicker.ts"],"sourcesContent":["// tslint:disable:naming-convention\nexport enum TimeParts {\n hours,\n minutes,\n seconds\n}\n\nexport enum TimeFormats {\n HHmmss = 'HH:mm:ss',\n HHmm = 'HH:mm'\n}\n\nexport const TIMEFORMAT_PLACEHOLDERS: { [timeFormat: string]: string } = {\n [TimeFormats.HHmmss]: 'чч:мм:сс',\n [TimeFormats.HHmm]: 'чч:мм'\n};\n\nexport const DEFAULT_TIME_FORMAT: TimeFormats = TimeFormats.HHmm;\n\nexport const HOURS_MINUTES_SECONDS_REGEXP = /^([0-1][0-9]|2[0-3]):?([0-5][0-9]):?([0-5][0-9])?$/;\nexport const HOURS_MINUTES_REGEXP = /^([0-1][0-9]|2[0-3]):?([0-5][0-9])?$/;\nexport const HOURS_ONLY_REGEXP = /^([0-1][0-9]|2[0-3]):?$/;\nexport const AM_PM_FORMAT_REGEXP = /^([0-1]?[0-9]):([0-5]?[0-9]) ([ap][m]?$)/i;\n\nexport const SECONDS_PER_MINUTE: number = 59;\nexport const MINUTES_PER_HOUR: number = 59;\nexport const HOURS_PER_DAY: number = 23;\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n Optional,\n Output,\n Renderer2\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { DateAdapter } from '@ptsecurity/cdk/datetime';\nimport {\n DOWN_ARROW,\n UP_ARROW,\n HOME,\n END,\n LEFT_ARROW,\n RIGHT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n SPACE,\n DELETE,\n BACKSPACE,\n hasModifierKey,\n isLetterKey,\n isVerticalMovement,\n isHorizontalMovement\n} from '@ptsecurity/cdk/keycodes';\nimport { validationTooltipHideDelay, validationTooltipShowDelay } from '@ptsecurity/mosaic/core';\nimport { McFormFieldControl } from '@ptsecurity/mosaic/form-field';\nimport { McWarningTooltipTrigger } from '@ptsecurity/mosaic/tooltip';\nimport { noop, Subject } from 'rxjs';\n\nimport {\n DEFAULT_TIME_FORMAT,\n HOURS_PER_DAY,\n HOURS_MINUTES_REGEXP,\n HOURS_MINUTES_SECONDS_REGEXP,\n HOURS_ONLY_REGEXP,\n MINUTES_PER_HOUR,\n SECONDS_PER_MINUTE,\n TIMEFORMAT_PLACEHOLDERS,\n TimeFormats,\n TimeParts,\n AM_PM_FORMAT_REGEXP\n} from './timepicker.constants';\n\n\n/** @docs-private */\nexport const MC_TIMEPICKER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => McTimepicker),\n multi: true\n};\n\n/** @docs-private */\nexport const MC_TIMEPICKER_VALIDATORS: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => McTimepicker),\n multi: true\n};\n\n\nlet uniqueComponentIdSuffix: number = 0;\n\nconst shortFormatSize: number = 5;\nconst fullFormatSize: number = 8;\n\n\n@Directive({\n selector: 'input[mcTimepicker]',\n exportAs: 'mcTimepicker',\n host: {\n class: 'mc-input mc-timepicker',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[attr.id]': 'id',\n '[attr.placeholder]': 'placeholder',\n '[attr.disabled]': 'disabled || null',\n '[attr.required]': 'required',\n '[attr.size]': 'getSize()',\n '[attr.autocomplete]': '\"off\"',\n\n '(blur)': 'onBlur()',\n '(focus)': 'focusChanged(true)',\n\n '(paste)': 'onPaste($event)',\n\n '(keydown)': 'onKeyDown($event)'\n },\n providers: [\n MC_TIMEPICKER_VALIDATORS,\n MC_TIMEPICKER_VALUE_ACCESSOR,\n { provide: McFormFieldControl, useExisting: McTimepicker }\n ]\n})\nexport class McTimepicker<D> implements McFormFieldControl<D>, ControlValueAccessor, Validator, OnDestroy {\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n readonly stateChanges: Subject<void> = new Subject<void>();\n\n readonly errorState: boolean;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n focused: boolean = false;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n controlType: string = 'timepicker';\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n\n this.defaultPlaceholder = false;\n }\n\n private _placeholder = TIMEFORMAT_PLACEHOLDERS[DEFAULT_TIME_FORMAT];\n\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n }\n\n this.stateChanges.next();\n }\n\n private _disabled: boolean;\n\n @Input()\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value || this.uid;\n }\n\n private _id: string;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n private _required: boolean;\n\n @Input()\n get format(): TimeFormats {\n return this._format;\n }\n\n set format(formatValue: TimeFormats) {\n this._format = Object\n .keys(TimeFormats)\n .map((timeFormatKey) => TimeFormats[timeFormatKey])\n .indexOf(formatValue) > -1 ? formatValue : DEFAULT_TIME_FORMAT;\n\n if (this.defaultPlaceholder) {\n this._placeholder = TIMEFORMAT_PLACEHOLDERS[this._format];\n }\n\n if (this.value) {\n this.updateView();\n }\n }\n\n private _format: TimeFormats = DEFAULT_TIME_FORMAT;\n\n @Input()\n get min(): D | null {\n return this._min;\n }\n\n set min(value: D | null) {\n this._min = this.getValidDateOrNull(this.dateAdapter.deserialize(value));\n this.validatorOnChange();\n }\n\n private _min: D | null = null;\n\n @Input()\n get max(): D | null {\n return this._max;\n }\n\n set max(value: D | null) {\n this._max = this.getValidDateOrNull(this.dateAdapter.deserialize(value));\n this.validatorOnChange();\n }\n\n private _max: D | null = null;\n\n @Input()\n get value(): D | null {\n return this._value;\n }\n\n set value(value: D | null) {\n const newValue = this.dateAdapter.deserialize(value);\n\n this.lastValueValid = !newValue || this.dateAdapter.isValid(newValue);\n\n this._value = this.getValidDateOrNull(newValue);\n\n this.updateView();\n }\n\n private _value: D | null;\n\n @Input()\n set mcValidationTooltip(tooltip: McWarningTooltipTrigger) {\n if (!tooltip) { return; }\n\n tooltip.enterDelay = validationTooltipShowDelay;\n tooltip.trigger = 'manual';\n\n tooltip.initListeners();\n\n this.incorrectInput.subscribe(() => {\n if (tooltip.isOpen) { return; }\n\n tooltip.show();\n\n setTimeout(() => tooltip.hide(), validationTooltipHideDelay);\n });\n }\n\n @Output() incorrectInput = new EventEmitter<void>();\n\n get hasSelection(): boolean {\n return this.selectionStart !== this.selectionEnd;\n }\n\n get isFullFormat(): boolean {\n return this.format === TimeFormats.HHmmss;\n }\n\n get isShortFormat(): boolean {\n return this.format === TimeFormats.HHmm;\n }\n\n get viewValue(): string {\n return this.elementRef.nativeElement.value;\n }\n\n get ngControl(): any {\n return this.control;\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return !this.viewValue && !this.isBadInput();\n }\n\n get selectionStart(): number | null {\n return this.elementRef.nativeElement.selectionStart;\n }\n\n set selectionStart(value: number | null) {\n this.elementRef.nativeElement.selectionStart = value;\n }\n\n get selectionEnd(): number | null {\n return this.elementRef.nativeElement.selectionEnd;\n }\n\n set selectionEnd(value: number | null) {\n this.elementRef.nativeElement.selectionEnd = value;\n }\n\n private readonly uid = `mc-timepicker-${uniqueComponentIdSuffix++}`;\n\n private readonly validator: ValidatorFn | null;\n\n private lastValueValid = false;\n\n private control: AbstractControl;\n\n private defaultPlaceholder = true;\n\n private onChange: (value: any) => void;\n private onTouched: () => void;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n @Optional() private dateAdapter: DateAdapter<any>\n ) {\n if (!this.dateAdapter) {\n throw Error(`McTimepicker: No provider found for DateAdapter. You must import one of the existing ` +\n `modules at your application root or provide a custom implementation or use exists ones.`);\n }\n\n this.validator = Validators.compose([this.parseValidator, this.minValidator, this.maxValidator]);\n\n this.onChange = noop;\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n getSize(): number {\n return this.isFullFormat ? fullFormatSize : shortFormatSize;\n }\n\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n focusChanged(isFocused: boolean): void {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.onTouched();\n this.stateChanges.next();\n }\n }\n\n onBlur() {\n this.focusChanged(false);\n\n this.onInput();\n }\n\n onPaste($event) {\n $event.preventDefault();\n\n const value = this.formatUserPaste($event.clipboardData.getData('text'));\n\n const newTimeObj = this.getDateFromTimeString(value);\n\n if (!newTimeObj) { return; }\n\n this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.format));\n\n this.value = newTimeObj;\n this.onChange(newTimeObj);\n this.stateChanges.next();\n }\n\n onInput = () => {\n const formattedValue = this.formatUserInput(this.viewValue);\n\n const newTimeObj = this.getDateFromTimeString(formattedValue);\n this.lastValueValid = !!newTimeObj;\n\n if (!newTimeObj) {\n this.onChange(null);\n\n return;\n }\n\n const selectionStart = this.selectionStart;\n const selectionEnd = this.selectionEnd;\n\n this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.format));\n\n this.selectionStart = selectionStart;\n this.selectionEnd = selectionEnd;\n\n this.createSelectionOfTimeComponentInInput((selectionStart as number) + 1);\n\n this.value = newTimeObj;\n this.onChange(newTimeObj);\n this.stateChanges.next();\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n }\n\n onKeyDown(event: KeyboardEvent): void {\n // tslint:disable-next-line: deprecation\n const keyCode = event.keyCode;\n\n if (isLetterKey(event) && !event.ctrlKey && !event.metaKey) {\n event.preventDefault();\n\n this.incorrectInput.emit();\n } else if (\n (hasModifierKey(event) && (isVerticalMovement(keyCode) || isHorizontalMovement(keyCode))) ||\n event.ctrlKey || event.metaKey ||\n [DELETE, BACKSPACE].includes(keyCode)\n ) {\n noop();\n } else if (keyCode === SPACE) {\n this.spaceKeyHandler(event);\n } else if ([HOME, PAGE_UP].includes(keyCode)) {\n this.createSelectionOfTimeComponentInInput(0);\n } else if ([END, PAGE_DOWN].includes(keyCode)) {\n this.createSelectionOfTimeComponentInInput(this.viewValue.length);\n } else if ([UP_ARROW, DOWN_ARROW].includes(keyCode)) {\n event.preventDefault();\n\n this.verticalArrowKeyHandler(keyCode);\n } else if ([LEFT_ARROW, RIGHT_ARROW].includes(keyCode)) {\n this.horizontalArrowKeyHandler(keyCode);\n } else if (/^\\D$/.test(event.key)) {\n event.preventDefault();\n\n const newValue = this.getNewValue(event.key, this.selectionStart as number);\n const formattedValue = this.replaceSymbols(newValue);\n\n if (newValue !== formattedValue) {\n this.setViewValue(formattedValue);\n\n setTimeout(this.onInput);\n } else {\n this.incorrectInput.emit();\n }\n } else {\n setTimeout(this.onInput);\n }\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n this.setControl(control);\n\n return this.validator ? this.validator(control) : null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n writeValue(value: D | null): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: D) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n private formatUserPaste(value: string) {\n if (value.match(AM_PM_FORMAT_REGEXP)) { return value; }\n\n const match: RegExpMatchArray | null = value.match(\n /^(\\D+)?(?<hours>\\d+)?(\\D+)?(\\D+)?(?<minutes>\\d+)?(\\D+)?(\\D+)?(?<seconds>\\d+)?(\\D+)?$/\n );\n\n if (!match?.groups?.hours) {\n this.setViewValue(value);\n\n return value;\n }\n\n return this.replaceNumbers(Object.values(match.groups)\n // tslint:disable-next-line:no-magic-numbers\n .map((group) => (group || '').padStart(2, '0'))\n .join(':')\n );\n }\n\n private formatUserInput(value: string): string {\n return this.replaceNumbers(this.replaceSymbols(value));\n }\n\n private replaceSymbols(value: string): string {\n let formattedValue: string = value;\n\n const match: RegExpMatchArray | null = value.match(/^(\\d\\d:){0,2}(?<number>[0-9])(?<symbol>\\W)(:\\d\\d){0,2}$/);\n\n if (match?.groups) {\n const { number, symbol } = match.groups;\n\n formattedValue = value.replace(number + symbol, `0${number}`);\n }\n\n return formattedValue;\n }\n\n private replaceNumbers(value: string): string {\n let formattedValue: string = value;\n\n const match: RegExpMatchArray | null = value.match(/^(?<hours>\\d{0,4}):?(?<minutes>\\d{0,4}):?(?<seconds>\\d{0,4})$/);\n\n if (match?.groups) {\n const { hours, minutes, seconds } = match.groups;\n\n if (hours.length && parseInt(hours) > HOURS_PER_DAY) {\n formattedValue = formattedValue.replace(hours, HOURS_PER_DAY.toString());\n }\n\n if (minutes.length && parseInt(minutes) > MINUTES_PER_HOUR) {\n formattedValue = formattedValue.replace(minutes, MINUTES_PER_HOUR.toString());\n }\n\n if (seconds.length && parseInt(seconds) > SECONDS_PER_MINUTE) {\n formattedValue = formattedValue.replace(seconds, SECONDS_PER_MINUTE.toString());\n }\n }\n\n return formattedValue;\n }\n\n /** Checks whether the input is invalid based on the native validation. */\n private isBadInput(): boolean {\n const validity = (<HTMLInputElement> this.elementRef.nativeElement).validity;\n\n return validity && validity.badInput;\n }\n\n private spaceKeyHandler(event: KeyboardEvent) {\n event.preventDefault();\n\n if (this.selectionStart === this.selectionEnd) {\n const value = this.getNewValue(event.key, this.selectionStart as number);\n const formattedValue = this.replaceSymbols(value);\n\n if (value !== formattedValue) {\n this.setViewValue(formattedValue);\n\n setTimeout(this.onInput);\n }\n } else if (this.selectionStart !== this.selectionEnd) {\n\n let cursorPos = this.selectionStart as number;\n\n const nextDividerPos: number = this.viewValue.indexOf(':', cursorPos);\n\n cursorPos = nextDividerPos ? nextDividerPos + 1 : 0;\n\n this.createSelectionOfTimeComponentInInput(cursorPos);\n }\n }\n\n private getNewValue(key: string, position: number) {\n return [this.viewValue.slice(0, position), key, this.viewValue.slice(position)].join('');\n }\n\n private verticalArrowKeyHandler(keyCode: number): void {\n if (!this.value) { return; }\n\n let changedTime;\n\n const newEditParams = this.getTimeEditMetrics(this.selectionStart as number);\n\n if (keyCode === UP_ARROW) {\n changedTime = this.incrementTime(this.value, newEditParams.modifiedTimePart);\n }\n\n if (keyCode === DOWN_ARROW) {\n changedTime = this.decrementTime(this.value, newEditParams.modifiedTimePart);\n }\n\n this.value = changedTime;\n\n this.selectionStart = newEditParams.cursorStartPosition;\n this.selectionEnd = newEditParams.cursorEndPosition;\n\n this.onChange(changedTime);\n this.stateChanges.next();\n }\n\n private horizontalArrowKeyHandler(keyCode: number): void {\n if (!this.value) { return; }\n\n let cursorPos = this.selectionStart as number;\n\n if (keyCode === LEFT_ARROW) {\n cursorPos = cursorPos === 0 ? this.viewValue.length : cursorPos - 1;\n } else if (keyCode === RIGHT_ARROW) {\n const nextDividerPos: number = this.viewValue.indexOf(':', cursorPos);\n\n cursorPos = nextDividerPos ? nextDividerPos + 1 : 0;\n }\n\n this.createSelectionOfTimeComponentInInput(cursorPos);\n }\n\n private createSelectionOfTimeComponentInInput(cursorPos: number): void {\n setTimeout(() => {\n const newEditParams = this.getTimeEditMetrics(cursorPos);\n\n this.selectionStart = newEditParams.cursorStartPosition;\n this.selectionEnd = newEditParams.cursorEndPosition;\n });\n }\n\n private incrementTime(dateVal: D, whatToIncrement: TimeParts = TimeParts.seconds): D {\n let hours = this.dateAdapter.getHours(dateVal);\n let minutes = this.dateAdapter.getMinutes(dateVal);\n let seconds = this.dateAdapter.getSeconds(dateVal);\n\n switch (whatToIncrement) {\n case TimeParts.hours:\n hours++;\n break;\n case TimeParts.minutes:\n minutes++;\n break;\n case TimeParts.seconds:\n seconds++;\n break;\n default:\n }\n\n if (seconds > SECONDS_PER_MINUTE) { seconds = 0; }\n\n if (minutes > MINUTES_PER_HOUR) { minutes = 0; }\n\n if (hours > HOURS_PER_DAY) { hours = 0; }\n\n return this.dateAdapter.createDateTime(\n this.dateAdapter.getYear(this.value),\n this.dateAdapter.getMonth(this.value),\n this.dateAdapter.getDate(this.value),\n hours,\n minutes,\n seconds,\n this.dateAdapter.getMilliseconds(this.value)\n );\n }\n\n private decrementTime(dateVal: D, whatToDecrement: TimeParts = TimeParts.seconds): D {\n let hours = this.dateAdapter.getHours(dateVal);\n let minutes = this.dateAdapter.getMinutes(dateVal);\n let seconds = this.dateAdapter.getSeconds(dateVal);\n\n switch (whatToDecrement) {\n case TimeParts.hours:\n hours--;\n break;\n case TimeParts.minutes:\n minutes--;\n break;\n case TimeParts.seconds:\n seconds--;\n break;\n default:\n }\n\n if (seconds < 0) { seconds = SECONDS_PER_MINUTE; }\n\n if (minutes < 0) { minutes = MINUTES_PER_HOUR; }\n\n if (hours < 0) { hours = HOURS_PER_DAY; }\n\n return this.dateAdapter.createDateTime(\n this.dateAdapter.getYear(this.value),\n this.dateAdapter.getMonth(this.value),\n this.dateAdapter.getDate(this.value),\n hours,\n minutes,\n seconds,\n this.dateAdapter.getMilliseconds(this.value)\n );\n }\n\n /**\n * @description Get params for arrow-keys (up/down) time valie edit.\n * @param cursorPosition Current cursor position in timeString\n */\n private getTimeEditMetrics(cursorPosition: number): {\n modifiedTimePart: TimeParts;\n cursorStartPosition: number;\n cursorEndPosition: number;\n } {\n const timeString: string = this.viewValue;\n let modifiedTimePart: TimeParts;\n let cursorStartPosition: number;\n let cursorEndPosition: number;\n\n const hoursIndex = 0;\n const minutesIndex = timeString.indexOf(':', hoursIndex + 1);\n const secondsIndex = minutesIndex !== -1 ? timeString.indexOf(':', minutesIndex + 1) : -1;\n\n if (secondsIndex !== -1 && cursorPosition > secondsIndex) {\n modifiedTimePart = TimeParts.seconds;\n cursorStartPosition = secondsIndex + 1;\n cursorEndPosition = timeString.length;\n } else if (minutesIndex !== -1 && cursorPosition > minutesIndex) {\n modifiedTimePart = TimeParts.minutes;\n cursorStartPosition = minutesIndex + 1;\n cursorEndPosition = secondsIndex > -1 ? secondsIndex : timeString.length;\n } else {\n modifiedTimePart = TimeParts.hours;\n cursorStartPosition = hoursIndex;\n cursorEndPosition = minutesIndex !== -1 ? minutesIndex : timeString.length;\n }\n\n return { modifiedTimePart, cursorStartPosition, cursorEndPosition };\n }\n\n /**\n * @description Create time string for displaying inside input element of UI\n */\n private getTimeStringFromDate(value: D | null, timeFormat: TimeFormats): string {\n if (!value || !this.dateAdapter.isValid(value)) { return ''; }\n\n return this.dateAdapter.format(value, timeFormat);\n }\n\n private getDateFromTimeString(timeString: string): D | null {\n if (!timeString) { return null; }\n\n const HMS = timeString.match(HOURS_MINUTES_SECONDS_REGEXP);\n const HM = timeString.match(HOURS_MINUTES_REGEXP);\n const H = timeString.match(HOURS_ONLY_REGEXP);\n const amPm = timeString.match(AM_PM_FORMAT_REGEXP);\n\n let hours: number = 0;\n let minutes: number = 0;\n let seconds: number = 0;\n\n // tslint:disable:no-magic-numbers\n if (amPm) {\n hours = Number(amPm[1]);\n minutes = Number(amPm[2]);\n\n if (/[p]/i.test(amPm[3]) || (/[a]/i.test(amPm[3]) && hours === 12)) {\n hours += 12;\n }\n } else if (HMS) {\n hours = Number(HMS[1]);\n minutes = Number(HMS[2]);\n seconds = Number(HMS[3]);\n } else if (HM) {\n hours = Number(HM[1]);\n minutes = Number(HM[2]);\n } else if (H) {\n hours = Number(H[1]);\n } else {\n return null;\n }\n // tslint:enable\n\n const resultDate = this.dateAdapter.createDateTime(\n this.dateAdapter.getYear(this.value),\n this.dateAdapter.getMonth(this.value),\n this.dateAdapter.getDate(this.value),\n hours,\n minutes || 0,\n seconds || 0,\n this.dateAdapter.getMilliseconds(this.value)\n );\n\n return this.getValidDateOrNull(resultDate);\n }\n\n private parseValidator: ValidatorFn = (): ValidationErrors | null => {\n return this.focused ||\n this.empty ||\n this.lastValueValid ? null : { mcTimepickerParse: { text: this.viewValue } };\n }\n\n private minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this.getValidDateOrNull(this.dateAdapter.deserialize(control.value));\n\n return (!this.min || !controlValue || this.compareTime(this.min, controlValue) <= 0) ?\n null :\n { mcTimepickerLowerThenMin: { min: this.min, actual: controlValue } };\n }\n\n private maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this.getValidDateOrNull(this.dateAdapter.deserialize(control.value));\n\n return (!this.max || !controlValue || this.compareTime(this.max, controlValue) >= 0) ?\n null :\n { mcTimepickerHigherThenMax: { max: this.max, actual: controlValue } };\n }\n\n private compareTime(first: D, second: D): number {\n const result = this.dateAdapter.getHours(first) - this.dateAdapter.getHours(second) ||\n this.dateAdapter.getMinutes(first) - this.dateAdapter.getMinutes(second);\n\n if (TimeFormats.HHmm === this.format) {\n return result;\n } else if (TimeFormats.HHmmss === this.format) {\n return result || this.dateAdapter.getSeconds(first) - this.dateAdapter.getSeconds(second);\n } else {\n throw Error(`Unknown format: ${this.format}`);\n }\n }\n\n private getValidDateOrNull(obj: any): D | null {\n return (this.dateAdapter.isDateInstance(obj) && this.dateAdapter.isValid(obj)) ? obj : null;\n }\n\n private setViewValue(value: string) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'value', value);\n }\n\n private updateView() {\n const formattedValue = this.getTimeStringFromDate(this.value, this.format);\n\n this.setViewValue(formattedValue);\n }\n\n private setControl(control: AbstractControl) {\n if (!this.control) {\n this.control = control;\n }\n }\n\n // tslint:disable-next-line:no-empty\n private validatorOnChange = () => {};\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { McTimepicker } from './timepicker.directive';\n\n\n@NgModule({\n imports: [\n CommonModule,\n A11yModule,\n PlatformModule,\n FormsModule\n ],\n declarations: [McTimepicker],\n exports: [McTimepicker]\n})\nexport class McTimepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"ptsecurity-mosaic-timepicker.js","sources":["../../../packages/mosaic/timepicker/timepicker.constants.ts","../../../packages/mosaic/timepicker/timepicker.directive.ts","../../../packages/mosaic/timepicker/timepicker.module.ts","../../../packages/mosaic/timepicker/ptsecurity-mosaic-timepicker.ts"],"sourcesContent":["// tslint:disable:naming-convention\nexport enum TimeParts {\n hours,\n minutes,\n seconds\n}\n\nexport enum TimeFormats {\n HHmmss = 'HH:mm:ss',\n HHmm = 'HH:mm'\n}\n\nexport const TIMEFORMAT_PLACEHOLDERS: { [timeFormat: string]: string } = {\n [TimeFormats.HHmmss]: 'чч:мм:сс',\n [TimeFormats.HHmm]: 'чч:мм'\n};\n\nexport const DEFAULT_TIME_FORMAT: TimeFormats = TimeFormats.HHmm;\n\nexport const HOURS_MINUTES_SECONDS_REGEXP = /^([0-1][0-9]|2[0-3]):?([0-5][0-9]):?([0-5][0-9])?$/;\nexport const HOURS_MINUTES_REGEXP = /^([0-1][0-9]|2[0-3]):?([0-5][0-9])?$/;\nexport const HOURS_ONLY_REGEXP = /^([0-1][0-9]|2[0-3]):?$/;\nexport const AM_PM_FORMAT_REGEXP = /^([0-1]?[0-9]):([0-5]?[0-9]) ([ap][m]?$)/i;\n\nexport const SECONDS_PER_MINUTE: number = 59;\nexport const MINUTES_PER_HOUR: number = 59;\nexport const HOURS_PER_DAY: number = 23;\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n Optional,\n Output,\n Renderer2\n} from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators\n} from '@angular/forms';\nimport { DateAdapter } from '@ptsecurity/cdk/datetime';\nimport {\n DOWN_ARROW,\n UP_ARROW,\n HOME,\n END,\n LEFT_ARROW,\n RIGHT_ARROW,\n PAGE_DOWN,\n PAGE_UP,\n SPACE,\n DELETE,\n BACKSPACE,\n hasModifierKey,\n isLetterKey,\n isVerticalMovement,\n isHorizontalMovement,\n TAB\n} from '@ptsecurity/cdk/keycodes';\nimport { validationTooltipHideDelay, validationTooltipShowDelay } from '@ptsecurity/mosaic/core';\nimport { McFormFieldControl } from '@ptsecurity/mosaic/form-field';\nimport { McWarningTooltipTrigger } from '@ptsecurity/mosaic/tooltip';\nimport { noop, Subject } from 'rxjs';\n\nimport {\n DEFAULT_TIME_FORMAT,\n HOURS_PER_DAY,\n HOURS_MINUTES_REGEXP,\n HOURS_MINUTES_SECONDS_REGEXP,\n HOURS_ONLY_REGEXP,\n MINUTES_PER_HOUR,\n SECONDS_PER_MINUTE,\n TIMEFORMAT_PLACEHOLDERS,\n TimeFormats,\n TimeParts,\n AM_PM_FORMAT_REGEXP\n} from './timepicker.constants';\n\n\n/** @docs-private */\nexport const MC_TIMEPICKER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => McTimepicker),\n multi: true\n};\n\n/** @docs-private */\nexport const MC_TIMEPICKER_VALIDATORS: any = {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => McTimepicker),\n multi: true\n};\n\n\nlet uniqueComponentIdSuffix: number = 0;\n\nconst shortFormatSize: number = 5;\nconst fullFormatSize: number = 8;\n\n\n@Directive({\n selector: 'input[mcTimepicker]',\n exportAs: 'mcTimepicker',\n host: {\n class: 'mc-input mc-timepicker',\n // Native input properties that are overwritten by Angular inputs need to be synced with\n // the native input element. Otherwise property bindings for those don't work.\n '[attr.id]': 'id',\n '[attr.placeholder]': 'placeholder',\n '[attr.disabled]': 'disabled || null',\n '[attr.required]': 'required',\n '[attr.size]': 'getSize()',\n '[attr.autocomplete]': '\"off\"',\n\n '(blur)': 'onBlur()',\n '(focus)': 'focusChanged(true)',\n\n '(paste)': 'onPaste($event)',\n\n '(keydown)': 'onKeyDown($event)'\n },\n providers: [\n MC_TIMEPICKER_VALIDATORS,\n MC_TIMEPICKER_VALUE_ACCESSOR,\n { provide: McFormFieldControl, useExisting: McTimepicker }\n ]\n})\nexport class McTimepicker<D> implements McFormFieldControl<D>, ControlValueAccessor, Validator, OnDestroy {\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n readonly stateChanges: Subject<void> = new Subject<void>();\n\n readonly errorState: boolean;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n focused: boolean = false;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n controlType: string = 'timepicker';\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get placeholder(): string {\n return this._placeholder;\n }\n\n set placeholder(value: string) {\n this._placeholder = value;\n\n this.defaultPlaceholder = false;\n }\n\n private _placeholder = TIMEFORMAT_PLACEHOLDERS[DEFAULT_TIME_FORMAT];\n\n @Input()\n get disabled(): boolean {\n return this._disabled;\n }\n\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n\n // Browsers may not fire the blur event if the input is disabled too quickly.\n // Reset from here to ensure that the element doesn't become stuck.\n if (this.focused) {\n this.focused = false;\n }\n\n this.stateChanges.next();\n }\n\n private _disabled: boolean;\n\n @Input()\n get id(): string {\n return this._id;\n }\n\n set id(value: string) {\n this._id = value || this.uid;\n }\n\n private _id: string;\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n @Input()\n get required(): boolean {\n return this._required;\n }\n\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n }\n\n private _required: boolean;\n\n @Input()\n get format(): TimeFormats {\n return this._format;\n }\n\n set format(formatValue: TimeFormats) {\n this._format = Object\n .keys(TimeFormats)\n .map((timeFormatKey) => TimeFormats[timeFormatKey])\n .indexOf(formatValue) > -1 ? formatValue : DEFAULT_TIME_FORMAT;\n\n if (this.defaultPlaceholder) {\n this._placeholder = TIMEFORMAT_PLACEHOLDERS[this._format];\n }\n\n if (this.value) {\n this.updateView();\n }\n }\n\n private _format: TimeFormats = DEFAULT_TIME_FORMAT;\n\n @Input()\n get min(): D | null {\n return this._min;\n }\n\n set min(value: D | null) {\n this._min = this.getValidDateOrNull(this.dateAdapter.deserialize(value));\n this.validatorOnChange();\n }\n\n private _min: D | null = null;\n\n @Input()\n get max(): D | null {\n return this._max;\n }\n\n set max(value: D | null) {\n this._max = this.getValidDateOrNull(this.dateAdapter.deserialize(value));\n this.validatorOnChange();\n }\n\n private _max: D | null = null;\n\n @Input()\n get value(): D | null {\n return this._value;\n }\n\n set value(value: D | null) {\n const newValue = this.dateAdapter.deserialize(value);\n\n this.lastValueValid = !newValue || this.dateAdapter.isValid(newValue);\n\n this._value = this.getValidDateOrNull(newValue);\n\n this.updateView();\n }\n\n private _value: D | null;\n\n @Input()\n set mcValidationTooltip(tooltip: McWarningTooltipTrigger) {\n if (!tooltip) { return; }\n\n tooltip.enterDelay = validationTooltipShowDelay;\n tooltip.trigger = 'manual';\n\n tooltip.initListeners();\n\n this.incorrectInput.subscribe(() => {\n if (tooltip.isOpen) { return; }\n\n tooltip.show();\n\n setTimeout(() => tooltip.hide(), validationTooltipHideDelay);\n });\n }\n\n @Output() incorrectInput = new EventEmitter<void>();\n\n get hasSelection(): boolean {\n return this.selectionStart !== this.selectionEnd;\n }\n\n get isFullFormat(): boolean {\n return this.format === TimeFormats.HHmmss;\n }\n\n get isShortFormat(): boolean {\n return this.format === TimeFormats.HHmm;\n }\n\n get viewValue(): string {\n return this.elementRef.nativeElement.value;\n }\n\n get ngControl(): any {\n return this.control;\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n get empty(): boolean {\n return !this.viewValue && !this.isBadInput();\n }\n\n get selectionStart(): number | null {\n return this.elementRef.nativeElement.selectionStart;\n }\n\n set selectionStart(value: number | null) {\n this.elementRef.nativeElement.selectionStart = value;\n }\n\n get selectionEnd(): number | null {\n return this.elementRef.nativeElement.selectionEnd;\n }\n\n set selectionEnd(value: number | null) {\n this.elementRef.nativeElement.selectionEnd = value;\n }\n\n private readonly uid = `mc-timepicker-${uniqueComponentIdSuffix++}`;\n\n private readonly validator: ValidatorFn | null;\n\n private lastValueValid = false;\n\n private control: AbstractControl;\n\n private defaultPlaceholder = true;\n\n private onChange: (value: any) => void;\n private onTouched: () => void;\n\n constructor(\n private elementRef: ElementRef,\n private renderer: Renderer2,\n @Optional() private dateAdapter: DateAdapter<any>\n ) {\n if (!this.dateAdapter) {\n throw Error(`McTimepicker: No provider found for DateAdapter. You must import one of the existing ` +\n `modules at your application root or provide a custom implementation or use exists ones.`);\n }\n\n this.validator = Validators.compose([this.parseValidator, this.minValidator, this.maxValidator]);\n\n this.onChange = noop;\n\n // Force setter to be called in case id was not specified.\n this.id = this.id;\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n getSize(): number {\n return this.isFullFormat ? fullFormatSize : shortFormatSize;\n }\n\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n\n focusChanged(isFocused: boolean): void {\n if (isFocused !== this.focused) {\n this.focused = isFocused;\n this.onTouched();\n this.stateChanges.next();\n }\n }\n\n onBlur() {\n this.focusChanged(false);\n\n this.onInput();\n }\n\n onPaste($event) {\n $event.preventDefault();\n\n const value = this.formatUserPaste($event.clipboardData.getData('text'));\n\n const newTimeObj = this.getDateFromTimeString(value);\n\n if (!newTimeObj) { return; }\n\n this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.format));\n\n this.value = newTimeObj;\n this.onChange(newTimeObj);\n this.stateChanges.next();\n }\n\n onInput = () => {\n const formattedValue = this.formatUserInput(this.viewValue);\n\n const newTimeObj = this.getDateFromTimeString(formattedValue);\n this.lastValueValid = !!newTimeObj;\n\n if (!newTimeObj) {\n this.onChange(null);\n\n return;\n }\n\n const selectionStart = this.selectionStart;\n const selectionEnd = this.selectionEnd;\n\n this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.format));\n\n this.selectionStart = selectionStart;\n this.selectionEnd = selectionEnd;\n\n this.createSelectionOfTimeComponentInInput((selectionStart as number) + 1);\n\n this.value = newTimeObj;\n this.onChange(newTimeObj);\n this.stateChanges.next();\n }\n\n /**\n * Implemented as part of McFormFieldControl.\n * @docs-private\n */\n onContainerClick() {\n this.focus();\n }\n\n onKeyDown(event: KeyboardEvent): void {\n // tslint:disable-next-line: deprecation\n const keyCode = event.keyCode;\n\n if (isLetterKey(event) && !event.ctrlKey && !event.metaKey) {\n event.preventDefault();\n\n this.incorrectInput.emit();\n } else if (\n (hasModifierKey(event) && (isVerticalMovement(event) || isHorizontalMovement(event))) ||\n event.ctrlKey || event.metaKey ||\n [DELETE, BACKSPACE, TAB].includes(keyCode)\n ) {\n noop();\n } else if (keyCode === SPACE) {\n this.spaceKeyHandler(event);\n } else if ([HOME, PAGE_UP].includes(keyCode)) {\n this.createSelectionOfTimeComponentInInput(0);\n } else if ([END, PAGE_DOWN].includes(keyCode)) {\n this.createSelectionOfTimeComponentInInput(this.viewValue.length);\n } else if ([UP_ARROW, DOWN_ARROW].includes(keyCode)) {\n event.preventDefault();\n\n this.verticalArrowKeyHandler(keyCode);\n } else if ([LEFT_ARROW, RIGHT_ARROW].includes(keyCode)) {\n this.horizontalArrowKeyHandler(keyCode);\n } else if (/^\\D$/.test(event.key)) {\n event.preventDefault();\n\n const newValue = this.getNewValue(event.key, this.selectionStart as number);\n const formattedValue = this.replaceSymbols(newValue);\n\n if (newValue !== formattedValue) {\n this.setViewValue(formattedValue);\n\n setTimeout(this.onInput);\n } else {\n this.incorrectInput.emit();\n }\n } else {\n setTimeout(this.onInput);\n }\n }\n\n validate(control: AbstractControl): ValidationErrors | null {\n this.setControl(control);\n\n return this.validator ? this.validator(control) : null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorOnChange = fn;\n }\n\n writeValue(value: D | null): void {\n this.value = value;\n }\n\n registerOnChange(fn: (value: D) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n private formatUserPaste(value: string) {\n if (value.match(AM_PM_FORMAT_REGEXP)) { return value; }\n\n const match: RegExpMatchArray | null = value.match(\n /^(\\D+)?(?<hours>\\d+)?(\\D+)?(\\D+)?(?<minutes>\\d+)?(\\D+)?(\\D+)?(?<seconds>\\d+)?(\\D+)?$/\n );\n\n if (!match?.groups?.hours) {\n this.setViewValue(value);\n\n return value;\n }\n\n return this.replaceNumbers(Object.values(match.groups)\n // tslint:disable-next-line:no-magic-numbers\n .map((group) => (group || '').padStart(2, '0'))\n .join(':')\n );\n }\n\n private formatUserInput(value: string): string {\n return this.replaceNumbers(this.replaceSymbols(value));\n }\n\n private replaceSymbols(value: string): string {\n let formattedValue: string = value;\n\n const match: RegExpMatchArray | null = value.match(/^(\\d\\d:){0,2}(?<number>[0-9])(?<symbol>\\W)(:\\d\\d){0,2}$/);\n\n if (match?.groups) {\n const { number, symbol } = match.groups;\n\n formattedValue = value.replace(number + symbol, `0${number}`);\n }\n\n return formattedValue;\n }\n\n private replaceNumbers(value: string): string {\n let formattedValue: string = value;\n\n const match: RegExpMatchArray | null = value.match(/^(?<hours>\\d{0,4}):?(?<minutes>\\d{0,4}):?(?<seconds>\\d{0,4})$/);\n\n if (match?.groups) {\n const { hours, minutes, seconds } = match.groups;\n\n if (hours.length && parseInt(hours) > HOURS_PER_DAY) {\n formattedValue = formattedValue.replace(hours, HOURS_PER_DAY.toString());\n }\n\n if (minutes.length && parseInt(minutes) > MINUTES_PER_HOUR) {\n formattedValue = formattedValue.replace(minutes, MINUTES_PER_HOUR.toString());\n }\n\n if (seconds.length && parseInt(seconds) > SECONDS_PER_MINUTE) {\n formattedValue = formattedValue.replace(seconds, SECONDS_PER_MINUTE.toString());\n }\n }\n\n return formattedValue;\n }\n\n /** Checks whether the input is invalid based on the native validation. */\n private isBadInput(): boolean {\n const validity = (<HTMLInputElement> this.elementRef.nativeElement).validity;\n\n return validity && validity.badInput;\n }\n\n private spaceKeyHandler(event: KeyboardEvent) {\n event.preventDefault();\n\n if (this.selectionStart === this.selectionEnd) {\n const value = this.getNewValue(event.key, this.selectionStart as number);\n const formattedValue = this.replaceSymbols(value);\n\n if (value !== formattedValue) {\n this.setViewValue(formattedValue);\n\n setTimeout(this.onInput);\n }\n } else if (this.selectionStart !== this.selectionEnd) {\n\n let cursorPos = this.selectionStart as number;\n\n const nextDividerPos: number = this.viewValue.indexOf(':', cursorPos);\n\n cursorPos = nextDividerPos ? nextDividerPos + 1 : 0;\n\n this.createSelectionOfTimeComponentInInput(cursorPos);\n }\n }\n\n private getNewValue(key: string, position: number) {\n return [this.viewValue.slice(0, position), key, this.viewValue.slice(position)].join('');\n }\n\n private verticalArrowKeyHandler(keyCode: number): void {\n if (!this.value) { return; }\n\n let changedTime;\n\n const newEditParams = this.getTimeEditMetrics(this.selectionStart as number);\n\n if (keyCode === UP_ARROW) {\n changedTime = this.incrementTime(this.value, newEditParams.modifiedTimePart);\n }\n\n if (keyCode === DOWN_ARROW) {\n changedTime = this.decrementTime(this.value, newEditParams.modifiedTimePart);\n }\n\n this.value = changedTime;\n\n this.selectionStart = newEditParams.cursorStartPosition;\n this.selectionEnd = newEditParams.cursorEndPosition;\n\n this.onChange(changedTime);\n this.stateChanges.next();\n }\n\n private horizontalArrowKeyHandler(keyCode: number): void {\n if (!this.value) { return; }\n\n let cursorPos = this.selectionStart as number;\n\n if (keyCode === LEFT_ARROW) {\n cursorPos = cursorPos === 0 ? this.viewValue.length : cursorPos - 1;\n } else if (keyCode === RIGHT_ARROW) {\n const nextDividerPos: number = this.viewValue.indexOf(':', cursorPos);\n\n cursorPos = nextDividerPos ? nextDividerPos + 1 : 0;\n }\n\n this.createSelectionOfTimeComponentInInput(cursorPos);\n }\n\n private createSelectionOfTimeComponentInInput(cursorPos: number): void {\n setTimeout(() => {\n const newEditParams = this.getTimeEditMetrics(cursorPos);\n\n this.selectionStart = newEditParams.cursorStartPosition;\n this.selectionEnd = newEditParams.cursorEndPosition;\n });\n }\n\n private incrementTime(dateVal: D, whatToIncrement: TimeParts = TimeParts.seconds): D {\n let hours = this.dateAdapter.getHours(dateVal);\n let minutes = this.dateAdapter.getMinutes(dateVal);\n let seconds = this.dateAdapter.getSeconds(dateVal);\n\n switch (whatToIncrement) {\n case TimeParts.hours:\n hours++;\n break;\n case TimeParts.minutes:\n minutes++;\n break;\n case TimeParts.seconds:\n seconds++;\n break;\n default:\n }\n\n if (seconds > SECONDS_PER_MINUTE) { seconds = 0; }\n\n if (minutes > MINUTES_PER_HOUR) { minutes = 0; }\n\n if (hours > HOURS_PER_DAY) { hours = 0; }\n\n return this.dateAdapter.createDateTime(\n this.dateAdapter.getYear(this.value),\n this.dateAdapter.getMonth(this.value),\n this.dateAdapter.getDate(this.value),\n hours,\n minutes,\n seconds,\n this.dateAdapter.getMilliseconds(this.value)\n );\n }\n\n private decrementTime(dateVal: D, whatToDecrement: TimeParts = TimeParts.seconds): D {\n let hours = this.dateAdapter.getHours(dateVal);\n let minutes = this.dateAdapter.getMinutes(dateVal);\n let seconds = this.dateAdapter.getSeconds(dateVal);\n\n switch (whatToDecrement) {\n case TimeParts.hours:\n hours--;\n break;\n case TimeParts.minutes:\n minutes--;\n break;\n case TimeParts.seconds:\n seconds--;\n break;\n default:\n }\n\n if (seconds < 0) { seconds = SECONDS_PER_MINUTE; }\n\n if (minutes < 0) { minutes = MINUTES_PER_HOUR; }\n\n if (hours < 0) { hours = HOURS_PER_DAY; }\n\n return this.dateAdapter.createDateTime(\n this.dateAdapter.getYear(this.value),\n this.dateAdapter.getMonth(this.value),\n this.dateAdapter.getDate(this.value),\n hours,\n minutes,\n seconds,\n this.dateAdapter.getMilliseconds(this.value)\n );\n }\n\n /**\n * @description Get params for arrow-keys (up/down) time valie edit.\n * @param cursorPosition Current cursor position in timeString\n */\n private getTimeEditMetrics(cursorPosition: number): {\n modifiedTimePart: TimeParts;\n cursorStartPosition: number;\n cursorEndPosition: number;\n } {\n const timeString: string = this.viewValue;\n let modifiedTimePart: TimeParts;\n let cursorStartPosition: number;\n let cursorEndPosition: number;\n\n const hoursIndex = 0;\n const minutesIndex = timeString.indexOf(':', hoursIndex + 1);\n const secondsIndex = minutesIndex !== -1 ? timeString.indexOf(':', minutesIndex + 1) : -1;\n\n if (secondsIndex !== -1 && cursorPosition > secondsIndex) {\n modifiedTimePart = TimeParts.seconds;\n cursorStartPosition = secondsIndex + 1;\n cursorEndPosition = timeString.length;\n } else if (minutesIndex !== -1 && cursorPosition > minutesIndex) {\n modifiedTimePart = TimeParts.minutes;\n cursorStartPosition = minutesIndex + 1;\n cursorEndPosition = secondsIndex > -1 ? secondsIndex : timeString.length;\n } else {\n modifiedTimePart = TimeParts.hours;\n cursorStartPosition = hoursIndex;\n cursorEndPosition = minutesIndex !== -1 ? minutesIndex : timeString.length;\n }\n\n return { modifiedTimePart, cursorStartPosition, cursorEndPosition };\n }\n\n /**\n * @description Create time string for displaying inside input element of UI\n */\n private getTimeStringFromDate(value: D | null, timeFormat: TimeFormats): string {\n if (!value || !this.dateAdapter.isValid(value)) { return ''; }\n\n return this.dateAdapter.format(value, timeFormat);\n }\n\n private getDateFromTimeString(timeString: string): D | null {\n if (!timeString) { return null; }\n\n const HMS = timeString.match(HOURS_MINUTES_SECONDS_REGEXP);\n const HM = timeString.match(HOURS_MINUTES_REGEXP);\n const H = timeString.match(HOURS_ONLY_REGEXP);\n const amPm = timeString.match(AM_PM_FORMAT_REGEXP);\n\n let hours: number = 0;\n let minutes: number = 0;\n let seconds: number = 0;\n\n // tslint:disable:no-magic-numbers\n if (amPm) {\n hours = Number(amPm[1]);\n minutes = Number(amPm[2]);\n\n if (/[p]/i.test(amPm[3]) || (/[a]/i.test(amPm[3]) && hours === 12)) {\n hours += 12;\n }\n } else if (HMS) {\n hours = Number(HMS[1]);\n minutes = Number(HMS[2]);\n seconds = Number(HMS[3]);\n } else if (HM) {\n hours = Number(HM[1]);\n minutes = Number(HM[2]);\n } else if (H) {\n hours = Number(H[1]);\n } else {\n return null;\n }\n // tslint:enable\n const date = this.value || this.dateAdapter.today();\n\n const resultDate = this.dateAdapter.createDateTime(\n this.dateAdapter.getYear(date),\n this.dateAdapter.getMonth(date),\n this.dateAdapter.getDate(date),\n hours,\n minutes || 0,\n seconds || 0,\n this.dateAdapter.getMilliseconds(date)\n );\n\n return this.getValidDateOrNull(resultDate);\n }\n\n private parseValidator: ValidatorFn = (): ValidationErrors | null => {\n return this.focused ||\n this.empty ||\n this.lastValueValid ? null : { mcTimepickerParse: { text: this.viewValue } };\n }\n\n private minValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this.getValidDateOrNull(this.dateAdapter.deserialize(control.value));\n\n return (!this.min || !controlValue || this.compareTime(this.min, controlValue) <= 0) ?\n null :\n { mcTimepickerLowerThenMin: { min: this.min, actual: controlValue } };\n }\n\n private maxValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n const controlValue = this.getValidDateOrNull(this.dateAdapter.deserialize(control.value));\n\n return (!this.max || !controlValue || this.compareTime(this.max, controlValue) >= 0) ?\n null :\n { mcTimepickerHigherThenMax: { max: this.max, actual: controlValue } };\n }\n\n private compareTime(first: D, second: D): number {\n const result = this.dateAdapter.getHours(first) - this.dateAdapter.getHours(second) ||\n this.dateAdapter.getMinutes(first) - this.dateAdapter.getMinutes(second);\n\n if (TimeFormats.HHmm === this.format) {\n return result;\n } else if (TimeFormats.HHmmss === this.format) {\n return result || this.dateAdapter.getSeconds(first) - this.dateAdapter.getSeconds(second);\n } else {\n throw Error(`Unknown format: ${this.format}`);\n }\n }\n\n private getValidDateOrNull(obj: any): D | null {\n return (this.dateAdapter.isDateInstance(obj) && this.dateAdapter.isValid(obj)) ? obj : null;\n }\n\n private setViewValue(value: string) {\n this.renderer.setProperty(this.elementRef.nativeElement, 'value', value);\n }\n\n private updateView() {\n const formattedValue = this.getTimeStringFromDate(this.value, this.format);\n\n this.setViewValue(formattedValue);\n }\n\n private setControl(control: AbstractControl) {\n if (!this.control) {\n this.control = control;\n }\n }\n\n // tslint:disable-next-line:no-empty\n private validatorOnChange = () => {};\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { PlatformModule } from '@angular/cdk/platform';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { McTimepicker } from './timepicker.directive';\n\n\n@NgModule({\n imports: [\n CommonModule,\n A11yModule,\n PlatformModule,\n FormsModule\n ],\n declarations: [McTimepicker],\n exports: [McTimepicker]\n})\nexport class McTimepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
@@ -106,8 +106,8 @@ class McToggleComponent extends McToggleMixinBase {
|
|
106
106
|
this.change.emit(event);
|
107
107
|
}
|
108
108
|
}
|
109
|
-
/** @nocollapse */ McToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
110
|
-
/** @nocollapse */ McToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.
|
109
|
+
/** @nocollapse */ McToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McToggleComponent, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
110
|
+
/** @nocollapse */ McToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: McToggleComponent, selector: "mc-toggle", inputs: { color: "color", tabIndex: "tabIndex", labelPosition: "labelPosition", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], id: "id", name: "name", value: "value", disabled: "disabled", checked: "checked" }, outputs: { change: "change" }, host: { properties: { "id": "id", "attr.id": "id", "class.mc-disabled": "disabled", "class.mc-active": "checked" }, classAttribute: "mc-toggle" }, providers: [{
|
111
111
|
provide: NG_VALUE_ACCESSOR, useExisting: forwardRef((() => McToggleComponent)), multi: true
|
112
112
|
}], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true }], exportAs: ["mcToggle"], usesInheritance: true, ngImport: i0, template: "<label [attr.for]=\"inputId\" class=\"mc-toggle-layout\">\n <div class=\"mc-toggle__container\" [class.left]=\"labelPosition === 'left'\">\n <input #input\n type=\"checkbox\"\n role=\"switch\"\n class=\"mc-toggle-input cdk-visually-hidden\"\n [id]=\"inputId\"\n [checked]=\"checked\"\n [attr.value]=\"value\"\n [disabled]=\"disabled\"\n [attr.name]=\"name\"\n [tabIndex]=\"tabIndex\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-checked]=\"getAriaChecked()\"\n (click)=\"onInputClick($event)\"\n (change)=\"onChangeEvent($event)\"/>\n <div class=\"mc-toggle-bar-container\">\n <div class=\"mc-toggle__overlay\"></div>\n <div class=\"mc-toggle-bar\">\n <div class=\"mc-toggle__circle\" [@switch]=\"checked\"></div>\n </div>\n </div>\n <div class=\"mc-toggle__content\"\n [class.left]=\"labelPosition === 'left'\"\n [class.right]=\"labelPosition === 'right'\">\n <span class=\"mc-toggle-label\" (cdkObserveContent)=\"onLabelTextChange()\">\n <ng-content></ng-content>\n </span>\n </div>\n </div>\n</label>\n", styles: [".mc-toggle{display:inline-block}.mc-toggle .mc-toggle-layout{cursor:inherit;align-items:baseline;vertical-align:middle;display:inline-flex;white-space:nowrap}.mc-toggle .mc-toggle-bar{position:relative;border-width:1px;border-style:solid}.mc-toggle .mc-toggle-bar.mc-toggle-label-position-left{order:1}.mc-toggle .mc-toggle-bar-container{position:relative}.mc-toggle__container{display:flex;align-items:center;position:relative}.mc-toggle__container.left{flex-direction:row-reverse}.mc-toggle__content.left{margin-right:8px;margin-right:var(--mc-toggle-size-label-margin, 8px)}.mc-toggle__content.right{margin-left:8px;margin-left:var(--mc-toggle-size-label-margin, 8px)}.mc-toggle__circle{position:absolute;border-width:1px;border-style:solid;border-radius:100%;margin-top:-1px;margin-left:-1px;transform:translate(-1px)}.mc-toggle__overlay{position:absolute;top:0;left:0;z-index:1}.mc-toggle:not(.mc-toggle_small) .mc-toggle-bar{height:16px;height:var(--mc-toggle-size-height, 16px);width:28px;width:var(--mc-toggle-size-width, 28px);border-radius:9px;border-radius:var(--mc-toggle-size-border-radius, 9px)}.mc-toggle:not(.mc-toggle_small) .mc-toggle__overlay{border-radius:9px;border-radius:var(--mc-toggle-size-border-radius, 9px);height:16px;height:var(--mc-toggle-size-height, 16px);width:28px;width:var(--mc-toggle-size-width, 28px)}.mc-toggle:not(.mc-toggle_small) .mc-toggle__circle{height:16px;height:var(--mc-toggle-size-height, 16px);width:16px;width:var(--mc-toggle-size-height, 16px)}.mc-toggle.mc-toggle_small .mc-toggle-bar{height:14px;height:var(--mc-toggle-small-size-height, 14px);width:24px;width:var(--mc-toggle-small-size-width, 24px);border-radius:8px;border-radius:var(--mc-toggle-small-size-border-radius, 8px)}.mc-toggle.mc-toggle_small .mc-toggle__overlay{border-radius:8px;border-radius:var(--mc-toggle-small-size-border-radius, 8px);height:14px;height:var(--mc-toggle-small-size-height, 14px);width:24px;width:var(--mc-toggle-small-size-width, 24px)}.mc-toggle.mc-toggle_small .mc-toggle__circle{height:14px;height:var(--mc-toggle-small-size-height, 14px);width:14px;width:var(--mc-toggle-small-size-height, 14px)}.mc-toggle:not(.mc-disabled){cursor:pointer}\n"], animations: [
|
113
113
|
trigger('switch', [
|
@@ -116,7 +116,7 @@ class McToggleComponent extends McToggleMixinBase {
|
|
116
116
|
transition('true <=> false', animate('150ms'))
|
117
117
|
])
|
118
118
|
], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
119
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
119
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McToggleComponent, decorators: [{
|
120
120
|
type: Component,
|
121
121
|
args: [{
|
122
122
|
selector: 'mc-toggle',
|
@@ -171,10 +171,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
|
|
171
171
|
|
172
172
|
class McToggleModule {
|
173
173
|
}
|
174
|
-
/** @nocollapse */ McToggleModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
175
|
-
/** @nocollapse */ McToggleModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.
|
176
|
-
/** @nocollapse */ McToggleModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.
|
177
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
174
|
+
/** @nocollapse */ McToggleModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McToggleModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
175
|
+
/** @nocollapse */ McToggleModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McToggleModule, declarations: [McToggleComponent], imports: [CommonModule, A11yModule, McCommonModule], exports: [McToggleComponent] });
|
176
|
+
/** @nocollapse */ McToggleModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McToggleModule, imports: [[CommonModule, A11yModule, McCommonModule]] });
|
177
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: McToggleModule, decorators: [{
|
178
178
|
type: NgModule,
|
179
179
|
args: [{
|
180
180
|
imports: [CommonModule, A11yModule, McCommonModule],
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ptsecurity-mosaic-toggle.js","sources":["../../../packages/mosaic/toggle/toggle.component.ts","../../../packages/mosaic/toggle/toggle.component.html","../../../packages/mosaic/toggle/toggle.module.ts","../../../packages/mosaic/toggle/ptsecurity-mosaic-toggle.ts"],"sourcesContent":["import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n ThemePalette,\n CanColor, CanColorCtor,\n CanDisable, CanDisableCtor,\n HasTabIndex, HasTabIndexCtor,\n mixinColor,\n mixinDisabled,\n mixinTabIndex\n} from '@ptsecurity/mosaic/core';\n\n\nlet nextUniqueId = 0;\n\ntype ToggleLabelPositionType = 'left' | 'right';\n\nexport class McToggleBase {\n // tslint:disable-next-line: naming-convention\n constructor(public _elementRef: ElementRef) {}\n}\n\n// tslint:disable-next-line: naming-convention\nexport const McToggleMixinBase:\n HasTabIndexCtor &\n CanDisableCtor &\n CanColorCtor &\n typeof McToggleBase = mixinTabIndex(mixinColor(mixinDisabled(McToggleBase), ThemePalette.Primary));\n\nexport class McToggleChange {\n source: McToggleComponent;\n checked: boolean;\n}\n\n@Component({\n selector: 'mc-toggle',\n exportAs: 'mcToggle',\n templateUrl: './toggle.component.html',\n styleUrls: ['./toggle.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n inputs: ['color', 'tabIndex'],\n host: {\n class: 'mc-toggle',\n '[id]': 'id',\n '[attr.id]': 'id',\n '[class.mc-disabled]': 'disabled',\n '[class.mc-active]': 'checked'\n },\n animations: [\n trigger('switch', [\n state('true' , style({ left: '50%' })),\n state('false', style({ left: '1px' })),\n transition('true <=> false', animate('150ms'))\n ])\n ],\n providers: [{\n provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => McToggleComponent), multi: true\n }]\n})\nexport class McToggleComponent extends McToggleMixinBase\n implements ControlValueAccessor, CanColor, CanDisable, HasTabIndex {\n\n @ViewChild('input', { static: false }) inputElement: ElementRef;\n\n @Input() labelPosition: ToggleLabelPositionType = 'right';\n\n @Input('aria-label') ariaLabel: string = '';\n @Input('aria-labelledby') ariaLabelledby: string | null = null;\n\n @Input() id: string;\n\n get inputId(): string {\n return `${this.id || this.uniqueId}-input`;\n }\n\n @Input() name: string | null = null;\n\n @Input() value: string;\n\n @Input()\n get disabled() {\n return this._disabled;\n }\n\n set disabled(value: any) {\n if (value !== this._disabled) {\n this._disabled = value;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n private _disabled: boolean = false;\n\n get checked() {\n return this._checked;\n }\n\n @Input()\n set checked(value: boolean) {\n if (value !== this._checked) {\n this._checked = value;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n private _checked: boolean = false;\n\n @Output() readonly change: EventEmitter<McToggleChange> = new EventEmitter<McToggleChange>();\n\n private uniqueId: string = `mc-toggle-${++nextUniqueId}`;\n\n constructor(\n // tslint:disable-next-line:naming-convention\n public _elementRef: ElementRef,\n private _focusMonitor: FocusMonitor,\n private _changeDetectorRef: ChangeDetectorRef\n ) {\n super(_elementRef);\n\n this.id = this.uniqueId;\n\n this._focusMonitor.monitor(this._elementRef.nativeElement, true);\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n\n focus(): void {\n this._focusMonitor.focusVia(this.inputElement.nativeElement, 'keyboard');\n }\n\n getAriaChecked(): boolean {\n return this.checked;\n }\n\n onChangeEvent(event: Event) {\n event.stopPropagation();\n\n this.updateModelValue();\n this.emitChangeEvent();\n }\n\n onLabelTextChange() {\n this._changeDetectorRef.markForCheck();\n }\n\n onInputClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n writeValue(value: any) {\n this.checked = !!value;\n }\n\n registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n // tslint:disable-next-line:no-empty\n private onTouchedCallback = () => {};\n\n // tslint:disable-next-line:no-empty\n private onChangeCallback = (_: any) => {};\n\n private updateModelValue() {\n this._checked = !this.checked;\n this.onTouchedCallback();\n }\n\n private emitChangeEvent() {\n const event = new McToggleChange();\n event.source = this;\n event.checked = this.checked;\n\n this.onChangeCallback(this.checked);\n this.change.emit(event);\n }\n}\n","<label [attr.for]=\"inputId\" class=\"mc-toggle-layout\">\n <div class=\"mc-toggle__container\" [class.left]=\"labelPosition === 'left'\">\n <input #input\n type=\"checkbox\"\n role=\"switch\"\n class=\"mc-toggle-input cdk-visually-hidden\"\n [id]=\"inputId\"\n [checked]=\"checked\"\n [attr.value]=\"value\"\n [disabled]=\"disabled\"\n [attr.name]=\"name\"\n [tabIndex]=\"tabIndex\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-checked]=\"getAriaChecked()\"\n (click)=\"onInputClick($event)\"\n (change)=\"onChangeEvent($event)\"/>\n <div class=\"mc-toggle-bar-container\">\n <div class=\"mc-toggle__overlay\"></div>\n <div class=\"mc-toggle-bar\">\n <div class=\"mc-toggle__circle\" [@switch]=\"checked\"></div>\n </div>\n </div>\n <div class=\"mc-toggle__content\"\n [class.left]=\"labelPosition === 'left'\"\n [class.right]=\"labelPosition === 'right'\">\n <span class=\"mc-toggle-label\" (cdkObserveContent)=\"onLabelTextChange()\">\n <ng-content></ng-content>\n </span>\n </div>\n </div>\n</label>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { McCommonModule } from '@ptsecurity/mosaic/core';\n\nimport { McToggleComponent } from './toggle.component';\n\n\n@NgModule({\n imports: [CommonModule, A11yModule, McCommonModule],\n exports: [McToggleComponent],\n declarations: [McToggleComponent]\n})\nexport class McToggleModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"ptsecurity-mosaic-toggle.js","sources":["../../../packages/mosaic/toggle/toggle.component.ts","../../../packages/mosaic/toggle/toggle.component.html","../../../packages/mosaic/toggle/toggle.module.ts","../../../packages/mosaic/toggle/ptsecurity-mosaic-toggle.ts"],"sourcesContent":["import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { FocusMonitor } from '@angular/cdk/a11y';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n ThemePalette,\n CanColor, CanColorCtor,\n CanDisable, CanDisableCtor,\n HasTabIndex, HasTabIndexCtor,\n mixinColor,\n mixinDisabled,\n mixinTabIndex\n} from '@ptsecurity/mosaic/core';\n\n\nlet nextUniqueId = 0;\n\ntype ToggleLabelPositionType = 'left' | 'right';\n\nexport class McToggleBase {\n // tslint:disable-next-line: naming-convention\n constructor(public _elementRef: ElementRef) {}\n}\n\n// tslint:disable-next-line: naming-convention\nexport const McToggleMixinBase:\n HasTabIndexCtor &\n CanDisableCtor &\n CanColorCtor &\n typeof McToggleBase = mixinTabIndex(mixinColor(mixinDisabled(McToggleBase), ThemePalette.Primary));\n\nexport class McToggleChange {\n source: McToggleComponent;\n checked: boolean;\n}\n\n@Component({\n selector: 'mc-toggle',\n exportAs: 'mcToggle',\n templateUrl: './toggle.component.html',\n styleUrls: ['./toggle.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n inputs: ['color', 'tabIndex'],\n host: {\n class: 'mc-toggle',\n '[id]': 'id',\n '[attr.id]': 'id',\n '[class.mc-disabled]': 'disabled',\n '[class.mc-active]': 'checked'\n },\n animations: [\n trigger('switch', [\n state('true' , style({ left: '50%' })),\n state('false', style({ left: '1px' })),\n transition('true <=> false', animate('150ms'))\n ])\n ],\n providers: [{\n provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => McToggleComponent), multi: true\n }]\n})\nexport class McToggleComponent extends McToggleMixinBase\n implements ControlValueAccessor, CanColor, CanDisable, HasTabIndex {\n\n @ViewChild('input', { static: false }) inputElement: ElementRef;\n\n @Input() labelPosition: ToggleLabelPositionType = 'right';\n\n @Input('aria-label') ariaLabel: string = '';\n @Input('aria-labelledby') ariaLabelledby: string | null = null;\n\n @Input() id: string;\n\n get inputId(): string {\n return `${this.id || this.uniqueId}-input`;\n }\n\n @Input() name: string | null = null;\n\n @Input() value: string;\n\n @Input()\n get disabled() {\n return this._disabled;\n }\n\n set disabled(value: any) {\n if (value !== this._disabled) {\n this._disabled = value;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n private _disabled: boolean = false;\n\n get checked() {\n return this._checked;\n }\n\n @Input()\n set checked(value: boolean) {\n if (value !== this._checked) {\n this._checked = value;\n this._changeDetectorRef.markForCheck();\n }\n }\n\n private _checked: boolean = false;\n\n @Output() readonly change: EventEmitter<McToggleChange> = new EventEmitter<McToggleChange>();\n\n private uniqueId: string = `mc-toggle-${++nextUniqueId}`;\n\n constructor(\n // tslint:disable-next-line:naming-convention\n public _elementRef: ElementRef,\n private _focusMonitor: FocusMonitor,\n private _changeDetectorRef: ChangeDetectorRef\n ) {\n super(_elementRef);\n\n this.id = this.uniqueId;\n\n this._focusMonitor.monitor(this._elementRef.nativeElement, true);\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef.nativeElement);\n }\n\n focus(): void {\n this._focusMonitor.focusVia(this.inputElement.nativeElement, 'keyboard');\n }\n\n getAriaChecked(): boolean {\n return this.checked;\n }\n\n onChangeEvent(event: Event) {\n event.stopPropagation();\n\n this.updateModelValue();\n this.emitChangeEvent();\n }\n\n onLabelTextChange() {\n this._changeDetectorRef.markForCheck();\n }\n\n onInputClick(event: MouseEvent) {\n event.stopPropagation();\n }\n\n writeValue(value: any) {\n this.checked = !!value;\n }\n\n registerOnChange(fn: any) {\n this.onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any) {\n this.onTouchedCallback = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n // tslint:disable-next-line:no-empty\n private onTouchedCallback = () => {};\n\n // tslint:disable-next-line:no-empty\n private onChangeCallback = (_: any) => {};\n\n private updateModelValue() {\n this._checked = !this.checked;\n this.onTouchedCallback();\n }\n\n private emitChangeEvent() {\n const event = new McToggleChange();\n event.source = this;\n event.checked = this.checked;\n\n this.onChangeCallback(this.checked);\n this.change.emit(event);\n }\n}\n","<label [attr.for]=\"inputId\" class=\"mc-toggle-layout\">\n <div class=\"mc-toggle__container\" [class.left]=\"labelPosition === 'left'\">\n <input #input\n type=\"checkbox\"\n role=\"switch\"\n class=\"mc-toggle-input cdk-visually-hidden\"\n [id]=\"inputId\"\n [checked]=\"checked\"\n [attr.value]=\"value\"\n [disabled]=\"disabled\"\n [attr.name]=\"name\"\n [tabIndex]=\"tabIndex\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-checked]=\"getAriaChecked()\"\n (click)=\"onInputClick($event)\"\n (change)=\"onChangeEvent($event)\"/>\n <div class=\"mc-toggle-bar-container\">\n <div class=\"mc-toggle__overlay\"></div>\n <div class=\"mc-toggle-bar\">\n <div class=\"mc-toggle__circle\" [@switch]=\"checked\"></div>\n </div>\n </div>\n <div class=\"mc-toggle__content\"\n [class.left]=\"labelPosition === 'left'\"\n [class.right]=\"labelPosition === 'right'\">\n <span class=\"mc-toggle-label\" (cdkObserveContent)=\"onLabelTextChange()\">\n <ng-content></ng-content>\n </span>\n </div>\n </div>\n</label>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { McCommonModule } from '@ptsecurity/mosaic/core';\n\nimport { McToggleComponent } from './toggle.component';\n\n\n@NgModule({\n imports: [CommonModule, A11yModule, McCommonModule],\n exports: [McToggleComponent],\n declarations: [McToggleComponent]\n})\nexport class McToggleModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|