@koobiq/components 21.0.0 → 21.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/badge/_badge-theme.scss +31 -0
- package/breadcrumbs/breadcrumbs.scss +5 -1
- package/checkbox/_checkbox-theme.scss +0 -17
- package/checkbox/checkbox-tokens.scss +0 -4
- package/code-block/_code-block-theme.scss +7 -6
- package/code-block/code-block-tokens.scss +8 -4
- package/code-block/code-block.scss +54 -32
- package/content-panel/content-panel-header.scss +2 -3
- package/content-panel/content-panel.scss +3 -0
- package/core/selection/pseudo-checkbox/pseudo-checkbox-tokens.scss +0 -2
- package/fesm2022/koobiq-components-accordion.mjs +4 -4
- package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
- package/fesm2022/koobiq-components-actions-panel.mjs +10 -2
- package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-app-switcher.mjs +1 -1
- package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
- package/fesm2022/koobiq-components-badge.mjs +2 -2
- package/fesm2022/koobiq-components-badge.mjs.map +1 -1
- package/fesm2022/koobiq-components-breadcrumbs.mjs +2 -2
- package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs +1 -1
- package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-checkbox.mjs +18 -8
- package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
- package/fesm2022/koobiq-components-clamped-text.mjs +78 -10
- package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
- package/fesm2022/koobiq-components-code-block.mjs +106 -394
- package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
- package/fesm2022/koobiq-components-content-panel.mjs +4 -4
- package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
- package/fesm2022/koobiq-components-core.mjs +300 -37
- package/fesm2022/koobiq-components-core.mjs.map +1 -1
- package/fesm2022/koobiq-components-datepicker.mjs +151 -60
- package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-divider.mjs +3 -3
- package/fesm2022/koobiq-components-divider.mjs.map +1 -1
- package/fesm2022/koobiq-components-dropdown.mjs +3 -3
- package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
- package/fesm2022/koobiq-components-file-upload.mjs +17 -8
- package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
- package/fesm2022/koobiq-components-filter-bar.mjs +124 -41
- package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-flag.mjs +3 -3
- package/fesm2022/koobiq-components-flag.mjs.map +1 -1
- package/fesm2022/koobiq-components-form-field.mjs +90 -27
- package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
- package/fesm2022/koobiq-components-icon.mjs +38 -17
- package/fesm2022/koobiq-components-icon.mjs.map +1 -1
- package/fesm2022/koobiq-components-inline-edit.mjs +19 -2
- package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
- package/fesm2022/koobiq-components-input.mjs +76 -17
- package/fesm2022/koobiq-components-input.mjs.map +1 -1
- package/fesm2022/koobiq-components-list.mjs +1 -1
- package/fesm2022/koobiq-components-list.mjs.map +1 -1
- package/fesm2022/koobiq-components-modal.mjs +3 -3
- package/fesm2022/koobiq-components-modal.mjs.map +1 -1
- package/fesm2022/koobiq-components-navbar.mjs +86 -25
- package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
- package/fesm2022/koobiq-components-notification-center.mjs +4 -4
- package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
- package/fesm2022/koobiq-components-overflow-items.mjs +116 -38
- package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
- package/fesm2022/koobiq-components-popover.mjs +86 -7
- package/fesm2022/koobiq-components-popover.mjs.map +1 -1
- package/fesm2022/koobiq-components-radio.mjs +41 -19
- package/fesm2022/koobiq-components-radio.mjs.map +1 -1
- package/fesm2022/koobiq-components-search-expandable.mjs +29 -17
- package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
- package/fesm2022/koobiq-components-select.mjs +49 -12
- package/fesm2022/koobiq-components-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-sidepanel.mjs +198 -186
- package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
- package/fesm2022/koobiq-components-splitter.mjs +49 -25
- package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
- package/fesm2022/koobiq-components-tabs.mjs +30 -11
- package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
- package/fesm2022/koobiq-components-tags.mjs +1 -1
- package/fesm2022/koobiq-components-tags.mjs.map +1 -1
- package/fesm2022/koobiq-components-textarea.mjs +28 -11
- package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
- package/fesm2022/koobiq-components-time-range.mjs +2 -2
- package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
- package/fesm2022/koobiq-components-timepicker.mjs +71 -16
- package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
- package/fesm2022/koobiq-components-timezone.mjs +2 -2
- package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
- package/fesm2022/koobiq-components-toast.mjs +2 -2
- package/fesm2022/koobiq-components-toast.mjs.map +1 -1
- package/fesm2022/koobiq-components-toggle.mjs +25 -9
- package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
- package/fesm2022/koobiq-components-tooltip.mjs +90 -17
- package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
- package/fesm2022/koobiq-components-top-bar.mjs +27 -7
- package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree-select.mjs +24 -9
- package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
- package/fesm2022/koobiq-components-tree.mjs +288 -109
- package/fesm2022/koobiq-components-tree.mjs.map +1 -1
- package/file-upload/_file-upload-theme.scss +0 -12
- package/file-upload/file-upload-tokens.scss +0 -1
- package/file-upload/file-upload.scss +0 -1
- package/filter-bar/_filter-bar-theme.scss +7 -8
- package/filter-bar/filter-bar.scss +0 -1
- package/filter-bar/pipes/base-pipe.scss +36 -2
- package/filter-bar/pipes/pipe-multi-tree-select.scss +27 -0
- package/form-field/_fieldset-theme.scss +2 -7
- package/form-field/_form-field-theme.scss +9 -22
- package/form-field/_hint-theme.scss +20 -0
- package/form-field/fieldset-tokens.scss +0 -1
- package/form-field/fieldset.scss +0 -3
- package/form-field/form-field-tokens.scss +1 -1
- package/form-field/form-field.scss +9 -0
- package/form-field/hint-tokens.scss +3 -0
- package/modal/modal.scss +2 -0
- package/navbar/_navbar-item_vertical.scss +48 -2
- package/navbar/_navbar-theme.scss +11 -3
- package/navbar/navbar-item.scss +17 -0
- package/navbar/navbar-tokens.scss +3 -0
- package/package.json +4 -4
- package/popover/popover.scss +1 -1
- package/radio/_radio-theme.scss +0 -30
- package/radio/radio-tokens.scss +0 -2
- package/schematics/collection.json +94 -89
- package/schematics/migrations/accordion-state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/actions-panel-overlay-container/{index.js → index.cjs} +5 -4
- package/schematics/migrations/alert-signals/{index.js → index.cjs} +14 -13
- package/schematics/migrations/angular-animations-removal/index.cjs +21 -0
- package/schematics/migrations/app-switcher-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/autocomplete-panel-width-auto/{index.js → index.cjs} +6 -5
- package/schematics/migrations/autocomplete-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/badge-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-state-and-styles/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-supported-colors/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-toggle-signals-and-aria/{index.js → index.cjs} +7 -6
- package/schematics/migrations/button-truncation/{index.js → index.cjs} +7 -6
- package/schematics/migrations/checkbox-signals/{index.js → index.cjs} +9 -8
- package/schematics/migrations/clamped-text-disclosure/{index.js → index.cjs} +5 -4
- package/schematics/migrations/code-block-highlight-js-core/README.md +53 -0
- package/schematics/migrations/code-block-highlight-js-core/data.cjs +64 -0
- package/schematics/migrations/code-block-highlight-js-core/index.cjs +319 -0
- package/schematics/migrations/code-block-highlight-js-core/schema.json +20 -0
- package/schematics/migrations/code-block-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/color-signals/index.cjs +20 -0
- package/schematics/migrations/core-mixins-removal/index.cjs +18 -0
- package/schematics/migrations/css-selectors/{index.js → index.cjs} +4 -3
- package/schematics/migrations/datepicker-signals/index.cjs +18 -0
- package/schematics/migrations/deprecated-icons/README.md +21 -5
- package/schematics/migrations/deprecated-icons/{index.js → index.cjs} +15 -28
- package/schematics/migrations/deprecated-icons/schema.json +1 -1
- package/schematics/migrations/design-tokens-v4/{index.js → index.cjs} +3 -2
- package/schematics/migrations/divider-signals-and-aria/{index.js → index.cjs} +5 -4
- package/schematics/migrations/dl-attribute-coercion/{index.js → index.cjs} +7 -6
- package/schematics/migrations/dl-standalone-names/{index.js → index.cjs} +11 -10
- package/schematics/migrations/dropdown-demote-overlay/{index.js → index.cjs} +7 -6
- package/schematics/migrations/dropdown-signals/index.cjs +20 -0
- package/schematics/migrations/empty-state-error-color/{index.js → index.cjs} +5 -4
- package/schematics/migrations/empty-state-size-attr/{index.js → index.cjs} +6 -5
- package/schematics/migrations/file-upload-cva-and-primitives/{index.js → index.cjs} +5 -4
- package/schematics/migrations/file-upload-deprecated-outputs/{index.js → index.cjs} +5 -4
- package/schematics/migrations/filter-bar-rename-action/{index.js → index.cjs} +5 -4
- package/schematics/migrations/filter-bar-signals/{index.js → index.cjs} +16 -15
- package/schematics/migrations/filter-bar-state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/flag-inner-html/{index.js → index.cjs} +5 -4
- package/schematics/migrations/form-field-signals/{index.js → index.cjs} +18 -17
- package/schematics/migrations/icon-semantics-and-api/{data.js → data.cjs} +4 -4
- package/schematics/migrations/icon-semantics-and-api/{index.js → index.cjs} +6 -5
- package/schematics/migrations/icons-replacement/README.md +16 -2
- package/schematics/migrations/icons-replacement/{index.js → index.cjs} +21 -18
- package/schematics/migrations/icons-replacement/schema.json +12 -3
- package/schematics/migrations/inline-edit-a11y-and-types/{index.js → index.cjs} +5 -4
- package/schematics/migrations/input-number-surface/{index.js → index.cjs} +5 -4
- package/schematics/migrations/input-signals/index.cjs +18 -0
- package/schematics/migrations/link-deprecated-path/{index.js → index.cjs} +4 -3
- package/schematics/migrations/link-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/list-signals/index.cjs +18 -0
- package/schematics/migrations/list-tree-multiple-input/{index.js → index.cjs} +7 -6
- package/schematics/migrations/loader-overlay-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/loader-overlay-size-attr/{index.js → index.cjs} +6 -5
- package/schematics/migrations/locale-configuration-providers/{index.js → index.cjs} +5 -4
- package/schematics/migrations/mandatory-peer-dependencies/{index.js → index.cjs} +3 -2
- package/schematics/migrations/markdown-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/modal-dialog-semantics/{index.js → index.cjs} +5 -4
- package/schematics/migrations/modal-signals/index.cjs +20 -0
- package/schematics/migrations/navbar-signals-and-aria/{index.js → index.cjs} +7 -6
- package/schematics/migrations/new-icons-pack/README.md +37 -25
- package/schematics/migrations/new-icons-pack/{index.js → index.cjs} +29 -38
- package/schematics/migrations/new-icons-pack/replacement.json +2 -14
- package/schematics/migrations/new-icons-pack/schema.json +3 -3
- package/schematics/migrations/notification-center-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/option-signals/index.cjs +20 -0
- package/schematics/migrations/popover-leave-delay/{index.js → index.cjs} +5 -4
- package/schematics/migrations/progress-bar-percentage-and-aria/{index.js → index.cjs} +5 -4
- package/schematics/migrations/progress-spinner-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/query-list-signals/index.cjs +18 -0
- package/schematics/migrations/radio-signals-and-aria/{index.js → index.cjs} +9 -8
- package/schematics/migrations/read-state-dwell-handlers/{index.js → index.cjs} +5 -4
- package/schematics/migrations/scrollbar-deprecated-path/{index.js → index.cjs} +4 -3
- package/schematics/migrations/select-signal-inputs/{index.js → index.cjs} +5 -4
- package/schematics/migrations/sidepanel-non-modal-behavior/{index.js → index.cjs} +5 -4
- package/schematics/migrations/signal-inputs-subclasses/index.cjs +18 -0
- package/schematics/migrations/split-button-optional-disabled/{index.js → index.cjs} +5 -4
- package/schematics/migrations/splitter-deprecated-path/{index.js → index.cjs} +4 -3
- package/schematics/migrations/state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/table-cell-content/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tabs-signals-and-aria/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tag-list-cleaner/{index.js → index.cjs} +7 -6
- package/schematics/migrations/tag-slots/{index.js → index.cjs} +6 -5
- package/schematics/migrations/tags-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/textarea-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/time-range-title-for/{index.js → index.cjs} +5 -4
- package/schematics/migrations/timepicker-signals/{index.js → index.cjs} +7 -6
- package/schematics/migrations/timezone-grouping-utils/{index.js → index.cjs} +5 -4
- package/schematics/migrations/title-encapsulation/{index.js → index.cjs} +5 -4
- package/schematics/migrations/toast-stack-and-defaults/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tooltip-pointer-events-and-types/{index.js → index.cjs} +5 -4
- package/schematics/migrations/top-bar-container-selectors/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tree-select-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tree-signals/{index.js → index.cjs} +5 -4
- package/schematics/migrations/tree-state-saving-default/{index.js → index.cjs} +5 -4
- package/schematics/migrations/username-pipe-injection/{index.js → index.cjs} +5 -4
- package/schematics/migrations/v20-upgrade/{data.js → data.cjs} +7 -7
- package/schematics/migrations/v20-upgrade/index.cjs +19 -0
- package/schematics/migrations/v21-upgrade/{data.js → data.cjs} +22 -22
- package/schematics/migrations/v21-upgrade/{index.js → index.cjs} +11 -10
- package/schematics/migrations/zoneless-change-detection/index.cjs +21 -0
- package/schematics/migrations.json +87 -82
- package/schematics/ng-add/{index.js → index.cjs} +15 -289
- package/schematics/utils/{angular-parsing.js → angular-parsing.cjs} +2 -2
- package/schematics/utils/custom-data.cjs +64 -0
- package/schematics/utils/{deprecated-path-migration.js → deprecated-path-migration.cjs} +4 -3
- package/schematics/utils/html-config.cjs +148 -0
- package/schematics/utils/{icon-migration.js → icon-migration.cjs} +11 -5
- package/schematics/utils/list-item-pattern.cjs +16 -0
- package/schematics/utils/{messages.js → messages.cjs} +4 -0
- package/schematics/utils/package-config.cjs +99 -0
- package/schematics/utils/project-files.cjs +25 -0
- package/schematics/utils/replacement-driver.cjs +337 -0
- package/schematics/utils/safe-rule.cjs +23 -0
- package/schematics/utils/signal-members-migration.cjs +779 -0
- package/schematics/utils/tag-patterns.cjs +21 -0
- package/schematics/utils/template-ref-access.cjs +155 -0
- package/schematics/utils/{typescript.js → typescript.cjs} +1 -1
- package/schematics/utils/warn-only-migration.cjs +52 -0
- package/schematics/utils/workspace-styles.cjs +123 -0
- package/select/select.scss +7 -0
- package/tabs/_tabs-common.scss +23 -0
- package/textarea/textarea-tokens.scss +4 -1
- package/toast/toast.component.scss +1 -0
- package/toggle/_toggle-theme.scss +0 -17
- package/tooltip/tooltip.scss +1 -1
- package/top-bar/top-bar-tokens.scss +1 -0
- package/top-bar/top-bar.scss +10 -0
- package/types/koobiq-components-accordion.d.ts +25 -0
- package/types/koobiq-components-button-toggle.d.ts +6 -0
- package/types/koobiq-components-checkbox.d.ts +30 -0
- package/types/koobiq-components-clamped-text.d.ts +16 -3
- package/types/koobiq-components-code-block.d.ts +55 -14
- package/types/koobiq-components-core.d.ts +226 -13
- package/types/koobiq-components-datepicker.d.ts +28 -1
- package/types/koobiq-components-divider.d.ts +28 -10
- package/types/koobiq-components-dropdown.d.ts +19 -0
- package/types/koobiq-components-filter-bar.d.ts +79 -6
- package/types/koobiq-components-flag.d.ts +18 -0
- package/types/koobiq-components-form-field.d.ts +87 -6
- package/types/koobiq-components-icon.d.ts +15 -0
- package/types/koobiq-components-inline-edit.d.ts +8 -1
- package/types/koobiq-components-input.d.ts +22 -3
- package/types/koobiq-components-list.d.ts +6 -0
- package/types/koobiq-components-modal.d.ts +7 -0
- package/types/koobiq-components-navbar.d.ts +71 -7
- package/types/koobiq-components-notification-center.d.ts +13 -0
- package/types/koobiq-components-overflow-items.d.ts +26 -2
- package/types/koobiq-components-popover.d.ts +38 -3
- package/types/koobiq-components-radio.d.ts +30 -0
- package/types/koobiq-components-search-expandable.d.ts +10 -0
- package/types/koobiq-components-select.d.ts +36 -4
- package/types/koobiq-components-sidepanel.d.ts +52 -1
- package/types/koobiq-components-splitter.d.ts +13 -4
- package/types/koobiq-components-tabs.d.ts +4 -0
- package/types/koobiq-components-tags.d.ts +6 -0
- package/types/koobiq-components-textarea.d.ts +9 -2
- package/types/koobiq-components-timepicker.d.ts +15 -0
- package/types/koobiq-components-toggle.d.ts +30 -0
- package/types/koobiq-components-tooltip.d.ts +55 -10
- package/types/koobiq-components-top-bar.d.ts +11 -3
- package/types/koobiq-components-tree-select.d.ts +23 -8
- package/types/koobiq-components-tree.d.ts +144 -60
- package/schematics/migrations/angular-animations-removal/index.js +0 -20
- package/schematics/migrations/color-signals/index.js +0 -19
- package/schematics/migrations/core-mixins-removal/index.js +0 -17
- package/schematics/migrations/datepicker-signals/index.js +0 -17
- package/schematics/migrations/dropdown-signals/index.js +0 -19
- package/schematics/migrations/input-signals/index.js +0 -17
- package/schematics/migrations/list-signals/index.js +0 -17
- package/schematics/migrations/modal-signals/index.js +0 -19
- package/schematics/migrations/option-signals/index.js +0 -19
- package/schematics/migrations/query-list-signals/index.js +0 -17
- package/schematics/migrations/signal-inputs-subclasses/index.js +0 -17
- package/schematics/migrations/v20-upgrade/index.js +0 -18
- package/schematics/migrations/zoneless-change-detection/index.js +0 -20
- package/schematics/utils/package-config.js +0 -13
- /package/schematics/migrations/accordion-state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/actions-panel-overlay-container/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/alert-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/angular-animations-removal/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/app-switcher-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/autocomplete-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/badge-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-state-and-styles/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-supported-colors/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-toggle-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/button-truncation/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/checkbox-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/clamped-text-disclosure/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/code-block-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/color-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/core-mixins-removal/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/css-selectors/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/datepicker-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/deprecated-icons/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/divider-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dl-attribute-coercion/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dl-standalone-names/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dropdown-demote-overlay/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/dropdown-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/empty-state-error-color/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/file-upload-cva-and-primitives/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/file-upload-deprecated-outputs/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/filter-bar-rename-action/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/filter-bar-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/filter-bar-state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/flag-inner-html/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/form-field-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/icons-replacement/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/inline-edit-a11y-and-types/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/input-number-surface/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/input-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/link-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/list-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/list-tree-multiple-input/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/loader-overlay-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/locale-configuration-providers/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/markdown-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/modal-dialog-semantics/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/modal-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/navbar-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/new-icons-pack/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/notification-center-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/option-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/popover-leave-delay/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/progress-bar-percentage-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/progress-spinner-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/query-list-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/radio-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/read-state-dwell-handlers/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/select-signal-inputs/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/sidepanel-non-modal-behavior/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/signal-inputs-subclasses/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/split-button-optional-disabled/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/table-cell-content/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tabs-signals-and-aria/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tag-list-cleaner/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tags-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/textarea-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/time-range-title-for/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/timepicker-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/timezone-grouping-utils/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/title-encapsulation/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/toast-stack-and-defaults/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tooltip-pointer-events-and-types/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/top-bar-container-selectors/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tree-select-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tree-signals/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/tree-state-saving-default/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/username-pipe-injection/{data.js → data.cjs} +0 -0
- /package/schematics/migrations/zoneless-change-detection/{data.js → data.cjs} +0 -0
- /package/schematics/utils/{ast.js → ast.cjs} +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// RegExp sources the template rewrites of v20-upgrade and v21-upgrade build on. They live here rather than in a
|
|
4
|
+
// `data.ts`: v21-upgrade's `data.ts` imports every area module, so an area that read them from there would get
|
|
5
|
+
// `undefined` under CommonJS.
|
|
6
|
+
/**
|
|
7
|
+
* One step inside an opening tag: a quoted value is taken whole, so neither `>` nor an attribute-like word inside
|
|
8
|
+
* it counts.
|
|
9
|
+
*/
|
|
10
|
+
const TAG_BODY = `(?:[^<>"']|"[^"]*"|'[^']*')`;
|
|
11
|
+
/**
|
|
12
|
+
* The start of an attribute on an opening `<kbq-code-block>` tag that does not bind `name` itself, captured as
|
|
13
|
+
* `$1` together with a `[` that opens a binding.
|
|
14
|
+
*/
|
|
15
|
+
const codeBlockTagWithout = (name) => String.raw `(<kbq-code-block(?![\w-])(?!${TAG_BODY}*[\s\[]${name}[\]\s=/>])${TAG_BODY}*?\s\[?)`;
|
|
16
|
+
/** An opening `<kbq-code-block>` tag that binds both `first` and `second`. */
|
|
17
|
+
const codeBlockTagWith = (first, second) => String.raw `<kbq-code-block(?![\w-])(?=${TAG_BODY}*[\s\[]${first}[\]\s=/>])(?=${TAG_BODY}*[\s\[]${second}[\]\s=/>])`;
|
|
18
|
+
|
|
19
|
+
exports.TAG_BODY = TAG_BODY;
|
|
20
|
+
exports.codeBlockTagWith = codeBlockTagWith;
|
|
21
|
+
exports.codeBlockTagWithout = codeBlockTagWithout;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils_ast = require('./ast.cjs');
|
|
4
|
+
var utils_signalMembersMigration = require('./signal-members-migration.cjs');
|
|
5
|
+
require('typescript');
|
|
6
|
+
require('./messages.cjs');
|
|
7
|
+
require('./package-config.cjs');
|
|
8
|
+
require('@angular-devkit/schematics');
|
|
9
|
+
require('@schematics/angular/utility');
|
|
10
|
+
require('./project-files.cjs');
|
|
11
|
+
require('./typescript.cjs');
|
|
12
|
+
|
|
13
|
+
/** A compound assignment (`+=`, `??=`, …) or a postfix `++` / `--` at the start of what follows an access. */
|
|
14
|
+
const COMPOUND_WRITE_AFTER = /^\s*(?:\+\+|--|(?:\*\*|>>>|<<|>>|&&|\|\||\?\?|[-+*/%&|^])=(?!=))/;
|
|
15
|
+
/** A prefix `++` / `--` at the end of what precedes an access. */
|
|
16
|
+
const INCREMENT_BEFORE = /(?:\+\+|--)\s*$/;
|
|
17
|
+
function escapeRegExp(value) {
|
|
18
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
19
|
+
}
|
|
20
|
+
/** `<ref>.<member> =`, but not `==` / `===`: the lookbehind matches the one `memberAccessPattern` uses. */
|
|
21
|
+
function assignmentPattern(ref, members) {
|
|
22
|
+
const names = members.map(escapeRegExp).join('|');
|
|
23
|
+
return new RegExp(`(?<![\\w$.])(${escapeRegExp(ref)}\\s*\\.\\s*(${names}))\\b(\\s*=(?!=)\\s*)`, 'g');
|
|
24
|
+
}
|
|
25
|
+
/** `<ref>.<member>` in any form, the optional chain included. */
|
|
26
|
+
function anyAccessPattern(ref, members) {
|
|
27
|
+
return new RegExp(`(?<![\\w$.])${escapeRegExp(ref)}\\s*\\??\\.\\s*(${members.map(escapeRegExp).join('|')})\\b`, 'g');
|
|
28
|
+
}
|
|
29
|
+
/** End of the assigned expression that starts at `from`: the next top-level `;`, or the end of the statement list. */
|
|
30
|
+
function assignedExpressionEnd(template, from, limit) {
|
|
31
|
+
let depth = 0;
|
|
32
|
+
let quote;
|
|
33
|
+
let end = limit;
|
|
34
|
+
for (let i = from; i < limit && end === limit; i++) {
|
|
35
|
+
const char = template[i];
|
|
36
|
+
if (quote) {
|
|
37
|
+
if (char === '\\')
|
|
38
|
+
i++;
|
|
39
|
+
else if (char === quote)
|
|
40
|
+
quote = undefined;
|
|
41
|
+
}
|
|
42
|
+
else if (char === "'" || char === '"' || char === '`') {
|
|
43
|
+
quote = char;
|
|
44
|
+
}
|
|
45
|
+
else if ('([{'.includes(char)) {
|
|
46
|
+
depth++;
|
|
47
|
+
}
|
|
48
|
+
else if (')]}'.includes(char)) {
|
|
49
|
+
if (depth === 0)
|
|
50
|
+
end = i;
|
|
51
|
+
else
|
|
52
|
+
depth--;
|
|
53
|
+
}
|
|
54
|
+
else if (char === ';' && depth === 0) {
|
|
55
|
+
end = i;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
while (end > from && /\s/.test(template[end - 1]))
|
|
59
|
+
end--;
|
|
60
|
+
return end;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Rewrites reads and writes of the members reachable through the refs in `template`, whose HTML AST is
|
|
64
|
+
* `rootNodes`. `policyOf` tells what a `#ref` on an element is bound to, or `undefined` when it is not one of
|
|
65
|
+
* the migrated types.
|
|
66
|
+
*/
|
|
67
|
+
function rewriteRefAccesses(template, rootNodes, policyOf) {
|
|
68
|
+
const scanner = new utils_signalMembersMigration.TemplateScanner(template, policyOf);
|
|
69
|
+
const result = {
|
|
70
|
+
content: template,
|
|
71
|
+
readOnlyWrites: new Set(),
|
|
72
|
+
compoundWrites: new Set(),
|
|
73
|
+
reported: new Set()
|
|
74
|
+
};
|
|
75
|
+
const writeEdits = [];
|
|
76
|
+
const readEdits = [];
|
|
77
|
+
// The end of each access already handled: a ref redeclared in a nested view reaches it twice.
|
|
78
|
+
const seen = new Set();
|
|
79
|
+
utils_ast.visitAll(scanner, rootNodes);
|
|
80
|
+
const rewriteWrites = (expression, name, policy) => {
|
|
81
|
+
const source = template.slice(expression.start, expression.end);
|
|
82
|
+
for (const match of source.matchAll(assignmentPattern(name, policy.members))) {
|
|
83
|
+
const [, target, member, operator] = match;
|
|
84
|
+
const targetEnd = expression.start + match.index + target.length;
|
|
85
|
+
if (seen.has(targetEnd))
|
|
86
|
+
continue;
|
|
87
|
+
seen.add(targetEnd);
|
|
88
|
+
if (!policy.writable.has(member)) {
|
|
89
|
+
result.readOnlyWrites.add(member);
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
// Outside a statement an assignment is no valid template to begin with.
|
|
93
|
+
if (expression.kind !== 'statement')
|
|
94
|
+
continue;
|
|
95
|
+
const valueStart = targetEnd + operator.length;
|
|
96
|
+
const valueEnd = assignedExpressionEnd(template, valueStart, expression.end);
|
|
97
|
+
if (valueEnd === valueStart)
|
|
98
|
+
continue;
|
|
99
|
+
writeEdits.push({ start: targetEnd, end: valueStart, text: '.set(' });
|
|
100
|
+
writeEdits.push({ start: valueEnd, end: valueEnd, text: ')' });
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const rewriteReads = (expression, name, policy) => {
|
|
104
|
+
const source = template.slice(expression.start, expression.end);
|
|
105
|
+
for (const match of source.matchAll(utils_signalMembersMigration.memberAccessPattern(name, policy.members))) {
|
|
106
|
+
const start = expression.start + match.index;
|
|
107
|
+
const end = start + match[0].length;
|
|
108
|
+
const member = match[2];
|
|
109
|
+
if (seen.has(end))
|
|
110
|
+
continue;
|
|
111
|
+
seen.add(end);
|
|
112
|
+
// `(click)="ref.value += 1"`, `ref.value++`, `--ref.value`: a call there is no valid template.
|
|
113
|
+
if (expression.kind === 'statement' &&
|
|
114
|
+
(COMPOUND_WRITE_AFTER.test(template.slice(end, expression.end)) ||
|
|
115
|
+
INCREMENT_BEFORE.test(template.slice(expression.start, start)))) {
|
|
116
|
+
(policy.writable.has(member) ? result.compoundWrites : result.readOnlyWrites).add(member);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
// `[(ngModel)]="ref.value"` writes through the binding: a writable signal fills it as it is.
|
|
120
|
+
if (expression.kind === 'twoWay' &&
|
|
121
|
+
!template.slice(expression.start, start).trim() &&
|
|
122
|
+
!template.slice(end, expression.end).trim()) {
|
|
123
|
+
if (!policy.writable.has(member))
|
|
124
|
+
result.readOnlyWrites.add(member);
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
readEdits.push({ start: end, end, text: '()' });
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
for (const { name, type: policy, ...view } of scanner.unambiguousRefs()) {
|
|
131
|
+
for (const expression of scanner.expressions) {
|
|
132
|
+
if (expression.start < view.start || expression.end > view.end)
|
|
133
|
+
continue;
|
|
134
|
+
if (policy.members.length > 0) {
|
|
135
|
+
rewriteWrites(expression, name, policy);
|
|
136
|
+
rewriteReads(expression, name, policy);
|
|
137
|
+
}
|
|
138
|
+
if (policy.reported?.length) {
|
|
139
|
+
const source = template.slice(expression.start, expression.end);
|
|
140
|
+
for (const [, member] of source.matchAll(anyAccessPattern(name, policy.reported))) {
|
|
141
|
+
result.reported.add(member);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Applied right to left. The sort is stable, so where a read ends an assigned value, the `)` closing
|
|
147
|
+
// `.set(` goes in first and the read's `()` lands in front of it.
|
|
148
|
+
const edits = [...writeEdits, ...readEdits].sort((a, b) => b.start - a.start || b.end - a.end);
|
|
149
|
+
for (const { start, end, text } of edits) {
|
|
150
|
+
result.content = result.content.slice(0, start) + text + result.content.slice(end);
|
|
151
|
+
}
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
exports.rewriteRefAccesses = rewriteRefAccesses;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils_messages = require('./messages.cjs');
|
|
4
|
+
var utils_packageConfig = require('./package-config.cjs');
|
|
5
|
+
var utils_projectFiles = require('./project-files.cjs');
|
|
6
|
+
require('@angular-devkit/schematics');
|
|
7
|
+
require('@schematics/angular/utility');
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Builds the rule of a migration that only reports: every `.ts` file of the project that matches a pattern is
|
|
11
|
+
* logged with its message, then the summary. Never writes.
|
|
12
|
+
*
|
|
13
|
+
* The patterns are compiled once here rather than per file. None carries the `g` flag, so a shared instance
|
|
14
|
+
* holds no `lastIndex`.
|
|
15
|
+
*/
|
|
16
|
+
function warnOnlyRule(config, options) {
|
|
17
|
+
const { label, summary } = config;
|
|
18
|
+
const warnPatterns = config.warnPatterns.map(({ anchor, pattern, message }) => ({
|
|
19
|
+
anchor: anchor ? new RegExp(anchor) : null,
|
|
20
|
+
pattern: new RegExp(pattern),
|
|
21
|
+
message
|
|
22
|
+
}));
|
|
23
|
+
return async (tree, context) => {
|
|
24
|
+
const projectDefinition = await utils_packageConfig.setupOptions(options.project, tree);
|
|
25
|
+
const root = projectDefinition?.root ?? '';
|
|
26
|
+
let reported = 0;
|
|
27
|
+
utils_projectFiles.visitProjectFiles(root ? tree.getDir(root) : tree.root, (filePath, entry) => {
|
|
28
|
+
if (!filePath.endsWith('.ts'))
|
|
29
|
+
return;
|
|
30
|
+
const content = entry.content.toString();
|
|
31
|
+
if (!content)
|
|
32
|
+
return;
|
|
33
|
+
for (const { anchor, pattern, message } of warnPatterns) {
|
|
34
|
+
if (anchor && !anchor.test(content))
|
|
35
|
+
continue;
|
|
36
|
+
if (!pattern.test(content))
|
|
37
|
+
continue;
|
|
38
|
+
reported++;
|
|
39
|
+
utils_messages.logMessage(context.logger, [`${label} ${filePath}`, ` ${message}`]);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
// Nothing here is affected, so the summary would only be noise.
|
|
43
|
+
if (reported === 0)
|
|
44
|
+
return;
|
|
45
|
+
utils_messages.logMessage(context.logger, [
|
|
46
|
+
`${label} processed "${root || '<workspace root>'}", ${reported} use(s) reported.`,
|
|
47
|
+
...summary
|
|
48
|
+
]);
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
exports.warnOnlyRule = warnOnlyRule;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Whether `project` is an application (as opposed to a library) — the same check
|
|
5
|
+
* `@schematics/angular` itself uses (see `utility/workspace.js`'s `createDefaultPath`), rather than
|
|
6
|
+
* an allowlist of builder names. A project can sit on any builder — a custom webpack wrapper, an Nx
|
|
7
|
+
* executor, one this schematic has never heard of — and still be a perfectly good application; only
|
|
8
|
+
* `projectType` reliably says so.
|
|
9
|
+
*/
|
|
10
|
+
function isApplicationProject(project) {
|
|
11
|
+
return project.extensions['projectType'] === 'application';
|
|
12
|
+
}
|
|
13
|
+
const KOOBIQ_STATIC_STYLE_ENTRIES = [
|
|
14
|
+
'node_modules/@koobiq/icons/fonts/kbq-icons.css',
|
|
15
|
+
'node_modules/@koobiq/design-tokens/web/css-tokens.css',
|
|
16
|
+
'node_modules/@koobiq/components/prebuilt-themes/theme.css'
|
|
17
|
+
];
|
|
18
|
+
const THEME_TOKENS_PATTERN = /^node_modules\/@koobiq\/design-tokens\/web\/css-tokens-(light|dark)\.css$/;
|
|
19
|
+
/**
|
|
20
|
+
* The style entries documented in the installation guide, in the order they must be loaded.
|
|
21
|
+
* `'auto'` includes both token files, since `KbqThemeService` switches between them at runtime —
|
|
22
|
+
* a static `'light'`/`'dark'` choice only needs its own.
|
|
23
|
+
*
|
|
24
|
+
* `@koobiq/design-tokens` ships code-block, scrollbar and skeleton's tokens as opt-in
|
|
25
|
+
* `component-tokens*.css` files, but `prebuilt-themes/theme.css` already carries their values,
|
|
26
|
+
* baked in at `@koobiq/components`' own build time — nothing extra to wire here for them.
|
|
27
|
+
*/
|
|
28
|
+
function getKoobiqStyleEntries(theme) {
|
|
29
|
+
const [icons, tokens, prebuiltTheme] = KOOBIQ_STATIC_STYLE_ENTRIES;
|
|
30
|
+
const themeTokens = theme === 'auto' ? [
|
|
31
|
+
'node_modules/@koobiq/design-tokens/web/css-tokens-light.css',
|
|
32
|
+
'node_modules/@koobiq/design-tokens/web/css-tokens-dark.css'
|
|
33
|
+
] : [`node_modules/@koobiq/design-tokens/web/css-tokens-${theme}.css`];
|
|
34
|
+
return [icons, tokens, ...themeTokens, prebuiltTheme];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Prepends the Koobiq style entries ahead of whatever is already in `existingStyles`, matching the
|
|
38
|
+
* order documented in installation.md, where the app's own stylesheet comes last. Re-running with
|
|
39
|
+
* the same theme is a no-op; re-running with a different theme swaps the `css-tokens-*.css`
|
|
40
|
+
* entries instead of accumulating duplicates. Non-string entries (style-budget objects) and any
|
|
41
|
+
* unrelated entries are preserved, untouched, in their original order.
|
|
42
|
+
*/
|
|
43
|
+
function mergeKoobiqStyles(existingStyles, theme) {
|
|
44
|
+
const desired = getKoobiqStyleEntries(theme);
|
|
45
|
+
const rest = existingStyles.filter((entry) => {
|
|
46
|
+
if (typeof entry !== 'string')
|
|
47
|
+
return true;
|
|
48
|
+
return (!desired.includes(entry) &&
|
|
49
|
+
!KOOBIQ_STATIC_STYLE_ENTRIES.includes(entry) &&
|
|
50
|
+
!THEME_TOKENS_PATTERN.test(entry));
|
|
51
|
+
});
|
|
52
|
+
return [...desired, ...rest];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolves the workspace-root-relative path of a project's index.html, mirroring the
|
|
56
|
+
* `@angular/build:application` builder's own default (`<sourceRoot>/index.html`) when the
|
|
57
|
+
* `index` option isn't set explicitly. `buildTarget` is `undefined` for a project with no `build`
|
|
58
|
+
* target at all, in which case the default is the only option available.
|
|
59
|
+
*/
|
|
60
|
+
function getIndexHtmlPath(project, buildTarget) {
|
|
61
|
+
const indexOption = buildTarget?.options?.index;
|
|
62
|
+
if (typeof indexOption === 'string') {
|
|
63
|
+
return indexOption;
|
|
64
|
+
}
|
|
65
|
+
if (indexOption && typeof indexOption === 'object' && !Array.isArray(indexOption)) {
|
|
66
|
+
const input = indexOption.input;
|
|
67
|
+
if (typeof input === 'string') {
|
|
68
|
+
return input;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const sourceRoot = project.sourceRoot ?? `${project.root}/src`;
|
|
72
|
+
return `${sourceRoot}/index.html`;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Whether a `build` target's `server`/`ssr` options indicate the project renders on the server —
|
|
76
|
+
* `KbqThemeCookieStore` matters there, where `KbqThemeLocalStorageStore`'s default doesn't reach
|
|
77
|
+
* the server render.
|
|
78
|
+
*/
|
|
79
|
+
function isSsrBuildTarget(buildTarget) {
|
|
80
|
+
const { server, ssr } = buildTarget.options ?? {};
|
|
81
|
+
return Boolean((typeof server === 'string' && server) || ssr === true || (ssr && typeof ssr === 'object'));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Mutates `workspace` in place: for every application project (optionally scoped to
|
|
85
|
+
* `projectName`), merges the Koobiq style entries for `theme` into its `build` target's `styles`
|
|
86
|
+
* array, when it has one. Returns per-project wiring info the caller uses to edit index.html and
|
|
87
|
+
* the project's bootstrap file afterward — for every application project, regardless of whether it
|
|
88
|
+
* had a `build` target to wire styles into, since the bootstrap file (and thus the theme providers)
|
|
89
|
+
* is resolved independently of it.
|
|
90
|
+
*
|
|
91
|
+
* Only the target literally named `build` is touched — not `test` (Karma) or `serve` — keeping the
|
|
92
|
+
* change's blast radius minimal.
|
|
93
|
+
*/
|
|
94
|
+
function applyKoobiqWorkspaceStyles(workspace, theme, projectName) {
|
|
95
|
+
const wired = [];
|
|
96
|
+
for (const [name, project] of workspace.projects) {
|
|
97
|
+
if (projectName && name !== projectName)
|
|
98
|
+
continue;
|
|
99
|
+
if (!isApplicationProject(project))
|
|
100
|
+
continue;
|
|
101
|
+
const buildTarget = project.targets.get('build');
|
|
102
|
+
let stylesWired = false;
|
|
103
|
+
if (buildTarget) {
|
|
104
|
+
const options = buildTarget.options ?? (buildTarget.options = {});
|
|
105
|
+
const existingStyles = Array.isArray(options.styles) ? options.styles : [];
|
|
106
|
+
options.styles = mergeKoobiqStyles(existingStyles, theme);
|
|
107
|
+
stylesWired = true;
|
|
108
|
+
}
|
|
109
|
+
wired.push({
|
|
110
|
+
projectName: name,
|
|
111
|
+
projectRoot: project.root,
|
|
112
|
+
indexHtmlPath: getIndexHtmlPath(project, buildTarget),
|
|
113
|
+
isSsr: buildTarget ? isSsrBuildTarget(buildTarget) : false,
|
|
114
|
+
stylesWired
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
return wired;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
exports.applyKoobiqWorkspaceStyles = applyKoobiqWorkspaceStyles;
|
|
121
|
+
exports.getIndexHtmlPath = getIndexHtmlPath;
|
|
122
|
+
exports.getKoobiqStyleEntries = getKoobiqStyleEntries;
|
|
123
|
+
exports.mergeKoobiqStyles = mergeKoobiqStyles;
|
package/select/select.scss
CHANGED
package/tabs/_tabs-common.scss
CHANGED
|
@@ -262,6 +262,29 @@
|
|
|
262
262
|
transparent calc(100% - var(--mask-size))
|
|
263
263
|
);
|
|
264
264
|
}
|
|
265
|
+
|
|
266
|
+
.kbq-tab-group_vertical & {
|
|
267
|
+
--mask-size: var(--kbq-size-3xl);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.kbq-tab-group_vertical &.kbq-tab-header__scroll-container_overflow-before {
|
|
271
|
+
mask-image: linear-gradient(to bottom, transparent, #000 var(--mask-size));
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.kbq-tab-group_vertical &.kbq-tab-header__scroll-container_overflow-after {
|
|
275
|
+
mask-image: linear-gradient(to bottom, #000 calc(100% - var(--mask-size)), transparent);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.kbq-tab-group_vertical
|
|
279
|
+
&.kbq-tab-header__scroll-container_overflow-before.kbq-tab-header__scroll-container_overflow-after {
|
|
280
|
+
mask-image: linear-gradient(
|
|
281
|
+
to bottom,
|
|
282
|
+
transparent,
|
|
283
|
+
#000 var(--mask-size),
|
|
284
|
+
#000 calc(100% - var(--mask-size)),
|
|
285
|
+
transparent
|
|
286
|
+
);
|
|
287
|
+
}
|
|
265
288
|
}
|
|
266
289
|
|
|
267
290
|
.kbq-tab-header_underlined:not(.kbq-tab-header_vertical) .kbq-tab-list__content {
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
:where(.kbq-textarea) {
|
|
2
|
-
--kbq-textarea-size-min-
|
|
2
|
+
--kbq-textarea-size-min-rows: 3;
|
|
3
|
+
--kbq-textarea-size-min-height: calc(
|
|
4
|
+
var(--kbq-textarea-size-min-rows) * 1lh + 2 * var(--kbq-textarea-size-padding-vertical)
|
|
5
|
+
);
|
|
3
6
|
--kbq-textarea-size-max-height: 96px;
|
|
4
7
|
--kbq-textarea-size-padding-vertical: 5px;
|
|
5
8
|
--kbq-textarea-size-padding-horizontal: 11px;
|
|
@@ -73,10 +73,6 @@
|
|
|
73
73
|
|
|
74
74
|
&.kbq-disabled {
|
|
75
75
|
color: var(--kbq-states-foreground-disabled);
|
|
76
|
-
|
|
77
|
-
.kbq-hint .kbq-hint__text {
|
|
78
|
-
color: inherit;
|
|
79
|
-
}
|
|
80
76
|
}
|
|
81
77
|
|
|
82
78
|
.kbq-toggle-bar {
|
|
@@ -84,28 +80,15 @@
|
|
|
84
80
|
background: var(--kbq-icon-white);
|
|
85
81
|
}
|
|
86
82
|
}
|
|
87
|
-
|
|
88
|
-
// A projected `kbq-error` is a hint too, and keeps its own color. `:where` leaves the specificity as it was.
|
|
89
|
-
.kbq-hint:where(:not(.kbq-error)) .kbq-hint__text {
|
|
90
|
-
color: var(--kbq-foreground-contrast-secondary);
|
|
91
|
-
}
|
|
92
83
|
}
|
|
93
84
|
}
|
|
94
85
|
|
|
95
86
|
@mixin kbq-toggle-typography() {
|
|
96
87
|
.kbq-toggle:not(.kbq-toggle_big) {
|
|
97
88
|
@include tokens.kbq-typography-level-to-styles-css-variables(typography, text-normal);
|
|
98
|
-
|
|
99
|
-
& .kbq-hint .kbq-hint__text {
|
|
100
|
-
@include tokens.kbq-typography-level-to-styles-css-variables(typography, text-compact);
|
|
101
|
-
}
|
|
102
89
|
}
|
|
103
90
|
|
|
104
91
|
.kbq-toggle.kbq-toggle_big {
|
|
105
92
|
@include tokens.kbq-typography-level-to-styles-css-variables(typography, text-big);
|
|
106
|
-
|
|
107
|
-
& .kbq-hint .kbq-hint__text {
|
|
108
|
-
@include tokens.kbq-typography-level-to-styles-css-variables(typography, text-normal);
|
|
109
|
-
}
|
|
110
93
|
}
|
|
111
94
|
}
|
package/tooltip/tooltip.scss
CHANGED
|
@@ -109,7 +109,7 @@ $navbar-trigger-margin: $trigger-margin + 1px;
|
|
|
109
109
|
width: var(--kbq-tooltip-size-arrow-size);
|
|
110
110
|
height: var(--kbq-tooltip-size-arrow-size);
|
|
111
111
|
|
|
112
|
-
transform: rotate(45deg);
|
|
112
|
+
transform: translate(var(--kbq-tooltip-arrow-shift-x, 0px), var(--kbq-tooltip-arrow-shift-y, 0px)) rotate(45deg);
|
|
113
113
|
|
|
114
114
|
z-index: -1;
|
|
115
115
|
}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
--kbq-top-bar-padding-vertical: var(--kbq-size-m);
|
|
15
15
|
--kbq-top-bar-padding-horizontal: var(--kbq-size-xxl);
|
|
16
16
|
--kbq-top-bar-border-radius: 0;
|
|
17
|
+
--kbq-top-bar-title-height: var(--kbq-size-3xl);
|
|
17
18
|
--kbq-top-bar-container-start-gap: 0;
|
|
18
19
|
--kbq-top-bar-container-start-min-width: 0;
|
|
19
20
|
--kbq-top-bar-container-end-gap: var(--kbq-size-s);
|
package/top-bar/top-bar.scss
CHANGED
|
@@ -47,6 +47,16 @@
|
|
|
47
47
|
flex: 0 0 var(--kbq-top-bar-spacer-min-width);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
.kbq-top-bar-title {
|
|
51
|
+
@include tokens.kbq-typography-level-to-styles-css-variables(typography, subheading);
|
|
52
|
+
|
|
53
|
+
// The line box of a `size="big"` breadcrumb item: the same height, and the same baseline, so a
|
|
54
|
+
// page that swaps the trail for a title moves nothing. A minimum, not a fixed height: a title
|
|
55
|
+
// long enough to wrap has to grow the bar rather than paint over its edge.
|
|
56
|
+
min-block-size: var(--kbq-top-bar-title-height);
|
|
57
|
+
line-height: var(--kbq-top-bar-title-height);
|
|
58
|
+
}
|
|
59
|
+
|
|
50
60
|
.kbq-top-bar-container {
|
|
51
61
|
// Must match the host set of the ruleset immediately below: the negative margin compensates the
|
|
52
62
|
// padding that mixin adds, so a container the mixin skips must not get the compensation either.
|
|
@@ -6,6 +6,7 @@ import { UniqueSelectionDispatcher } from '@angular/cdk/collections';
|
|
|
6
6
|
import { Subject } from 'rxjs';
|
|
7
7
|
import * as i1$1 from '@koobiq/components/icon';
|
|
8
8
|
import { KbqIcon } from '@koobiq/components/icon';
|
|
9
|
+
import * as _koobiq_components_accordion from '@koobiq/components/accordion';
|
|
9
10
|
import * as i1 from '@koobiq/components/core';
|
|
10
11
|
|
|
11
12
|
declare class KbqAccordionTriggerDirective {
|
|
@@ -15,6 +16,18 @@ declare class KbqAccordionTriggerDirective {
|
|
|
15
16
|
protected readonly accordion: KbqAccordion;
|
|
16
17
|
/** @docs-private */
|
|
17
18
|
protected readonly item: KbqAccordionItem;
|
|
19
|
+
/**
|
|
20
|
+
* Value of `aria-expanded`.
|
|
21
|
+
*
|
|
22
|
+
* @docs-private
|
|
23
|
+
*/
|
|
24
|
+
protected readonly expanded: _angular_core.Signal<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Value of `data-state`.
|
|
27
|
+
*
|
|
28
|
+
* @docs-private
|
|
29
|
+
*/
|
|
30
|
+
protected readonly dataState: _angular_core.Signal<_koobiq_components_accordion.KbqAccordionItemState>;
|
|
18
31
|
/** @docs-private */
|
|
19
32
|
get triggerId(): string;
|
|
20
33
|
/** @docs-private */
|
|
@@ -344,6 +357,12 @@ declare class KbqAccordionContentDirective implements OnInit, DoCheck, AfterView
|
|
|
344
357
|
protected readonly nativeElement: HTMLElement;
|
|
345
358
|
/** @docs-private */
|
|
346
359
|
protected readonly item: KbqAccordionItem;
|
|
360
|
+
/**
|
|
361
|
+
* Value of `data-state`.
|
|
362
|
+
*
|
|
363
|
+
* @docs-private
|
|
364
|
+
*/
|
|
365
|
+
protected readonly dataState: _angular_core.Signal<_koobiq_components_accordion.KbqAccordionItemState>;
|
|
347
366
|
/** @docs-private */
|
|
348
367
|
get contentId(): string;
|
|
349
368
|
/** @docs-private */
|
|
@@ -397,6 +416,12 @@ declare class KbqAccordionHeader {
|
|
|
397
416
|
protected readonly item: KbqAccordionItem;
|
|
398
417
|
/** @docs-private */
|
|
399
418
|
protected readonly accordion: KbqAccordion;
|
|
419
|
+
/**
|
|
420
|
+
* Value of `data-state`.
|
|
421
|
+
*
|
|
422
|
+
* @docs-private
|
|
423
|
+
*/
|
|
424
|
+
protected readonly dataState: _angular_core.Signal<_koobiq_components_accordion.KbqAccordionItemState>;
|
|
400
425
|
/**
|
|
401
426
|
* Names the heading after the trigger alone.
|
|
402
427
|
*
|
|
@@ -180,6 +180,12 @@ declare class KbqButtonToggleGroup implements OnChanges, ControlValueAccessor, O
|
|
|
180
180
|
syncButtonToggle(toggle: KbqButtonToggle, select: boolean, isUserInput?: boolean): void;
|
|
181
181
|
/** Body of `syncButtonToggle()`. */
|
|
182
182
|
private applyToggleSelection;
|
|
183
|
+
/**
|
|
184
|
+
* Reports the new value of a selected toggle, which changes the value of the group, as an interaction would.
|
|
185
|
+
*
|
|
186
|
+
* @docs-private
|
|
187
|
+
*/
|
|
188
|
+
followToggleValue(toggle: KbqButtonToggle, previous: KbqButtonToggle['value']): void;
|
|
183
189
|
/** Checks whether a button toggle is selected. */
|
|
184
190
|
isSelected(toggle: KbqButtonToggle): boolean;
|
|
185
191
|
/** Determines whether a button toggle should be checked on init, from the value waiting for it. */
|
|
@@ -59,8 +59,38 @@ declare class KbqCheckbox extends KbqColorDirective implements OnChanges, DoChec
|
|
|
59
59
|
protected readonly inputId: _angular_core.Signal<string>;
|
|
60
60
|
/** Error text projected into the checkbox. */
|
|
61
61
|
private readonly error;
|
|
62
|
+
/**
|
|
63
|
+
* Whether the projected `kbq-error` is shown. Without one, nothing is rendered under the label.
|
|
64
|
+
*
|
|
65
|
+
* @docs-private
|
|
66
|
+
*/
|
|
67
|
+
protected readonly showError: _angular_core.Signal<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* Id of the element wrapping the projected `kbq-error`.
|
|
70
|
+
*
|
|
71
|
+
* @docs-private
|
|
72
|
+
*/
|
|
73
|
+
protected readonly errorId: _angular_core.Signal<string>;
|
|
74
|
+
/**
|
|
75
|
+
* Id of the label text, which alone names the native input.
|
|
76
|
+
*
|
|
77
|
+
* @docs-private
|
|
78
|
+
*/
|
|
79
|
+
protected readonly labelId: _angular_core.Signal<string>;
|
|
62
80
|
/** Hints projected into the checkbox. */
|
|
63
81
|
private readonly hints;
|
|
82
|
+
/**
|
|
83
|
+
* Value of `aria-describedby` of the native input: the error, while it is shown, and the hints.
|
|
84
|
+
*
|
|
85
|
+
* @docs-private
|
|
86
|
+
*/
|
|
87
|
+
protected readonly ariaDescribedBy: _angular_core.Signal<string | null>;
|
|
88
|
+
/**
|
|
89
|
+
* Value of `aria-invalid` of the native input: set whenever the checkbox is painted as invalid.
|
|
90
|
+
*
|
|
91
|
+
* @docs-private
|
|
92
|
+
*/
|
|
93
|
+
protected readonly ariaInvalid: _angular_core.Signal<"true" | null>;
|
|
64
94
|
/** Whether the checkbox is required. */
|
|
65
95
|
readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
66
96
|
/** @docs-private */
|