@koobiq/components 21.0.0 → 21.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/badge/_badge-theme.scss +31 -0
- package/breadcrumbs/breadcrumbs.scss +5 -1
- package/checkbox/_checkbox-theme.scss +0 -17
- package/checkbox/checkbox-tokens.scss +0 -4
- package/code-block/_code-block-theme.scss +7 -6
- package/code-block/code-block-tokens.scss +8 -4
- package/code-block/code-block.scss +54 -32
- package/content-panel/content-panel-header.scss +2 -3
- package/content-panel/content-panel.scss +3 -0
- package/core/selection/pseudo-checkbox/pseudo-checkbox-tokens.scss +0 -2
- package/fesm2022/koobiq-components-accordion.mjs +4 -4
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +10 -2
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-app-switcher.mjs +1 -1
- package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
- package/fesm2022/koobiq-components-badge.mjs +2 -2
- package/fesm2022/koobiq-components-badge.mjs.map +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs +2 -2
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-checkbox.mjs +18 -8
- package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
- package/fesm2022/koobiq-components-clamped-text.mjs +78 -10
- package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +106 -394
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-content-panel.mjs +4 -4
- package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +300 -37
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +151 -60
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-divider.mjs +3 -3
- package/fesm2022/koobiq-components-divider.mjs.map +1 -1
- package/fesm2022/koobiq-components-dropdown.mjs +3 -3
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-file-upload.mjs +17 -8
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +124 -41
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-flag.mjs +3 -3
- package/fesm2022/koobiq-components-flag.mjs.map +1 -1
- package/fesm2022/koobiq-components-form-field.mjs +90 -27
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +38 -17
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-inline-edit.mjs +19 -2
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-input.mjs +76 -17
- package/fesm2022/koobiq-components-input.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +1 -1
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +3 -3
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +86 -25
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-notification-center.mjs +4 -4
- package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +116 -38
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +86 -7
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-radio.mjs +41 -19
- package/fesm2022/koobiq-components-radio.mjs.map +1 -1
- package/fesm2022/koobiq-components-search-expandable.mjs +29 -17
- package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +49 -12
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs +198 -186
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-splitter.mjs +49 -25
- package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
- package/fesm2022/koobiq-components-tabs.mjs +30 -11
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-tags.mjs +1 -1
- package/fesm2022/koobiq-components-tags.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +28 -11
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-time-range.mjs +2 -2
- package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
- package/fesm2022/koobiq-components-timepicker.mjs +71 -16
- package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +2 -2
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +2 -2
- package/fesm2022/koobiq-components-toast.mjs.map +1 -1
- package/fesm2022/koobiq-components-toggle.mjs +25 -9
- package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +90 -17
- package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
- package/fesm2022/koobiq-components-top-bar.mjs +27 -7
- package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +24 -9
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +288 -109
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/file-upload/_file-upload-theme.scss +0 -12
- package/file-upload/file-upload-tokens.scss +0 -1
- package/file-upload/file-upload.scss +0 -1
- package/filter-bar/_filter-bar-theme.scss +7 -8
- package/filter-bar/filter-bar.scss +0 -1
- package/filter-bar/pipes/base-pipe.scss +36 -2
- package/filter-bar/pipes/pipe-multi-tree-select.scss +27 -0
- package/form-field/_fieldset-theme.scss +2 -7
- package/form-field/_form-field-theme.scss +9 -22
- package/form-field/_hint-theme.scss +20 -0
- package/form-field/fieldset-tokens.scss +0 -1
- package/form-field/fieldset.scss +0 -3
- package/form-field/form-field-tokens.scss +1 -1
- package/form-field/form-field.scss +9 -0
- package/form-field/hint-tokens.scss +3 -0
- package/modal/modal.scss +2 -0
- package/navbar/_navbar-item_vertical.scss +48 -2
- package/navbar/_navbar-theme.scss +11 -3
- package/navbar/navbar-item.scss +17 -0
- package/navbar/navbar-tokens.scss +3 -0
- package/package.json +4 -4
- package/popover/popover.scss +1 -1
- package/radio/_radio-theme.scss +0 -30
- package/radio/radio-tokens.scss +0 -2
- package/schematics/collection.json +94 -89
- package/schematics/migrations/accordion-state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/actions-panel-overlay-container/{index.js → index.cjs} +5 -4
- package/schematics/migrations/alert-signals/{index.js → index.cjs} +14 -13
- package/schematics/migrations/angular-animations-removal/index.cjs +21 -0
- package/schematics/migrations/app-switcher-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/autocomplete-panel-width-auto/{index.js → index.cjs} +6 -5
- package/schematics/migrations/autocomplete-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/badge-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-state-and-styles/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-supported-colors/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-toggle-signals-and-aria/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-truncation/{index.js → index.cjs} +7 -6
- package/schematics/migrations/checkbox-signals/{index.js → index.cjs} +9 -8
- package/schematics/migrations/clamped-text-disclosure/{index.js → index.cjs} +5 -4
- package/schematics/migrations/code-block-highlight-js-core/README.md +53 -0
- package/schematics/migrations/code-block-highlight-js-core/data.cjs +64 -0
- package/schematics/migrations/code-block-highlight-js-core/index.cjs +319 -0
- package/schematics/migrations/code-block-highlight-js-core/schema.json +20 -0
- package/schematics/migrations/code-block-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/color-signals/index.cjs +20 -0
- package/schematics/migrations/core-mixins-removal/index.cjs +18 -0
- package/schematics/migrations/css-selectors/{index.js → index.cjs} +4 -3
- package/schematics/migrations/datepicker-signals/index.cjs +18 -0
- package/schematics/migrations/deprecated-icons/README.md +21 -5
- package/schematics/migrations/deprecated-icons/{index.js → index.cjs} +15 -28
- package/schematics/migrations/deprecated-icons/schema.json +1 -1
- package/schematics/migrations/design-tokens-v4/{index.js → index.cjs} +3 -2
- package/schematics/migrations/divider-signals-and-aria/{index.js → index.cjs} +5 -4
- package/schematics/migrations/dl-attribute-coercion/{index.js → index.cjs} +7 -6
- package/schematics/migrations/dl-standalone-names/{index.js → index.cjs} +11 -10
- package/schematics/migrations/dropdown-demote-overlay/{index.js → index.cjs} +7 -6
- package/schematics/migrations/dropdown-signals/index.cjs +20 -0
- package/schematics/migrations/empty-state-error-color/{index.js → index.cjs} +5 -4
- package/schematics/migrations/empty-state-size-attr/{index.js → index.cjs} +6 -5
- package/schematics/migrations/file-upload-cva-and-primitives/{index.js → index.cjs} +5 -4
- package/schematics/migrations/file-upload-deprecated-outputs/{index.js → index.cjs} +5 -4
- package/schematics/migrations/filter-bar-rename-action/{index.js → index.cjs} +5 -4
- package/schematics/migrations/filter-bar-signals/{index.js → index.cjs} +16 -15
- package/schematics/migrations/filter-bar-state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/flag-inner-html/{index.js → index.cjs} +5 -4
- package/schematics/migrations/form-field-signals/{index.js → index.cjs} +18 -17
- package/schematics/migrations/icon-semantics-and-api/{data.js → data.cjs} +4 -4
- package/schematics/migrations/icon-semantics-and-api/{index.js → index.cjs} +6 -5
- package/schematics/migrations/icons-replacement/README.md +16 -2
- package/schematics/migrations/icons-replacement/{index.js → index.cjs} +21 -18
- package/schematics/migrations/icons-replacement/schema.json +12 -3
- package/schematics/migrations/inline-edit-a11y-and-types/{index.js → index.cjs} +5 -4
- package/schematics/migrations/input-number-surface/{index.js → index.cjs} +5 -4
- package/schematics/migrations/input-signals/index.cjs +18 -0
- package/schematics/migrations/link-deprecated-path/{index.js → index.cjs} +4 -3
- package/schematics/migrations/link-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/list-signals/index.cjs +18 -0
- package/schematics/migrations/list-tree-multiple-input/{index.js → index.cjs} +7 -6
- package/schematics/migrations/loader-overlay-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/loader-overlay-size-attr/{index.js → index.cjs} +6 -5
- package/schematics/migrations/locale-configuration-providers/{index.js → index.cjs} +5 -4
- package/schematics/migrations/mandatory-peer-dependencies/{index.js → index.cjs} +3 -2
- package/schematics/migrations/markdown-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/modal-dialog-semantics/{index.js → index.cjs} +5 -4
- package/schematics/migrations/modal-signals/index.cjs +20 -0
- package/schematics/migrations/navbar-signals-and-aria/{index.js → index.cjs} +7 -6
- package/schematics/migrations/new-icons-pack/README.md +37 -25
- package/schematics/migrations/new-icons-pack/{index.js → index.cjs} +29 -38
- package/schematics/migrations/new-icons-pack/replacement.json +2 -14
- package/schematics/migrations/new-icons-pack/schema.json +3 -3
- package/schematics/migrations/notification-center-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/option-signals/index.cjs +20 -0
- package/schematics/migrations/popover-leave-delay/{index.js → index.cjs} +5 -4
- package/schematics/migrations/progress-bar-percentage-and-aria/{index.js → index.cjs} +5 -4
- package/schematics/migrations/progress-spinner-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/query-list-signals/index.cjs +18 -0
- package/schematics/migrations/radio-signals-and-aria/{index.js → index.cjs} +9 -8
- package/schematics/migrations/read-state-dwell-handlers/{index.js → index.cjs} +5 -4
- package/schematics/migrations/scrollbar-deprecated-path/{index.js → index.cjs} +4 -3
- package/schematics/migrations/select-signal-inputs/{index.js → index.cjs} +5 -4
- package/schematics/migrations/sidepanel-non-modal-behavior/{index.js → index.cjs} +5 -4
- package/schematics/migrations/signal-inputs-subclasses/index.cjs +18 -0
- package/schematics/migrations/split-button-optional-disabled/{index.js → index.cjs} +5 -4
- package/schematics/migrations/splitter-deprecated-path/{index.js → index.cjs} +4 -3
- package/schematics/migrations/state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/table-cell-content/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tabs-signals-and-aria/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tag-list-cleaner/{index.js → index.cjs} +7 -6
- package/schematics/migrations/tag-slots/{index.js → index.cjs} +6 -5
- package/schematics/migrations/tags-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/textarea-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/time-range-title-for/{index.js → index.cjs} +5 -4
- package/schematics/migrations/timepicker-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/timezone-grouping-utils/{index.js → index.cjs} +5 -4
- package/schematics/migrations/title-encapsulation/{index.js → index.cjs} +5 -4
- package/schematics/migrations/toast-stack-and-defaults/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tooltip-pointer-events-and-types/{index.js → index.cjs} +5 -4
- package/schematics/migrations/top-bar-container-selectors/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tree-select-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tree-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tree-state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/username-pipe-injection/{index.js → index.cjs} +5 -4
- package/schematics/migrations/v20-upgrade/{data.js → data.cjs} +7 -7
- package/schematics/migrations/v20-upgrade/index.cjs +19 -0
- package/schematics/migrations/v21-upgrade/{data.js → data.cjs} +22 -22
- package/schematics/migrations/v21-upgrade/{index.js → index.cjs} +11 -10
- package/schematics/migrations/zoneless-change-detection/index.cjs +21 -0
- package/schematics/migrations.json +87 -82
- package/schematics/ng-add/{index.js → index.cjs} +15 -289
- package/schematics/utils/{angular-parsing.js → angular-parsing.cjs} +2 -2
- package/schematics/utils/custom-data.cjs +64 -0
- package/schematics/utils/{deprecated-path-migration.js → deprecated-path-migration.cjs} +4 -3
- package/schematics/utils/html-config.cjs +148 -0
- package/schematics/utils/{icon-migration.js → icon-migration.cjs} +11 -5
- package/schematics/utils/list-item-pattern.cjs +16 -0
- package/schematics/utils/{messages.js → messages.cjs} +4 -0
- package/schematics/utils/package-config.cjs +99 -0
- package/schematics/utils/project-files.cjs +25 -0
- package/schematics/utils/replacement-driver.cjs +337 -0
- package/schematics/utils/safe-rule.cjs +23 -0
- package/schematics/utils/signal-members-migration.cjs +779 -0
- package/schematics/utils/tag-patterns.cjs +21 -0
- package/schematics/utils/template-ref-access.cjs +155 -0
- package/schematics/utils/{typescript.js → typescript.cjs} +1 -1
- package/schematics/utils/warn-only-migration.cjs +52 -0
- package/schematics/utils/workspace-styles.cjs +123 -0
- package/select/select.scss +7 -0
- package/tabs/_tabs-common.scss +23 -0
- package/textarea/textarea-tokens.scss +4 -1
- package/toast/toast.component.scss +1 -0
- package/toggle/_toggle-theme.scss +0 -17
- package/tooltip/tooltip.scss +1 -1
- package/top-bar/top-bar-tokens.scss +1 -0
- package/top-bar/top-bar.scss +10 -0
- package/types/koobiq-components-accordion.d.ts +25 -0
- package/types/koobiq-components-button-toggle.d.ts +6 -0
- package/types/koobiq-components-checkbox.d.ts +30 -0
- package/types/koobiq-components-clamped-text.d.ts +16 -3
- package/types/koobiq-components-code-block.d.ts +55 -14
- package/types/koobiq-components-core.d.ts +226 -13
- package/types/koobiq-components-datepicker.d.ts +28 -1
- package/types/koobiq-components-divider.d.ts +28 -10
- package/types/koobiq-components-dropdown.d.ts +19 -0
- package/types/koobiq-components-filter-bar.d.ts +79 -6
- package/types/koobiq-components-flag.d.ts +18 -0
- package/types/koobiq-components-form-field.d.ts +87 -6
- package/types/koobiq-components-icon.d.ts +15 -0
- package/types/koobiq-components-inline-edit.d.ts +8 -1
- package/types/koobiq-components-input.d.ts +22 -3
- package/types/koobiq-components-list.d.ts +6 -0
- package/types/koobiq-components-modal.d.ts +7 -0
- package/types/koobiq-components-navbar.d.ts +71 -7
- package/types/koobiq-components-notification-center.d.ts +13 -0
- package/types/koobiq-components-overflow-items.d.ts +26 -2
- package/types/koobiq-components-popover.d.ts +38 -3
- package/types/koobiq-components-radio.d.ts +30 -0
- package/types/koobiq-components-search-expandable.d.ts +10 -0
- package/types/koobiq-components-select.d.ts +36 -4
- package/types/koobiq-components-sidepanel.d.ts +52 -1
- package/types/koobiq-components-splitter.d.ts +13 -4
- package/types/koobiq-components-tabs.d.ts +4 -0
- package/types/koobiq-components-tags.d.ts +6 -0
- package/types/koobiq-components-textarea.d.ts +9 -2
- package/types/koobiq-components-timepicker.d.ts +15 -0
- package/types/koobiq-components-toggle.d.ts +30 -0
- package/types/koobiq-components-tooltip.d.ts +55 -10
- package/types/koobiq-components-top-bar.d.ts +11 -3
- package/types/koobiq-components-tree-select.d.ts +23 -8
- package/types/koobiq-components-tree.d.ts +144 -60
- package/schematics/migrations/angular-animations-removal/index.js +0 -20
- package/schematics/migrations/color-signals/index.js +0 -19
- package/schematics/migrations/core-mixins-removal/index.js +0 -17
- package/schematics/migrations/datepicker-signals/index.js +0 -17
- package/schematics/migrations/dropdown-signals/index.js +0 -19
- package/schematics/migrations/input-signals/index.js +0 -17
- package/schematics/migrations/list-signals/index.js +0 -17
- package/schematics/migrations/modal-signals/index.js +0 -19
- package/schematics/migrations/option-signals/index.js +0 -19
- package/schematics/migrations/query-list-signals/index.js +0 -17
- package/schematics/migrations/signal-inputs-subclasses/index.js +0 -17
- package/schematics/migrations/v20-upgrade/index.js +0 -18
- package/schematics/migrations/zoneless-change-detection/index.js +0 -20
- package/schematics/utils/package-config.js +0 -13
- /package/schematics/migrations/accordion-state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/actions-panel-overlay-container/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/alert-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/angular-animations-removal/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/app-switcher-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/autocomplete-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/badge-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-state-and-styles/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-supported-colors/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-toggle-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-truncation/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/checkbox-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/clamped-text-disclosure/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/code-block-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/color-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/core-mixins-removal/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/css-selectors/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/datepicker-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/deprecated-icons/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/divider-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dl-attribute-coercion/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dl-standalone-names/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dropdown-demote-overlay/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dropdown-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/empty-state-error-color/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/file-upload-cva-and-primitives/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/file-upload-deprecated-outputs/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/filter-bar-rename-action/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/filter-bar-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/filter-bar-state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/flag-inner-html/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/form-field-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/icons-replacement/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/inline-edit-a11y-and-types/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/input-number-surface/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/input-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/link-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/list-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/list-tree-multiple-input/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/loader-overlay-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/locale-configuration-providers/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/markdown-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/modal-dialog-semantics/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/modal-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/navbar-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/new-icons-pack/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/notification-center-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/option-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/popover-leave-delay/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/progress-bar-percentage-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/progress-spinner-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/query-list-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/radio-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/read-state-dwell-handlers/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/select-signal-inputs/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/sidepanel-non-modal-behavior/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/signal-inputs-subclasses/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/split-button-optional-disabled/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/table-cell-content/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tabs-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tag-list-cleaner/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tags-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/textarea-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/time-range-title-for/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/timepicker-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/timezone-grouping-utils/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/title-encapsulation/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/toast-stack-and-defaults/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tooltip-pointer-events-and-types/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/top-bar-container-selectors/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tree-select-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tree-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tree-state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/username-pipe-injection/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/zoneless-change-detection/{data.js → data.cjs} +0 -0
- /package/schematics/utils/{ast.js → ast.cjs} +0 -0
|
@@ -275,7 +275,7 @@ class KbqCalendarHeader {
|
|
|
275
275
|
}
|
|
276
276
|
}
|
|
277
277
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqCalendarHeader, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
278
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: KbqCalendarHeader, isStandalone: true, selector: "kbq-calendar-header", inputs: { activeDateInput: { classPropertyName: "activeDateInput", publicName: "activeDate", isSignal: true, isRequired: false, transformFunction: null }, maxDateInput: { classPropertyName: "maxDateInput", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, minDateInput: { classPropertyName: "minDateInput", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeDateChange: "activeDateChange", monthSelected: "monthSelected", yearSelected: "yearSelected" }, host: { classAttribute: "kbq-calendar-header" }, exportAs: ["kbqCalendarHeader"], usesOnChanges: true, ngImport: i0, template: "<div class=\"kbq-calendar-header__select-group\">\n <kbq-select\n #monthSelect=\"kbqSelect\"\n class=\"kbq-calendar-header__select\"\n [panelClass]=\"'kbq-calendar-select-panel'\"\n [tabIndex]=\"-1\"\n [value]=\"selectedMonth\"\n (selectionChange)=\"onMonthSelected($event.value)\"\n >\n <button\n kbq-button\n kbq-select-matcher\n class=\"layout-padding-right-xs\"\n [class.kbq-active]=\"monthSelect.panelOpen\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n >\n {{ monthNames[selectedMonth].nameShort | titlecase }}\n\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"layout-padding-left-3xs\" [color]=\"'contrast'\"></i>\n </button>\n\n @for (month of monthNames; track month.nameShort) {\n <kbq-option [disabled]=\"month.disabled\" [kbqTooltipDisabled]=\"true\" [value]=\"month.value\">\n {{ month.name }}\n </kbq-option>\n }\n </kbq-select>\n\n <kbq-select\n #yearSelect=\"kbqSelect\"\n [panelClass]=\"'kbq-calendar-select-panel'\"\n [tabIndex]=\"-1\"\n [value]=\"selectedYear\"\n (selectionChange)=\"onYearSelected($event.value)\"\n >\n <button\n kbq-button\n kbq-select-matcher\n class=\"layout-padding-right-xs\"\n [class.kbq-active]=\"yearSelect.panelOpen\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n >\n {{ selectedYear }}\n\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"layout-padding-left-3xs\"></i>\n </button>\n\n @for (year of years; track year) {\n <kbq-option [kbqTooltipDisabled]=\"true\" [value]=\"year\">\n {{ year }}\n </kbq-option>\n }\n </kbq-select>\n</div>\n\n<div class=\"kbq-calendar-header__button-group\">\n <button\n kbq-button\n class=\"kbq-calendar-header__previous-button\"\n [attr.aria-label]=\"a11yLocaleConfiguration().previousMonth\"\n [color]=\"'contrast'\"\n [disabled]=\"previousDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectPreviousMonth()\"\n >\n <i kbq-icon=\"kbq-chevron-left_16\"></i>\n </button>\n\n <button\n kbq-button\n [attr.aria-label]=\"a11yLocaleConfiguration().currentDate\"\n [color]=\"'contrast'\"\n [disabled]=\"currentDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\"\n >\n <i kbq-icon=\"kbq-circle-xs_16\"></i>\n </button>\n\n <button\n kbq-button\n class=\"kbq-calendar-header__next-button\"\n [attr.aria-label]=\"a11yLocaleConfiguration().nextMonth\"\n [color]=\"'contrast'\"\n [disabled]=\"nextDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectNextMonth()\"\n >\n <i kbq-icon=\"kbq-chevron-right_16\"></i>\n </button>\n</div>\n", styles: [".kbq-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding-right:var(--kbq-datepicker-size-header-padding-horizontal);padding-left:var(--kbq-datepicker-size-header-padding-horizontal);margin-bottom:var(--kbq-datepicker-size-header-margin-bottom)}.kbq-calendar-header__select{width:auto!important}.kbq-calendar-header__button-group,.kbq-calendar-header__select-group{display:flex;flex-direction:row}.kbq-calendar-select-panel{margin-top:2px;min-width:98%!important}.kbq-calendar-select-panel .kbq-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:auto}.kbq-calendar-select-panel .kbq-select__content .kbq-option{min-width:65px}\n"], dependencies: [{ kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i1.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i1.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["aria-hidden", "iconSize", "autoColor", "kbq-icon"] }, { kind: "ngmodule", type: KbqSelectModule }, { kind: "component", type: i3.KbqSelect, selector: "kbq-select", inputs: ["hiddenItemsText", "hiddenItemsTextFormatter", "aria-label", "showPreselectedValues", "triggerValuesLimit", "panelClass", "backdropClass", "errorStateMatcher", "sortComparator", "multiline", "searchMinOptionsThreshold", "scrolledToBottomOffset", "hasBackdrop", "placeholder", "required", "multiple", "compareWith", "virtualOptionFactory", "clearPredicate", "selectAllToggle", "selectAll", "selectAllHandler", "panelWidth", "panelMinWidth", "panelMaxWidth", "panelMaxHeight", "value", "id", "tabIndex", "disabled"], outputs: ["openedChange", "beforeOpened", "opened", "closed", "selectionChange", "onSelectAll", "valueChange", "scrolledToBottom"], exportAs: ["kbqSelect"] }, { kind: "directive", type: i3.KbqOptionTooltip, selector: "kbq-option", inputs: ["ignoreTooltipPointerEvents"] }, { kind: "component", type: i4.KbqOption, selector: "kbq-option", inputs: ["value", "selectable", "userSelect", "showCheckbox", "viewValue", "disabled"], outputs: ["onSelectionChange"], exportAs: ["kbqOption"] }, { kind: "directive", type: i4.KbqSelectMatcher, selector: "kbq-select-matcher, [kbq-select-matcher]", inputs: ["useDefaultHandlers"] }, { kind: "ngmodule", type: KbqOptionModule }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
278
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: KbqCalendarHeader, isStandalone: true, selector: "kbq-calendar-header", inputs: { activeDateInput: { classPropertyName: "activeDateInput", publicName: "activeDate", isSignal: true, isRequired: false, transformFunction: null }, maxDateInput: { classPropertyName: "maxDateInput", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, minDateInput: { classPropertyName: "minDateInput", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeDateChange: "activeDateChange", monthSelected: "monthSelected", yearSelected: "yearSelected" }, host: { classAttribute: "kbq-calendar-header" }, exportAs: ["kbqCalendarHeader"], usesOnChanges: true, ngImport: i0, template: "<div class=\"kbq-calendar-header__select-group\">\n <kbq-select\n #monthSelect=\"kbqSelect\"\n class=\"kbq-calendar-header__select\"\n [panelClass]=\"'kbq-calendar-select-panel'\"\n [tabIndex]=\"-1\"\n [value]=\"selectedMonth\"\n (selectionChange)=\"onMonthSelected($event.value)\"\n >\n <button\n kbq-button\n kbq-select-matcher\n class=\"layout-padding-right-xs\"\n [class.kbq-active]=\"monthSelect.panelOpen\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n >\n {{ monthNames[selectedMonth].nameShort | titlecase }}\n\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"layout-padding-left-3xs\" [color]=\"'contrast'\"></i>\n </button>\n\n @for (month of monthNames; track month.nameShort) {\n <kbq-option [disabled]=\"month.disabled\" [kbqTooltipDisabled]=\"true\" [value]=\"month.value\">\n {{ month.name }}\n </kbq-option>\n }\n </kbq-select>\n\n <kbq-select\n #yearSelect=\"kbqSelect\"\n [panelClass]=\"'kbq-calendar-select-panel'\"\n [tabIndex]=\"-1\"\n [value]=\"selectedYear\"\n (selectionChange)=\"onYearSelected($event.value)\"\n >\n <button\n kbq-button\n kbq-select-matcher\n class=\"layout-padding-right-xs\"\n [class.kbq-active]=\"yearSelect.panelOpen\"\n [color]=\"'contrast'\"\n [kbqStyle]=\"'transparent'\"\n >\n {{ selectedYear }}\n\n <i kbq-icon=\"kbq-chevron-down-s_16\" class=\"layout-padding-left-3xs\"></i>\n </button>\n\n @for (year of years; track year) {\n <kbq-option [kbqTooltipDisabled]=\"true\" [value]=\"year\">\n {{ year }}\n </kbq-option>\n }\n </kbq-select>\n</div>\n\n<div class=\"kbq-calendar-header__button-group\">\n <button\n kbq-button\n class=\"kbq-calendar-header__previous-button\"\n [attr.aria-label]=\"a11yLocaleConfiguration().previousMonth\"\n [color]=\"'contrast'\"\n [disabled]=\"previousDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectPreviousMonth()\"\n >\n <i kbq-icon=\"kbq-chevron-left_16\"></i>\n </button>\n\n <button\n kbq-button\n [attr.aria-label]=\"a11yLocaleConfiguration().currentDate\"\n [color]=\"'contrast'\"\n [disabled]=\"currentDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\"\n >\n <i kbq-icon=\"kbq-circle-xs_16\"></i>\n </button>\n\n <button\n kbq-button\n class=\"kbq-calendar-header__next-button\"\n [attr.aria-label]=\"a11yLocaleConfiguration().nextMonth\"\n [color]=\"'contrast'\"\n [disabled]=\"nextDisabled\"\n [kbqStyle]=\"'transparent'\"\n [tabindex]=\"-1\"\n (click)=\"selectNextMonth()\"\n >\n <i kbq-icon=\"kbq-chevron-right_16\"></i>\n </button>\n</div>\n", styles: [".kbq-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding-right:var(--kbq-datepicker-size-header-padding-horizontal);padding-left:var(--kbq-datepicker-size-header-padding-horizontal);margin-bottom:var(--kbq-datepicker-size-header-margin-bottom)}.kbq-calendar-header__select{width:auto!important}.kbq-calendar-header__button-group,.kbq-calendar-header__select-group{display:flex;flex-direction:row}.kbq-calendar-select-panel{margin-top:2px;min-width:98%!important}.kbq-calendar-select-panel .kbq-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:auto}.kbq-calendar-select-panel .kbq-select__content .kbq-option{min-width:65px}\n"], dependencies: [{ kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i1.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i1.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i2.KbqIcon, selector: "[kbq-icon]", inputs: ["aria-hidden", "iconSize", "autoColor", "kbq-icon"] }, { kind: "ngmodule", type: KbqSelectModule }, { kind: "component", type: i3.KbqSelect, selector: "kbq-select", inputs: ["hiddenItemsText", "hiddenItemsTextFormatter", "aria-label", "showPreselectedValues", "triggerValuesLimit", "panelClass", "backdropClass", "errorStateMatcher", "sortComparator", "multiline", "multilineOptions", "searchMinOptionsThreshold", "scrolledToBottomOffset", "hasBackdrop", "placeholder", "required", "multiple", "compareWith", "virtualOptionFactory", "clearPredicate", "selectAllToggle", "selectAll", "selectAllHandler", "panelWidth", "panelMinWidth", "panelMaxWidth", "panelMaxHeight", "value", "id", "tabIndex", "disabled"], outputs: ["openedChange", "beforeOpened", "opened", "closed", "selectionChange", "onSelectAll", "valueChange", "scrolledToBottom"], exportAs: ["kbqSelect"] }, { kind: "directive", type: i3.KbqOptionTooltip, selector: "kbq-option", inputs: ["ignoreTooltipPointerEvents"] }, { kind: "component", type: i4.KbqOption, selector: "kbq-option", inputs: ["value", "selectable", "userSelect", "showCheckbox", "viewValue", "disabled"], outputs: ["onSelectionChange"], exportAs: ["kbqOption"] }, { kind: "directive", type: i4.KbqSelectMatcher, selector: "kbq-select-matcher, [kbq-select-matcher]", inputs: ["useDefaultHandlers"] }, { kind: "ngmodule", type: KbqOptionModule }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
279
279
|
}
|
|
280
280
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqCalendarHeader, decorators: [{
|
|
281
281
|
type: Component,
|
|
@@ -625,12 +625,22 @@ var DateParts;
|
|
|
625
625
|
})(DateParts || (DateParts = {}));
|
|
626
626
|
const MAX_YEAR = 9999;
|
|
627
627
|
const YEAR_LENGTH = 4;
|
|
628
|
+
/** Days in the longest month */
|
|
629
|
+
const MAX_DAYS_IN_MONTH = 31;
|
|
630
|
+
/** A one- or two-digit year below it falls in the current century, any other in the previous one */
|
|
631
|
+
const SHORT_YEAR_PIVOT = 30;
|
|
632
|
+
/** First year of the current century */
|
|
633
|
+
const CURRENT_CENTURY_START = 2000;
|
|
634
|
+
/** First year of the previous century */
|
|
635
|
+
const PREVIOUS_CENTURY_START = 1900;
|
|
636
|
+
/** Key of the error reported for text that is not a date */
|
|
637
|
+
const parseErrorKey = 'kbqDatepickerParse';
|
|
628
638
|
class DateDigit {
|
|
629
639
|
constructor(value, start, length) {
|
|
630
640
|
this.value = value;
|
|
631
641
|
this.start = start;
|
|
632
642
|
this.length = length;
|
|
633
|
-
this.maxDays =
|
|
643
|
+
this.maxDays = MAX_DAYS_IN_MONTH;
|
|
634
644
|
this.maxMonth = 12;
|
|
635
645
|
if (value === DateParts.day) {
|
|
636
646
|
this.parse = this.parseDay;
|
|
@@ -944,6 +954,12 @@ class KbqDatepickerInput {
|
|
|
944
954
|
this.datepickerSubscription = Subscription.EMPTY;
|
|
945
955
|
/** Whether the last value set on the input was valid. */
|
|
946
956
|
this.lastValueValid = false;
|
|
957
|
+
/**
|
|
958
|
+
* Whether a drag started in this field, so that its drop here is the field's own text.
|
|
959
|
+
*
|
|
960
|
+
* @docs-private
|
|
961
|
+
*/
|
|
962
|
+
this.draggingOwnText = false;
|
|
947
963
|
this.firstDigit = null;
|
|
948
964
|
this.secondDigit = null;
|
|
949
965
|
this.thirdDigit = null;
|
|
@@ -956,23 +972,9 @@ class KbqDatepickerInput {
|
|
|
956
972
|
*/
|
|
957
973
|
this.onTouched = () => { };
|
|
958
974
|
this.onInput = () => {
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
const newTimeObj = this.getDateFromString(formattedValue);
|
|
962
|
-
this.lastValueValid = !!newTimeObj;
|
|
963
|
-
if (!newTimeObj) {
|
|
964
|
-
if (!this.viewValue) {
|
|
965
|
-
this.lastValueValid = false;
|
|
966
|
-
this.updateValue(newTimeObj);
|
|
967
|
-
}
|
|
968
|
-
else {
|
|
969
|
-
this.control?.updateValueAndValidity();
|
|
970
|
-
}
|
|
971
|
-
return;
|
|
975
|
+
if (!this.readViewValue() && this.viewValue) {
|
|
976
|
+
this.control?.updateValueAndValidity();
|
|
972
977
|
}
|
|
973
|
-
this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat), true);
|
|
974
|
-
this.selectNextDigitByCursor(cursorPosition);
|
|
975
|
-
this.updateValue(newTimeObj);
|
|
976
978
|
};
|
|
977
979
|
this.parseOnBlur = () => {
|
|
978
980
|
if (!this.viewValue || !this.readyForParse) {
|
|
@@ -984,29 +986,30 @@ class KbqDatepickerInput {
|
|
|
984
986
|
.map((value) => value)
|
|
985
987
|
.filter((value) => value);
|
|
986
988
|
const [firsViewDigit, secondViewDigit, thirdViewDigit] = viewDigits;
|
|
989
|
+
// A text that fails here is reported by `onBlur()` unless the next parse takes it.
|
|
987
990
|
if (viewDigits.length !== 3) {
|
|
988
991
|
this.lastValueValid = false;
|
|
989
992
|
this.valueState.set(null);
|
|
990
|
-
return
|
|
993
|
+
return null;
|
|
991
994
|
}
|
|
992
995
|
date[this.firstDigit.fullName] = this.firstDigit.parse(firsViewDigit);
|
|
993
996
|
date[this.secondDigit.fullName] = this.secondDigit.parse(secondViewDigit);
|
|
994
997
|
date[this.thirdDigit.fullName] = this.thirdDigit.parse(thirdViewDigit);
|
|
995
998
|
const [digitWithYear, viewDigitWithYear] = [this.firstDigit, this.secondDigit, this.thirdDigit].reduce((acc, digit, index) => (digit.value === DateParts.year ? [digit, viewDigits[index]] : acc), []);
|
|
996
999
|
if (viewDigitWithYear.length < 3) {
|
|
997
|
-
date.year
|
|
1000
|
+
// From the text rather than `date.year`: the year part reads `00` as 1.
|
|
1001
|
+
date.year = this.expandShortYear(parseInt(viewDigitWithYear));
|
|
998
1002
|
}
|
|
999
1003
|
else if (viewDigitWithYear.length < digitWithYear.length) {
|
|
1000
1004
|
this.lastValueValid = false;
|
|
1001
1005
|
this.valueState.set(null);
|
|
1002
|
-
return
|
|
1006
|
+
return null;
|
|
1003
1007
|
}
|
|
1004
1008
|
const newTimeObj = this.createDateTime(date);
|
|
1005
1009
|
if (!newTimeObj) {
|
|
1006
1010
|
this.lastValueValid = false;
|
|
1007
1011
|
this.valueState.set(null);
|
|
1008
|
-
|
|
1009
|
-
return setTimeout(() => this.control?.updateValueAndValidity());
|
|
1012
|
+
return null;
|
|
1010
1013
|
}
|
|
1011
1014
|
/* Check if the number of days entered does not match the entered month */
|
|
1012
1015
|
if (!this.getValidDateOrNull(newTimeObj)) {
|
|
@@ -1022,7 +1025,7 @@ class KbqDatepickerInput {
|
|
|
1022
1025
|
this.parseValidator = () => {
|
|
1023
1026
|
return this.focused() || this.isEmpty() || this.lastValueValid
|
|
1024
1027
|
? null
|
|
1025
|
-
: {
|
|
1028
|
+
: { [parseErrorKey]: { text: this.elementRef.nativeElement.value } };
|
|
1026
1029
|
};
|
|
1027
1030
|
/** The form control validator for the min date. */
|
|
1028
1031
|
this.minValidator = (control) => {
|
|
@@ -1093,15 +1096,22 @@ class KbqDatepickerInput {
|
|
|
1093
1096
|
}
|
|
1094
1097
|
// The date adapter follows the same locale, so its input format may have changed with it: the
|
|
1095
1098
|
// digit layout has to be re-derived and the rendered value re-formatted.
|
|
1099
|
+
// Only a complete value is re-rendered: with none, the text is the user's, and `''` written over it
|
|
1100
|
+
// would leave the form with an error about text that is gone.
|
|
1096
1101
|
untracked(() => {
|
|
1097
1102
|
this.setFormat(this.dateInputFormat);
|
|
1098
|
-
this.
|
|
1103
|
+
const value = this.valueState();
|
|
1104
|
+
if (value)
|
|
1105
|
+
this.setValue(value);
|
|
1099
1106
|
});
|
|
1100
1107
|
});
|
|
1101
1108
|
this.timezoneService.changes.pipe(takeUntilDestroyed()).subscribe(() => {
|
|
1102
1109
|
// The rendered text names a wall clock in the zone it was formatted in. Left as it is, the
|
|
1103
|
-
// next keystroke re-parses it against the new zone and emits a different instant.
|
|
1104
|
-
|
|
1110
|
+
// next keystroke re-parses it against the new zone and emits a different instant. Only a
|
|
1111
|
+
// complete value, as above.
|
|
1112
|
+
const value = this.valueState();
|
|
1113
|
+
if (value)
|
|
1114
|
+
this.setValue(value);
|
|
1105
1115
|
});
|
|
1106
1116
|
}
|
|
1107
1117
|
ngOnChanges(changes) {
|
|
@@ -1251,34 +1261,46 @@ class KbqDatepickerInput {
|
|
|
1251
1261
|
}
|
|
1252
1262
|
/** Handles blur events on the input. */
|
|
1253
1263
|
onBlur() {
|
|
1254
|
-
|
|
1255
|
-
this.
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
}
|
|
1269
|
-
const match = rawValue.match(/^(?<first>\d+)\W(?<second>\d+)\W(?<third>\d+)$/);
|
|
1270
|
-
if (!match?.groups?.first || !match?.groups?.second || !match?.groups?.third) {
|
|
1271
|
-
this.setViewValue(rawValue);
|
|
1272
|
-
return rawValue;
|
|
1273
|
-
}
|
|
1274
|
-
const value = [match.groups.first, match.groups.second, match.groups.third].join(this.separator);
|
|
1275
|
-
const newTimeObj = this.getDateFromString(value);
|
|
1276
|
-
if (!newTimeObj) {
|
|
1277
|
-
this.setViewValue(value);
|
|
1278
|
-
return value;
|
|
1264
|
+
const wasFocused = this.focused();
|
|
1265
|
+
const reportedText = this.control?.getError(parseErrorKey)?.text ?? '';
|
|
1266
|
+
// `focused` goes first, as the validators read it, and `onTouched` last: it is what commits the
|
|
1267
|
+
// value of a control with `updateOn: 'blur'`, and whatever is emitted after it waits for the next blur.
|
|
1268
|
+
this.focusedValue.set(false);
|
|
1269
|
+
// A text the form already knows is not a date: parsing it again would only restart its async validators.
|
|
1270
|
+
if (!reportedText || reportedText !== this.viewValue) {
|
|
1271
|
+
this.parseOnBlur();
|
|
1272
|
+
this.readViewValue();
|
|
1273
|
+
// Text that is not a date reaches the element without a keydown: an undo, an IME, autofill.
|
|
1274
|
+
if (!this.lastValueValid && this.viewValue) {
|
|
1275
|
+
this.valueState.set(null);
|
|
1276
|
+
this.cvaOnChange(null);
|
|
1277
|
+
}
|
|
1279
1278
|
}
|
|
1280
|
-
|
|
1281
|
-
|
|
1279
|
+
if (wasFocused)
|
|
1280
|
+
this.onTouched();
|
|
1281
|
+
}
|
|
1282
|
+
onPaste(event) {
|
|
1283
|
+
event.preventDefault();
|
|
1284
|
+
if (this.isReadOnly)
|
|
1285
|
+
return;
|
|
1286
|
+
this.replaceText(event.clipboardData?.getData('text') ?? '');
|
|
1287
|
+
}
|
|
1288
|
+
/**
|
|
1289
|
+
* Takes dropped text the way a paste is taken. The browser would insert it at the pointer, with no event
|
|
1290
|
+
* the parsing listens to.
|
|
1291
|
+
*
|
|
1292
|
+
* @docs-private
|
|
1293
|
+
*/
|
|
1294
|
+
onDrop(event) {
|
|
1295
|
+
event.preventDefault();
|
|
1296
|
+
// A part dragged within the field would be read as the whole date. A disabled or read-only field is only
|
|
1297
|
+
// reached when an ancestor accepts the drop.
|
|
1298
|
+
if (this.draggingOwnText || this.disabled() || this.isReadOnly)
|
|
1299
|
+
return;
|
|
1300
|
+
this.focus();
|
|
1301
|
+
// Not left to the focus: a window that is not active, where a drag from another one ends, fires none.
|
|
1302
|
+
this.onTouched();
|
|
1303
|
+
this.replaceText(event.dataTransfer?.getData('text') ?? '');
|
|
1282
1304
|
}
|
|
1283
1305
|
toISO8601(value) {
|
|
1284
1306
|
return this.adapter.toIso8601(value);
|
|
@@ -1292,6 +1314,68 @@ class KbqDatepickerInput {
|
|
|
1292
1314
|
getOrigin() {
|
|
1293
1315
|
return this.formField ? this.formField.getConnectedOverlayOrigin() : this.elementRef;
|
|
1294
1316
|
}
|
|
1317
|
+
/** Parses the rendered text as typing does, taking the date it holds. Returns whether there was one. */
|
|
1318
|
+
readViewValue() {
|
|
1319
|
+
const cursorPosition = this.correctedCursorPosition();
|
|
1320
|
+
const newTimeObj = this.getDateFromString(this.replaceSymbols(this.viewValue));
|
|
1321
|
+
this.lastValueValid = !!newTimeObj;
|
|
1322
|
+
if (!newTimeObj) {
|
|
1323
|
+
if (!this.viewValue) {
|
|
1324
|
+
this.updateValue(null);
|
|
1325
|
+
}
|
|
1326
|
+
return false;
|
|
1327
|
+
}
|
|
1328
|
+
this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat), true);
|
|
1329
|
+
this.selectNextDigitByCursor(cursorPosition);
|
|
1330
|
+
this.updateValue(newTimeObj);
|
|
1331
|
+
return true;
|
|
1332
|
+
}
|
|
1333
|
+
/** Takes a pasted or dropped text as the whole value; one that is not a date is rejected as a letter key is. */
|
|
1334
|
+
replaceText(text) {
|
|
1335
|
+
// Punctuation around the date comes along when it is copied out of a sentence or brackets.
|
|
1336
|
+
const newTimeObj = this.readPastedDate(text.replace(/^[^\p{L}\d]+|[^\p{L}\d]+$/gu, ''));
|
|
1337
|
+
if (!newTimeObj) {
|
|
1338
|
+
if (text.trim())
|
|
1339
|
+
this.incorrectInput.emit();
|
|
1340
|
+
return;
|
|
1341
|
+
}
|
|
1342
|
+
this.lastValueValid = true;
|
|
1343
|
+
this.setViewValue(this.getTimeStringFromDate(newTimeObj, this.dateInputFormat));
|
|
1344
|
+
this.updateValue(newTimeObj);
|
|
1345
|
+
}
|
|
1346
|
+
/**
|
|
1347
|
+
* Reads the parts of the format, in its order, from two or three groups of digits split by anything but a
|
|
1348
|
+
* letter. A short day or month is padded and a short year expanded as blur does; a group longer than its
|
|
1349
|
+
* part, such as the year of an ISO date, makes the text not a date.
|
|
1350
|
+
*/
|
|
1351
|
+
readPastedDate(text) {
|
|
1352
|
+
if (!this.readyForParse || !/^\d+(?:[^\p{L}\d]+\d+){1,2}$/u.test(text))
|
|
1353
|
+
return null;
|
|
1354
|
+
const digits = [this.firstDigit, this.secondDigit, this.thirdDigit];
|
|
1355
|
+
const parts = [];
|
|
1356
|
+
for (const [index, part] of text.split(/[^\p{L}\d]+/u).entries()) {
|
|
1357
|
+
const digit = digits[index];
|
|
1358
|
+
if (part.length > digit.length)
|
|
1359
|
+
return null;
|
|
1360
|
+
if (!digit.isYear) {
|
|
1361
|
+
parts.push(part.padStart(digit.length, '0'));
|
|
1362
|
+
}
|
|
1363
|
+
else if (part.length === digit.length) {
|
|
1364
|
+
parts.push(part);
|
|
1365
|
+
}
|
|
1366
|
+
else if (part.length <= 2) {
|
|
1367
|
+
parts.push(`${this.expandShortYear(parseInt(part))}`);
|
|
1368
|
+
}
|
|
1369
|
+
else {
|
|
1370
|
+
return null;
|
|
1371
|
+
}
|
|
1372
|
+
}
|
|
1373
|
+
return this.getDateFromString(parts.join(this.separator));
|
|
1374
|
+
}
|
|
1375
|
+
/** A year of one or two digits as a full one. */
|
|
1376
|
+
expandShortYear(year) {
|
|
1377
|
+
return year + (year < SHORT_YEAR_PIVOT ? CURRENT_CENTURY_START : PREVIOUS_CENTURY_START);
|
|
1378
|
+
}
|
|
1295
1379
|
saveTimePart(selected) {
|
|
1296
1380
|
const value = this.value();
|
|
1297
1381
|
if (!value) {
|
|
@@ -1427,9 +1511,12 @@ class KbqDatepickerInput {
|
|
|
1427
1511
|
for (const [index, dateDigit] of dateDigits.entries()) {
|
|
1428
1512
|
digitViewValue[dateDigit.fullName] = parseInt(viewDigits[index]);
|
|
1429
1513
|
}
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1514
|
+
const { month, year } = digitViewValue;
|
|
1515
|
+
// Set on every parse: a limit left by an earlier date would cut the day of this one.
|
|
1516
|
+
const maxDays = month && month <= this.firstDigit.maxMonth && !isNaN(year)
|
|
1517
|
+
? this.getLastDayFor(year, month - 1)
|
|
1518
|
+
: MAX_DAYS_IN_MONTH;
|
|
1519
|
+
dateDigits.forEach((digit) => (digit.maxDays = maxDays));
|
|
1433
1520
|
date[this.firstDigit.fullName] = this.firstDigit.parse(firsViewDigit);
|
|
1434
1521
|
date[this.secondDigit.fullName] = this.secondDigit.parse(secondViewDigit);
|
|
1435
1522
|
date[this.thirdDigit.fullName] = this.thirdDigit.parse(thirdViewDigit);
|
|
@@ -1568,7 +1655,8 @@ class KbqDatepickerInput {
|
|
|
1568
1655
|
return this.createDate(year, month, day);
|
|
1569
1656
|
}
|
|
1570
1657
|
getLastDayFor(year, month) {
|
|
1571
|
-
|
|
1658
|
+
// The adapter's own date: the input's one takes the time of the value, and there may be none.
|
|
1659
|
+
return this.adapter.getNumDaysInMonth(this.adapter.createDate(year, month, 1));
|
|
1572
1660
|
}
|
|
1573
1661
|
decrementDate(date, whatToDecrement) {
|
|
1574
1662
|
let year = this.adapter.getYear(date);
|
|
@@ -1783,7 +1871,7 @@ class KbqDatepickerInput {
|
|
|
1783
1871
|
return this.separatorPositions.includes(position) ? position - 1 : position;
|
|
1784
1872
|
}
|
|
1785
1873
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqDatepickerInput, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1786
|
-
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.25", type: KbqDatepickerInput, isStandalone: true, selector: "input[kbqDatepicker], input[kbqCalendar]", inputs: { errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null }, placeholderInput: { classPropertyName: "placeholderInput", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, kbqDatepickerInput: { classPropertyName: "kbqDatepickerInput", publicName: "kbqDatepicker", isSignal: true, isRequired: false, transformFunction: null }, kbqCalendarInput: { classPropertyName: "kbqCalendarInput", publicName: "kbqCalendar", isSignal: true, isRequired: false, transformFunction: null }, kbqDatepickerFilterInput: { classPropertyName: "kbqDatepickerFilterInput", publicName: "kbqDatepickerFilter", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, minInput: { classPropertyName: "minInput", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, maxInput: { classPropertyName: "maxInput", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, idInput: { classPropertyName: "idInput", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, kbqValidationTooltipInput: { classPropertyName: "kbqValidationTooltipInput", publicName: "kbqValidationTooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { incorrectInput: "incorrectInput", dateChange: "dateChange", dateInput: "dateInput" }, host: { listeners: { "paste": "onPaste($event)", "change": "onChange()", "focus": "focusChanged(true)", "blur": "onBlur()", "keydown": "onKeyDown($event)" }, properties: { "attr.id": "id()", "attr.placeholder": "placeholder()", "attr.required": "required() || null", "attr.disabled": "disabled() || null", "attr.min": "min ? toISO8601(min) : null", "attr.max": "max ? toISO8601(max) : null", "attr.autocomplete": "\"off\"" }, classAttribute: "kbq-input kbq-datepicker" }, providers: [
|
|
1874
|
+
/** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.25", type: KbqDatepickerInput, isStandalone: true, selector: "input[kbqDatepicker], input[kbqCalendar]", inputs: { errorStateMatcher: { classPropertyName: "errorStateMatcher", publicName: "errorStateMatcher", isSignal: true, isRequired: false, transformFunction: null }, placeholderInput: { classPropertyName: "placeholderInput", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, kbqDatepickerInput: { classPropertyName: "kbqDatepickerInput", publicName: "kbqDatepicker", isSignal: true, isRequired: false, transformFunction: null }, kbqCalendarInput: { classPropertyName: "kbqCalendarInput", publicName: "kbqCalendar", isSignal: true, isRequired: false, transformFunction: null }, kbqDatepickerFilterInput: { classPropertyName: "kbqDatepickerFilterInput", publicName: "kbqDatepickerFilter", isSignal: true, isRequired: false, transformFunction: null }, valueInput: { classPropertyName: "valueInput", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, minInput: { classPropertyName: "minInput", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, maxInput: { classPropertyName: "maxInput", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, idInput: { classPropertyName: "idInput", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, kbqValidationTooltipInput: { classPropertyName: "kbqValidationTooltipInput", publicName: "kbqValidationTooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { incorrectInput: "incorrectInput", dateChange: "dateChange", dateInput: "dateInput" }, host: { listeners: { "paste": "onPaste($event)", "drop": "onDrop($event)", "dragstart": "draggingOwnText = true", "dragend": "draggingOwnText = false", "change": "onChange()", "focus": "focusChanged(true)", "blur": "onBlur()", "keydown": "onKeyDown($event)" }, properties: { "attr.id": "id()", "attr.placeholder": "placeholder()", "attr.required": "required() || null", "attr.disabled": "disabled() || null", "attr.min": "min ? toISO8601(min) : null", "attr.max": "max ? toISO8601(max) : null", "attr.autocomplete": "\"off\"" }, classAttribute: "kbq-input kbq-datepicker" }, providers: [
|
|
1787
1875
|
KBQ_DATEPICKER_VALUE_ACCESSOR,
|
|
1788
1876
|
KBQ_DATEPICKER_VALIDATORS,
|
|
1789
1877
|
{ provide: KbqFormFieldControl, useExisting: KbqDatepickerInput },
|
|
@@ -1810,6 +1898,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
|
|
|
1810
1898
|
'[attr.max]': 'max ? toISO8601(max) : null',
|
|
1811
1899
|
'[attr.autocomplete]': '"off"',
|
|
1812
1900
|
'(paste)': 'onPaste($event)',
|
|
1901
|
+
'(drop)': 'onDrop($event)',
|
|
1902
|
+
'(dragstart)': 'draggingOwnText = true',
|
|
1903
|
+
'(dragend)': 'draggingOwnText = false',
|
|
1813
1904
|
'(change)': 'onChange()',
|
|
1814
1905
|
'(focus)': 'focusChanged(true)',
|
|
1815
1906
|
'(blur)': 'onBlur()',
|
|
@@ -1899,7 +1990,7 @@ class KbqDatepickerToggleIconComponent {
|
|
|
1899
1990
|
datepicker.datepickerInput.focus();
|
|
1900
1991
|
datepicker.open();
|
|
1901
1992
|
}
|
|
1902
|
-
/** @
|
|
1993
|
+
/** @docs-private */
|
|
1903
1994
|
onMousedown(event) {
|
|
1904
1995
|
// A press on the icon, focusable by its `tabindex`, would take the focus from the input.
|
|
1905
1996
|
event.preventDefault();
|