@design-factory/angular 21.1.0 → 22.0.0-next.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/.ai/docs/components/accordion/accessibility.md +45 -0
- package/.ai/docs/components/accordion/api.md +279 -0
- package/.ai/docs/components/accordion/developer.md +43 -0
- package/.ai/docs/components/accordion/guidelines.md +99 -0
- package/.ai/docs/components/accordion/overview.md +17 -0
- package/.ai/docs/components/alert/accessibility.md +24 -0
- package/.ai/docs/components/alert/api.md +65 -0
- package/.ai/docs/components/alert/developer.md +63 -0
- package/.ai/docs/components/alert/guidelines.md +62 -0
- package/.ai/docs/components/alert/overview.md +12 -0
- package/.ai/docs/components/button/accessibility.md +25 -0
- package/.ai/docs/components/button/api.md +71 -0
- package/.ai/docs/components/button/developer.md +52 -0
- package/.ai/docs/components/button/guidelines.md +75 -0
- package/.ai/docs/components/button/overview.md +15 -0
- package/.ai/docs/components/buttongroup/api.md +16 -0
- package/.ai/docs/components/buttongroup/developer.md +32 -0
- package/.ai/docs/components/drawer/accessibility.md +15 -0
- package/.ai/docs/components/drawer/api.md +56 -0
- package/.ai/docs/components/drawer/developer.md +36 -0
- package/.ai/docs/components/drawer/examples.md +9 -0
- package/.ai/docs/components/drawer/guidelines.md +58 -0
- package/.ai/docs/components/drawer/overview.md +19 -0
- package/.ai/docs/components/dropdown/accessibility.md +27 -0
- package/.ai/docs/components/dropdown/api.md +85 -0
- package/.ai/docs/components/dropdown/developer.md +59 -0
- package/.ai/docs/components/dropdown/guidelines.md +80 -0
- package/.ai/docs/components/dropdown/overview.md +16 -0
- package/.ai/docs/components/sidenav/accessibility.md +48 -0
- package/.ai/docs/components/sidenav/api.md +110 -0
- package/.ai/docs/components/sidenav/developer.md +14 -0
- package/.ai/docs/components/sidenav/guidelines.md +83 -0
- package/.ai/docs/components/sidenav/overview.md +16 -0
- package/.ai/docs/components/tooltip/accessibility.md +11 -0
- package/.ai/docs/components/tooltip/api.md +39 -0
- package/.ai/docs/components/tooltip/developer.md +16 -0
- package/.ai/docs/components/tooltip/guidelines.md +84 -0
- package/.ai/docs/components/tooltip/overview.md +23 -0
- package/.ai/docs/components/topnav/accessibility.md +51 -0
- package/.ai/docs/components/topnav/api.md +190 -0
- package/.ai/docs/components/topnav/developer.md +43 -0
- package/.ai/docs/components/topnav/guidelines.md +121 -0
- package/.ai/docs/components/topnav/overview.md +17 -0
- package/.ai/docs/demos/accordion/addons-subtitle/accordion-addons-subtitle.html +75 -0
- package/.ai/docs/demos/accordion/addons-subtitle/accordion-addons-subtitle.ts +27 -0
- package/.ai/docs/demos/accordion/basic/accordion-basic.html +16 -0
- package/.ai/docs/demos/accordion/basic/accordion-basic.ts +14 -0
- package/.ai/docs/demos/accordion/close-others/accordion-close-others.html +16 -0
- package/.ai/docs/demos/accordion/close-others/accordion-close-others.ts +14 -0
- package/.ai/docs/demos/accordion/interactive/accordion-interactive.html +84 -0
- package/.ai/docs/demos/accordion/interactive/accordion-interactive.ts +30 -0
- package/.ai/docs/demos/accordion/interactive-addons-subtitle/accordion-interactive-addons-subtitle.html +126 -0
- package/.ai/docs/demos/accordion/interactive-addons-subtitle/accordion-interactive-addons-subtitle.ts +33 -0
- package/.ai/docs/demos/accordion/programmatic-control/accordion-programmatic-control.html +36 -0
- package/.ai/docs/demos/accordion/programmatic-control/accordion-programmatic-control.ts +15 -0
- package/.ai/docs/demos/accordion/selectable/accordion-selectable.html +16 -0
- package/.ai/docs/demos/accordion/selectable/accordion-selectable.ts +14 -0
- package/.ai/docs/demos/accordion/selectable-extended/accordion-selectable-extended.html +28 -0
- package/.ai/docs/demos/accordion/selectable-extended/accordion-selectable-extended.ts +80 -0
- package/.ai/docs/demos/accordion/separator/accordion-separator.html +16 -0
- package/.ai/docs/demos/accordion/separator/accordion-separator.ts +14 -0
- package/.ai/docs/demos/alert/banner/alert-banner.html +15 -0
- package/.ai/docs/demos/alert/banner/alert-banner.ts +16 -0
- package/.ai/docs/demos/alert/basic/alert-basic.html +6 -0
- package/.ai/docs/demos/alert/basic/alert-basic.ts +9 -0
- package/.ai/docs/demos/alert/card/alert-card.html +15 -0
- package/.ai/docs/demos/alert/card/alert-card.ts +9 -0
- package/.ai/docs/demos/alert/dismissal/alert-dismissal.html +5 -0
- package/.ai/docs/demos/alert/dismissal/alert-dismissal.ts +27 -0
- package/.ai/docs/demos/alert/expandable/alert-expandable.html +9 -0
- package/.ai/docs/demos/alert/expandable/alert-expandable.ts +11 -0
- package/.ai/docs/demos/button/basic/button-basic.html +4 -0
- package/.ai/docs/demos/button/basic/button-basic.ts +9 -0
- package/.ai/docs/demos/button/disabled/button-disabled.html +18 -0
- package/.ai/docs/demos/button/disabled/button-disabled.ts +12 -0
- package/.ai/docs/demos/button/icons/button-icons.html +17 -0
- package/.ai/docs/demos/button/icons/button-icons.ts +10 -0
- package/.ai/docs/demos/button/surfaces/button-surfaces.html +13 -0
- package/.ai/docs/demos/button/surfaces/button-surfaces.ts +9 -0
- package/.ai/docs/demos/button/variants/button-variants.html +49 -0
- package/.ai/docs/demos/button/variants/button-variants.ts +9 -0
- package/.ai/docs/demos/buttongroup/basic/buttongroup-basic.html +6 -0
- package/.ai/docs/demos/buttongroup/basic/buttongroup-basic.ts +10 -0
- package/.ai/docs/demos/buttongroup/disabled/buttongroup-disabled.html +6 -0
- package/.ai/docs/demos/buttongroup/disabled/buttongroup-disabled.ts +10 -0
- package/.ai/docs/demos/buttongroup/mirror/buttongroup-mirror.html +8 -0
- package/.ai/docs/demos/buttongroup/mirror/buttongroup-mirror.ts +10 -0
- package/.ai/docs/demos/buttongroup/orientation/buttongroup-orientation.html +19 -0
- package/.ai/docs/demos/buttongroup/orientation/buttongroup-orientation.ts +10 -0
- package/.ai/docs/demos/buttongroup/sizing/buttongroup-sizing.html +19 -0
- package/.ai/docs/demos/buttongroup/sizing/buttongroup-sizing.ts +10 -0
- package/.ai/docs/demos/drawer/inline/drawer-inline-basic.html +46 -0
- package/.ai/docs/demos/drawer/inline/drawer-inline-basic.ts +33 -0
- package/.ai/docs/demos/drawer/overlay/drawer-overlay-basic.html +30 -0
- package/.ai/docs/demos/drawer/overlay/drawer-overlay-basic.ts +25 -0
- package/.ai/docs/demos/dropdown/basic/dropdown-basic.html +8 -0
- package/.ai/docs/demos/dropdown/basic/dropdown-basic.ts +15 -0
- package/.ai/docs/demos/dropdown/sizes/dropdown-sizes.html +9 -0
- package/.ai/docs/demos/dropdown/sizes/dropdown-sizes.ts +21 -0
- package/.ai/docs/demos/dropdown/split/dropdown-split.html +9 -0
- package/.ai/docs/demos/dropdown/split/dropdown-split.ts +11 -0
- package/.ai/docs/demos/dropdown/toggle/dropdown-toggle.html +22 -0
- package/.ai/docs/demos/dropdown/toggle/dropdown-toggle.ts +10 -0
- package/.ai/docs/demos/sidenav/sidenav-basic-no-icon/routes.ts +95 -0
- package/.ai/docs/demos/sidenav/sidenav-basic-no-icon/sidenav-basic-no-icon.html +42 -0
- package/.ai/docs/demos/sidenav/sidenav-basic-no-icon/sidenav-basic-no-icon.ts +12 -0
- package/.ai/docs/demos/sidenav/sidenav-basic-with-icon/routes.ts +41 -0
- package/.ai/docs/demos/sidenav/sidenav-basic-with-icon/sidenav-basic-with-icon.html +34 -0
- package/.ai/docs/demos/sidenav/sidenav-basic-with-icon/sidenav-basic-with-icon.ts +12 -0
- package/.ai/docs/demos/tooltip/basic/tooltip-basic.html +1 -0
- package/.ai/docs/demos/tooltip/basic/tooltip-basic.ts +10 -0
- package/.ai/docs/demos/tooltip/placements/tooltip-placements.html +35 -0
- package/.ai/docs/demos/tooltip/placements/tooltip-placements.ts +12 -0
- package/.ai/docs/demos/tooltip/sizes/tooltip-sizes.html +5 -0
- package/.ai/docs/demos/tooltip/sizes/tooltip-sizes.ts +10 -0
- package/.ai/docs/demos/topnav/brand/topnav-brand.ts +64 -0
- package/.ai/docs/demos/topnav/environment-banner/topnav-environment-banner.ts +20 -0
- package/.ai/docs/demos/topnav/navigation/routes.ts +35 -0
- package/.ai/docs/demos/topnav/navigation/topnav-navigation-flat.ts +67 -0
- package/.ai/docs/demos/topnav/navigation/topnav-navigation-tree.ts +82 -0
- package/.ai/docs/demos/topnav/quick-actions/notifications.ts +75 -0
- package/.ai/docs/demos/topnav/quick-actions/topnav-quick-actions.ts +108 -0
- package/.ai/docs/demos/topnav/quick-actions/user-account.ts +23 -0
- package/.ai/index.md +26 -0
- package/fesm2022/design-factory-angular-accordion.mjs +1153 -0
- package/fesm2022/design-factory-angular-accordion.mjs.map +1 -0
- package/fesm2022/design-factory-angular-alert.mjs +312 -0
- package/fesm2022/design-factory-angular-alert.mjs.map +1 -0
- package/fesm2022/design-factory-angular-breakpoints.mjs +53 -0
- package/fesm2022/design-factory-angular-breakpoints.mjs.map +1 -0
- package/fesm2022/design-factory-angular-button.mjs +240 -0
- package/fesm2022/design-factory-angular-button.mjs.map +1 -0
- package/fesm2022/design-factory-angular-buttongroup.mjs +75 -0
- package/fesm2022/design-factory-angular-buttongroup.mjs.map +1 -0
- package/fesm2022/design-factory-angular-drawer.mjs +64 -62
- package/fesm2022/design-factory-angular-drawer.mjs.map +1 -1
- package/fesm2022/design-factory-angular-dropdown.mjs +323 -0
- package/fesm2022/design-factory-angular-dropdown.mjs.map +1 -0
- package/fesm2022/design-factory-angular-form-field.mjs +287 -0
- package/fesm2022/design-factory-angular-form-field.mjs.map +1 -0
- package/fesm2022/design-factory-angular-icon.mjs +24 -0
- package/fesm2022/design-factory-angular-icon.mjs.map +1 -0
- package/fesm2022/design-factory-angular-input.mjs +34 -0
- package/fesm2022/design-factory-angular-input.mjs.map +1 -0
- package/fesm2022/design-factory-angular-internals.mjs +119 -39
- package/fesm2022/design-factory-angular-internals.mjs.map +1 -1
- package/fesm2022/design-factory-angular-separator.mjs +43 -0
- package/fesm2022/design-factory-angular-separator.mjs.map +1 -0
- package/fesm2022/design-factory-angular-sidenav.mjs +652 -401
- package/fesm2022/design-factory-angular-sidenav.mjs.map +1 -1
- package/fesm2022/design-factory-angular-slider.mjs +451 -0
- package/fesm2022/design-factory-angular-slider.mjs.map +1 -0
- package/fesm2022/design-factory-angular-theme.mjs +29 -19
- package/fesm2022/design-factory-angular-theme.mjs.map +1 -1
- package/fesm2022/design-factory-angular-toggle.mjs +172 -0
- package/fesm2022/design-factory-angular-toggle.mjs.map +1 -0
- package/fesm2022/design-factory-angular-tooltip.mjs +138 -0
- package/fesm2022/design-factory-angular-tooltip.mjs.map +1 -0
- package/fesm2022/design-factory-angular-topnav.mjs +589 -589
- package/fesm2022/design-factory-angular-topnav.mjs.map +1 -1
- package/package.json +61 -8
- package/schematics/collection.json +35 -0
- package/schematics/component-migration/accordion/constants.d.ts +10 -0
- package/schematics/component-migration/accordion/constants.js +46 -0
- package/schematics/component-migration/accordion/guide.md +257 -0
- package/schematics/component-migration/accordion/index.d.ts +2 -0
- package/schematics/component-migration/accordion/index.js +5 -0
- package/schematics/component-migration/accordion/migration.d.ts +2 -0
- package/schematics/component-migration/accordion/migration.js +13 -0
- package/schematics/component-migration/accordion/schema.json +25 -0
- package/schematics/component-migration/accordion/steps/accordion-imports.d.ts +3 -0
- package/schematics/component-migration/accordion/steps/accordion-imports.js +41 -0
- package/schematics/component-migration/accordion/steps/template-migration.d.ts +3 -0
- package/schematics/component-migration/accordion/steps/template-migration.js +554 -0
- package/schematics/component-migration/accordion/steps/title-content.d.ts +9 -0
- package/schematics/component-migration/accordion/steps/title-content.js +75 -0
- package/schematics/component-migration/ai/prompt.md +83 -0
- package/schematics/component-migration/alert/guide.md +246 -0
- package/schematics/component-migration/alert/index.d.ts +2 -0
- package/schematics/component-migration/alert/index.js +5 -0
- package/schematics/component-migration/alert/migration.d.ts +2 -0
- package/schematics/component-migration/alert/migration.js +50 -0
- package/schematics/component-migration/alert/schema.json +25 -0
- package/schematics/component-migration/alert/steps/alert-imports.d.ts +4 -0
- package/schematics/component-migration/alert/steps/alert-imports.js +97 -0
- package/schematics/component-migration/alert/steps/animation-input.d.ts +3 -0
- package/schematics/component-migration/alert/steps/animation-input.js +17 -0
- package/schematics/component-migration/alert/steps/close-output.d.ts +3 -0
- package/schematics/component-migration/alert/steps/close-output.js +17 -0
- package/schematics/component-migration/alert/steps/icon-directive-imports.d.ts +3 -0
- package/schematics/component-migration/alert/steps/icon-directive-imports.js +84 -0
- package/schematics/component-migration/alert/steps/icon-directive.d.ts +3 -0
- package/schematics/component-migration/alert/steps/icon-directive.js +10 -0
- package/schematics/component-migration/alert/steps/legacy-module-imports.d.ts +3 -0
- package/schematics/component-migration/alert/steps/legacy-module-imports.js +57 -0
- package/schematics/component-migration/alert/steps/programmatic-close.d.ts +3 -0
- package/schematics/component-migration/alert/steps/programmatic-close.js +44 -0
- package/schematics/component-migration/alert/steps/selector.d.ts +3 -0
- package/schematics/component-migration/alert/steps/selector.js +18 -0
- package/schematics/component-migration/alert/steps/static-classes.d.ts +3 -0
- package/schematics/component-migration/alert/steps/static-classes.js +97 -0
- package/schematics/component-migration/alert/steps/static-type.d.ts +3 -0
- package/schematics/component-migration/alert/steps/static-type.js +28 -0
- package/schematics/component-migration/alert/steps/template-reference.d.ts +3 -0
- package/schematics/component-migration/alert/steps/template-reference.js +15 -0
- package/schematics/component-migration/alert/steps/template-todos.d.ts +3 -0
- package/schematics/component-migration/alert/steps/template-todos.js +78 -0
- package/schematics/component-migration/button/guide.md +278 -0
- package/schematics/component-migration/button/index.d.ts +2 -0
- package/schematics/component-migration/button/index.js +5 -0
- package/schematics/component-migration/button/migration.d.ts +2 -0
- package/schematics/component-migration/button/migration.js +180 -0
- package/schematics/component-migration/button/schema.json +25 -0
- package/schematics/component-migration/button/steps/static-classes.d.ts +10 -0
- package/schematics/component-migration/button/steps/static-classes.js +128 -0
- package/schematics/component-migration/button/steps/template-todos.d.ts +19 -0
- package/schematics/component-migration/button/steps/template-todos.js +120 -0
- package/schematics/component-migration/button/types.d.ts +7 -0
- package/schematics/component-migration/button/types.js +2 -0
- package/schematics/component-migration/dropdown/guide.md +252 -0
- package/schematics/component-migration/dropdown/index.d.ts +2 -0
- package/schematics/component-migration/dropdown/index.js +5 -0
- package/schematics/component-migration/dropdown/migration.d.ts +2 -0
- package/schematics/component-migration/dropdown/migration.js +41 -0
- package/schematics/component-migration/dropdown/schema.json +25 -0
- package/schematics/component-migration/dropdown/steps/dropdown-imports.d.ts +3 -0
- package/schematics/component-migration/dropdown/steps/dropdown-imports.js +308 -0
- package/schematics/component-migration/dropdown/steps/template-attributes.d.ts +10 -0
- package/schematics/component-migration/dropdown/steps/template-attributes.js +57 -0
- package/schematics/component-migration/dropdown/steps/template-helpers.d.ts +20 -0
- package/schematics/component-migration/dropdown/steps/template-helpers.js +125 -0
- package/schematics/component-migration/dropdown/steps/template-imports.d.ts +22 -0
- package/schematics/component-migration/dropdown/steps/template-imports.js +12 -0
- package/schematics/component-migration/dropdown/steps/template-items.d.ts +7 -0
- package/schematics/component-migration/dropdown/steps/template-items.js +58 -0
- package/schematics/component-migration/dropdown/steps/template-menu.d.ts +14 -0
- package/schematics/component-migration/dropdown/steps/template-menu.js +107 -0
- package/schematics/component-migration/dropdown/steps/template-todos.d.ts +19 -0
- package/schematics/component-migration/dropdown/steps/template-todos.js +118 -0
- package/schematics/component-migration/dropdown/steps/template-toggle.d.ts +9 -0
- package/schematics/component-migration/dropdown/steps/template-toggle.js +70 -0
- package/schematics/component-migration/dropdown/steps/template-wrapper.d.ts +12 -0
- package/schematics/component-migration/dropdown/steps/template-wrapper.js +105 -0
- package/schematics/component-migration/index.d.ts +3 -0
- package/schematics/component-migration/index.js +26 -0
- package/schematics/component-migration/next-steps/index.d.ts +13 -0
- package/schematics/component-migration/next-steps/index.js +34 -0
- package/schematics/component-migration/registry.d.ts +1 -0
- package/schematics/component-migration/registry.js +15 -0
- package/schematics/component-migration/schema.json +20 -0
- package/schematics/component-migration/shared/ai-handoff.d.ts +2 -0
- package/schematics/component-migration/shared/ai-handoff.js +28 -0
- package/schematics/component-migration/shared/angular-component.d.ts +10 -0
- package/schematics/component-migration/shared/angular-component.js +125 -0
- package/schematics/component-migration/shared/button-visual-classes.d.ts +24 -0
- package/schematics/component-migration/shared/button-visual-classes.js +111 -0
- package/schematics/component-migration/shared/component-context.d.ts +7 -0
- package/schematics/component-migration/shared/component-context.js +24 -0
- package/schematics/component-migration/shared/component-imports.d.ts +45 -0
- package/schematics/component-migration/shared/component-imports.js +380 -0
- package/schematics/component-migration/shared/create-component-schematic.d.ts +3 -0
- package/schematics/component-migration/shared/create-component-schematic.js +55 -0
- package/schematics/component-migration/shared/import-edits.d.ts +11 -0
- package/schematics/component-migration/shared/import-edits.js +157 -0
- package/schematics/component-migration/shared/legacy-config-todos.d.ts +3 -0
- package/schematics/component-migration/shared/legacy-config-todos.js +90 -0
- package/schematics/component-migration/shared/migrate-project.d.ts +12 -0
- package/schematics/component-migration/shared/migrate-project.js +151 -0
- package/schematics/component-migration/shared/project-templates.d.ts +15 -0
- package/schematics/component-migration/shared/project-templates.js +43 -0
- package/schematics/component-migration/shared/scan-project.d.ts +3 -0
- package/schematics/component-migration/shared/scan-project.js +24 -0
- package/schematics/component-migration/shared/static-placement.d.ts +1 -0
- package/schematics/component-migration/shared/static-placement.js +45 -0
- package/schematics/component-migration/shared/template-edits.d.ts +28 -0
- package/schematics/component-migration/shared/template-edits.js +153 -0
- package/schematics/component-migration/shared/template-result.d.ts +3 -0
- package/schematics/component-migration/shared/template-result.js +11 -0
- package/schematics/component-migration/shared/testing.d.ts +13 -0
- package/schematics/component-migration/shared/testing.js +59 -0
- package/schematics/component-migration/shared/todo-comments.d.ts +10 -0
- package/schematics/component-migration/shared/todo-comments.js +81 -0
- package/schematics/component-migration/shared/types.d.ts +41 -0
- package/schematics/component-migration/shared/types.js +2 -0
- package/schematics/component-migration/tooltip/guide.md +196 -0
- package/schematics/component-migration/tooltip/index.d.ts +2 -0
- package/schematics/component-migration/tooltip/index.js +5 -0
- package/schematics/component-migration/tooltip/migration.d.ts +2 -0
- package/schematics/component-migration/tooltip/migration.js +50 -0
- package/schematics/component-migration/tooltip/schema.json +25 -0
- package/schematics/component-migration/tooltip/steps/template-attributes.d.ts +13 -0
- package/schematics/component-migration/tooltip/steps/template-attributes.js +266 -0
- package/schematics/component-migration/tooltip/steps/template-todos.d.ts +24 -0
- package/schematics/component-migration/tooltip/steps/template-todos.js +115 -0
- package/schematics/component-migration/tooltip/steps/tooltip-imports.d.ts +3 -0
- package/schematics/component-migration/tooltip/steps/tooltip-imports.js +79 -0
- package/schematics/component-migration/utils/component-resource-collector.d.ts +34 -0
- package/schematics/component-migration/utils/component-resource-collector.js +107 -0
- package/schematics/component-migration/utils/project_tsconfig_paths.d.ts +18 -0
- package/schematics/component-migration/utils/project_tsconfig_paths.js +105 -0
- package/schematics/component-migration/utils/typescript/compiler_host.d.ts +44 -0
- package/schematics/component-migration/utils/typescript/compiler_host.js +87 -0
- package/schematics/component-migration/utils/typescript/decorators.d.ts +22 -0
- package/schematics/component-migration/utils/typescript/decorators.js +41 -0
- package/schematics/component-migration/utils/typescript/functions.d.ts +14 -0
- package/schematics/component-migration/utils/typescript/functions.js +20 -0
- package/schematics/component-migration/utils/typescript/imports.d.ts +17 -0
- package/schematics/component-migration/utils/typescript/imports.js +110 -0
- package/schematics/component-migration/utils/typescript/parse_tsconfig.d.ts +9 -0
- package/schematics/component-migration/utils/typescript/parse_tsconfig.js +29 -0
- package/schematics/component-migration/utils/typescript/property-name.d.ts +13 -0
- package/schematics/component-migration/utils/typescript/property-name.js +22 -0
- package/schematics/package.json +3 -0
- package/types/design-factory-angular-accordion.d.ts +553 -0
- package/types/design-factory-angular-alert.d.ts +166 -0
- package/types/design-factory-angular-breakpoints.d.ts +13 -0
- package/types/design-factory-angular-button.d.ts +166 -0
- package/types/design-factory-angular-buttongroup.d.ts +45 -0
- package/types/design-factory-angular-drawer.d.ts +10 -16
- package/types/design-factory-angular-dropdown.d.ts +148 -0
- package/types/design-factory-angular-form-field.d.ts +122 -0
- package/types/design-factory-angular-icon.d.ts +11 -0
- package/types/design-factory-angular-input.d.ts +16 -0
- package/types/design-factory-angular-internals.d.ts +78 -19
- package/types/design-factory-angular-separator.d.ts +29 -0
- package/types/design-factory-angular-sidenav.d.ts +98 -14
- package/types/design-factory-angular-slider.d.ts +239 -0
- package/types/design-factory-angular-toggle.d.ts +93 -0
- package/types/design-factory-angular-tooltip.d.ts +113 -0
- package/types/design-factory-angular-topnav.d.ts +35 -47
- package/drawer/README.md +0 -54
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const create_component_schematic_1 = require("../shared/create-component-schematic");
|
|
4
|
+
const migration_1 = require("./migration");
|
|
5
|
+
exports.default = (0, create_component_schematic_1.createComponentMigrationSchematic)(migration_1.buttonMigration);
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buttonMigration = void 0;
|
|
4
|
+
const component_imports_1 = require("../shared/component-imports");
|
|
5
|
+
const template_edits_1 = require("../shared/template-edits");
|
|
6
|
+
const template_result_1 = require("../shared/template-result");
|
|
7
|
+
const static_classes_1 = require("./steps/static-classes");
|
|
8
|
+
const template_todos_1 = require("./steps/template-todos");
|
|
9
|
+
const NEW_BUTTON_DIRECTIVES = new Set(['dfButton', 'dfIconButton']);
|
|
10
|
+
const BUTTON_IMPORT_MODULE = '@design-factory/angular/button';
|
|
11
|
+
const TRIGGER_CLICK_ATTRIBUTES = new Set(['dfTriggerClick']);
|
|
12
|
+
const DROPDOWN_BUTTON_ATTRIBUTES = new Set(['ngbDropdownItem', 'ngbDropdownToggle', 'dropdownToggle']);
|
|
13
|
+
const DROPDOWN_BUTTON_CLASSES = new Set([
|
|
14
|
+
'df-standalone-dropdown-toggle',
|
|
15
|
+
'dropdown-item',
|
|
16
|
+
'dropdown-toggle',
|
|
17
|
+
'dropdown-toggle-split'
|
|
18
|
+
]);
|
|
19
|
+
const IGNORED_BUTTON_CLASSES = new Set(['btn-check']);
|
|
20
|
+
const IGNORED_BUTTON_ANCESTOR_CLASSES = new Set(['btn-group', 'btn-group-vertical', 'btn-toolbar']);
|
|
21
|
+
const CARD_BUTTON_ATTRIBUTES = new Set(['dfManageCardSelectable']);
|
|
22
|
+
const LINK_BUTTON_CLASSES = new Set(['btn-link']);
|
|
23
|
+
const CARD_BUTTON_CLASSES = new Set(['card']);
|
|
24
|
+
function isMigratableButtonHost(element) {
|
|
25
|
+
return element.name === 'button' || element.name === 'a';
|
|
26
|
+
}
|
|
27
|
+
function isButtonHost(element) {
|
|
28
|
+
const classes = (0, template_edits_1.getStaticOrInterpolatedClassTokens)(element);
|
|
29
|
+
return (isMigratableButtonHost(element) || classes.includes('btn') || hasAttributeOrInput(element, TRIGGER_CLICK_ATTRIBUTES));
|
|
30
|
+
}
|
|
31
|
+
function hasNewButtonDirective(element) {
|
|
32
|
+
return element.attributes.some((attribute) => NEW_BUTTON_DIRECTIVES.has(attribute.name));
|
|
33
|
+
}
|
|
34
|
+
function hasAttributeOrInput(element, names) {
|
|
35
|
+
return (element.attributes.some((attribute) => names.has(attribute.name)) ||
|
|
36
|
+
element.inputs.some((input) => names.has(input.name)));
|
|
37
|
+
}
|
|
38
|
+
function hasAnyStaticClass(element, classNames) {
|
|
39
|
+
const classes = (0, template_edits_1.getStaticClassTokens)(element);
|
|
40
|
+
return classes.some((className) => classNames.has(className));
|
|
41
|
+
}
|
|
42
|
+
function hasDropdownButtonPattern({ element }) {
|
|
43
|
+
return (hasAttributeOrInput(element, DROPDOWN_BUTTON_ATTRIBUTES) || hasAnyStaticClass(element, DROPDOWN_BUTTON_CLASSES));
|
|
44
|
+
}
|
|
45
|
+
function hasCardButtonPattern({ element }) {
|
|
46
|
+
return hasAttributeOrInput(element, CARD_BUTTON_ATTRIBUTES) || hasAnyStaticClass(element, CARD_BUTTON_CLASSES);
|
|
47
|
+
}
|
|
48
|
+
function hasLinkButtonPattern({ element }) {
|
|
49
|
+
return hasAnyStaticClass(element, LINK_BUTTON_CLASSES);
|
|
50
|
+
}
|
|
51
|
+
function hasNonNativeIconOnlyPattern({ element }) {
|
|
52
|
+
const classes = (0, template_edits_1.getStaticOrInterpolatedClassTokens)(element);
|
|
53
|
+
return element.name === 'span' && classes.includes('btn') && classes.includes('df-btn-icononly');
|
|
54
|
+
}
|
|
55
|
+
function hasRemainingProjectedIconOnlyPattern({ element }) {
|
|
56
|
+
const classes = (0, template_edits_1.getStaticOrInterpolatedClassTokens)(element);
|
|
57
|
+
return (isMigratableButtonHost(element) &&
|
|
58
|
+
(0, static_classes_1.hasIconOnlyButtonClasses)(classes) &&
|
|
59
|
+
(0, static_classes_1.hasProjectedIconOnlyContent)(element) &&
|
|
60
|
+
!(0, static_classes_1.hasSafeProjectedIconOnlyContent)(element));
|
|
61
|
+
}
|
|
62
|
+
function hasTriggerClickPattern({ element }) {
|
|
63
|
+
return hasAttributeOrInput(element, TRIGGER_CLICK_ATTRIBUTES);
|
|
64
|
+
}
|
|
65
|
+
function hasNonNativeButtonPattern({ element }) {
|
|
66
|
+
const classes = (0, template_edits_1.getStaticOrInterpolatedClassTokens)(element);
|
|
67
|
+
return !isMigratableButtonHost(element) && classes.includes('btn');
|
|
68
|
+
}
|
|
69
|
+
function hasIgnoredButtonClass(element) {
|
|
70
|
+
return hasAnyStaticClass(element, IGNORED_BUTTON_CLASSES);
|
|
71
|
+
}
|
|
72
|
+
function hasButtonGroupPattern({ ancestors }) {
|
|
73
|
+
return ancestors.some((ancestor) => (0, template_edits_1.getStaticClassTokens)(ancestor).some((className) => IGNORED_BUTTON_ANCESTOR_CLASSES.has(className)));
|
|
74
|
+
}
|
|
75
|
+
function hasSkippedLegacyButtonPattern({ element, ancestors }) {
|
|
76
|
+
return (hasDropdownButtonPattern({ element, ancestors }) ||
|
|
77
|
+
hasLinkButtonPattern({ element, ancestors }) ||
|
|
78
|
+
hasCardButtonPattern({ element, ancestors }) ||
|
|
79
|
+
hasNonNativeIconOnlyPattern({ element, ancestors }) ||
|
|
80
|
+
hasTriggerClickPattern({ element, ancestors }) ||
|
|
81
|
+
hasNonNativeButtonPattern({ element, ancestors }) ||
|
|
82
|
+
hasIgnoredButtonClass(element) ||
|
|
83
|
+
hasButtonGroupPattern({ element, ancestors }));
|
|
84
|
+
}
|
|
85
|
+
function isIgnoredButtonElement(buttonElement) {
|
|
86
|
+
return hasNewButtonDirective(buttonElement.element) || hasSkippedLegacyButtonPattern(buttonElement);
|
|
87
|
+
}
|
|
88
|
+
function getButtonElements(template) {
|
|
89
|
+
return (0, template_edits_1.findTemplateElementsWithAncestors)(template, isButtonHost);
|
|
90
|
+
}
|
|
91
|
+
function getButtonCandidates(template) {
|
|
92
|
+
return getButtonElements(template).flatMap((buttonElement) => {
|
|
93
|
+
const { element } = buttonElement;
|
|
94
|
+
const staticClassAttribute = (0, template_edits_1.findStaticOrInterpolatedClassAttribute)(element);
|
|
95
|
+
const classes = (0, template_edits_1.getStaticOrInterpolatedClassTokens)(element);
|
|
96
|
+
if (!staticClassAttribute ||
|
|
97
|
+
!classes.includes('btn') ||
|
|
98
|
+
!isMigratableButtonHost(element) ||
|
|
99
|
+
isIgnoredButtonElement(buttonElement)) {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
return [{ element, classes, staticClassAttribute }];
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
function getLegacyButtonUsageElements(template) {
|
|
106
|
+
return getButtonElements(template).filter((buttonElement) => {
|
|
107
|
+
const element = buttonElement.element;
|
|
108
|
+
return !hasNewButtonDirective(element) && (0, template_edits_1.getStaticOrInterpolatedClassTokens)(element).includes('btn');
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
function migrateButtonTemplate(template) {
|
|
112
|
+
const edits = [];
|
|
113
|
+
const standaloneImports = [];
|
|
114
|
+
for (const buttonElement of getButtonElements(template)) {
|
|
115
|
+
const hasStaticButtonClass = (0, template_edits_1.getStaticOrInterpolatedClassTokens)(buttonElement.element).includes('btn');
|
|
116
|
+
const dropdownPattern = hasDropdownButtonPattern(buttonElement);
|
|
117
|
+
const linkPattern = hasLinkButtonPattern(buttonElement);
|
|
118
|
+
const cardPattern = hasCardButtonPattern(buttonElement);
|
|
119
|
+
const groupPattern = hasButtonGroupPattern(buttonElement);
|
|
120
|
+
const projectedIconOnlyContent = hasRemainingProjectedIconOnlyPattern(buttonElement);
|
|
121
|
+
const nonNativeIconOnlyPattern = hasNonNativeIconOnlyPattern(buttonElement);
|
|
122
|
+
const triggerClickPattern = hasTriggerClickPattern(buttonElement);
|
|
123
|
+
const nonNativeButtonPattern = hasNonNativeButtonPattern(buttonElement);
|
|
124
|
+
const unsupportedStaticClasses = hasStaticButtonClass &&
|
|
125
|
+
isMigratableButtonHost(buttonElement.element) &&
|
|
126
|
+
!dropdownPattern &&
|
|
127
|
+
!linkPattern &&
|
|
128
|
+
!cardPattern &&
|
|
129
|
+
!groupPattern &&
|
|
130
|
+
!nonNativeIconOnlyPattern &&
|
|
131
|
+
!triggerClickPattern &&
|
|
132
|
+
!nonNativeButtonPattern &&
|
|
133
|
+
!hasIgnoredButtonClass(buttonElement.element) &&
|
|
134
|
+
!(0, static_classes_1.hasSupportedStaticButtonClasses)((0, template_edits_1.getStaticOrInterpolatedClassTokens)(buttonElement.element));
|
|
135
|
+
const hasHardStopPattern = dropdownPattern ||
|
|
136
|
+
linkPattern ||
|
|
137
|
+
cardPattern ||
|
|
138
|
+
groupPattern ||
|
|
139
|
+
nonNativeIconOnlyPattern ||
|
|
140
|
+
triggerClickPattern ||
|
|
141
|
+
nonNativeButtonPattern ||
|
|
142
|
+
unsupportedStaticClasses;
|
|
143
|
+
(0, template_todos_1.editButtonTemplateTodos)(buttonElement.element, edits, {
|
|
144
|
+
hasStaticButtonClass,
|
|
145
|
+
hasHardStopPattern,
|
|
146
|
+
dropdownPattern: hasStaticButtonClass && dropdownPattern,
|
|
147
|
+
linkPattern: hasStaticButtonClass && linkPattern,
|
|
148
|
+
cardPattern: hasStaticButtonClass && cardPattern,
|
|
149
|
+
groupPattern: hasStaticButtonClass && groupPattern,
|
|
150
|
+
projectedIconOnlyContent: hasStaticButtonClass && projectedIconOnlyContent,
|
|
151
|
+
iconOnlyMissingAccessibleName: hasStaticButtonClass &&
|
|
152
|
+
isMigratableButtonHost(buttonElement.element) &&
|
|
153
|
+
(0, static_classes_1.hasIconOnlyButtonClasses)((0, template_edits_1.getStaticOrInterpolatedClassTokens)(buttonElement.element)) &&
|
|
154
|
+
!(0, static_classes_1.hasIconOnlyAccessibleName)(buttonElement.element),
|
|
155
|
+
nonNativeIconOnlyPattern: hasStaticButtonClass && nonNativeIconOnlyPattern,
|
|
156
|
+
triggerClickPattern: hasStaticButtonClass && triggerClickPattern,
|
|
157
|
+
nonNativeButtonPattern: hasStaticButtonClass && !nonNativeIconOnlyPattern && !triggerClickPattern && nonNativeButtonPattern
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
for (const candidate of getButtonCandidates(template)) {
|
|
161
|
+
const symbolName = (0, static_classes_1.editStaticClasses)(candidate, edits);
|
|
162
|
+
if (symbolName) {
|
|
163
|
+
(0, template_todos_1.editButtonReviewTodo)(candidate.element, edits);
|
|
164
|
+
standaloneImports.push({ moduleName: BUTTON_IMPORT_MODULE, symbolName });
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
(0, template_todos_1.editUnsupportedStaticButtonClassesTodo)(candidate.element, edits);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return (0, template_result_1.createTemplateMigrationResult)(template, edits, standaloneImports);
|
|
171
|
+
}
|
|
172
|
+
exports.buttonMigration = {
|
|
173
|
+
id: 'button',
|
|
174
|
+
countLegacyTemplateUsages: (template) => getLegacyButtonUsageElements(template).length,
|
|
175
|
+
migrateTemplate: migrateButtonTemplate,
|
|
176
|
+
migrateSourceFile: (context) => (0, component_imports_1.editStandaloneComponentImports)(context, BUTTON_IMPORT_MODULE, {
|
|
177
|
+
code: 'button.indirect-component-imports',
|
|
178
|
+
message: 'Component imports use an indirect value. Add the required DF button imports after verifying its shape.'
|
|
179
|
+
})
|
|
180
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/schema",
|
|
3
|
+
"$id": "SchematicsMigrateButton",
|
|
4
|
+
"title": "Migrate Button Schema",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"project": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "Name of the Angular project to scan or migrate",
|
|
10
|
+
"$default": {
|
|
11
|
+
"$source": "projectName"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"all": {
|
|
15
|
+
"type": "boolean",
|
|
16
|
+
"description": "Scan or migrate every buildable Angular project",
|
|
17
|
+
"default": false
|
|
18
|
+
},
|
|
19
|
+
"scan": {
|
|
20
|
+
"type": "boolean",
|
|
21
|
+
"description": "Only scan button usages without applying the migration",
|
|
22
|
+
"default": false
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TmplAstElement } from '@angular/compiler';
|
|
2
|
+
import { TemplateEdit } from '../../shared/template-edits';
|
|
3
|
+
import { hasIconOnlyButtonClasses } from '../../shared/button-visual-classes';
|
|
4
|
+
import { ButtonCandidate } from '../types';
|
|
5
|
+
export { hasIconOnlyButtonClasses };
|
|
6
|
+
export declare function hasSupportedStaticButtonClasses(classes: string[]): boolean;
|
|
7
|
+
export declare function hasProjectedIconOnlyContent(element: TmplAstElement): boolean;
|
|
8
|
+
export declare function hasSafeProjectedIconOnlyContent(element: TmplAstElement): boolean;
|
|
9
|
+
export declare function hasIconOnlyAccessibleName(element: TmplAstElement): boolean;
|
|
10
|
+
export declare function editStaticClasses(candidate: ButtonCandidate, edits: TemplateEdit[]): string | null;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hasIconOnlyButtonClasses = void 0;
|
|
4
|
+
exports.hasSupportedStaticButtonClasses = hasSupportedStaticButtonClasses;
|
|
5
|
+
exports.hasProjectedIconOnlyContent = hasProjectedIconOnlyContent;
|
|
6
|
+
exports.hasSafeProjectedIconOnlyContent = hasSafeProjectedIconOnlyContent;
|
|
7
|
+
exports.hasIconOnlyAccessibleName = hasIconOnlyAccessibleName;
|
|
8
|
+
exports.editStaticClasses = editStaticClasses;
|
|
9
|
+
const compiler_1 = require("@angular/compiler");
|
|
10
|
+
const template_edits_1 = require("../../shared/template-edits");
|
|
11
|
+
const button_visual_classes_1 = require("../../shared/button-visual-classes");
|
|
12
|
+
Object.defineProperty(exports, "hasIconOnlyButtonClasses", { enumerable: true, get: function () { return button_visual_classes_1.hasIconOnlyButtonClasses; } });
|
|
13
|
+
const PROJECTED_ICON_ELEMENT_NAMES = new Set(['span', 'i', 'df-icon']);
|
|
14
|
+
function hasSupportedStaticButtonClasses(classes) {
|
|
15
|
+
return (0, button_visual_classes_1.getStaticButtonVisual)(classes) !== null;
|
|
16
|
+
}
|
|
17
|
+
function isWhitespaceTextNode(node) {
|
|
18
|
+
return node instanceof compiler_1.TmplAstText && node.value.trim() === '';
|
|
19
|
+
}
|
|
20
|
+
function hasStaticClasses(element) {
|
|
21
|
+
const classes = element.attributes
|
|
22
|
+
.find((attribute) => attribute.name === 'class')
|
|
23
|
+
?.value.split(/\s+/)
|
|
24
|
+
.filter(Boolean);
|
|
25
|
+
return !!classes?.length;
|
|
26
|
+
}
|
|
27
|
+
function isSimpleProjectedIconElement(element) {
|
|
28
|
+
return (PROJECTED_ICON_ELEMENT_NAMES.has(element.name) &&
|
|
29
|
+
element.attributes.every((attribute) => attribute.name === 'class' || attribute.name === 'aria-hidden') &&
|
|
30
|
+
element.inputs.length === 0 &&
|
|
31
|
+
element.outputs.length === 0 &&
|
|
32
|
+
element.references.length === 0 &&
|
|
33
|
+
element.children.every(isWhitespaceTextNode) &&
|
|
34
|
+
hasStaticClasses(element));
|
|
35
|
+
}
|
|
36
|
+
function getProjectedIconElement(element) {
|
|
37
|
+
const contentChildren = element.children.filter((child) => !isWhitespaceTextNode(child));
|
|
38
|
+
if (contentChildren.length === 0) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
if (contentChildren.length === 1 &&
|
|
42
|
+
contentChildren[0] instanceof compiler_1.TmplAstElement &&
|
|
43
|
+
isSimpleProjectedIconElement(contentChildren[0])) {
|
|
44
|
+
return contentChildren[0];
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
function hasProjectedIconOnlyContent(element) {
|
|
49
|
+
return element.children.some((child) => !isWhitespaceTextNode(child));
|
|
50
|
+
}
|
|
51
|
+
function hasSafeProjectedIconOnlyContent(element) {
|
|
52
|
+
return getProjectedIconElement(element) !== null;
|
|
53
|
+
}
|
|
54
|
+
function hasIconOnlyAccessibleName(element) {
|
|
55
|
+
return (element.attributes.some((attribute) => (attribute.name === 'aria-label' ||
|
|
56
|
+
attribute.name === 'aria-labelledby' ||
|
|
57
|
+
attribute.name === 'prefixAriaLabelledby') &&
|
|
58
|
+
attribute.value.trim() !== '') ||
|
|
59
|
+
element.inputs.some((input) => input.name === 'aria-label' || input.name === 'aria-labelledby' || input.name === 'prefixAriaLabelledby'));
|
|
60
|
+
}
|
|
61
|
+
function getButtonDirective(candidate) {
|
|
62
|
+
const iconOnly = candidate.classes.includes('df-btn-icononly');
|
|
63
|
+
return iconOnly ? 'dfIconButton' : 'dfButton';
|
|
64
|
+
}
|
|
65
|
+
function getProjectedIconClasses(element) {
|
|
66
|
+
const iconElement = getProjectedIconElement(element);
|
|
67
|
+
return iconElement ? iconElement.attributes.find((attribute) => attribute.name === 'class').value.split(/\s+/) : [];
|
|
68
|
+
}
|
|
69
|
+
function editStaticClass(candidate, edits) {
|
|
70
|
+
const visual = (0, button_visual_classes_1.getStaticButtonVisual)(candidate.classes);
|
|
71
|
+
const removableClasses = (0, button_visual_classes_1.getRemovableButtonVisualClasses)(visual);
|
|
72
|
+
const remainingClasses = [...candidate.classes.filter((className) => !removableClasses.has(className))];
|
|
73
|
+
for (const className of getProjectedIconClasses(candidate.element)) {
|
|
74
|
+
if (className && !remainingClasses.includes(className)) {
|
|
75
|
+
remainingClasses.push(className);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (remainingClasses.length === 0) {
|
|
79
|
+
edits.push((0, template_edits_1.removeTextAttribute)(candidate.staticClassAttribute));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (candidate.staticClassAttribute.valueSpan) {
|
|
83
|
+
edits.push({
|
|
84
|
+
start: candidate.staticClassAttribute.valueSpan.start.offset,
|
|
85
|
+
end: candidate.staticClassAttribute.valueSpan.end.offset,
|
|
86
|
+
text: remainingClasses.join(' ')
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function editProjectedIconContent(candidate, edits) {
|
|
91
|
+
if (!(0, button_visual_classes_1.hasIconOnlyButtonClasses)(candidate.classes) || !hasSafeProjectedIconOnlyContent(candidate.element)) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
edits.push({
|
|
95
|
+
start: candidate.element.startSourceSpan.end.offset,
|
|
96
|
+
end: candidate.element.endSourceSpan?.start.offset ?? candidate.element.startSourceSpan.end.offset,
|
|
97
|
+
text: ''
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function editApi(candidate, buttonAttributes, edits) {
|
|
101
|
+
const insertOffset = (0, template_edits_1.getStartTagAttributesOffset)(candidate.element);
|
|
102
|
+
edits.push({
|
|
103
|
+
start: insertOffset,
|
|
104
|
+
end: insertOffset,
|
|
105
|
+
text: ` ${buttonAttributes}`
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function editStaticButtonType(candidate, edits) {
|
|
109
|
+
if (candidate.element.name !== 'button') {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const typeAttribute = (0, template_edits_1.findTextAttribute)(candidate.element, 'type');
|
|
113
|
+
if (typeAttribute?.value === 'button') {
|
|
114
|
+
edits.push((0, template_edits_1.removeTextAttribute)(typeAttribute));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function editStaticClasses(candidate, edits) {
|
|
118
|
+
const visual = (0, button_visual_classes_1.getStaticButtonVisual)(candidate.classes);
|
|
119
|
+
if (!visual) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
const directive = getButtonDirective(candidate);
|
|
123
|
+
editStaticClass(candidate, edits);
|
|
124
|
+
editProjectedIconContent(candidate, edits);
|
|
125
|
+
editStaticButtonType(candidate, edits);
|
|
126
|
+
editApi(candidate, (0, button_visual_classes_1.getButtonVisualAttributes)(visual, { directive }).join(' '), edits);
|
|
127
|
+
return button_visual_classes_1.BUTTON_VISUAL_DIRECTIVE_IMPORTS[directive];
|
|
128
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { TmplAstElement } from '@angular/compiler';
|
|
2
|
+
import { TemplateEdit } from '../../shared/template-edits';
|
|
3
|
+
interface ButtonTemplateTodoContext {
|
|
4
|
+
hasStaticButtonClass: boolean;
|
|
5
|
+
hasHardStopPattern?: boolean;
|
|
6
|
+
dropdownPattern?: boolean;
|
|
7
|
+
linkPattern?: boolean;
|
|
8
|
+
cardPattern?: boolean;
|
|
9
|
+
groupPattern?: boolean;
|
|
10
|
+
projectedIconOnlyContent?: boolean;
|
|
11
|
+
iconOnlyMissingAccessibleName?: boolean;
|
|
12
|
+
nonNativeIconOnlyPattern?: boolean;
|
|
13
|
+
triggerClickPattern?: boolean;
|
|
14
|
+
nonNativeButtonPattern?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function editButtonReviewTodo(element: TmplAstElement, edits: TemplateEdit[]): void;
|
|
17
|
+
export declare function editUnsupportedStaticButtonClassesTodo(element: TmplAstElement, edits: TemplateEdit[]): void;
|
|
18
|
+
export declare function editButtonTemplateTodos(element: TmplAstElement, edits: TemplateEdit[], context: ButtonTemplateTodoContext): void;
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.editButtonReviewTodo = editButtonReviewTodo;
|
|
4
|
+
exports.editUnsupportedStaticButtonClassesTodo = editUnsupportedStaticButtonClassesTodo;
|
|
5
|
+
exports.editButtonTemplateTodos = editButtonTemplateTodos;
|
|
6
|
+
const button_visual_classes_1 = require("../../shared/button-visual-classes");
|
|
7
|
+
const todo_comments_1 = require("../../shared/todo-comments");
|
|
8
|
+
const template_edits_1 = require("../../shared/template-edits");
|
|
9
|
+
const BUTTON_REVIEW_TODO = {
|
|
10
|
+
code: 'button.review',
|
|
11
|
+
message: 'This button was migrated automatically. Verify behavior and visual appearance.'
|
|
12
|
+
};
|
|
13
|
+
const BUTTON_UNSUPPORTED_STATIC_CLASSES_TODO = {
|
|
14
|
+
code: 'button.unsupported-static-classes',
|
|
15
|
+
marker: 'human',
|
|
16
|
+
message: 'Static legacy button classes were not migrated automatically. Convert this button manually.'
|
|
17
|
+
};
|
|
18
|
+
const BUTTON_DROPDOWN_PATTERN_TODO = {
|
|
19
|
+
code: 'button.dropdown-pattern',
|
|
20
|
+
marker: 'human',
|
|
21
|
+
message: 'This button is part of a dropdown and should be handled by the dropdown migration.'
|
|
22
|
+
};
|
|
23
|
+
const BUTTON_LINK_PATTERN_TODO = {
|
|
24
|
+
code: 'button.link-pattern',
|
|
25
|
+
marker: 'human',
|
|
26
|
+
message: 'This button uses legacy btn-link styling. It probably maps to appearance="text", but btn-link is no longer supported by DF.'
|
|
27
|
+
};
|
|
28
|
+
const BUTTON_CARD_PATTERN_TODO = {
|
|
29
|
+
code: 'button.card-pattern',
|
|
30
|
+
marker: 'human',
|
|
31
|
+
message: 'This button is used as a selectable card and was skipped by the deterministic migration.'
|
|
32
|
+
};
|
|
33
|
+
const BUTTON_GROUP_PATTERN_TODO = {
|
|
34
|
+
code: 'button.group-pattern',
|
|
35
|
+
marker: 'human',
|
|
36
|
+
message: 'This button is inside a legacy button group and was skipped by the deterministic migration.'
|
|
37
|
+
};
|
|
38
|
+
const BUTTON_PROJECTED_ICON_ONLY_CONTENT_TODO = {
|
|
39
|
+
code: 'button.projected-icon-only-content',
|
|
40
|
+
message: 'This icon-only button projects content, but dfIconButton ignores projected content. Move icon classes to the host or rebuild the icon logic when the structure is clear.'
|
|
41
|
+
};
|
|
42
|
+
const BUTTON_ICON_ONLY_ACCESSIBLE_NAME_TODO = {
|
|
43
|
+
code: 'button.icon-only-accessible-name',
|
|
44
|
+
marker: 'human',
|
|
45
|
+
message: 'This icon-only button needs an accessible name. Add aria-label or aria-labelledby after verifying intent.'
|
|
46
|
+
};
|
|
47
|
+
const BUTTON_NON_NATIVE_ICON_ONLY_PATTERN_TODO = {
|
|
48
|
+
code: 'button.non-native-icon-only-pattern',
|
|
49
|
+
marker: 'human',
|
|
50
|
+
message: 'This icon-only legacy button uses a non-native host and was not migrated automatically. Verify whether it should become an interactive button.'
|
|
51
|
+
};
|
|
52
|
+
const BUTTON_TRIGGER_CLICK_PATTERN_TODO = {
|
|
53
|
+
code: 'button.trigger-click-pattern',
|
|
54
|
+
marker: 'human',
|
|
55
|
+
message: 'This legacy button-like trigger uses dfTriggerClick and was skipped by the deterministic migration.'
|
|
56
|
+
};
|
|
57
|
+
const BUTTON_NON_NATIVE_BUTTON_PATTERN_TODO = {
|
|
58
|
+
code: 'button.non-native-button-pattern',
|
|
59
|
+
marker: 'human',
|
|
60
|
+
message: 'This legacy button uses a non-native host and was skipped by the deterministic migration.'
|
|
61
|
+
};
|
|
62
|
+
function editButtonReviewTodo(element, edits) {
|
|
63
|
+
(0, todo_comments_1.editTemplateTodos)(element, [BUTTON_REVIEW_TODO], edits);
|
|
64
|
+
}
|
|
65
|
+
function editUnsupportedStaticButtonClassesTodo(element, edits) {
|
|
66
|
+
(0, todo_comments_1.editTemplateTodos)(element, [BUTTON_UNSUPPORTED_STATIC_CLASSES_TODO], edits);
|
|
67
|
+
}
|
|
68
|
+
function hasDynamicLegacyButtonClassBinding(element) {
|
|
69
|
+
return element.inputs.some((input) => button_visual_classes_1.BUTTON_DYNAMIC_VISUAL_CLASSES.has(input.name));
|
|
70
|
+
}
|
|
71
|
+
function hasGenericDynamicClassBinding(element) {
|
|
72
|
+
return (!!(0, template_edits_1.findTextAttribute)(element, 'ngClass') ||
|
|
73
|
+
element.inputs.some((input) => input.name === 'ngClass' || input.name === 'class'));
|
|
74
|
+
}
|
|
75
|
+
function editButtonTemplateTodos(element, edits, context) {
|
|
76
|
+
const todos = [];
|
|
77
|
+
const hasDynamicLegacyClass = hasDynamicLegacyButtonClassBinding(element);
|
|
78
|
+
const hasDynamicClassTodo = !context.hasHardStopPattern &&
|
|
79
|
+
(hasDynamicLegacyClass || (context.hasStaticButtonClass && hasGenericDynamicClassBinding(element)));
|
|
80
|
+
if (context.dropdownPattern) {
|
|
81
|
+
todos.push(BUTTON_DROPDOWN_PATTERN_TODO);
|
|
82
|
+
}
|
|
83
|
+
if (context.linkPattern) {
|
|
84
|
+
todos.push(BUTTON_LINK_PATTERN_TODO);
|
|
85
|
+
}
|
|
86
|
+
if (context.cardPattern) {
|
|
87
|
+
todos.push(BUTTON_CARD_PATTERN_TODO);
|
|
88
|
+
}
|
|
89
|
+
if (context.groupPattern) {
|
|
90
|
+
todos.push(BUTTON_GROUP_PATTERN_TODO);
|
|
91
|
+
}
|
|
92
|
+
if (context.projectedIconOnlyContent) {
|
|
93
|
+
todos.push(BUTTON_PROJECTED_ICON_ONLY_CONTENT_TODO);
|
|
94
|
+
}
|
|
95
|
+
if (context.iconOnlyMissingAccessibleName) {
|
|
96
|
+
todos.push(BUTTON_ICON_ONLY_ACCESSIBLE_NAME_TODO);
|
|
97
|
+
}
|
|
98
|
+
if (context.nonNativeIconOnlyPattern) {
|
|
99
|
+
todos.push(BUTTON_NON_NATIVE_ICON_ONLY_PATTERN_TODO);
|
|
100
|
+
}
|
|
101
|
+
if (context.triggerClickPattern) {
|
|
102
|
+
todos.push(BUTTON_TRIGGER_CLICK_PATTERN_TODO);
|
|
103
|
+
}
|
|
104
|
+
if (context.nonNativeButtonPattern) {
|
|
105
|
+
todos.push(BUTTON_NON_NATIVE_BUTTON_PATTERN_TODO);
|
|
106
|
+
}
|
|
107
|
+
if (hasDynamicClassTodo) {
|
|
108
|
+
todos.push({
|
|
109
|
+
code: 'button.dynamic-class',
|
|
110
|
+
message: 'Dynamic button classes were not migrated. Check whether they still target legacy button classes.'
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
if (!context.hasHardStopPattern && hasDynamicLegacyClass) {
|
|
114
|
+
todos.push({
|
|
115
|
+
code: 'button.dynamic-legacy-class',
|
|
116
|
+
message: 'Dynamic legacy button class binding was not migrated. Convert it to button input logic.'
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
(0, todo_comments_1.editTemplateTodos)(element, todos, edits);
|
|
120
|
+
}
|