@koobiq/components 20.4.2 → 21.0.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/accordion/accordion-trigger.scss +3 -10
- package/accordion/accordion.scss +4 -6
- package/actions-panel/actions-panel-container.scss +45 -1
- package/alert/alert.component.scss +3 -2
- package/app-switcher/_app-switcher-theme.scss +0 -4
- package/app-switcher/app-switcher-dropdown-app.scss +3 -2
- package/app-switcher/app-switcher-dropdown-site.scss +2 -1
- package/app-switcher/{kbq-app-switcher-list-item.scss → app-switcher-list-item.scss} +18 -4
- package/app-switcher/app-switcher-tokens.scss +15 -0
- package/app-switcher/app-switcher.scss +14 -4
- package/autocomplete/autocomplete.scss +7 -6
- package/badge/badge.component.scss +5 -8
- package/breadcrumbs/breadcrumbs.scss +25 -10
- package/button/_button-base.scss +30 -7
- package/button/_button-theme.scss +16 -0
- package/button/button-group.scss +7 -0
- package/button/button-tokens.scss +0 -2
- package/button/button.scss +34 -2
- package/button-toggle/_button-toggle-theme.scss +7 -2
- package/button-toggle/button-toggle.scss +65 -15
- package/checkbox/_checkbox-theme.scss +4 -3
- package/checkbox/checkbox.scss +3 -6
- package/clamped-text/clamped-text.scss +6 -2
- package/code-block/code-block-tokens.scss +0 -224
- package/code-block/code-block.scss +20 -9
- package/content-panel/content-panel-aside.scss +3 -2
- package/content-panel/content-panel-container.scss +37 -0
- package/content-panel/content-panel.scss +4 -3
- package/core/highlight/_highlight-theme.scss +3 -1
- package/core/option/action-container.scss +2 -2
- package/core/option/action.scss +2 -1
- package/core/option/option.scss +2 -1
- package/core/pop-up/_pop-up.scss +0 -37
- package/core/selection/pseudo-checkbox/pseudo-checkbox.scss +5 -10
- package/core/styles/_core.scss +3 -0
- package/core/styles/_koobiq-theme.scss +5 -6
- package/core/styles/common/_animation.scss +44 -16
- package/core/styles/common/_groups-mixins.scss +21 -19
- package/core/styles/common/_groups.scss +4 -32
- package/core/styles/common/_index.scss +0 -2
- package/core/styles/common/_link.scss +117 -0
- package/core/styles/common/_list.scss +0 -26
- package/core/styles/common/_overlay.scss +8 -10
- package/core/styles/common/_rtl.scss +0 -14
- package/core/styles/common/_select.scss +33 -15
- package/core/styles/common/_squircle.scss +63 -0
- package/core/styles/common/_tokens.scss +0 -11
- package/core/styles/common/_vendor-prefixes.scss +0 -20
- package/core/styles/functions/_timing.scss +0 -22
- package/core/styles/theming/_scrollbar-theme.scss +6 -1
- package/core/styles/theming/_theming.scss +13 -65
- package/core/styles/typography/_index.scss +0 -1
- package/core/styles/typography/_typography.scss +0 -143
- package/core/styles/visual/_body.scss +1 -6
- package/core/styles/visual/_layout.scss +0 -12
- package/datepicker/calendar-body.scss +3 -1
- package/datepicker/calendar-header.scss +0 -1
- package/datepicker/datepicker-content.scss +33 -1
- package/datepicker/datepicker-toggle.scss +0 -38
- package/dl/dl-tokens.scss +10 -0
- package/dl/dl.scss +113 -13
- package/dropdown/_dropdown-theme.scss +4 -16
- package/dropdown/dropdown-item.scss +4 -10
- package/dropdown/dropdown.scss +2 -1
- package/empty-state/_empty-state-theme.scss +10 -4
- package/empty-state/empty-state-tokens.scss +4 -4
- package/empty-state/empty-state.scss +4 -0
- package/fesm2022/koobiq-components-accordion.mjs +347 -229
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +302 -187
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-alert.mjs +39 -39
- package/fesm2022/koobiq-components-alert.mjs.map +1 -1
- package/fesm2022/koobiq-components-app-switcher.mjs +677 -367
- package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
- package/fesm2022/koobiq-components-autocomplete.mjs +620 -253
- package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
- package/fesm2022/koobiq-components-badge.mjs +46 -48
- package/fesm2022/koobiq-components-badge.mjs.map +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs +221 -169
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs +565 -196
- package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-button.mjs +332 -116
- package/fesm2022/koobiq-components-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-checkbox.mjs +172 -132
- package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
- package/fesm2022/koobiq-components-clamped-text.mjs +165 -158
- package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +755 -601
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-content-panel.mjs +260 -143
- package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +4342 -1595
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +1713 -1606
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-divider.mjs +73 -36
- package/fesm2022/koobiq-components-divider.mjs.map +1 -1
- package/fesm2022/koobiq-components-dl.mjs +447 -89
- package/fesm2022/koobiq-components-dl.mjs.map +1 -1
- package/fesm2022/koobiq-components-dropdown.mjs +703 -599
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-dynamic-translation.mjs +20 -20
- package/fesm2022/koobiq-components-dynamic-translation.mjs.map +1 -1
- package/fesm2022/koobiq-components-ellipsis-center.mjs +46 -31
- package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-empty-state.mjs +116 -60
- package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
- package/fesm2022/koobiq-components-file-upload.mjs +550 -290
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +2810 -2538
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-flag.mjs +79 -24
- package/fesm2022/koobiq-components-flag.mjs.map +1 -1
- package/fesm2022/koobiq-components-form-field.mjs +389 -525
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +366 -136
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-inline-edit.mjs +429 -212
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-input.mjs +601 -459
- package/fesm2022/koobiq-components-input.mjs.map +1 -1
- package/fesm2022/koobiq-components-link-deprecated.mjs +196 -0
- package/fesm2022/koobiq-components-link-deprecated.mjs.map +1 -0
- package/fesm2022/koobiq-components-link.mjs +328 -125
- package/fesm2022/koobiq-components-link.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +583 -433
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-loader-overlay.mjs +167 -68
- package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
- package/fesm2022/koobiq-components-markdown.mjs +55 -78
- package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +853 -475
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +895 -556
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-notification-center.mjs +680 -310
- package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +46 -64
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +684 -285
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-progress-bar.mjs +87 -33
- package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-progress-spinner.mjs +52 -43
- package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
- package/fesm2022/koobiq-components-radio.mjs +450 -231
- package/fesm2022/koobiq-components-radio.mjs.map +1 -1
- package/fesm2022/koobiq-components-resizer.mjs +127 -21
- package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
- package/fesm2022/koobiq-components-scrollbar-deprecated.mjs +299 -0
- package/fesm2022/koobiq-components-scrollbar-deprecated.mjs.map +1 -0
- package/fesm2022/koobiq-components-scrollbar.mjs +745 -222
- package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-search-expandable.mjs +288 -126
- package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +883 -693
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidebar.mjs +207 -88
- package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs +689 -296
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-skeleton.mjs +815 -41
- package/fesm2022/koobiq-components-skeleton.mjs.map +1 -1
- package/fesm2022/koobiq-components-split-button.mjs +109 -88
- package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
- package/fesm2022/koobiq-components-splitter-deprecated.mjs +591 -0
- package/fesm2022/koobiq-components-splitter-deprecated.mjs.map +1 -0
- package/fesm2022/koobiq-components-splitter.mjs +890 -501
- package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
- package/fesm2022/koobiq-components-table.mjs +63 -49
- package/fesm2022/koobiq-components-table.mjs.map +1 -1
- package/fesm2022/koobiq-components-tabs.mjs +1062 -603
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-tags.mjs +886 -733
- package/fesm2022/koobiq-components-tags.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +213 -185
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-time-range.mjs +299 -147
- package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
- package/fesm2022/koobiq-components-timepicker.mjs +233 -245
- package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +344 -142
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-title.mjs +229 -145
- package/fesm2022/koobiq-components-title.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +463 -143
- package/fesm2022/koobiq-components-toast.mjs.map +1 -1
- package/fesm2022/koobiq-components-toggle.mjs +177 -130
- package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +657 -214
- package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
- package/fesm2022/koobiq-components-top-bar.mjs +61 -32
- package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +719 -488
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +1506 -558
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/fesm2022/koobiq-components-username.mjs +290 -135
- package/fesm2022/koobiq-components-username.mjs.map +1 -1
- package/file-upload/dropzone.scss +31 -3
- package/file-upload/file-upload-tokens.scss +2 -22
- package/file-upload/file-upload.scss +6 -0
- package/file-upload/multiple-file-upload.component.scss +14 -12
- package/file-upload/single-file-upload.component.scss +3 -2
- package/filter-bar/filters.scss +7 -0
- package/filter-bar/pipes/base-pipe.scss +3 -3
- package/filter-bar/pipes/pipe-date.scss +8 -1
- package/flag/flag-tokens.scss +22 -0
- package/flag/flag.scss +34 -21
- package/form-field/{_fiedset-theme.scss → _fieldset-theme.scss} +1 -5
- package/form-field/_form-field-theme.scss +4 -9
- package/form-field/cleaner.scss +3 -1
- package/form-field/fieldset.scss +3 -4
- package/form-field/form-field.scss +26 -21
- package/form-field/password-toggle.scss +3 -1
- package/icon/_icon-button-theme.scss +7 -0
- package/icon/_icon-theme.scss +10 -7
- package/icon/icon-button.scss +0 -2
- package/icon/icon-tokens.scss +12 -9
- package/inline-edit/inline-edit.scss +40 -54
- package/input/input.scss +4 -0
- package/link/{_link-theme.scss → deprecated/_link-theme.scss} +11 -6
- package/link/deprecated/link-tokens.scss +27 -0
- package/link/link-tokens.scss +6 -25
- package/link/link.scss +137 -0
- package/list/list.scss +3 -2
- package/loader-overlay/_loader-overlay-theme.scss +19 -10
- package/loader-overlay/loader-overlay-tokens.scss +0 -2
- package/loader-overlay/loader-overlay.scss +7 -1
- package/markdown/_markdown-theme.scss +16 -0
- package/markdown/markdown-tokens.scss +5 -0
- package/markdown/markdown.scss +2 -1
- package/modal/_modal-animation.scss +23 -14
- package/modal/modal-tokens.scss +2 -1
- package/modal/modal.scss +35 -31
- package/navbar/_navbar-item_horizontal.scss +8 -6
- package/navbar/_navbar-item_vertical.scss +18 -6
- package/navbar/_navbar-theme.scss +9 -1
- package/navbar/navbar-brand.scss +8 -6
- package/navbar/navbar-divider.scss +1 -1
- package/navbar/navbar-item.scss +8 -9
- package/navbar/navbar-toggle.scss +3 -3
- package/navbar/navbar-tokens.scss +14 -0
- package/navbar/navbar.scss +1 -2
- package/navbar/vertical-navbar.scss +2 -2
- package/notification-center/_notification-center-theme.scss +11 -6
- package/notification-center/notification-center-tokens.scss +33 -0
- package/notification-center/notification-center.scss +58 -20
- package/notification-center/notification-item.scss +15 -6
- package/package.json +112 -81
- package/popover/popover-tokens.scss +0 -2
- package/popover/popover.scss +41 -19
- package/prebuilt-themes/theme.css +1 -1
- package/progress-bar/_progress-bar-theme.scss +20 -3
- package/progress-bar/progress-bar-tokens.scss +3 -0
- package/progress-bar/progress-bar.scss +36 -8
- package/progress-spinner/progress-spinner.scss +4 -3
- package/radio/_radio-theme.scss +21 -4
- package/radio/radio-tokens.scss +7 -3
- package/radio/radio.scss +55 -8
- package/schematics/collection.json +399 -7
- package/schematics/migrations/accordion-state-saving-default/README.md +60 -0
- package/schematics/migrations/accordion-state-saving-default/data.js +75 -0
- package/schematics/migrations/accordion-state-saving-default/index.js +60 -0
- package/schematics/migrations/accordion-state-saving-default/schema.json +15 -0
- package/schematics/migrations/actions-panel-overlay-container/README.md +35 -0
- package/schematics/migrations/actions-panel-overlay-container/data.js +47 -0
- package/schematics/migrations/actions-panel-overlay-container/index.js +54 -0
- package/schematics/migrations/actions-panel-overlay-container/schema.json +15 -0
- package/schematics/migrations/alert-signals/README.md +13 -7
- package/schematics/migrations/alert-signals/data.js +3 -0
- package/schematics/migrations/alert-signals/index.js +70 -203
- package/schematics/migrations/angular-animations-removal/README.md +46 -0
- package/schematics/migrations/angular-animations-removal/data.js +150 -0
- package/schematics/migrations/angular-animations-removal/index.js +20 -0
- package/schematics/migrations/angular-animations-removal/schema.json +15 -0
- package/schematics/migrations/app-switcher-signals/README.md +88 -0
- package/schematics/migrations/app-switcher-signals/data.js +136 -0
- package/schematics/migrations/app-switcher-signals/index.js +365 -0
- package/schematics/migrations/app-switcher-signals/schema.json +20 -0
- package/schematics/migrations/autocomplete-panel-width-auto/README.md +2 -2
- package/schematics/migrations/autocomplete-panel-width-auto/index.js +1 -1
- package/schematics/migrations/autocomplete-signals/README.md +92 -0
- package/schematics/migrations/autocomplete-signals/data.js +149 -0
- package/schematics/migrations/autocomplete-signals/index.js +706 -0
- package/schematics/migrations/autocomplete-signals/schema.json +20 -0
- package/schematics/migrations/badge-signals/README.md +77 -0
- package/schematics/migrations/badge-signals/data.js +109 -0
- package/schematics/migrations/badge-signals/index.js +693 -0
- package/schematics/migrations/badge-signals/schema.json +20 -0
- package/schematics/migrations/button-state-and-styles/README.md +129 -0
- package/schematics/migrations/button-state-and-styles/data.js +136 -0
- package/schematics/migrations/button-state-and-styles/index.js +220 -0
- package/schematics/migrations/button-state-and-styles/schema.json +20 -0
- package/schematics/migrations/button-supported-colors/README.md +73 -0
- package/schematics/migrations/button-supported-colors/data.js +106 -0
- package/schematics/migrations/button-supported-colors/index.js +260 -0
- package/schematics/migrations/button-supported-colors/schema.json +20 -0
- package/schematics/migrations/button-toggle-signals-and-aria/README.md +137 -0
- package/schematics/migrations/button-toggle-signals-and-aria/data.js +200 -0
- package/schematics/migrations/button-toggle-signals-and-aria/index.js +496 -0
- package/schematics/migrations/button-toggle-signals-and-aria/schema.json +20 -0
- package/schematics/migrations/button-truncation/README.md +110 -0
- package/schematics/migrations/button-truncation/data.js +88 -0
- package/schematics/migrations/button-truncation/index.js +269 -0
- package/schematics/migrations/button-truncation/schema.json +20 -0
- package/schematics/migrations/checkbox-signals/README.md +76 -0
- package/schematics/migrations/checkbox-signals/data.js +114 -0
- package/schematics/migrations/checkbox-signals/index.js +634 -0
- package/schematics/migrations/checkbox-signals/schema.json +20 -0
- package/schematics/migrations/clamped-text-disclosure/README.md +62 -0
- package/schematics/migrations/clamped-text-disclosure/data.js +101 -0
- package/schematics/migrations/clamped-text-disclosure/index.js +59 -0
- package/schematics/migrations/clamped-text-disclosure/schema.json +15 -0
- package/schematics/migrations/code-block-signals/README.md +84 -0
- package/schematics/migrations/code-block-signals/data.js +121 -0
- package/schematics/migrations/code-block-signals/index.js +700 -0
- package/schematics/migrations/code-block-signals/schema.json +20 -0
- package/schematics/migrations/color-signals/README.md +46 -0
- package/schematics/migrations/color-signals/data.js +131 -0
- package/schematics/migrations/color-signals/index.js +19 -0
- package/schematics/migrations/color-signals/schema.json +20 -0
- package/schematics/migrations/core-mixins-removal/README.md +20 -0
- package/schematics/migrations/core-mixins-removal/data.js +27 -0
- package/schematics/migrations/core-mixins-removal/index.js +17 -0
- package/schematics/migrations/core-mixins-removal/schema.json +15 -0
- package/schematics/migrations/css-selectors/README.md +2 -2
- package/schematics/migrations/css-selectors/index.js +1 -1
- package/schematics/migrations/datepicker-signals/README.md +24 -0
- package/schematics/migrations/datepicker-signals/data.js +49 -0
- package/schematics/migrations/datepicker-signals/index.js +17 -0
- package/schematics/migrations/datepicker-signals/schema.json +15 -0
- package/schematics/migrations/deprecated-icons/README.md +2 -2
- package/schematics/migrations/deprecated-icons/index.js +1 -1
- package/schematics/migrations/design-tokens-v4/README.md +75 -0
- package/schematics/migrations/design-tokens-v4/index.js +59 -0
- package/schematics/migrations/design-tokens-v4/schema.json +15 -0
- package/schematics/migrations/divider-signals-and-aria/README.md +47 -0
- package/schematics/migrations/divider-signals-and-aria/data.js +62 -0
- package/schematics/migrations/divider-signals-and-aria/index.js +211 -0
- package/schematics/migrations/divider-signals-and-aria/schema.json +15 -0
- package/schematics/migrations/dl-attribute-coercion/README.md +59 -0
- package/schematics/migrations/dl-attribute-coercion/data.js +85 -0
- package/schematics/migrations/dl-attribute-coercion/index.js +161 -0
- package/schematics/migrations/dl-attribute-coercion/schema.json +15 -0
- package/schematics/migrations/dl-standalone-names/README.md +49 -0
- package/schematics/migrations/dl-standalone-names/data.js +44 -0
- package/schematics/migrations/dl-standalone-names/index.js +321 -0
- package/schematics/migrations/dl-standalone-names/schema.json +20 -0
- package/schematics/migrations/dropdown-demote-overlay/README.md +137 -0
- package/schematics/migrations/dropdown-demote-overlay/data.js +84 -0
- package/schematics/migrations/dropdown-demote-overlay/index.js +288 -0
- package/schematics/migrations/dropdown-demote-overlay/schema.json +20 -0
- package/schematics/migrations/dropdown-signals/README.md +83 -0
- package/schematics/migrations/dropdown-signals/data.js +152 -0
- package/schematics/migrations/dropdown-signals/index.js +19 -0
- package/schematics/migrations/dropdown-signals/schema.json +20 -0
- package/schematics/migrations/empty-state-error-color/README.md +84 -0
- package/schematics/migrations/empty-state-error-color/data.js +85 -0
- package/schematics/migrations/empty-state-error-color/index.js +71 -0
- package/schematics/migrations/empty-state-error-color/schema.json +15 -0
- package/schematics/migrations/empty-state-size-attr/README.md +2 -2
- package/schematics/migrations/empty-state-size-attr/index.js +1 -1
- package/schematics/migrations/file-upload-cva-and-primitives/README.md +70 -0
- package/schematics/migrations/file-upload-cva-and-primitives/data.js +97 -0
- package/schematics/migrations/file-upload-cva-and-primitives/index.js +60 -0
- package/schematics/migrations/file-upload-cva-and-primitives/schema.json +15 -0
- package/schematics/migrations/file-upload-deprecated-outputs/README.md +90 -0
- package/schematics/migrations/file-upload-deprecated-outputs/data.js +20 -0
- package/schematics/migrations/file-upload-deprecated-outputs/index.js +70 -0
- package/schematics/migrations/file-upload-deprecated-outputs/schema.json +20 -0
- package/schematics/migrations/filter-bar-rename-action/README.md +183 -0
- package/schematics/migrations/filter-bar-rename-action/data.js +151 -0
- package/schematics/migrations/filter-bar-rename-action/index.js +177 -0
- package/schematics/migrations/filter-bar-rename-action/schema.json +20 -0
- package/schematics/migrations/filter-bar-signals/README.md +27 -16
- package/schematics/migrations/filter-bar-signals/data.js +1 -2
- package/schematics/migrations/filter-bar-signals/index.js +100 -195
- package/schematics/migrations/filter-bar-state-saving-default/README.md +53 -0
- package/schematics/migrations/filter-bar-state-saving-default/data.js +87 -0
- package/schematics/migrations/filter-bar-state-saving-default/index.js +61 -0
- package/schematics/migrations/filter-bar-state-saving-default/schema.json +15 -0
- package/schematics/migrations/flag-inner-html/README.md +67 -0
- package/schematics/migrations/flag-inner-html/data.js +58 -0
- package/schematics/migrations/flag-inner-html/index.js +61 -0
- package/schematics/migrations/flag-inner-html/schema.json +15 -0
- package/schematics/migrations/form-field-signals/README.md +125 -0
- package/schematics/migrations/form-field-signals/data.js +288 -0
- package/schematics/migrations/form-field-signals/index.js +382 -0
- package/schematics/migrations/form-field-signals/schema.json +20 -0
- package/schematics/migrations/icon-semantics-and-api/README.md +65 -0
- package/schematics/migrations/icon-semantics-and-api/data.js +97 -0
- package/schematics/migrations/icon-semantics-and-api/index.js +64 -0
- package/schematics/migrations/icon-semantics-and-api/schema.json +15 -0
- package/schematics/migrations/icons-replacement/README.md +5 -5
- package/schematics/migrations/icons-replacement/index.js +1 -1
- package/schematics/migrations/inline-edit-a11y-and-types/README.md +82 -0
- package/schematics/migrations/inline-edit-a11y-and-types/data.js +117 -0
- package/schematics/migrations/inline-edit-a11y-and-types/index.js +97 -0
- package/schematics/migrations/inline-edit-a11y-and-types/schema.json +20 -0
- package/schematics/migrations/input-number-surface/README.md +140 -0
- package/schematics/migrations/input-number-surface/data.js +135 -0
- package/schematics/migrations/input-number-surface/index.js +292 -0
- package/schematics/migrations/input-number-surface/schema.json +20 -0
- package/schematics/migrations/input-signals/README.md +20 -0
- package/schematics/migrations/input-signals/data.js +30 -0
- package/schematics/migrations/input-signals/index.js +17 -0
- package/schematics/migrations/input-signals/schema.json +15 -0
- package/schematics/migrations/link-deprecated-path/README.md +144 -0
- package/schematics/migrations/link-deprecated-path/index.js +19 -0
- package/schematics/migrations/link-deprecated-path/schema.json +20 -0
- package/schematics/migrations/link-signals/README.md +71 -0
- package/schematics/migrations/link-signals/data.js +116 -0
- package/schematics/migrations/link-signals/index.js +415 -0
- package/schematics/migrations/link-signals/schema.json +20 -0
- package/schematics/migrations/list-signals/README.md +22 -0
- package/schematics/migrations/list-signals/data.js +35 -0
- package/schematics/migrations/list-signals/index.js +17 -0
- package/schematics/migrations/list-signals/schema.json +15 -0
- package/schematics/migrations/list-tree-multiple-input/README.md +105 -0
- package/schematics/migrations/list-tree-multiple-input/data.js +74 -0
- package/schematics/migrations/list-tree-multiple-input/index.js +221 -0
- package/schematics/migrations/list-tree-multiple-input/schema.json +20 -0
- package/schematics/migrations/loader-overlay-signals/README.md +62 -0
- package/schematics/migrations/loader-overlay-signals/data.js +101 -0
- package/schematics/migrations/loader-overlay-signals/index.js +697 -0
- package/schematics/migrations/loader-overlay-signals/schema.json +20 -0
- package/schematics/migrations/loader-overlay-size-attr/README.md +2 -2
- package/schematics/migrations/loader-overlay-size-attr/index.js +1 -1
- package/schematics/migrations/locale-configuration-providers/README.md +163 -0
- package/schematics/migrations/locale-configuration-providers/data.js +257 -0
- package/schematics/migrations/locale-configuration-providers/index.js +294 -0
- package/schematics/migrations/locale-configuration-providers/schema.json +20 -0
- package/schematics/migrations/mandatory-peer-dependencies/README.md +70 -0
- package/schematics/migrations/mandatory-peer-dependencies/index.js +42 -0
- package/schematics/migrations/mandatory-peer-dependencies/schema.json +15 -0
- package/schematics/migrations/markdown-signals/README.md +58 -0
- package/schematics/migrations/markdown-signals/data.js +79 -0
- package/schematics/migrations/markdown-signals/index.js +639 -0
- package/schematics/migrations/markdown-signals/schema.json +20 -0
- package/schematics/migrations/modal-dialog-semantics/README.md +106 -0
- package/schematics/migrations/modal-dialog-semantics/data.js +110 -0
- package/schematics/migrations/modal-dialog-semantics/index.js +58 -0
- package/schematics/migrations/modal-dialog-semantics/schema.json +15 -0
- package/schematics/migrations/modal-signals/README.md +88 -0
- package/schematics/migrations/modal-signals/data.js +132 -0
- package/schematics/migrations/modal-signals/index.js +19 -0
- package/schematics/migrations/modal-signals/schema.json +20 -0
- package/schematics/migrations/navbar-signals-and-aria/README.md +111 -0
- package/schematics/migrations/navbar-signals-and-aria/data.js +198 -0
- package/schematics/migrations/navbar-signals-and-aria/index.js +568 -0
- package/schematics/migrations/navbar-signals-and-aria/schema.json +20 -0
- package/schematics/migrations/new-icons-pack/README.md +10 -10
- package/schematics/migrations/new-icons-pack/index.js +1 -1
- package/schematics/migrations/notification-center-signals/README.md +67 -0
- package/schematics/migrations/notification-center-signals/data.js +66 -0
- package/schematics/migrations/notification-center-signals/index.js +61 -0
- package/schematics/migrations/notification-center-signals/schema.json +15 -0
- package/schematics/migrations/option-signals/README.md +37 -0
- package/schematics/migrations/option-signals/data.js +86 -0
- package/schematics/migrations/option-signals/index.js +19 -0
- package/schematics/migrations/option-signals/schema.json +20 -0
- package/schematics/migrations/popover-leave-delay/README.md +51 -0
- package/schematics/migrations/popover-leave-delay/data.js +61 -0
- package/schematics/migrations/popover-leave-delay/index.js +54 -0
- package/schematics/migrations/popover-leave-delay/schema.json +15 -0
- package/schematics/migrations/progress-bar-percentage-and-aria/README.md +54 -0
- package/schematics/migrations/progress-bar-percentage-and-aria/data.js +76 -0
- package/schematics/migrations/progress-bar-percentage-and-aria/index.js +58 -0
- package/schematics/migrations/progress-bar-percentage-and-aria/schema.json +15 -0
- package/schematics/migrations/progress-spinner-signals/README.md +72 -0
- package/schematics/migrations/progress-spinner-signals/data.js +83 -0
- package/schematics/migrations/progress-spinner-signals/index.js +694 -0
- package/schematics/migrations/progress-spinner-signals/schema.json +20 -0
- package/schematics/migrations/query-list-signals/README.md +32 -0
- package/schematics/migrations/query-list-signals/data.js +70 -0
- package/schematics/migrations/query-list-signals/index.js +17 -0
- package/schematics/migrations/query-list-signals/schema.json +15 -0
- package/schematics/migrations/radio-signals-and-aria/README.md +82 -0
- package/schematics/migrations/radio-signals-and-aria/data.js +163 -0
- package/schematics/migrations/radio-signals-and-aria/index.js +39 -0
- package/schematics/migrations/radio-signals-and-aria/schema.json +20 -0
- package/schematics/migrations/read-state-dwell-handlers/README.md +125 -0
- package/schematics/migrations/read-state-dwell-handlers/data.js +45 -0
- package/schematics/migrations/read-state-dwell-handlers/index.js +215 -0
- package/schematics/migrations/read-state-dwell-handlers/schema.json +20 -0
- package/schematics/migrations/scrollbar-deprecated-path/README.md +128 -0
- package/schematics/migrations/scrollbar-deprecated-path/index.js +20 -0
- package/schematics/migrations/scrollbar-deprecated-path/schema.json +20 -0
- package/schematics/migrations/select-signal-inputs/README.md +61 -0
- package/schematics/migrations/select-signal-inputs/data.js +99 -0
- package/schematics/migrations/select-signal-inputs/index.js +57 -0
- package/schematics/migrations/select-signal-inputs/schema.json +15 -0
- package/schematics/migrations/sidepanel-non-modal-behavior/README.md +57 -0
- package/schematics/migrations/sidepanel-non-modal-behavior/data.js +111 -0
- package/schematics/migrations/sidepanel-non-modal-behavior/index.js +57 -0
- package/schematics/migrations/sidepanel-non-modal-behavior/schema.json +15 -0
- package/schematics/migrations/signal-inputs-subclasses/README.md +28 -0
- package/schematics/migrations/signal-inputs-subclasses/data.js +69 -0
- package/schematics/migrations/signal-inputs-subclasses/index.js +17 -0
- package/schematics/migrations/signal-inputs-subclasses/schema.json +15 -0
- package/schematics/migrations/split-button-optional-disabled/README.md +47 -0
- package/schematics/migrations/split-button-optional-disabled/data.js +53 -0
- package/schematics/migrations/split-button-optional-disabled/index.js +57 -0
- package/schematics/migrations/split-button-optional-disabled/schema.json +15 -0
- package/schematics/migrations/splitter-deprecated-path/README.md +136 -0
- package/schematics/migrations/splitter-deprecated-path/index.js +20 -0
- package/schematics/migrations/splitter-deprecated-path/schema.json +20 -0
- package/schematics/migrations/state-saving-default/README.md +67 -0
- package/schematics/migrations/state-saving-default/data.js +88 -0
- package/schematics/migrations/state-saving-default/index.js +62 -0
- package/schematics/migrations/state-saving-default/schema.json +15 -0
- package/schematics/migrations/table-cell-content/README.md +55 -0
- package/schematics/migrations/table-cell-content/data.js +66 -0
- package/schematics/migrations/table-cell-content/index.js +66 -0
- package/schematics/migrations/table-cell-content/schema.json +15 -0
- package/schematics/migrations/tabs-signals-and-aria/README.md +93 -0
- package/schematics/migrations/tabs-signals-and-aria/data.js +139 -0
- package/schematics/migrations/tabs-signals-and-aria/index.js +65 -0
- package/schematics/migrations/tabs-signals-and-aria/schema.json +15 -0
- package/schematics/migrations/tag-list-cleaner/README.md +58 -0
- package/schematics/migrations/tag-list-cleaner/data.js +42 -0
- package/schematics/migrations/tag-list-cleaner/index.js +196 -0
- package/schematics/migrations/tag-list-cleaner/schema.json +20 -0
- package/schematics/migrations/tag-slots/README.md +41 -0
- package/schematics/migrations/tag-slots/index.js +190 -0
- package/schematics/migrations/tag-slots/schema.json +20 -0
- package/schematics/migrations/tags-signals/README.md +85 -0
- package/schematics/migrations/tags-signals/data.js +103 -0
- package/schematics/migrations/tags-signals/index.js +673 -0
- package/schematics/migrations/tags-signals/schema.json +20 -0
- package/schematics/migrations/textarea-signals/README.md +72 -0
- package/schematics/migrations/textarea-signals/data.js +121 -0
- package/schematics/migrations/textarea-signals/index.js +379 -0
- package/schematics/migrations/textarea-signals/schema.json +20 -0
- package/schematics/migrations/time-range-title-for/README.md +164 -0
- package/schematics/migrations/time-range-title-for/data.js +139 -0
- package/schematics/migrations/time-range-title-for/index.js +163 -0
- package/schematics/migrations/time-range-title-for/schema.json +20 -0
- package/schematics/migrations/timepicker-signals/README.md +78 -0
- package/schematics/migrations/timepicker-signals/data.js +82 -0
- package/schematics/migrations/timepicker-signals/index.js +709 -0
- package/schematics/migrations/timepicker-signals/schema.json +20 -0
- package/schematics/migrations/timezone-grouping-utils/README.md +73 -0
- package/schematics/migrations/timezone-grouping-utils/data.js +101 -0
- package/schematics/migrations/timezone-grouping-utils/index.js +64 -0
- package/schematics/migrations/timezone-grouping-utils/schema.json +15 -0
- package/schematics/migrations/title-encapsulation/README.md +49 -0
- package/schematics/migrations/title-encapsulation/data.js +69 -0
- package/schematics/migrations/title-encapsulation/index.js +57 -0
- package/schematics/migrations/title-encapsulation/schema.json +15 -0
- package/schematics/migrations/toast-stack-and-defaults/README.md +102 -0
- package/schematics/migrations/toast-stack-and-defaults/data.js +79 -0
- package/schematics/migrations/toast-stack-and-defaults/index.js +53 -0
- package/schematics/migrations/toast-stack-and-defaults/schema.json +15 -0
- package/schematics/migrations/tooltip-pointer-events-and-types/README.md +53 -0
- package/schematics/migrations/tooltip-pointer-events-and-types/data.js +89 -0
- package/schematics/migrations/tooltip-pointer-events-and-types/index.js +60 -0
- package/schematics/migrations/tooltip-pointer-events-and-types/schema.json +15 -0
- package/schematics/migrations/top-bar-container-selectors/README.md +111 -0
- package/schematics/migrations/top-bar-container-selectors/data.js +56 -0
- package/schematics/migrations/top-bar-container-selectors/index.js +84 -0
- package/schematics/migrations/top-bar-container-selectors/schema.json +20 -0
- package/schematics/migrations/tree-select-signals/README.md +61 -0
- package/schematics/migrations/tree-select-signals/data.js +106 -0
- package/schematics/migrations/tree-select-signals/index.js +58 -0
- package/schematics/migrations/tree-select-signals/schema.json +15 -0
- package/schematics/migrations/tree-signals/README.md +82 -0
- package/schematics/migrations/tree-signals/data.js +123 -0
- package/schematics/migrations/tree-signals/index.js +54 -0
- package/schematics/migrations/tree-signals/schema.json +15 -0
- package/schematics/migrations/tree-state-saving-default/README.md +66 -0
- package/schematics/migrations/tree-state-saving-default/data.js +78 -0
- package/schematics/migrations/tree-state-saving-default/index.js +60 -0
- package/schematics/migrations/tree-state-saving-default/schema.json +15 -0
- package/schematics/migrations/username-pipe-injection/README.md +59 -0
- package/schematics/migrations/username-pipe-injection/data.js +78 -0
- package/schematics/migrations/username-pipe-injection/index.js +58 -0
- package/schematics/migrations/username-pipe-injection/schema.json +15 -0
- package/schematics/migrations/v20-upgrade/README.md +36 -16
- package/schematics/migrations/v20-upgrade/data.js +124 -77
- package/schematics/migrations/v20-upgrade/index.js +6 -213
- package/schematics/migrations/v21-upgrade/README.md +271 -0
- package/schematics/migrations/v21-upgrade/data.js +1371 -0
- package/schematics/migrations/v21-upgrade/index.js +94 -0
- package/schematics/migrations/v21-upgrade/schema.json +20 -0
- package/schematics/migrations/zoneless-change-detection/README.md +30 -0
- package/schematics/migrations/zoneless-change-detection/data.js +29 -0
- package/schematics/migrations/zoneless-change-detection/index.js +20 -0
- package/schematics/migrations/zoneless-change-detection/schema.json +15 -0
- package/schematics/migrations.json +392 -2
- package/schematics/ng-add/index.js +515 -14
- package/schematics/ng-add/schema.json +15 -0
- package/schematics/utils/deprecated-path-migration.js +61 -0
- package/schematics/utils/package-config.js +9 -105
- package/scrollbar/{_scrollbar-component-theme.scss → deprecated/_scrollbar-component-theme.scss} +1 -1
- package/scrollbar/{scrollbar.component.scss → deprecated/scrollbar.component.scss} +1 -1
- package/scrollbar/native-scrollbar.scss +68 -0
- package/scrollbar/scrollbar-tokens.scss +13 -22
- package/scrollbar/scrollbar-track.scss +94 -0
- package/scrollbar/scrollbar-viewport.scss +33 -0
- package/scrollbar/scrollbar.scss +24 -0
- package/search-expandable/search-expandable-tokens.scss +4 -0
- package/search-expandable/search-expandable.scss +4 -2
- package/select/_select-theme.scss +3 -16
- package/select/select.scss +0 -6
- package/sidebar/sidebar.scss +20 -0
- package/sidepanel/_sidepanel-theme.scss +1 -1
- package/sidepanel/sidepanel-tokens.scss +7 -1
- package/sidepanel/sidepanel.scss +41 -5
- package/skeleton/skeleton-presets.scss +350 -0
- package/skeleton/skeleton-tokens.scss +127 -0
- package/skeleton/skeleton.scss +53 -45
- package/split-button/_split-button-theme.scss +4 -4
- package/split-button/split-button.scss +2 -6
- package/splitter/{_splitter-theme.scss → deprecated/_splitter-theme.scss} +1 -1
- package/splitter/deprecated/splitter.scss +51 -0
- package/splitter/splitter-tokens.scss +19 -0
- package/splitter/splitter.scss +148 -28
- package/table/_table-theme.scss +13 -12
- package/table/table-tokens.scss +8 -0
- package/table/table.scss +47 -22
- package/tabs/_tabs-common.scss +14 -14
- package/tabs/_tabs-theme.scss +4 -5
- package/tabs/tab-body.scss +49 -1
- package/tabs/tab-header.scss +2 -1
- package/tags/tag-list.scss +4 -0
- package/tags/tag.scss +19 -1
- package/time-range/time-range.scss +9 -0
- package/timezone/timezone-option.component.scss +4 -7
- package/timezone/timezone-select.component.scss +3 -0
- package/toast/_toast-theme.scss +1 -4
- package/toast/toast-container.component.scss +19 -13
- package/toast/toast-tokens.scss +12 -6
- package/toast/toast.component.scss +42 -19
- package/toggle/_toggle-theme.scss +4 -10
- package/toggle/toggle.scss +67 -26
- package/tooltip/_tooltip-theme.scss +7 -1
- package/tooltip/tooltip-tokens.scss +1 -2
- package/tooltip/tooltip.scss +55 -9
- package/top-bar/top-bar-tokens.scss +13 -2
- package/top-bar/top-bar.scss +24 -19
- package/tree/_tree-theme.scss +0 -1
- package/tree/toggle.scss +5 -9
- package/tree/tree-option.scss +2 -4
- package/tree/tree-tokens.scss +2 -1
- package/tree/tree.scss +3 -5
- package/tree-select/_tree-select-theme.scss +4 -15
- package/tree-select/tree-select-tokens.scss +16 -0
- package/tree-select/tree-select.scss +0 -6
- package/{accordion/index.d.ts → types/koobiq-components-accordion.d.ts} +102 -84
- package/{actions-panel/index.d.ts → types/koobiq-components-actions-panel.d.ts} +44 -59
- package/{alert/index.d.ts → types/koobiq-components-alert.d.ts} +8 -3
- package/types/koobiq-components-app-switcher.d.ts +406 -0
- package/types/koobiq-components-autocomplete.d.ts +443 -0
- package/{badge/index.d.ts → types/koobiq-components-badge.d.ts} +25 -20
- package/{breadcrumbs/index.d.ts → types/koobiq-components-breadcrumbs.d.ts} +97 -46
- package/types/koobiq-components-button-toggle.d.ts +340 -0
- package/types/koobiq-components-button.d.ts +296 -0
- package/types/koobiq-components-checkbox.d.ts +172 -0
- package/types/koobiq-components-clamped-text.d.ts +184 -0
- package/{code-block/index.d.ts → types/koobiq-components-code-block.d.ts} +114 -79
- package/{content-panel/index.d.ts → types/koobiq-components-content-panel.d.ts} +81 -25
- package/{core/index.d.ts → types/koobiq-components-core.d.ts} +2827 -865
- package/{datepicker/index.d.ts → types/koobiq-components-datepicker.d.ts} +161 -116
- package/types/koobiq-components-divider.d.ts +43 -0
- package/types/koobiq-components-dl.d.ts +235 -0
- package/{dropdown/index.d.ts → types/koobiq-components-dropdown.d.ts} +245 -239
- package/types/koobiq-components-ellipsis-center.d.ts +85 -0
- package/types/koobiq-components-empty-state.d.ts +106 -0
- package/{file-upload/index.d.ts → types/koobiq-components-file-upload.d.ts} +214 -107
- package/{filter-bar/index.d.ts → types/koobiq-components-filter-bar.d.ts} +410 -495
- package/types/koobiq-components-flag.d.ts +68 -0
- package/{form-field/index.d.ts → types/koobiq-components-form-field.d.ts} +167 -191
- package/types/koobiq-components-icon.d.ts +333 -0
- package/{inline-edit/index.d.ts → types/koobiq-components-inline-edit.d.ts} +109 -46
- package/types/koobiq-components-input.d.ts +477 -0
- package/types/koobiq-components-link-deprecated.d.ts +101 -0
- package/types/koobiq-components-link.d.ts +176 -0
- package/{list/index.d.ts → types/koobiq-components-list.d.ts} +162 -99
- package/types/koobiq-components-loader-overlay.d.ts +101 -0
- package/{markdown/index.d.ts → types/koobiq-components-markdown.d.ts} +16 -24
- package/types/koobiq-components-modal.d.ts +666 -0
- package/types/koobiq-components-navbar.d.ts +569 -0
- package/types/koobiq-components-notification-center.d.ts +500 -0
- package/{overflow-items/index.d.ts → types/koobiq-components-overflow-items.d.ts} +8 -22
- package/types/koobiq-components-popover.d.ts +468 -0
- package/types/koobiq-components-progress-bar.d.ts +67 -0
- package/{progress-spinner/index.d.ts → types/koobiq-components-progress-spinner.d.ts} +33 -10
- package/types/koobiq-components-radio.d.ts +294 -0
- package/{resizer/index.d.ts → types/koobiq-components-resizer.d.ts} +37 -2
- package/{scrollbar/index.d.ts → types/koobiq-components-scrollbar-deprecated.d.ts} +18 -1
- package/types/koobiq-components-scrollbar.d.ts +154 -0
- package/types/koobiq-components-search-expandable.d.ts +164 -0
- package/{select/index.d.ts → types/koobiq-components-select.d.ts} +360 -167
- package/types/koobiq-components-sidebar.d.ts +152 -0
- package/types/koobiq-components-sidepanel.d.ts +436 -0
- package/types/koobiq-components-skeleton.d.ts +234 -0
- package/types/koobiq-components-split-button.d.ts +65 -0
- package/{splitter/index.d.ts → types/koobiq-components-splitter-deprecated.d.ts} +44 -1
- package/types/koobiq-components-splitter.d.ts +406 -0
- package/types/koobiq-components-table.d.ts +44 -0
- package/types/koobiq-components-tabs.d.ts +888 -0
- package/{tags/index.d.ts → types/koobiq-components-tags.d.ts} +249 -133
- package/types/koobiq-components-textarea.d.ts +178 -0
- package/{time-range/index.d.ts → types/koobiq-components-time-range.d.ts} +135 -62
- package/types/koobiq-components-timepicker.d.ts +223 -0
- package/types/koobiq-components-timezone.d.ts +266 -0
- package/types/koobiq-components-title.d.ts +184 -0
- package/types/koobiq-components-toast.d.ts +289 -0
- package/types/koobiq-components-toggle.d.ts +121 -0
- package/types/koobiq-components-tooltip.d.ts +610 -0
- package/types/koobiq-components-top-bar.d.ts +61 -0
- package/types/koobiq-components-tree-select.d.ts +667 -0
- package/types/koobiq-components-tree.d.ts +1290 -0
- package/types/koobiq-components-username.d.ts +340 -0
- package/username/_username-theme.scss +35 -0
- package/username/username.scss +10 -34
- package/app-switcher/index.d.ts +0 -276
- package/autocomplete/index.d.ts +0 -286
- package/button/index.d.ts +0 -153
- package/button-toggle/index.d.ts +0 -162
- package/checkbox/index.d.ts +0 -163
- package/clamped-text/index.d.ts +0 -146
- package/core/styles/_tokens.scss +0 -7
- package/core/styles/common/_clearfix.scss +0 -13
- package/core/styles/common/_popup.scss +0 -6
- package/core/styles/functions/_index.scss +0 -3
- package/core/styles/functions/_number.scss +0 -60
- package/core/styles/functions/_string.scss +0 -18
- package/core/styles/theming/scrollbar-tokens.scss +0 -25
- package/core/styles/typography/_typography-utils.scss +0 -84
- package/divider/index.d.ts +0 -20
- package/dl/index.d.ts +0 -45
- package/ellipsis-center/index.d.ts +0 -71
- package/empty-state/index.d.ts +0 -45
- package/flag/index.d.ts +0 -44
- package/icon/index.d.ts +0 -200
- package/input/index.d.ts +0 -354
- package/link/index.d.ts +0 -56
- package/loader-overlay/index.d.ts +0 -57
- package/modal/index.d.ts +0 -339
- package/navbar/index.d.ts +0 -372
- package/notification-center/index.d.ts +0 -323
- package/popover/index.d.ts +0 -182
- package/prebuilt-themes/dark-theme.css +0 -1
- package/prebuilt-themes/light-theme.css +0 -1
- package/progress-bar/index.d.ts +0 -31
- package/radio/index.d.ts +0 -203
- package/search-expandable/index.d.ts +0 -101
- package/sidebar/index.d.ts +0 -94
- package/sidepanel/index.d.ts +0 -272
- package/skeleton/index.d.ts +0 -26
- package/split-button/index.d.ts +0 -46
- package/table/index.d.ts +0 -25
- package/tabs/index.d.ts +0 -677
- package/textarea/index.d.ts +0 -138
- package/timepicker/index.d.ts +0 -197
- package/timezone/index.d.ts +0 -125
- package/title/index.d.ts +0 -139
- package/toast/index.d.ts +0 -178
- package/toggle/index.d.ts +0 -104
- package/tooltip/index.d.ts +0 -335
- package/top-bar/index.d.ts +0 -33
- package/tree/index.d.ts +0 -802
- package/tree-select/index.d.ts +0 -475
- package/username/index.d.ts +0 -194
- /package/{dynamic-translation/index.d.ts → types/koobiq-components-dynamic-translation.d.ts} +0 -0
- /package/{index.d.ts → types/koobiq-components.d.ts} +0 -0
|
@@ -0,0 +1,673 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var ts = require('typescript');
|
|
6
|
+
var utils_ast = require('../../utils/ast.js');
|
|
7
|
+
var utils_messages = require('../../utils/messages.js');
|
|
8
|
+
var utils_packageConfig = require('../../package-config-BhU2TfC8.js');
|
|
9
|
+
var utils_typescript = require('../../utils/typescript.js');
|
|
10
|
+
var migrations_tagsSignals_data = require('./data.js');
|
|
11
|
+
require('@angular-devkit/schematics');
|
|
12
|
+
require('@schematics/angular/utility');
|
|
13
|
+
|
|
14
|
+
const LABEL = '[tags-signals]';
|
|
15
|
+
const TS_EXT = '.ts';
|
|
16
|
+
const HTML_EXT = '.html';
|
|
17
|
+
/** Factories whose single argument gives the type of the declaration they set up. */
|
|
18
|
+
const TYPING_FACTORIES = new Set(['inject', 'viewChild', 'contentChild']);
|
|
19
|
+
/** Every member name any target migrates - a cheap filter before a property access is resolved at all. */
|
|
20
|
+
const KNOWN_MEMBERS = new Set(migrations_tagsSignals_data.TARGETS.flatMap((t) => [...t.signalMembers, ...t.readOnlyMembers]));
|
|
21
|
+
function escapeRegExp(value) {
|
|
22
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
23
|
+
}
|
|
24
|
+
/** Applies text-span edits to `content`, right-to-left, so earlier edits don't shift later offsets. */
|
|
25
|
+
function applyEdits(content, edits) {
|
|
26
|
+
const sorted = [...edits].sort((a, b) => b.start - a.start || b.end - a.end);
|
|
27
|
+
let result = content;
|
|
28
|
+
for (const { start, end, text } of sorted) {
|
|
29
|
+
result = result.slice(0, start) + text + result.slice(end);
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Nodes that open a new binding scope. `ts.isFunctionLike` rather than a hand-rolled list of declarations,
|
|
35
|
+
* so a parameter of a `FunctionTypeNode` or a `MethodSignature` is bounded by its type instead of falling
|
|
36
|
+
* back to the whole file. Blocks and loops are included because `let`/`const` are block-scoped.
|
|
37
|
+
*/
|
|
38
|
+
const opensScope = (node) => ts.isFunctionLike(node) ||
|
|
39
|
+
ts.isBlock(node) ||
|
|
40
|
+
ts.isCaseBlock(node) ||
|
|
41
|
+
ts.isModuleBlock(node) ||
|
|
42
|
+
ts.isForStatement(node) ||
|
|
43
|
+
ts.isForInStatement(node) ||
|
|
44
|
+
ts.isForOfStatement(node) ||
|
|
45
|
+
ts.isCatchClause(node) ||
|
|
46
|
+
ts.isClassLike(node) ||
|
|
47
|
+
ts.isSourceFile(node);
|
|
48
|
+
/** Nodes that rebind `this`, so `this.tagInput` inside them is a different object. Arrows don't. */
|
|
49
|
+
const rebindsThis = (node) => ts.isFunctionDeclaration(node) || ts.isFunctionExpression(node) || ts.isClassLike(node);
|
|
50
|
+
/** Whether `node` sits inside `scope` without crossing a `barrier` node on the way up. */
|
|
51
|
+
function reachesScope(node, scope, barrier) {
|
|
52
|
+
let current = node.parent;
|
|
53
|
+
while (current && current !== scope) {
|
|
54
|
+
if (barrier(current))
|
|
55
|
+
return false;
|
|
56
|
+
current = current.parent;
|
|
57
|
+
}
|
|
58
|
+
return current === scope;
|
|
59
|
+
}
|
|
60
|
+
/** The target a type annotation names directly (not through a union or type argument), if any. */
|
|
61
|
+
function targetOfType(type, names) {
|
|
62
|
+
return type && ts.isTypeReferenceNode(type) && ts.isIdentifier(type.typeName)
|
|
63
|
+
? names.get(type.typeName.text)
|
|
64
|
+
: undefined;
|
|
65
|
+
}
|
|
66
|
+
const FIELD_MODIFIERS = new Set([
|
|
67
|
+
ts.SyntaxKind.PrivateKeyword,
|
|
68
|
+
ts.SyntaxKind.PublicKeyword,
|
|
69
|
+
ts.SyntaxKind.ProtectedKeyword,
|
|
70
|
+
ts.SyntaxKind.ReadonlyKeyword
|
|
71
|
+
]);
|
|
72
|
+
/** Every value declaration that introduces a plain identifier, with the scope it is visible in. */
|
|
73
|
+
function collectBindings(sourceFile) {
|
|
74
|
+
const bindings = [];
|
|
75
|
+
const add = (name, declaration, scope) => bindings.push({ name, declaration, scope: scope ?? sourceFile });
|
|
76
|
+
const visit = (node) => {
|
|
77
|
+
if (ts.isParameter(node) && ts.isIdentifier(node.name)) {
|
|
78
|
+
add(node.name.text, node, ts.findAncestor(node.parent, ts.isFunctionLike));
|
|
79
|
+
}
|
|
80
|
+
else if ((ts.isVariableDeclaration(node) || ts.isBindingElement(node)) && ts.isIdentifier(node.name)) {
|
|
81
|
+
add(node.name.text, node, ts.findAncestor(node.parent, opensScope));
|
|
82
|
+
}
|
|
83
|
+
else if ((ts.isFunctionDeclaration(node) || ts.isClassDeclaration(node)) && node.name) {
|
|
84
|
+
add(node.name.text, node, ts.findAncestor(node.parent, opensScope));
|
|
85
|
+
}
|
|
86
|
+
else if ((ts.isImportSpecifier(node) || ts.isImportClause(node)) && node.name) {
|
|
87
|
+
add(node.name.text, node, sourceFile);
|
|
88
|
+
}
|
|
89
|
+
node.forEachChild(visit);
|
|
90
|
+
};
|
|
91
|
+
visit(sourceFile);
|
|
92
|
+
return bindings;
|
|
93
|
+
}
|
|
94
|
+
/** The declaration `name` binds to at `pos`: the innermost enclosing scope that declares it. */
|
|
95
|
+
function resolveBinding(bindings, name, pos) {
|
|
96
|
+
let best;
|
|
97
|
+
let bestWidth = Number.POSITIVE_INFINITY;
|
|
98
|
+
for (const binding of bindings) {
|
|
99
|
+
if (binding.name !== name)
|
|
100
|
+
continue;
|
|
101
|
+
const start = binding.scope.getStart();
|
|
102
|
+
const end = binding.scope.getEnd();
|
|
103
|
+
if (pos < start || pos > end)
|
|
104
|
+
continue;
|
|
105
|
+
const width = end - start;
|
|
106
|
+
if (width < bestWidth) {
|
|
107
|
+
best = binding;
|
|
108
|
+
bestWidth = width;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return best?.declaration;
|
|
112
|
+
}
|
|
113
|
+
/** Local names each target is bound to in this file, including aliased imports. */
|
|
114
|
+
function localTypeNames(sourceFile) {
|
|
115
|
+
const names = new Map(migrations_tagsSignals_data.TARGETS.map((target) => [target.type, target]));
|
|
116
|
+
const visit = (node) => {
|
|
117
|
+
if (ts.isImportSpecifier(node)) {
|
|
118
|
+
const target = migrations_tagsSignals_data.TARGETS.find(({ type }) => type === (node.propertyName?.text ?? node.name.text));
|
|
119
|
+
if (target)
|
|
120
|
+
names.set(node.name.text, target);
|
|
121
|
+
}
|
|
122
|
+
node.forEachChild(visit);
|
|
123
|
+
};
|
|
124
|
+
visit(sourceFile);
|
|
125
|
+
return names;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The target an initializer sets up, for the shapes a modern Angular consumer writes:
|
|
129
|
+
* `inject(KbqTag)`, `viewChild(KbqTag)`, `viewChild.required(…)`, `contentChild(…)`.
|
|
130
|
+
*/
|
|
131
|
+
function initializerTypeOf(initializer, names) {
|
|
132
|
+
const none = { target: undefined, signalQuery: false, required: false };
|
|
133
|
+
if (!initializer || !ts.isCallExpression(initializer))
|
|
134
|
+
return none;
|
|
135
|
+
const callee = initializer.expression;
|
|
136
|
+
const qualified = ts.isPropertyAccessExpression(callee) && ts.isIdentifier(callee.expression);
|
|
137
|
+
const name = ts.isIdentifier(callee) ? callee.text : qualified ? callee.expression.text : undefined;
|
|
138
|
+
if (!name || !TYPING_FACTORIES.has(name))
|
|
139
|
+
return none;
|
|
140
|
+
const [arg] = initializer.arguments;
|
|
141
|
+
const target = arg && ts.isIdentifier(arg) ? names.get(arg.text) : undefined;
|
|
142
|
+
if (!target)
|
|
143
|
+
return none;
|
|
144
|
+
// `viewChild.required(...)` is `Signal<KbqTag>`; the bare form adds `| undefined`.
|
|
145
|
+
const required = qualified && callee.name.text === 'required';
|
|
146
|
+
return { target, signalQuery: name !== 'inject', required };
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Collects the receivers of every target: method/function params, class fields (incl.
|
|
150
|
+
* `@ViewChild(KbqTag) x: KbqTag`, constructor parameter-properties and the `inject()` / `viewChild()`
|
|
151
|
+
* initializer forms) and typed locals. Annotations that resolve are recorded in `resolved`, so the caller can
|
|
152
|
+
* report the mentions this pass could not turn into a receiver.
|
|
153
|
+
*/
|
|
154
|
+
function collectReceivers(sourceFile, names, resolved) {
|
|
155
|
+
const receivers = [];
|
|
156
|
+
const add = (target, text, declaration, scope, signalQuery = false, required = false) => receivers.push({ target, text, declaration, scope: scope ?? sourceFile, signalQuery, required });
|
|
157
|
+
const visit = (node) => {
|
|
158
|
+
const annotatedTarget = ts.isParameter(node) || ts.isPropertyDeclaration(node) || ts.isVariableDeclaration(node)
|
|
159
|
+
? targetOfType(node.type, names)
|
|
160
|
+
: undefined;
|
|
161
|
+
if (ts.isParameter(node) && ts.isIdentifier(node.name) && annotatedTarget) {
|
|
162
|
+
resolved.add(node.type);
|
|
163
|
+
add(annotatedTarget, node.name.text, node, ts.findAncestor(node.parent, ts.isFunctionLike));
|
|
164
|
+
// A constructor parameter-property is also a class field, reachable as `this.<name>`.
|
|
165
|
+
if (node.modifiers?.some((modifier) => FIELD_MODIFIERS.has(modifier.kind))) {
|
|
166
|
+
const owner = ts.findAncestor(node.parent, ts.isClassDeclaration);
|
|
167
|
+
if (owner)
|
|
168
|
+
add(annotatedTarget, `this.${node.name.text}`, node, owner);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else if (ts.isPropertyDeclaration(node) && ts.isIdentifier(node.name)) {
|
|
172
|
+
const owner = ts.findAncestor(node.parent, ts.isClassDeclaration);
|
|
173
|
+
const { target, signalQuery, required } = initializerTypeOf(node.initializer, names);
|
|
174
|
+
const resolvedTarget = annotatedTarget ?? target;
|
|
175
|
+
if (owner && resolvedTarget) {
|
|
176
|
+
if (annotatedTarget)
|
|
177
|
+
resolved.add(node.type);
|
|
178
|
+
add(resolvedTarget, `this.${node.name.text}`, node, owner, signalQuery, required);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)) {
|
|
182
|
+
const { target, signalQuery, required } = initializerTypeOf(node.initializer, names);
|
|
183
|
+
const resolvedTarget = annotatedTarget ?? target;
|
|
184
|
+
if (resolvedTarget) {
|
|
185
|
+
if (annotatedTarget)
|
|
186
|
+
resolved.add(node.type);
|
|
187
|
+
add(resolvedTarget, node.name.text, node, ts.findAncestor(node.parent, opensScope), signalQuery, required);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
node.forEachChild(visit);
|
|
191
|
+
};
|
|
192
|
+
visit(sourceFile);
|
|
193
|
+
return receivers;
|
|
194
|
+
}
|
|
195
|
+
/** Expression wrappers that carry a type but do not change which object an access reads from. */
|
|
196
|
+
const isTypeWrapper = (node) => ts.isAsExpression(node) || ts.isTypeAssertionExpression(node) || ts.isSatisfiesExpression(node);
|
|
197
|
+
/** Strips `!`, parentheses and type assertions, none of which change which object an access reads from. */
|
|
198
|
+
function unwrapReceiver(node) {
|
|
199
|
+
let current = node;
|
|
200
|
+
while (ts.isNonNullExpression(current) || ts.isParenthesizedExpression(current) || isTypeWrapper(current)) {
|
|
201
|
+
current = current.expression;
|
|
202
|
+
}
|
|
203
|
+
return current;
|
|
204
|
+
}
|
|
205
|
+
/** The target one of the wrappers around a receiver asserts it to be: `(x as KbqTag)`. */
|
|
206
|
+
function assertedTarget(node, names) {
|
|
207
|
+
let current = node;
|
|
208
|
+
while (ts.isNonNullExpression(current) || ts.isParenthesizedExpression(current) || isTypeWrapper(current)) {
|
|
209
|
+
const target = isTypeWrapper(current) ? targetOfType(current.type, names) : undefined;
|
|
210
|
+
if (target)
|
|
211
|
+
return target;
|
|
212
|
+
current = current.expression;
|
|
213
|
+
}
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* A receiver synthesized where the expression itself holds the instance: `(x as KbqTag).member`, whose
|
|
218
|
+
* assertion is the typing, and `this.tag().member`, whose signal query has already been called.
|
|
219
|
+
*/
|
|
220
|
+
const directReceiver = (target) => ({ target, signalQuery: false, required: false });
|
|
221
|
+
/** The receiver a property access resolves to at this exact position, if any. */
|
|
222
|
+
function resolveReceiver(expression, at, sourceFile, receivers, bindings, names) {
|
|
223
|
+
const asserted = assertedTarget(expression, names);
|
|
224
|
+
if (asserted)
|
|
225
|
+
return directReceiver(asserted);
|
|
226
|
+
const inner = unwrapReceiver(expression);
|
|
227
|
+
// `this.tag()?.selected` is how a signal query is read in practice: the call already unwraps the signal,
|
|
228
|
+
// so the member read on its result is an ordinary one and takes a single `()`.
|
|
229
|
+
if (ts.isCallExpression(inner) && inner.arguments.length === 0) {
|
|
230
|
+
const query = resolveReceiver(inner.expression, at, sourceFile, receivers, bindings, names);
|
|
231
|
+
return query?.signalQuery ? directReceiver(query.target) : undefined;
|
|
232
|
+
}
|
|
233
|
+
// `this . tagInput` and `this /* x */ . tagInput` spell the same receiver as `this.tagInput`.
|
|
234
|
+
const text = ts.isPropertyAccessExpression(inner)
|
|
235
|
+
? `${unwrapReceiver(inner.expression).getText(sourceFile).replace(/\s+/g, '')}.${inner.name.text}`
|
|
236
|
+
: inner.getText(sourceFile);
|
|
237
|
+
return receivers.find((receiver) => {
|
|
238
|
+
if (receiver.text !== text)
|
|
239
|
+
return false;
|
|
240
|
+
// For `this.tagInput`, a nested `function` or class changes what `this` is; an arrow does not.
|
|
241
|
+
// For a bare `tagInput`, a nested redeclaration of the same name shadows the receiver.
|
|
242
|
+
if (receiver.text.startsWith('this.'))
|
|
243
|
+
return reachesScope(at, receiver.scope, rebindsThis);
|
|
244
|
+
return (reachesScope(at, receiver.scope, () => false) &&
|
|
245
|
+
resolveBinding(bindings, receiver.text, at.getStart(sourceFile)) === receiver.declaration);
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
/** Binary operators that make their left operand a write target rather than a read. */
|
|
249
|
+
const ASSIGNMENT_OPERATORS = new Set([
|
|
250
|
+
ts.SyntaxKind.EqualsToken,
|
|
251
|
+
ts.SyntaxKind.PlusEqualsToken,
|
|
252
|
+
ts.SyntaxKind.MinusEqualsToken,
|
|
253
|
+
ts.SyntaxKind.AsteriskEqualsToken,
|
|
254
|
+
ts.SyntaxKind.AsteriskAsteriskEqualsToken,
|
|
255
|
+
ts.SyntaxKind.SlashEqualsToken,
|
|
256
|
+
ts.SyntaxKind.PercentEqualsToken,
|
|
257
|
+
ts.SyntaxKind.LessThanLessThanEqualsToken,
|
|
258
|
+
ts.SyntaxKind.GreaterThanGreaterThanEqualsToken,
|
|
259
|
+
ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,
|
|
260
|
+
ts.SyntaxKind.AmpersandEqualsToken,
|
|
261
|
+
ts.SyntaxKind.BarEqualsToken,
|
|
262
|
+
ts.SyntaxKind.CaretEqualsToken,
|
|
263
|
+
ts.SyntaxKind.BarBarEqualsToken,
|
|
264
|
+
ts.SyntaxKind.AmpersandAmpersandEqualsToken,
|
|
265
|
+
ts.SyntaxKind.QuestionQuestionEqualsToken
|
|
266
|
+
]);
|
|
267
|
+
/** Unary operators that write their operand back. Every other prefix operator is a plain read. */
|
|
268
|
+
const INCREMENT_OPERATORS = new Set([ts.SyntaxKind.PlusPlusToken, ts.SyntaxKind.MinusMinusToken]);
|
|
269
|
+
/** Whether `node` sits on the left of a destructuring assignment, where it is written rather than read. */
|
|
270
|
+
function isDestructuringTarget(node) {
|
|
271
|
+
let current = node;
|
|
272
|
+
while (ts.isPropertyAssignment(current.parent) ||
|
|
273
|
+
ts.isShorthandPropertyAssignment(current.parent) ||
|
|
274
|
+
ts.isSpreadAssignment(current.parent) ||
|
|
275
|
+
ts.isSpreadElement(current.parent) ||
|
|
276
|
+
ts.isObjectLiteralExpression(current.parent) ||
|
|
277
|
+
ts.isArrayLiteralExpression(current.parent)) {
|
|
278
|
+
current = current.parent;
|
|
279
|
+
}
|
|
280
|
+
return (ts.isBinaryExpression(current.parent) &&
|
|
281
|
+
current.parent.left === current &&
|
|
282
|
+
ASSIGNMENT_OPERATORS.has(current.parent.operatorToken.kind));
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Classifies a matched property access without touching it. Every write form counts - a plain `=`, a
|
|
286
|
+
* compound assignment, an increment, `delete` and a destructuring target - because appending `()` to any of
|
|
287
|
+
* them produces source that no longer parses.
|
|
288
|
+
*/
|
|
289
|
+
function accessKind(node) {
|
|
290
|
+
const parent = node.parent;
|
|
291
|
+
// Already migrated: `x.addOnBlur()` (call) or the signal API on it.
|
|
292
|
+
if (ts.isCallExpression(parent) && parent.expression === node)
|
|
293
|
+
return 'migrated';
|
|
294
|
+
if (ts.isPropertyAccessExpression(parent) && parent.expression === node && migrations_tagsSignals_data.SIGNAL_API_METHODS.has(parent.name.text))
|
|
295
|
+
return 'migrated';
|
|
296
|
+
if (ts.isBinaryExpression(parent) && parent.left === node && ASSIGNMENT_OPERATORS.has(parent.operatorToken.kind))
|
|
297
|
+
return 'write';
|
|
298
|
+
// Only the increment operators count: a `PrefixUnaryExpression` is also how `!x.addOnBlur` is spelled.
|
|
299
|
+
if (ts.isPostfixUnaryExpression(parent) && parent.operand === node)
|
|
300
|
+
return 'write';
|
|
301
|
+
if (ts.isPrefixUnaryExpression(parent) && parent.operand === node && INCREMENT_OPERATORS.has(parent.operator))
|
|
302
|
+
return 'write';
|
|
303
|
+
if (ts.isDeleteExpression(parent))
|
|
304
|
+
return 'write';
|
|
305
|
+
if (isDestructuringTarget(node))
|
|
306
|
+
return 'write';
|
|
307
|
+
return 'read';
|
|
308
|
+
}
|
|
309
|
+
/** Collects the edits and the findings for every access on a known receiver. */
|
|
310
|
+
function collectAccesses(sourceFile, receivers, bindings, names) {
|
|
311
|
+
const edits = [];
|
|
312
|
+
const writes = new Map();
|
|
313
|
+
const signalQueryReads = [];
|
|
314
|
+
const visit = (node) => {
|
|
315
|
+
if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name) && KNOWN_MEMBERS.has(node.name.text)) {
|
|
316
|
+
const member = node.name.text;
|
|
317
|
+
const receiver = resolveReceiver(node.expression, node, sourceFile, receivers, bindings, names);
|
|
318
|
+
// The member sets are per class: `KbqTagList` has a `selected` of its own - an array - that did not
|
|
319
|
+
// move, so a name matched without its receiver's class would corrupt it.
|
|
320
|
+
const signalMembers = receiver?.target.signalMembers ?? [];
|
|
321
|
+
const readOnlyMembers = receiver?.target.readOnlyMembers ?? [];
|
|
322
|
+
if (receiver && (signalMembers.includes(member) || readOnlyMembers.includes(member))) {
|
|
323
|
+
const kind = accessKind(node);
|
|
324
|
+
if (kind === 'write' && readOnlyMembers.includes(member)) {
|
|
325
|
+
const members = writes.get(receiver.target) ?? new Set();
|
|
326
|
+
writes.set(receiver.target, members.add(member));
|
|
327
|
+
}
|
|
328
|
+
else if (kind === 'read' && signalMembers.includes(member)) {
|
|
329
|
+
// A signal query holds the instance behind a call of its own, so the read is
|
|
330
|
+
// `query().selected()`. Appending one `()` would be wrong in both halves.
|
|
331
|
+
if (receiver.signalQuery)
|
|
332
|
+
signalQueryReads.push({ member, required: receiver.required });
|
|
333
|
+
else
|
|
334
|
+
edits.push({ start: node.getEnd(), end: node.getEnd(), text: '()' });
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
node.forEachChild(visit);
|
|
339
|
+
};
|
|
340
|
+
visit(sourceFile);
|
|
341
|
+
return { edits, writes, signalQueryReads };
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* 1-based lines where a target is named in a position `collectReceivers` cannot resolve, plus the reads the
|
|
345
|
+
* access pass structurally cannot reach: `tag['selected']` and `const { selected } = tag`.
|
|
346
|
+
*/
|
|
347
|
+
function collectUnresolvedMentions(sourceFile, resolved, names, receivers, bindings) {
|
|
348
|
+
const lines = new Set();
|
|
349
|
+
const report = (node) => lines.add(sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1);
|
|
350
|
+
const signalMembersOf = (expression, at) => resolveReceiver(expression, at, sourceFile, receivers, bindings, names)?.target.signalMembers ?? [];
|
|
351
|
+
const visit = (node) => {
|
|
352
|
+
if (ts.isTypeReferenceNode(node) &&
|
|
353
|
+
ts.isIdentifier(node.typeName) &&
|
|
354
|
+
names.has(node.typeName.text) &&
|
|
355
|
+
// `x as KbqTag` is the typing of that one access, which `resolveReceiver` already honours.
|
|
356
|
+
!isTypeWrapper(node.parent)) {
|
|
357
|
+
if (!resolved.has(node))
|
|
358
|
+
report(node);
|
|
359
|
+
}
|
|
360
|
+
else if (ts.isElementAccessExpression(node) &&
|
|
361
|
+
ts.isStringLiteralLike(node.argumentExpression) &&
|
|
362
|
+
signalMembersOf(node.expression, node).includes(node.argumentExpression.text)) {
|
|
363
|
+
report(node);
|
|
364
|
+
}
|
|
365
|
+
else if (ts.isVariableDeclaration(node) && ts.isObjectBindingPattern(node.name) && node.initializer) {
|
|
366
|
+
const members = signalMembersOf(node.initializer, node);
|
|
367
|
+
if (node.name.elements.some((element) => members.includes((element.propertyName ?? element.name).getText(sourceFile)))) {
|
|
368
|
+
report(node);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
node.forEachChild(visit);
|
|
372
|
+
};
|
|
373
|
+
visit(sourceFile);
|
|
374
|
+
return [...lines].sort((a, b) => a - b);
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Pass A — rewrite programmatic reads of the targets' signal members in TypeScript code. One
|
|
378
|
+
* `createSourceFile` and one `collectReceivers` walk per file: the rewrite and every report come out of the
|
|
379
|
+
* same traversal.
|
|
380
|
+
*/
|
|
381
|
+
function migrateTsExpressions(content, fileName) {
|
|
382
|
+
const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
383
|
+
const names = localTypeNames(sourceFile);
|
|
384
|
+
const resolved = new Set();
|
|
385
|
+
const receivers = collectReceivers(sourceFile, names, resolved);
|
|
386
|
+
const bindings = collectBindings(sourceFile);
|
|
387
|
+
const unresolved = collectUnresolvedMentions(sourceFile, resolved, names, receivers, bindings);
|
|
388
|
+
const findings = collectAccesses(sourceFile, receivers, bindings, names);
|
|
389
|
+
return {
|
|
390
|
+
...findings,
|
|
391
|
+
content: findings.edits.length > 0 ? applyEdits(content, findings.edits) : content,
|
|
392
|
+
unresolved
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
/** Attribute-name prefixes that mark the value as an Angular expression rather than a literal. */
|
|
396
|
+
const BINDING_PREFIX = /^(?:\[|\(|\*|bind-|bind(?:on)?-|on-)/;
|
|
397
|
+
/**
|
|
398
|
+
* The target a `#ref` on this element holds. A ref naming an `exportAs` holds that target; a bare ref holds the
|
|
399
|
+
* component whose element or attribute selector the element matches. A bare ref on a native element - where
|
|
400
|
+
* `KbqTagInput` sits - is the element itself, so it matches nothing.
|
|
401
|
+
*/
|
|
402
|
+
function refTarget(element, value) {
|
|
403
|
+
if (value)
|
|
404
|
+
return migrations_tagsSignals_data.TARGETS.find(({ exportAs }) => exportAs.includes(value));
|
|
405
|
+
const attributeNames = new Set((element.attrs ?? []).map((attr) => attr.name).filter((name) => typeof name === 'string'));
|
|
406
|
+
return migrations_tagsSignals_data.TARGETS.find(({ elements }) => elements.some((selector) => element.name === selector || attributeNames.has(selector)));
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Walks a template's HTML AST, collecting what the rewrite needs: the reference variables that hold a tag, a
|
|
410
|
+
* tag list or a tag input, the source ranges that actually hold Angular expressions, and every other name the
|
|
411
|
+
* template introduces.
|
|
412
|
+
*/
|
|
413
|
+
class TemplateScanner {
|
|
414
|
+
constructor(template) {
|
|
415
|
+
this.template = template;
|
|
416
|
+
this.targetRefs = [];
|
|
417
|
+
this.otherNames = new Set();
|
|
418
|
+
this.expressions = [];
|
|
419
|
+
this.view = { start: 0, end: template.length };
|
|
420
|
+
}
|
|
421
|
+
visitElement(element) {
|
|
422
|
+
for (const attr of element.attrs ?? []) {
|
|
423
|
+
if (typeof attr.name !== 'string')
|
|
424
|
+
continue;
|
|
425
|
+
const reference = this.referenceName(attr.name);
|
|
426
|
+
if (reference !== undefined) {
|
|
427
|
+
const target = refTarget(element, attr.value);
|
|
428
|
+
if (target)
|
|
429
|
+
this.targetRefs.push({ name: reference, target, ...this.view });
|
|
430
|
+
else
|
|
431
|
+
this.otherNames.add(reference);
|
|
432
|
+
continue;
|
|
433
|
+
}
|
|
434
|
+
// `let-item` on an <ng-template> introduces a name the refs must not collide with.
|
|
435
|
+
if (attr.name.startsWith('let-')) {
|
|
436
|
+
this.otherNames.add(attr.name.slice(4));
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
this.collectAttributeExpression(attr);
|
|
440
|
+
}
|
|
441
|
+
this.inView(element.name === 'ng-template' ? element.sourceSpan : undefined, () => this.visitChildren(element));
|
|
442
|
+
}
|
|
443
|
+
visitBlock(block) {
|
|
444
|
+
for (const parameter of block.parameters ?? []) {
|
|
445
|
+
const span = parameter.sourceSpan;
|
|
446
|
+
if (!span)
|
|
447
|
+
continue;
|
|
448
|
+
this.expressions.push({ start: span.start.offset, end: span.end.offset });
|
|
449
|
+
// `@for (item of items; track item)` and `@if (x; as y)` introduce names of their own.
|
|
450
|
+
for (const match of String(parameter.expression ?? '').matchAll(/(?:^\s*|\b(?:as|let)\s+)([A-Za-z_$][\w$]*)\s*(?:\bof\b|\bin\b|=|$)/g)) {
|
|
451
|
+
this.otherNames.add(match[1]);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
this.inView(block.sourceSpan, () => this.visitChildren(block));
|
|
455
|
+
}
|
|
456
|
+
visitText(text) {
|
|
457
|
+
const span = text.sourceSpan;
|
|
458
|
+
if (span)
|
|
459
|
+
this.collectInterpolations(span.start.offset, span.end.offset);
|
|
460
|
+
}
|
|
461
|
+
visitLetDeclaration(decl) {
|
|
462
|
+
if (decl.name)
|
|
463
|
+
this.otherNames.add(decl.name);
|
|
464
|
+
const span = decl.valueSpan ?? decl.sourceSpan;
|
|
465
|
+
if (span)
|
|
466
|
+
this.expressions.push({ start: span.start.offset, end: span.end.offset });
|
|
467
|
+
}
|
|
468
|
+
/** Runs `walk` with the embedded view narrowed to `span`, if the node opens one. */
|
|
469
|
+
inView(span, walk) {
|
|
470
|
+
if (!span) {
|
|
471
|
+
walk();
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
const outer = this.view;
|
|
475
|
+
this.view = { start: span.start.offset, end: span.end.offset };
|
|
476
|
+
walk();
|
|
477
|
+
this.view = outer;
|
|
478
|
+
}
|
|
479
|
+
/** `#ref` / `ref-ref`, or `undefined` when the attribute is not a reference variable. */
|
|
480
|
+
referenceName(name) {
|
|
481
|
+
if (name.startsWith('#'))
|
|
482
|
+
return name.slice(1);
|
|
483
|
+
if (name.startsWith('ref-'))
|
|
484
|
+
return name.slice(4);
|
|
485
|
+
return undefined;
|
|
486
|
+
}
|
|
487
|
+
collectAttributeExpression(attr) {
|
|
488
|
+
const span = attr.valueSpan;
|
|
489
|
+
if (!span)
|
|
490
|
+
return;
|
|
491
|
+
const start = span.start.offset;
|
|
492
|
+
const end = span.end.offset;
|
|
493
|
+
// A binding's whole value is an expression; a plain attribute only holds interpolations.
|
|
494
|
+
if (BINDING_PREFIX.test(attr.name))
|
|
495
|
+
this.expressions.push({ start, end });
|
|
496
|
+
else
|
|
497
|
+
this.collectInterpolations(start, end);
|
|
498
|
+
}
|
|
499
|
+
collectInterpolations(start, end) {
|
|
500
|
+
for (const match of this.template.slice(start, end).matchAll(/\{\{([\s\S]*?)\}\}/g)) {
|
|
501
|
+
const from = start + match.index + 2;
|
|
502
|
+
this.expressions.push({ start: from, end: from + match[1].length });
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
visitChildren(node) {
|
|
506
|
+
for (const child of node.children ?? []) {
|
|
507
|
+
child.visit(this);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
visitAttribute() { }
|
|
511
|
+
visitComment() { }
|
|
512
|
+
visitExpansion() { }
|
|
513
|
+
visitExpansionCase() { }
|
|
514
|
+
visitBlockParameter() { }
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* Matches `<ref>.<member>` inside a template expression. The lookbehind rejects `form.ti.addOnBlur`, where
|
|
518
|
+
* `\b` alone matches after the dot, and admits a `$`-prefixed ref that `\b` never could. `\??\.` accepts the
|
|
519
|
+
* optional chain, and Angular's grammar allows whitespace around the dot. The three groups skip an
|
|
520
|
+
* already-migrated read, a signal-API call, and an assignment target.
|
|
521
|
+
*/
|
|
522
|
+
function memberAccessPattern(ref, members) {
|
|
523
|
+
const methods = [...migrations_tagsSignals_data.SIGNAL_API_METHODS].join('|');
|
|
524
|
+
const names = members.map(escapeRegExp).join('|');
|
|
525
|
+
return new RegExp(`(?<![\\w$.])(${escapeRegExp(ref)})\\s*\\??\\.\\s*(${names})\\b` +
|
|
526
|
+
`(?!\\s*\\()(?!\\s*\\.\\s*(?:${methods})\\b)(?!\\s*=(?!=))`, 'g');
|
|
527
|
+
}
|
|
528
|
+
/** Rewrites `ref.addOnBlur` reads to calls, only inside the given expression ranges. */
|
|
529
|
+
function rewriteRefReads(template, refs, expressions) {
|
|
530
|
+
const edits = [];
|
|
531
|
+
for (const { start, end } of expressions) {
|
|
532
|
+
const source = template.slice(start, end);
|
|
533
|
+
for (const ref of refs) {
|
|
534
|
+
if (start < ref.start || end > ref.end)
|
|
535
|
+
continue;
|
|
536
|
+
for (const match of source.matchAll(memberAccessPattern(ref.name, ref.target.signalMembers))) {
|
|
537
|
+
const at = start + match.index + match[0].length;
|
|
538
|
+
edits.push({ start: at, end: at, text: '()' });
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
return edits.length > 0
|
|
543
|
+
? { content: applyEdits(template, edits), changed: true }
|
|
544
|
+
: { content: template, changed: false };
|
|
545
|
+
}
|
|
546
|
+
const untouched = (template) => ({ content: template, changed: false, unparseable: false });
|
|
547
|
+
/**
|
|
548
|
+
* Whether a template can hold a reference to a target: every `exportAs` starts with `kbqTag`, and every element
|
|
549
|
+
* and attribute selector contains `kbq-tag` or `kbq-basic-tag`.
|
|
550
|
+
*/
|
|
551
|
+
const mentionsTags = (template) => template.includes('kbqTag') || template.includes('kbq-tag') || template.includes('kbq-basic-tag');
|
|
552
|
+
/** Pass B (core) — parse a template, discover tag input refs, rewrite their signal reads. */
|
|
553
|
+
async function migrateTemplate(template) {
|
|
554
|
+
if (!mentionsTags(template))
|
|
555
|
+
return untouched(template);
|
|
556
|
+
const parsed = await utils_typescript.parseTemplate(template);
|
|
557
|
+
if (!parsed.tree)
|
|
558
|
+
return { ...untouched(template), unparseable: true };
|
|
559
|
+
const scanner = new TemplateScanner(template);
|
|
560
|
+
utils_ast.visitAll(scanner, parsed.tree.rootNodes);
|
|
561
|
+
// A ref whose name is also introduced by a `@for`, an `@let` or a foreign `#ref` is ambiguous: the
|
|
562
|
+
// reads could belong to either, so neither is rewritten.
|
|
563
|
+
const refs = scanner.targetRefs.filter((ref) => !scanner.otherNames.has(ref.name));
|
|
564
|
+
if (refs.length === 0)
|
|
565
|
+
return untouched(template);
|
|
566
|
+
return { ...rewriteRefReads(template, refs, scanner.expressions), unparseable: false };
|
|
567
|
+
}
|
|
568
|
+
/** Pass B (inline) — rewrite tag input ref reads inside inline component templates. */
|
|
569
|
+
async function migrateInlineTemplates(content, fileName) {
|
|
570
|
+
// Parsing the file to find inline templates is the expensive half, and most consumers have none.
|
|
571
|
+
if (!mentionsTags(content))
|
|
572
|
+
return { content, unparseable: false };
|
|
573
|
+
const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
574
|
+
const ranges = utils_typescript.collectInlineTemplateRanges(sourceFile).sort((a, b) => b.start - a.start);
|
|
575
|
+
let result = content;
|
|
576
|
+
let unparseable = false;
|
|
577
|
+
for (const { start, end } of ranges) {
|
|
578
|
+
const outcome = await migrateTemplate(result.slice(start, end));
|
|
579
|
+
unparseable ||= outcome.unparseable;
|
|
580
|
+
if (outcome.changed) {
|
|
581
|
+
result = result.slice(0, start) + outcome.content + result.slice(end);
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
return { content: result, unparseable };
|
|
585
|
+
}
|
|
586
|
+
/** One report per distinct member and query kind, however many reads a file holds. */
|
|
587
|
+
function dedupe(reads) {
|
|
588
|
+
const seen = new Map();
|
|
589
|
+
for (const read of reads) {
|
|
590
|
+
seen.set(`${read.member}:${read.required}`, read);
|
|
591
|
+
}
|
|
592
|
+
return [...seen.values()];
|
|
593
|
+
}
|
|
594
|
+
/**
|
|
595
|
+
* A `.ts` file is a tags consumer if it names any of the exported symbols, imports the package, or reaches
|
|
596
|
+
* the tag input through its `exportAs` in an inline template.
|
|
597
|
+
*/
|
|
598
|
+
function referencesTags(content) {
|
|
599
|
+
return /\bKbqTag\w*\b/.test(content) || content.includes(migrations_tagsSignals_data.TAGS_PACKAGE) || mentionsTags(content);
|
|
600
|
+
}
|
|
601
|
+
function tagInputSignals(options) {
|
|
602
|
+
return async (tree, context) => {
|
|
603
|
+
const { project } = options;
|
|
604
|
+
// `ng update` invokes migrations with no options at all, and migrations.json declares no schema, so
|
|
605
|
+
// the schema default never reaches us — applying the fix is the intended behaviour there.
|
|
606
|
+
const fix = options.fix ?? true;
|
|
607
|
+
const projectDefinition = await utils_packageConfig.setupOptions(project, tree);
|
|
608
|
+
const root = projectDefinition?.root ?? '';
|
|
609
|
+
const rootDir = root ? tree.getDir(root) : tree.root;
|
|
610
|
+
const tsPaths = [];
|
|
611
|
+
const htmlPaths = [];
|
|
612
|
+
utils_packageConfig.visitProjectFiles(rootDir, (filePath) => {
|
|
613
|
+
if (filePath.endsWith(TS_EXT))
|
|
614
|
+
tsPaths.push(filePath);
|
|
615
|
+
else if (filePath.endsWith(HTML_EXT))
|
|
616
|
+
htmlPaths.push(filePath);
|
|
617
|
+
});
|
|
618
|
+
let touched = 0;
|
|
619
|
+
let consumers = 0;
|
|
620
|
+
const commit = (filePath, original, updated) => {
|
|
621
|
+
if (updated === original)
|
|
622
|
+
return;
|
|
623
|
+
touched++;
|
|
624
|
+
if (fix) {
|
|
625
|
+
tree.overwrite(filePath, updated);
|
|
626
|
+
}
|
|
627
|
+
else {
|
|
628
|
+
utils_messages.logMessage(context.logger, [`${LABEL} would update ${filePath} (run with --fix to apply)`]);
|
|
629
|
+
}
|
|
630
|
+
};
|
|
631
|
+
const report = (filePath, message) => utils_messages.logMessage(context.logger, [`${LABEL} ${filePath}`, ` ${message}`]);
|
|
632
|
+
for (const filePath of tsPaths) {
|
|
633
|
+
const original = tree.read(filePath)?.toString();
|
|
634
|
+
if (!original || !referencesTags(original))
|
|
635
|
+
continue;
|
|
636
|
+
consumers++;
|
|
637
|
+
const pass = migrateTsExpressions(original, filePath);
|
|
638
|
+
for (const [target, members] of pass.writes) {
|
|
639
|
+
report(filePath, migrations_tagsSignals_data.writeMessage(target.type, members, target.writeAdvice));
|
|
640
|
+
}
|
|
641
|
+
for (const { member, required } of dedupe(pass.signalQueryReads)) {
|
|
642
|
+
report(filePath, migrations_tagsSignals_data.signalQueryMessage(member, required));
|
|
643
|
+
}
|
|
644
|
+
if (pass.unresolved.length > 0) {
|
|
645
|
+
report(filePath, `${migrations_tagsSignals_data.UNRESOLVED_RECEIVER_MESSAGE} ${pass.unresolved.join(', ')}.`);
|
|
646
|
+
}
|
|
647
|
+
const inline = await migrateInlineTemplates(pass.content, filePath);
|
|
648
|
+
if (inline.unparseable)
|
|
649
|
+
report(filePath, migrations_tagsSignals_data.UNPARSEABLE_TEMPLATE_MESSAGE);
|
|
650
|
+
commit(filePath, original, inline.content);
|
|
651
|
+
}
|
|
652
|
+
for (const filePath of htmlPaths) {
|
|
653
|
+
const original = tree.read(filePath)?.toString();
|
|
654
|
+
if (!original || !mentionsTags(original))
|
|
655
|
+
continue;
|
|
656
|
+
consumers++;
|
|
657
|
+
const outcome = await migrateTemplate(original);
|
|
658
|
+
if (outcome.unparseable)
|
|
659
|
+
report(filePath, migrations_tagsSignals_data.UNPARSEABLE_TEMPLATE_MESSAGE);
|
|
660
|
+
commit(filePath, original, outcome.content);
|
|
661
|
+
}
|
|
662
|
+
// Nothing here uses the tag input, so the summary would only be noise.
|
|
663
|
+
if (consumers === 0)
|
|
664
|
+
return;
|
|
665
|
+
utils_messages.logMessage(context.logger, [
|
|
666
|
+
`${LABEL} processed tree under "${root || '<workspace root>'}", ` +
|
|
667
|
+
`${fix ? 'updated' : 'would update'} ${touched} file(s).`,
|
|
668
|
+
...migrations_tagsSignals_data.SUMMARY
|
|
669
|
+
]);
|
|
670
|
+
};
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
exports.default = tagInputSignals;
|