@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,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/schema",
|
|
3
|
+
"$id": "koobiq-components-tags-signals",
|
|
4
|
+
"title": "Koobiq components tags signals migration",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"project": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "Name of the project to migrate. If omitted, the migration runs over the whole tree.",
|
|
10
|
+
"$default": {
|
|
11
|
+
"$source": "projectName"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"fix": {
|
|
15
|
+
"type": "boolean",
|
|
16
|
+
"default": true,
|
|
17
|
+
"description": "When true, applies all auto-fix replacements. When false, prints what would change without writing."
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# textarea-signals
|
|
2
|
+
|
|
3
|
+
Migration schematic invoked automatically by `ng update @koobiq/components@21` (registered for
|
|
4
|
+
`21.0.0-0`). Migrates `KbqTextarea` consumers to its signal-based inputs.
|
|
5
|
+
|
|
6
|
+
## Background
|
|
7
|
+
|
|
8
|
+
The `KbqFormFieldControl` members of `KbqTextarea` — `value`, `id`, `placeholder`, `required`,
|
|
9
|
+
`disabled`, `focused`, `empty` and `errorState` — are signals, migrated by `form-field-signals`: reads
|
|
10
|
+
become calls, a write to `value` becomes `.set()`, a write to the rest is reported. This schematic
|
|
11
|
+
covers the four inputs the textarea owns.
|
|
12
|
+
|
|
13
|
+
`canGrow` was the odd one:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
get canGrow(): boolean {
|
|
17
|
+
return !this.maxRowLimitReached && this._canGrow;
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
It reported `false` once the textarea hit `maxRows`, even though the consumer had asked for growth.
|
|
22
|
+
The folded value is an internal `growing` computed now, and `canGrow()` reports what was bound. At the
|
|
23
|
+
row limit the element keeps its own scrollbar rather than gaining a native resize handle:
|
|
24
|
+
`kbq-textarea_max-row-limit-reached` sets `resize: unset`, which follows `kbq-textarea-resizable` in
|
|
25
|
+
the stylesheet and wins on source order.
|
|
26
|
+
|
|
27
|
+
## What it rewrites
|
|
28
|
+
|
|
29
|
+
| Before | After |
|
|
30
|
+
| ----------------------------- | ------------------------------- |
|
|
31
|
+
| `textarea.maxRows` | `textarea.maxRows()` |
|
|
32
|
+
| `textarea.maxRowLimitReached` | `textarea.maxRowLimitReached()` |
|
|
33
|
+
|
|
34
|
+
On receivers explicitly typed `KbqTextarea`. Already-migrated reads are left alone, so the schematic
|
|
35
|
+
is idempotent. There is no template pass: `kbqTextarea` is an attribute on a native `<textarea>`, so
|
|
36
|
+
a reference variable is not tied to an element name the schematic can match.
|
|
37
|
+
|
|
38
|
+
## What it does _not_ do
|
|
39
|
+
|
|
40
|
+
| Pattern | Manual migration |
|
|
41
|
+
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------ |
|
|
42
|
+
| `.canGrow` | `canGrow()`, and expect what was bound — not `false` at the row limit |
|
|
43
|
+
| `.freeRowsHeight` | `freeRowsHeight()`, and expect `undefined` when unbound |
|
|
44
|
+
| `.canGrow = …` / `.maxRows = …` / `.freeRowsHeight = …` | Bind them; the inputs are read-only |
|
|
45
|
+
| `.grow()` / a detached `.grow` | Protected now; a layout change it cannot see is measured at the next value or input change |
|
|
46
|
+
| `viewChild(KbqTextarea)` | The query returns the instance, so a read is a double call |
|
|
47
|
+
|
|
48
|
+
## Notes with no call site to point at
|
|
49
|
+
|
|
50
|
+
- **`maxRows` and `freeRowsHeight` report `number | undefined`.** Both were declared non-nullable
|
|
51
|
+
while an unbound `maxRows` held `undefined`, and `maxRowLimitReached` compared against it —
|
|
52
|
+
`rowsCount > undefined` is false, which is why unlimited growth worked at all. `freeRowsHeight`
|
|
53
|
+
differs: `ngOnInit` used to assign the measured line height into the input, so an unbound read came
|
|
54
|
+
back with a number. It stays `undefined` now, which is why the migration reports those reads rather
|
|
55
|
+
than rewriting them.
|
|
56
|
+
- **`freeRowsHeight` no longer writes itself.** It defaulted to the measured line height by assigning
|
|
57
|
+
its own input in `ngOnInit`; the fallback is a computed now, so binding it later actually takes
|
|
58
|
+
effect instead of being overwritten on the next init.
|
|
59
|
+
- **The `kbq-textarea_max-row-limit-reached` class follows the row count directly.** It is derived
|
|
60
|
+
from a signal written inside `runOutsideAngular`, so the class used to wait for an unrelated change
|
|
61
|
+
detection pass to appear.
|
|
62
|
+
- **Generated ids come from the CDK `_IdGenerator`** instead of a module-level counter. The shape is
|
|
63
|
+
unchanged for a default `APP_ID` - the CDK omits the app id when it is `ng` - and the per-prefix
|
|
64
|
+
counter still starts at 0, so a real app keeps getting `kbq-textarea-0`.
|
|
65
|
+
|
|
66
|
+
## Running it manually
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
ng generate @koobiq/components:textarea-signals --project my-app
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Pass `--fix=false` to see what it would change without writing.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Data for the `textarea-signals` migration.
|
|
5
|
+
*
|
|
6
|
+
* The `KbqFormFieldControl` members of `KbqTextarea` (`value`, `id`, `placeholder`, `required`, `disabled`,
|
|
7
|
+
* `focused`, `empty`, `errorState`) are signals too, but `form-field-signals` migrates them. This migration
|
|
8
|
+
* covers the inputs that belong to the textarea itself.
|
|
9
|
+
*
|
|
10
|
+
* - `textarea.canGrow` → a signal whose value changed: the getter folded in the row limit (warn)
|
|
11
|
+
* - `textarea.freeRowsHeight` → a signal whose value changed: the textarea used to write the measured
|
|
12
|
+
* line height into it on init, so an unbound read came back with a number (warn)
|
|
13
|
+
* - `textarea.maxRows` / `maxRowLimitReached` → calls (value unchanged — auto-fixed)
|
|
14
|
+
* - `textarea.grow` → protected, so a call or a detached reference no longer compiles (warn)
|
|
15
|
+
*/
|
|
16
|
+
/** Members whose value is unchanged; a read must become a call. Auto-fixed. */
|
|
17
|
+
const SIGNAL_MEMBERS = ['maxRows', 'maxRowLimitReached'];
|
|
18
|
+
/** TypeScript type annotation that marks a receiver as a textarea. */
|
|
19
|
+
const TEXTAREA_TYPE = 'KbqTextarea';
|
|
20
|
+
/** `exportAs` a template reference variable has to carry to point at the textarea. */
|
|
21
|
+
const TEXTAREA_EXPORT_AS = 'kbqTextarea';
|
|
22
|
+
/** Signal-API methods reachable on a signal; a read followed by one is already migrated. */
|
|
23
|
+
const SIGNAL_API_METHODS = new Set(['set', 'update', 'asReadonly', 'subscribe']);
|
|
24
|
+
/** Reported for a value-changed member read through a template reference, which is not auto-fixed. */
|
|
25
|
+
const templateManualMessage = (members) => `Read through a template reference variable and left untouched, because the value changed as well ` +
|
|
26
|
+
`as the shape: ${[...members].join(', ')}. Migrate those bindings by hand.`;
|
|
27
|
+
/** Reported when a template names the textarea but cannot be parsed, so nothing in it was inspected. */
|
|
28
|
+
const UNPARSEABLE_TEMPLATE_MESSAGE = 'This template names `kbqTextarea` but could not be parsed, so it was left untouched. Migrate reads ' +
|
|
29
|
+
'through its template reference variables by hand.';
|
|
30
|
+
/** Import specifier that marks a file as a textarea consumer. */
|
|
31
|
+
const TEXTAREA_PACKAGE = '@koobiq/components/textarea';
|
|
32
|
+
/**
|
|
33
|
+
* Read-only `InputSignal`s whose value also changed, so a mechanical `()` append would compile and hand
|
|
34
|
+
* back something else.
|
|
35
|
+
*
|
|
36
|
+
* `canGrow`: the getter used to return `!maxRowLimitReached && bound`, so it reported `false` once the
|
|
37
|
+
* textarea hit `maxRows` even though the consumer had asked for growth. It reports what was bound now.
|
|
38
|
+
*
|
|
39
|
+
* `freeRowsHeight`: `ngOnInit` used to assign the measured line height into the input, so an unbound
|
|
40
|
+
* textarea read back a number once the first microtask had run. The fallback is a private computed now
|
|
41
|
+
* and the input stays `undefined`, which turns `gap + 'px'` at a call site into `"undefined" + "px"` with no
|
|
42
|
+
* diagnostic.
|
|
43
|
+
*/
|
|
44
|
+
const VALUE_CHANGED_MEMBERS = ['canGrow', 'freeRowsHeight'];
|
|
45
|
+
/**
|
|
46
|
+
* Reported for a read of a member that still compiles after a mechanical `()` append but hands back a
|
|
47
|
+
* different value than it did before.
|
|
48
|
+
*/
|
|
49
|
+
const valueChangedMessage = (members) => {
|
|
50
|
+
const names = [...members];
|
|
51
|
+
const lines = [
|
|
52
|
+
`${names.join(' and ')} ${names.length > 1 ? 'are' : 'is a'} read-only InputSignal` +
|
|
53
|
+
`${names.length > 1 ? 's' : ''} whose value also changed, so appending \`()\` compiles and ` +
|
|
54
|
+
'hands back something else. Migrate by hand.'
|
|
55
|
+
];
|
|
56
|
+
if (names.includes('canGrow')) {
|
|
57
|
+
lines.push('`canGrow` used to return `!maxRowLimitReached && bound`, so it reported false once the ' +
|
|
58
|
+
'textarea hit `maxRows` even though the consumer had asked for growth; it reports what ' +
|
|
59
|
+
'was bound now.');
|
|
60
|
+
}
|
|
61
|
+
if (names.includes('freeRowsHeight')) {
|
|
62
|
+
lines.push('`freeRowsHeight` used to be assigned the measured line height in `ngOnInit`, so an unbound ' +
|
|
63
|
+
'textarea read back a number; the fallback is internal now and the input stays ' +
|
|
64
|
+
'`undefined`, which turns `gap + "px"` into `"undefined" + "px"` with no diagnostic.');
|
|
65
|
+
}
|
|
66
|
+
return lines.join(' ');
|
|
67
|
+
};
|
|
68
|
+
const TEXTAREA_ANCHOR = '\\bKbqTextarea\\b';
|
|
69
|
+
const warnPatterns = [
|
|
70
|
+
{
|
|
71
|
+
anchor: TEXTAREA_ANCHOR,
|
|
72
|
+
pattern: '\\.\\s*(?:freeRowsHeight|maxRows|canGrow)\\s*=[^=]',
|
|
73
|
+
message: 'KbqTextarea.canGrow, maxRows and freeRowsHeight are read-only signal inputs now, so a ' +
|
|
74
|
+
'programmatic write no longer compiles. Bind them in the template instead. `freeRowsHeight` in ' +
|
|
75
|
+
'particular used to be written by the textarea itself on init, which is why the automated ' +
|
|
76
|
+
'migration skipped it.'
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
anchor: TEXTAREA_ANCHOR,
|
|
80
|
+
pattern: '\\.\\s*grow\\b',
|
|
81
|
+
message: 'KbqTextarea.grow is protected now, so a call - `textarea.grow()` - and a detached reference - ' +
|
|
82
|
+
'`setTimeout(textarea.grow, 0)` - no longer compile. The textarea already re-measures on every ' +
|
|
83
|
+
'value change and whenever one of its inputs changes; a layout change it cannot see, such as a width ' +
|
|
84
|
+
'change, is measured at the next one.'
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
anchor: TEXTAREA_ANCHOR,
|
|
88
|
+
pattern: '(?:viewChild|ViewChild|contentChild|ContentChild)[^\\n;]*\\bKbqTextarea\\b',
|
|
89
|
+
message: 'A KbqTextarea view/content query returns the directive instance, whose `maxRows` and ' +
|
|
90
|
+
'`maxRowLimitReached` are now signals — reading one is a double call, e.g. ' +
|
|
91
|
+
'`this.textarea().maxRows()`. Verify query reads manually.'
|
|
92
|
+
}
|
|
93
|
+
];
|
|
94
|
+
/** Printed once per project, after the per-file reports. */
|
|
95
|
+
const SUMMARY = [
|
|
96
|
+
' `maxRows` and `freeRowsHeight` report `number | undefined` instead of `number`. Both were declared ' +
|
|
97
|
+
'non-nullable while an unbound textarea held `undefined`, and `maxRowLimitReached` compared against ' +
|
|
98
|
+
'it — `rowsCount > undefined` is false, which is why unlimited growth worked at all.',
|
|
99
|
+
' `freeRowsHeight` no longer writes itself. It defaulted to the measured line height by assigning its ' +
|
|
100
|
+
'own input in `ngOnInit`; the fallback is a computed now, so binding it later actually takes effect ' +
|
|
101
|
+
'instead of being overwritten on the next init.',
|
|
102
|
+
' The `kbq-textarea_max-row-limit-reached` class follows the row count directly. It is derived from a ' +
|
|
103
|
+
'signal written inside `runOutsideAngular`, so the class used to wait for an unrelated change ' +
|
|
104
|
+
'detection pass to appear.',
|
|
105
|
+
' Generated ids come from the CDK `_IdGenerator` instead of a module-level counter. The shape is ' +
|
|
106
|
+
'unchanged for a default `APP_ID`: the CDK omits the app id when it is `ng`, and the per-prefix ' +
|
|
107
|
+
'counter still starts at 0, so a real app keeps getting `kbq-textarea-0`. Only an app that sets ' +
|
|
108
|
+
'`APP_ID` explicitly sees it in the id, and the counter is shared per prefix rather than per module.'
|
|
109
|
+
];
|
|
110
|
+
|
|
111
|
+
exports.SIGNAL_API_METHODS = SIGNAL_API_METHODS;
|
|
112
|
+
exports.SIGNAL_MEMBERS = SIGNAL_MEMBERS;
|
|
113
|
+
exports.SUMMARY = SUMMARY;
|
|
114
|
+
exports.TEXTAREA_EXPORT_AS = TEXTAREA_EXPORT_AS;
|
|
115
|
+
exports.TEXTAREA_PACKAGE = TEXTAREA_PACKAGE;
|
|
116
|
+
exports.TEXTAREA_TYPE = TEXTAREA_TYPE;
|
|
117
|
+
exports.UNPARSEABLE_TEMPLATE_MESSAGE = UNPARSEABLE_TEMPLATE_MESSAGE;
|
|
118
|
+
exports.VALUE_CHANGED_MEMBERS = VALUE_CHANGED_MEMBERS;
|
|
119
|
+
exports.templateManualMessage = templateManualMessage;
|
|
120
|
+
exports.valueChangedMessage = valueChangedMessage;
|
|
121
|
+
exports.warnPatterns = warnPatterns;
|
|
@@ -0,0 +1,379 @@
|
|
|
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_textareaSignals_data = require('./data.js');
|
|
11
|
+
require('@angular-devkit/schematics');
|
|
12
|
+
require('@schematics/angular/utility');
|
|
13
|
+
|
|
14
|
+
const LABEL = '[textarea-signals]';
|
|
15
|
+
const TS_EXT = '.ts';
|
|
16
|
+
const HTML_EXT = '.html';
|
|
17
|
+
/** Applies text-span edits to `content`, right-to-left, so earlier edits don't shift later offsets. */
|
|
18
|
+
function applyEdits(content, edits) {
|
|
19
|
+
const sorted = [...edits].sort((a, b) => b.start - a.start || b.end - a.end);
|
|
20
|
+
let result = content;
|
|
21
|
+
for (const { start, end, text } of sorted) {
|
|
22
|
+
result = result.slice(0, start) + text + result.slice(end);
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
}
|
|
26
|
+
const isFunctionLike = (node) => ts.isFunctionDeclaration(node) ||
|
|
27
|
+
ts.isMethodDeclaration(node) ||
|
|
28
|
+
ts.isConstructorDeclaration(node) ||
|
|
29
|
+
ts.isArrowFunction(node) ||
|
|
30
|
+
ts.isFunctionExpression(node) ||
|
|
31
|
+
ts.isGetAccessorDeclaration(node) ||
|
|
32
|
+
ts.isSetAccessorDeclaration(node);
|
|
33
|
+
/** Walks up from `node` to the nearest ancestor matching `predicate`. */
|
|
34
|
+
function findAncestor(node, predicate) {
|
|
35
|
+
let current = node.parent;
|
|
36
|
+
while (current) {
|
|
37
|
+
if (predicate(current))
|
|
38
|
+
return current;
|
|
39
|
+
current = current.parent;
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
/** Whether a type annotation refers to `typeName`. */
|
|
44
|
+
function isTypeReference(type, typeName) {
|
|
45
|
+
return !!type && ts.isTypeReferenceNode(type) && ts.isIdentifier(type.typeName) && type.typeName.text === typeName;
|
|
46
|
+
}
|
|
47
|
+
const FIELD_MODIFIERS = new Set([
|
|
48
|
+
ts.SyntaxKind.PrivateKeyword,
|
|
49
|
+
ts.SyntaxKind.PublicKeyword,
|
|
50
|
+
ts.SyntaxKind.ProtectedKeyword,
|
|
51
|
+
ts.SyntaxKind.ReadonlyKeyword
|
|
52
|
+
]);
|
|
53
|
+
/**
|
|
54
|
+
* Collects the receivers annotated with `typeName`, by explicit annotation only (no cross-package type
|
|
55
|
+
* resolution): method/function params, class fields (incl. `@ViewChild(KbqTextarea) x: KbqTextarea` and constructor
|
|
56
|
+
* parameter-properties) and typed locals.
|
|
57
|
+
*/
|
|
58
|
+
function collectReceivers(sourceFile, typeName) {
|
|
59
|
+
const receivers = [];
|
|
60
|
+
const add = (text, scope) => receivers.push({ text, start: scope.getStart(sourceFile), end: scope.getEnd() });
|
|
61
|
+
const visit = (node) => {
|
|
62
|
+
if (ts.isParameter(node) && ts.isIdentifier(node.name) && isTypeReference(node.type, typeName)) {
|
|
63
|
+
add(node.name.text, findAncestor(node, isFunctionLike) ?? sourceFile);
|
|
64
|
+
// A constructor parameter-property is also a class field, reachable as `this.<name>`.
|
|
65
|
+
if (node.modifiers?.some((modifier) => FIELD_MODIFIERS.has(modifier.kind))) {
|
|
66
|
+
const owner = findAncestor(node, ts.isClassDeclaration);
|
|
67
|
+
if (owner)
|
|
68
|
+
add(`this.${node.name.text}`, owner);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else if (ts.isPropertyDeclaration(node) &&
|
|
72
|
+
ts.isIdentifier(node.name) &&
|
|
73
|
+
isTypeReference(node.type, typeName)) {
|
|
74
|
+
const owner = findAncestor(node, ts.isClassDeclaration);
|
|
75
|
+
if (owner)
|
|
76
|
+
add(`this.${node.name.text}`, owner);
|
|
77
|
+
}
|
|
78
|
+
else if (ts.isVariableDeclaration(node) &&
|
|
79
|
+
ts.isIdentifier(node.name) &&
|
|
80
|
+
isTypeReference(node.type, typeName)) {
|
|
81
|
+
add(node.name.text, findAncestor(node, isFunctionLike) ?? sourceFile);
|
|
82
|
+
}
|
|
83
|
+
node.forEachChild(visit);
|
|
84
|
+
};
|
|
85
|
+
visit(sourceFile);
|
|
86
|
+
return receivers;
|
|
87
|
+
}
|
|
88
|
+
/** Whether a property access on a receiver is within one of the receiver's scopes. */
|
|
89
|
+
function inReceiverScope(node, sourceFile, receivers) {
|
|
90
|
+
const receiverText = node.expression.getText(sourceFile);
|
|
91
|
+
const start = node.getStart(sourceFile);
|
|
92
|
+
const end = node.getEnd();
|
|
93
|
+
return receivers.some((r) => r.text === receiverText && start >= r.start && end <= r.end);
|
|
94
|
+
}
|
|
95
|
+
/** Binary operators that make their left operand a write target rather than a read. */
|
|
96
|
+
const ASSIGNMENT_OPERATORS = new Set([
|
|
97
|
+
ts.SyntaxKind.EqualsToken,
|
|
98
|
+
ts.SyntaxKind.PlusEqualsToken,
|
|
99
|
+
ts.SyntaxKind.MinusEqualsToken,
|
|
100
|
+
ts.SyntaxKind.AsteriskEqualsToken,
|
|
101
|
+
ts.SyntaxKind.AsteriskAsteriskEqualsToken,
|
|
102
|
+
ts.SyntaxKind.SlashEqualsToken,
|
|
103
|
+
ts.SyntaxKind.PercentEqualsToken,
|
|
104
|
+
ts.SyntaxKind.LessThanLessThanEqualsToken,
|
|
105
|
+
ts.SyntaxKind.GreaterThanGreaterThanEqualsToken,
|
|
106
|
+
ts.SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken,
|
|
107
|
+
ts.SyntaxKind.AmpersandEqualsToken,
|
|
108
|
+
ts.SyntaxKind.BarEqualsToken,
|
|
109
|
+
ts.SyntaxKind.CaretEqualsToken,
|
|
110
|
+
ts.SyntaxKind.BarBarEqualsToken,
|
|
111
|
+
ts.SyntaxKind.AmpersandAmpersandEqualsToken,
|
|
112
|
+
ts.SyntaxKind.QuestionQuestionEqualsToken
|
|
113
|
+
]);
|
|
114
|
+
/** Unary operators that write their operand back. Every other prefix operator is a plain read. */
|
|
115
|
+
const INCREMENT_OPERATORS = new Set([ts.SyntaxKind.PlusPlusToken, ts.SyntaxKind.MinusMinusToken]);
|
|
116
|
+
/** Whether `node` sits on the left of a destructuring assignment, where it is written rather than read. */
|
|
117
|
+
function isDestructuringTarget(node) {
|
|
118
|
+
let current = node;
|
|
119
|
+
while (ts.isPropertyAssignment(current.parent) ||
|
|
120
|
+
ts.isShorthandPropertyAssignment(current.parent) ||
|
|
121
|
+
ts.isSpreadAssignment(current.parent) ||
|
|
122
|
+
ts.isSpreadElement(current.parent) ||
|
|
123
|
+
ts.isObjectLiteralExpression(current.parent) ||
|
|
124
|
+
ts.isArrayLiteralExpression(current.parent)) {
|
|
125
|
+
current = current.parent;
|
|
126
|
+
}
|
|
127
|
+
return (ts.isBinaryExpression(current.parent) &&
|
|
128
|
+
current.parent.left === current &&
|
|
129
|
+
ASSIGNMENT_OPERATORS.has(current.parent.operatorToken.kind));
|
|
130
|
+
}
|
|
131
|
+
/** Classifies a matched property access and appends the resulting edit(s). */
|
|
132
|
+
function classifyAccess(node, edits) {
|
|
133
|
+
const parent = node.parent;
|
|
134
|
+
// Already migrated: `x.maxRows()` — leave alone (idempotent).
|
|
135
|
+
if (ts.isCallExpression(parent) && parent.expression === node)
|
|
136
|
+
return;
|
|
137
|
+
// Write target, in every shape. Each migrated member is an `input()` or a read-only `computed`, so a
|
|
138
|
+
// write has no mechanical translation: it is left untouched and becomes the read-only error the
|
|
139
|
+
// consumer fixes by hand. Appending `()` to it would produce unparseable TypeScript instead.
|
|
140
|
+
if (ts.isBinaryExpression(parent) && parent.left === node && ASSIGNMENT_OPERATORS.has(parent.operatorToken.kind))
|
|
141
|
+
return;
|
|
142
|
+
// `x.maxRows++` / `--x.maxRows` and `delete x.maxRows` are writes too. Only the increment operators
|
|
143
|
+
// count: a `PrefixUnaryExpression` is also how `!x.maxRowLimitReached` is spelled, and that is a read.
|
|
144
|
+
if (ts.isPostfixUnaryExpression(parent) && parent.operand === node)
|
|
145
|
+
return;
|
|
146
|
+
if (ts.isPrefixUnaryExpression(parent) && parent.operand === node && INCREMENT_OPERATORS.has(parent.operator))
|
|
147
|
+
return;
|
|
148
|
+
if (ts.isDeleteExpression(parent))
|
|
149
|
+
return;
|
|
150
|
+
if (isDestructuringTarget(node))
|
|
151
|
+
return;
|
|
152
|
+
// Read (incl. optional chain `x?.maxRows`): append `()`.
|
|
153
|
+
edits.push({ start: node.getEnd(), end: node.getEnd(), text: '()' });
|
|
154
|
+
}
|
|
155
|
+
/** Collects edits for every read/write of a value-safe signal member on a known textarea receiver. */
|
|
156
|
+
function collectAccessEdits(sourceFile, receivers) {
|
|
157
|
+
const edits = [];
|
|
158
|
+
const visit = (node) => {
|
|
159
|
+
if (ts.isPropertyAccessExpression(node) &&
|
|
160
|
+
ts.isIdentifier(node.name) &&
|
|
161
|
+
migrations_textareaSignals_data.SIGNAL_MEMBERS.includes(node.name.text) &&
|
|
162
|
+
inReceiverScope(node, sourceFile, receivers)) {
|
|
163
|
+
classifyAccess(node, edits);
|
|
164
|
+
}
|
|
165
|
+
node.forEachChild(visit);
|
|
166
|
+
};
|
|
167
|
+
visit(sourceFile);
|
|
168
|
+
return edits;
|
|
169
|
+
}
|
|
170
|
+
/** Collects the members read on a textarea receiver that need manual migration. */
|
|
171
|
+
function collectValueChangedAccess(sourceFile, receivers) {
|
|
172
|
+
const valueChanged = new Set();
|
|
173
|
+
const visit = (node) => {
|
|
174
|
+
if (ts.isPropertyAccessExpression(node) &&
|
|
175
|
+
ts.isIdentifier(node.name) &&
|
|
176
|
+
migrations_textareaSignals_data.VALUE_CHANGED_MEMBERS.includes(node.name.text) &&
|
|
177
|
+
inReceiverScope(node, sourceFile, receivers)) {
|
|
178
|
+
valueChanged.add(node.name.text);
|
|
179
|
+
}
|
|
180
|
+
node.forEachChild(visit);
|
|
181
|
+
};
|
|
182
|
+
visit(sourceFile);
|
|
183
|
+
return valueChanged;
|
|
184
|
+
}
|
|
185
|
+
/** Pass A — rewrite value-safe programmatic reads of textarea signal members in TypeScript code. */
|
|
186
|
+
function migrateTsExpressions(content, fileName) {
|
|
187
|
+
const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
188
|
+
const receivers = collectReceivers(sourceFile, migrations_textareaSignals_data.TEXTAREA_TYPE);
|
|
189
|
+
if (receivers.length === 0)
|
|
190
|
+
return content;
|
|
191
|
+
const edits = collectAccessEdits(sourceFile, receivers);
|
|
192
|
+
return edits.length > 0 ? applyEdits(content, edits) : content;
|
|
193
|
+
}
|
|
194
|
+
/** Emits precise, receiver-scoped warnings for the members that can't be auto-fixed. */
|
|
195
|
+
function warnReceiverMembers(context, filePath, content) {
|
|
196
|
+
const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
197
|
+
const receivers = collectReceivers(sourceFile, migrations_textareaSignals_data.TEXTAREA_TYPE);
|
|
198
|
+
if (receivers.length === 0)
|
|
199
|
+
return;
|
|
200
|
+
const valueChanged = collectValueChangedAccess(sourceFile, receivers);
|
|
201
|
+
if (valueChanged.size > 0) {
|
|
202
|
+
utils_messages.logMessage(context.logger, [`${LABEL} ${filePath}`, ` ${migrations_textareaSignals_data.valueChangedMessage(valueChanged)}`]);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
function logWarnings(context, filePath, content) {
|
|
206
|
+
for (const { anchor, pattern, message } of migrations_textareaSignals_data.warnPatterns) {
|
|
207
|
+
if (!new RegExp(anchor).test(content) || !new RegExp(pattern).test(content))
|
|
208
|
+
continue;
|
|
209
|
+
utils_messages.logMessage(context.logger, [`${LABEL} ${filePath}`, ` ${message}`]);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function escapeRegExp(value) {
|
|
213
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Matches `<ref>.<member>` where the access is neither already a call nor a signal-API call. A template can
|
|
217
|
+
* only read these, so an assignment never needs excluding. The dot is matched with the whitespace around it
|
|
218
|
+
* - Angular's expression grammar allows `t . maxRows` and a binding wrapped over two lines - and that
|
|
219
|
+
* whitespace is captured so the rewrite keeps the layout.
|
|
220
|
+
*/
|
|
221
|
+
function memberAccessPattern(ref, members) {
|
|
222
|
+
const methods = [...migrations_textareaSignals_data.SIGNAL_API_METHODS].join('|');
|
|
223
|
+
return new RegExp(`\\b(${escapeRegExp(ref)})(\\s*\\.\\s*)(${members.join('|')})\\b(?!\\s*\\()(?!\\s*\\.\\s*(?:${methods})\\b)`, 'g');
|
|
224
|
+
}
|
|
225
|
+
/** Reference variables bound to the textarea: `#t="kbqTextarea"` on any element. */
|
|
226
|
+
class TemplateCollector {
|
|
227
|
+
constructor() {
|
|
228
|
+
this.refs = new Set();
|
|
229
|
+
}
|
|
230
|
+
visitElement(element) {
|
|
231
|
+
for (const attr of element.attrs ?? []) {
|
|
232
|
+
if (typeof attr.name !== 'string' || attr.value !== migrations_textareaSignals_data.TEXTAREA_EXPORT_AS)
|
|
233
|
+
continue;
|
|
234
|
+
if (attr.name.startsWith('#'))
|
|
235
|
+
this.refs.add(attr.name.slice(1));
|
|
236
|
+
else if (attr.name.startsWith('ref-'))
|
|
237
|
+
this.refs.add(attr.name.slice(4));
|
|
238
|
+
}
|
|
239
|
+
this.visitChildren(element);
|
|
240
|
+
}
|
|
241
|
+
visitBlock(block) {
|
|
242
|
+
this.visitChildren(block);
|
|
243
|
+
}
|
|
244
|
+
visitChildren(node) {
|
|
245
|
+
utils_ast.visitAll(this, node.children ?? []);
|
|
246
|
+
}
|
|
247
|
+
visitAttribute() { }
|
|
248
|
+
visitText() { }
|
|
249
|
+
visitComment() { }
|
|
250
|
+
visitExpansion() { }
|
|
251
|
+
visitExpansionCase() { }
|
|
252
|
+
visitBlockParameter() { }
|
|
253
|
+
visitLetDeclaration() { }
|
|
254
|
+
}
|
|
255
|
+
/** Pass B - rewrite reads through a textarea reference variable and report the ones that changed value. */
|
|
256
|
+
async function migrateTemplate(template) {
|
|
257
|
+
const untouched = { content: template, changed: false, manual: new Set(), unparseable: false };
|
|
258
|
+
if (!template.includes(migrations_textareaSignals_data.TEXTAREA_EXPORT_AS))
|
|
259
|
+
return untouched;
|
|
260
|
+
const parsed = await utils_typescript.parseTemplate(template);
|
|
261
|
+
if (!parsed.tree)
|
|
262
|
+
return { ...untouched, unparseable: true };
|
|
263
|
+
const collector = new TemplateCollector();
|
|
264
|
+
utils_ast.visitAll(collector, parsed.tree.rootNodes);
|
|
265
|
+
const refs = [...collector.refs];
|
|
266
|
+
if (refs.length === 0)
|
|
267
|
+
return untouched;
|
|
268
|
+
const manual = new Set();
|
|
269
|
+
let content = template;
|
|
270
|
+
let changed = false;
|
|
271
|
+
for (const ref of refs) {
|
|
272
|
+
for (const match of template.matchAll(memberAccessPattern(ref, migrations_textareaSignals_data.VALUE_CHANGED_MEMBERS))) {
|
|
273
|
+
manual.add(match[3]);
|
|
274
|
+
}
|
|
275
|
+
const next = content.replace(memberAccessPattern(ref, migrations_textareaSignals_data.SIGNAL_MEMBERS), '$1$2$3()');
|
|
276
|
+
if (next !== content) {
|
|
277
|
+
content = next;
|
|
278
|
+
changed = true;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return { content, changed, manual, unparseable: false };
|
|
282
|
+
}
|
|
283
|
+
/** Pass B (inline) - the same, inside inline component templates. */
|
|
284
|
+
async function migrateInlineTemplates(content, fileName) {
|
|
285
|
+
const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
286
|
+
const manual = new Set();
|
|
287
|
+
let result = content;
|
|
288
|
+
let changed = false;
|
|
289
|
+
let unparseable = false;
|
|
290
|
+
// Splice right-to-left so earlier offsets stay valid.
|
|
291
|
+
for (const { start, end } of utils_typescript.collectInlineTemplateRanges(sourceFile).sort((a, b) => b.start - a.start)) {
|
|
292
|
+
const migrated = await migrateTemplate(result.slice(start, end));
|
|
293
|
+
migrated.manual.forEach((member) => manual.add(member));
|
|
294
|
+
unparseable ||= migrated.unparseable;
|
|
295
|
+
if (migrated.changed) {
|
|
296
|
+
result = result.slice(0, start) + migrated.content + result.slice(end);
|
|
297
|
+
changed = true;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return { content: result, changed, manual, unparseable };
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* A `.ts` file is a textarea consumer if it names any of the exported symbols or imports the package. There
|
|
304
|
+
* is no element to look for: `kbqTextarea` is an attribute on a native `<textarea>`.
|
|
305
|
+
*/
|
|
306
|
+
function referencesTextarea(content) {
|
|
307
|
+
return /\bKbqTextarea\w*\b/.test(content) || content.includes(migrations_textareaSignals_data.TEXTAREA_PACKAGE);
|
|
308
|
+
}
|
|
309
|
+
function textareaSignals(options) {
|
|
310
|
+
return async (tree, context) => {
|
|
311
|
+
const { project } = options;
|
|
312
|
+
// `ng update` runs a migration with no options at all, and `migrations.json` declares no schema, so
|
|
313
|
+
// the schema default never reaches the rule: without this the migration would only ever report.
|
|
314
|
+
const fix = options.fix ?? true;
|
|
315
|
+
const projectDefinition = await utils_packageConfig.setupOptions(project, tree);
|
|
316
|
+
const root = projectDefinition?.root ?? '';
|
|
317
|
+
const rootDir = root ? tree.getDir(root) : tree.root;
|
|
318
|
+
const tsPaths = [];
|
|
319
|
+
const htmlPaths = [];
|
|
320
|
+
utils_packageConfig.visitProjectFiles(rootDir, (filePath) => {
|
|
321
|
+
if (filePath.endsWith(TS_EXT))
|
|
322
|
+
tsPaths.push(filePath);
|
|
323
|
+
else if (filePath.endsWith(HTML_EXT))
|
|
324
|
+
htmlPaths.push(filePath);
|
|
325
|
+
});
|
|
326
|
+
let touched = 0;
|
|
327
|
+
let consumers = 0;
|
|
328
|
+
const commit = (filePath, original, updated) => {
|
|
329
|
+
if (updated === original)
|
|
330
|
+
return;
|
|
331
|
+
touched++;
|
|
332
|
+
if (fix) {
|
|
333
|
+
tree.overwrite(filePath, updated);
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
utils_messages.logMessage(context.logger, [`${LABEL} would update ${filePath} (run with --fix to apply)`]);
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
const report = (filePath, message) => utils_messages.logMessage(context.logger, [`${LABEL} ${filePath}`, ` ${message}`]);
|
|
340
|
+
for (const filePath of tsPaths) {
|
|
341
|
+
const original = tree.read(filePath)?.toString();
|
|
342
|
+
if (!original || !referencesTextarea(original))
|
|
343
|
+
continue;
|
|
344
|
+
consumers++;
|
|
345
|
+
logWarnings(context, filePath, original);
|
|
346
|
+
warnReceiverMembers(context, filePath, original);
|
|
347
|
+
const inline = await migrateInlineTemplates(migrateTsExpressions(original, filePath), filePath);
|
|
348
|
+
if (inline.manual.size > 0)
|
|
349
|
+
report(filePath, migrations_textareaSignals_data.templateManualMessage(inline.manual));
|
|
350
|
+
if (inline.unparseable)
|
|
351
|
+
report(filePath, migrations_textareaSignals_data.UNPARSEABLE_TEMPLATE_MESSAGE);
|
|
352
|
+
commit(filePath, original, inline.content);
|
|
353
|
+
}
|
|
354
|
+
for (const filePath of htmlPaths) {
|
|
355
|
+
const original = tree.read(filePath)?.toString();
|
|
356
|
+
if (!original)
|
|
357
|
+
continue;
|
|
358
|
+
const migrated = await migrateTemplate(original);
|
|
359
|
+
if (!migrated.changed && migrated.manual.size === 0 && !migrated.unparseable)
|
|
360
|
+
continue;
|
|
361
|
+
consumers++;
|
|
362
|
+
if (migrated.manual.size > 0)
|
|
363
|
+
report(filePath, migrations_textareaSignals_data.templateManualMessage(migrated.manual));
|
|
364
|
+
if (migrated.unparseable)
|
|
365
|
+
report(filePath, migrations_textareaSignals_data.UNPARSEABLE_TEMPLATE_MESSAGE);
|
|
366
|
+
commit(filePath, original, migrated.content);
|
|
367
|
+
}
|
|
368
|
+
// Nothing here uses the textarea, so the summary would only be noise.
|
|
369
|
+
if (consumers === 0)
|
|
370
|
+
return;
|
|
371
|
+
utils_messages.logMessage(context.logger, [
|
|
372
|
+
`${LABEL} processed tree under "${root || '<workspace root>'}", ` +
|
|
373
|
+
`${fix ? 'updated' : 'would update'} ${touched} file(s).`,
|
|
374
|
+
...migrations_textareaSignals_data.SUMMARY
|
|
375
|
+
]);
|
|
376
|
+
};
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
exports.default = textareaSignals;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/schema",
|
|
3
|
+
"$id": "koobiq-components-textarea-signals",
|
|
4
|
+
"title": "Koobiq components textarea signals migration",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"project": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "Name of the project to migrate. If omitted, the migration runs over the whole tree.",
|
|
10
|
+
"$default": {
|
|
11
|
+
"$source": "projectName"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"fix": {
|
|
15
|
+
"type": "boolean",
|
|
16
|
+
"default": true,
|
|
17
|
+
"description": "When true, applies all auto-fix replacements. When false, prints what would change without writing."
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|