@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,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getUniqueReferenceName = getUniqueReferenceName;
|
|
4
|
+
exports.getProgrammaticReferenceName = getProgrammaticReferenceName;
|
|
5
|
+
exports.getDropdownReferenceName = getDropdownReferenceName;
|
|
6
|
+
exports.getMovedWrapperAttributes = getMovedWrapperAttributes;
|
|
7
|
+
exports.editWrapper = editWrapper;
|
|
8
|
+
exports.getUnsupportedWrapperTodos = getUnsupportedWrapperTodos;
|
|
9
|
+
const compiler_1 = require("@angular/compiler");
|
|
10
|
+
const template_edits_1 = require("../../shared/template-edits");
|
|
11
|
+
const static_placement_1 = require("../../shared/static-placement");
|
|
12
|
+
const template_menu_1 = require("./template-menu");
|
|
13
|
+
const template_helpers_1 = require("./template-helpers");
|
|
14
|
+
const WRAPPER_UNSUPPORTED_POSITIONING_ATTRIBUTES = ['display', 'popperOptions'];
|
|
15
|
+
const WRAPPER_MOVED_ATTRIBUTES = [
|
|
16
|
+
'placement',
|
|
17
|
+
'open',
|
|
18
|
+
'autoClose',
|
|
19
|
+
'dropdownClass',
|
|
20
|
+
'container',
|
|
21
|
+
...WRAPPER_UNSUPPORTED_POSITIONING_ATTRIBUTES
|
|
22
|
+
];
|
|
23
|
+
function getUniqueReferenceName(context) {
|
|
24
|
+
let referenceName = 'dropdownMenu';
|
|
25
|
+
let index = 1;
|
|
26
|
+
while (context.usedReferenceNames.has(referenceName)) {
|
|
27
|
+
referenceName = `dropdownMenu${index++}`;
|
|
28
|
+
}
|
|
29
|
+
context.usedReferenceNames.add(referenceName);
|
|
30
|
+
return referenceName;
|
|
31
|
+
}
|
|
32
|
+
function getProgrammaticReferenceName(element) {
|
|
33
|
+
return element.references.find((reference) => reference.value === 'ngbDropdown')?.name ?? null;
|
|
34
|
+
}
|
|
35
|
+
function getDropdownReferenceName(element, context) {
|
|
36
|
+
return getProgrammaticReferenceName(element) ?? getUniqueReferenceName(context);
|
|
37
|
+
}
|
|
38
|
+
function getMovedWrapperAttributes(wrapper, menu) {
|
|
39
|
+
const attributes = [];
|
|
40
|
+
const placement = (0, template_helpers_1.getDropdownAttribute)(wrapper, 'placement');
|
|
41
|
+
const open = (0, template_helpers_1.getDropdownAttribute)(wrapper, 'open');
|
|
42
|
+
const openChange = (0, template_edits_1.findBoundEvent)(wrapper, 'openChange');
|
|
43
|
+
const container = (0, template_helpers_1.getDropdownAttribute)(wrapper, 'container');
|
|
44
|
+
const menuSize = (0, template_menu_1.getMenuSize)(menu);
|
|
45
|
+
const menuClassPlacement = (0, template_menu_1.getMenuClassPlacement)(menu);
|
|
46
|
+
if (open instanceof compiler_1.TmplAstBoundAttribute) {
|
|
47
|
+
attributes.push(`[opened]="${(0, template_helpers_1.getAttributeValue)(open)}"`);
|
|
48
|
+
}
|
|
49
|
+
else if (open) {
|
|
50
|
+
const value = (0, template_helpers_1.getAttributeValue)(open);
|
|
51
|
+
attributes.push(value ? `opened="${value}"` : 'opened');
|
|
52
|
+
}
|
|
53
|
+
if (openChange) {
|
|
54
|
+
attributes.push(`(openedChange)="${(0, template_helpers_1.getEventValue)(openChange)}"`);
|
|
55
|
+
}
|
|
56
|
+
if (placement instanceof compiler_1.TmplAstBoundAttribute) {
|
|
57
|
+
attributes.push(`[placement]="${(0, template_helpers_1.getAttributeValue)(placement)}"`);
|
|
58
|
+
}
|
|
59
|
+
else if (placement) {
|
|
60
|
+
const mappedPlacement = (0, static_placement_1.mapStaticPlacement)((0, template_helpers_1.getAttributeValue)(placement));
|
|
61
|
+
if (mappedPlacement) {
|
|
62
|
+
attributes.push(`placement="${mappedPlacement}"`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (menuClassPlacement) {
|
|
66
|
+
attributes.push(`placement="${menuClassPlacement}"`);
|
|
67
|
+
}
|
|
68
|
+
if (menuSize) {
|
|
69
|
+
attributes.push(`size="${menuSize}"`);
|
|
70
|
+
}
|
|
71
|
+
if (container) {
|
|
72
|
+
attributes.push(container.sourceSpan.start.file.content.slice(container.sourceSpan.start.offset, container.sourceSpan.end.offset));
|
|
73
|
+
}
|
|
74
|
+
return attributes;
|
|
75
|
+
}
|
|
76
|
+
function editWrapper(wrapper, edits) {
|
|
77
|
+
const dropdown = (0, template_helpers_1.getDropdownAttribute)(wrapper, 'ngbDropdown');
|
|
78
|
+
const openChange = (0, template_edits_1.findBoundEvent)(wrapper, 'openChange');
|
|
79
|
+
if (dropdown) {
|
|
80
|
+
edits.push((0, template_helpers_1.removeAttribute)(dropdown));
|
|
81
|
+
}
|
|
82
|
+
for (const reference of wrapper.references) {
|
|
83
|
+
if (reference.value === 'ngbDropdown') {
|
|
84
|
+
edits.push((0, template_helpers_1.removeAttribute)(reference));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
for (const name of WRAPPER_MOVED_ATTRIBUTES) {
|
|
88
|
+
const attribute = (0, template_helpers_1.getDropdownAttribute)(wrapper, name);
|
|
89
|
+
if (attribute) {
|
|
90
|
+
edits.push((0, template_helpers_1.removeAttribute)(attribute));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (openChange) {
|
|
94
|
+
edits.push((0, template_helpers_1.removeAttribute)(openChange));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function getUnsupportedWrapperTodos(wrapper) {
|
|
98
|
+
return {
|
|
99
|
+
autoClose: !!(0, template_helpers_1.getDropdownAttribute)(wrapper, 'autoClose'),
|
|
100
|
+
customPositioning: !!(0, template_helpers_1.getDropdownAttribute)(wrapper, 'dropdownClass') ||
|
|
101
|
+
WRAPPER_UNSUPPORTED_POSITIONING_ATTRIBUTES.some((name) => !!(0, template_helpers_1.getDropdownAttribute)(wrapper, name)) ||
|
|
102
|
+
(0, template_helpers_1.getDropdownAttribute)(wrapper, 'placement') instanceof compiler_1.TmplAstBoundAttribute,
|
|
103
|
+
programmaticApi: !!getProgrammaticReferenceName(wrapper)
|
|
104
|
+
};
|
|
105
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = componentMigration;
|
|
4
|
+
const registry_1 = require("./registry");
|
|
5
|
+
const migrate_project_1 = require("./shared/migrate-project");
|
|
6
|
+
const scan_project_1 = require("./shared/scan-project");
|
|
7
|
+
const project_tsconfig_paths_1 = require("./utils/project_tsconfig_paths");
|
|
8
|
+
function componentMigration(options) {
|
|
9
|
+
return async (tree, context) => {
|
|
10
|
+
const projectNames = await (0, project_tsconfig_paths_1.resolveProjectNames)(tree, options.project, options.all);
|
|
11
|
+
const runContext = (0, migrate_project_1.createComponentMigrationRunContext)();
|
|
12
|
+
const usageCounts = new Map(registry_1.componentMigrations.map((migration) => [migration.id, 0]));
|
|
13
|
+
for (const projectName of projectNames) {
|
|
14
|
+
const results = await (0, scan_project_1.scanProjectForComponentMigrations)(tree, projectName, registry_1.componentMigrations, runContext);
|
|
15
|
+
for (const result of results) {
|
|
16
|
+
usageCounts.set(result.migration.id, (usageCounts.get(result.migration.id) ?? 0) + result.legacyUsages);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
context.logger.info(projectNames.length === 1
|
|
20
|
+
? `Design Factory component migration scan for project "${projectNames[0]}"`
|
|
21
|
+
: `Design Factory component migration scan for ${projectNames.length} projects`);
|
|
22
|
+
for (const migration of registry_1.componentMigrations) {
|
|
23
|
+
context.logger.info(`${migration.id}: ${usageCounts.get(migration.id) ?? 0} usages`);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Rule, SchematicContext } from '@angular-devkit/schematics';
|
|
2
|
+
export interface NextStepsSchema {
|
|
3
|
+
componentId: string;
|
|
4
|
+
analyzedSourceFiles: number;
|
|
5
|
+
analyzedComponents: number;
|
|
6
|
+
analyzedTemplates: number;
|
|
7
|
+
changedTemplates: number;
|
|
8
|
+
changes: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function formatComponentMigrationNextSteps(options: NextStepsSchema): string;
|
|
11
|
+
export declare function logComponentMigrationNextSteps(context: SchematicContext, options: NextStepsSchema): void;
|
|
12
|
+
export declare function scheduleComponentMigrationNextSteps(context: SchematicContext, options: NextStepsSchema): void;
|
|
13
|
+
export default function nextSteps(options: NextStepsSchema): Rule;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatComponentMigrationNextSteps = formatComponentMigrationNextSteps;
|
|
4
|
+
exports.logComponentMigrationNextSteps = logComponentMigrationNextSteps;
|
|
5
|
+
exports.scheduleComponentMigrationNextSteps = scheduleComponentMigrationNextSteps;
|
|
6
|
+
exports.default = nextSteps;
|
|
7
|
+
const tasks_1 = require("@angular-devkit/schematics/tasks");
|
|
8
|
+
function formatComponentMigrationNextSteps(options) {
|
|
9
|
+
return `
|
|
10
|
+
======================================================================
|
|
11
|
+
Design Factory migration next steps
|
|
12
|
+
======================================================================
|
|
13
|
+
Latest deterministic run (${options.componentId}): ${options.changedTemplates} templates changed, ${options.changes} edits.
|
|
14
|
+
Analyzed ${options.analyzedSourceFiles} source files, ${options.analyzedComponents} components, ${options.analyzedTemplates} templates.
|
|
15
|
+
AI handoff updated in .df-migration/. It includes every generated component guide.
|
|
16
|
+
|
|
17
|
+
1. Review the git diff.
|
|
18
|
+
2. Run more component migration schematics if you want to hand off several components to AI at once.
|
|
19
|
+
3. Start the AI-assisted migration phase by asking your AI tool to execute .df-migration/prompt.md.
|
|
20
|
+
======================================================================`;
|
|
21
|
+
}
|
|
22
|
+
function logComponentMigrationNextSteps(context, options) {
|
|
23
|
+
for (const line of formatComponentMigrationNextSteps(options).split('\n')) {
|
|
24
|
+
context.logger.warn(line);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function scheduleComponentMigrationNextSteps(context, options) {
|
|
28
|
+
context.addTask(new tasks_1.RunSchematicTask('component-migration-next-steps', options));
|
|
29
|
+
}
|
|
30
|
+
function nextSteps(options) {
|
|
31
|
+
return (_tree, context) => {
|
|
32
|
+
logComponentMigrationNextSteps(context, options);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const componentMigrations: import("./shared/types").ComponentMigrationDefinition[];
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.componentMigrations = void 0;
|
|
4
|
+
const migration_1 = require("./accordion/migration");
|
|
5
|
+
const migration_2 = require("./alert/migration");
|
|
6
|
+
const migration_3 = require("./button/migration");
|
|
7
|
+
const migration_4 = require("./dropdown/migration");
|
|
8
|
+
const migration_5 = require("./tooltip/migration");
|
|
9
|
+
exports.componentMigrations = [
|
|
10
|
+
migration_1.accordionMigration,
|
|
11
|
+
migration_2.alertMigration,
|
|
12
|
+
migration_3.buttonMigration,
|
|
13
|
+
migration_4.dropdownMigration,
|
|
14
|
+
migration_5.tooltipMigration
|
|
15
|
+
];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/schema",
|
|
3
|
+
"$id": "SchematicsComponentMigration",
|
|
4
|
+
"title": "Component Migration Schema",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"project": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "Name of the Angular project to scan",
|
|
10
|
+
"$default": {
|
|
11
|
+
"$source": "projectName"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"all": {
|
|
15
|
+
"type": "boolean",
|
|
16
|
+
"description": "Scan every buildable Angular project",
|
|
17
|
+
"default": false
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.writeAiMigrationHandoff = writeAiMigrationHandoff;
|
|
4
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
function readHandoffSourceFile(path) {
|
|
8
|
+
try {
|
|
9
|
+
return (0, fs_1.readFileSync)(path, 'utf-8');
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
throw new schematics_1.SchematicsException(`Could not find migration handoff file "${path}".`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function writeTextFile(tree, path, content) {
|
|
16
|
+
if (tree.exists(path)) {
|
|
17
|
+
if (tree.read(path)?.toString('utf-8') === content) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
tree.overwrite(path, content);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
tree.create(path, content);
|
|
24
|
+
}
|
|
25
|
+
function writeAiMigrationHandoff(tree, componentId) {
|
|
26
|
+
writeTextFile(tree, '.df-migration/prompt.md', readHandoffSourceFile((0, path_1.join)(__dirname, '..', 'ai', 'prompt.md')));
|
|
27
|
+
writeTextFile(tree, `.df-migration/${componentId}/guide.md`, readHandoffSourceFile((0, path_1.join)(__dirname, '..', componentId, 'guide.md')));
|
|
28
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as ts from 'typescript';
|
|
2
|
+
export declare function findComponentMetadata(component: ts.ClassDeclaration): ts.ObjectLiteralExpression | null;
|
|
3
|
+
export declare function findComponentImportsArray(component: ts.ClassDeclaration): ts.ArrayLiteralExpression | null;
|
|
4
|
+
export declare function isExplicitlyNonStandaloneComponent(component: ts.ClassDeclaration): boolean;
|
|
5
|
+
export declare function findNgModuleMetadata(moduleClass: ts.ClassDeclaration): ts.ObjectLiteralExpression | null;
|
|
6
|
+
export declare function findNgModuleDeclarationsArray(moduleClass: ts.ClassDeclaration): ts.ArrayLiteralExpression | null;
|
|
7
|
+
export declare function findNgModuleImportsArray(moduleClass: ts.ClassDeclaration): ts.ArrayLiteralExpression | null;
|
|
8
|
+
export declare function findDecoratorImportsArrays(sourceFile: ts.SourceFile): ts.ArrayLiteralExpression[];
|
|
9
|
+
export declare function getNgModuleClasses(sourceFile: ts.SourceFile): ts.ClassDeclaration[];
|
|
10
|
+
export declare function resolveClassDeclaration(typeChecker: ts.TypeChecker, expression: ts.Expression): ts.ClassDeclaration | null;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findComponentMetadata = findComponentMetadata;
|
|
4
|
+
exports.findComponentImportsArray = findComponentImportsArray;
|
|
5
|
+
exports.isExplicitlyNonStandaloneComponent = isExplicitlyNonStandaloneComponent;
|
|
6
|
+
exports.findNgModuleMetadata = findNgModuleMetadata;
|
|
7
|
+
exports.findNgModuleDeclarationsArray = findNgModuleDeclarationsArray;
|
|
8
|
+
exports.findNgModuleImportsArray = findNgModuleImportsArray;
|
|
9
|
+
exports.findDecoratorImportsArrays = findDecoratorImportsArrays;
|
|
10
|
+
exports.getNgModuleClasses = getNgModuleClasses;
|
|
11
|
+
exports.resolveClassDeclaration = resolveClassDeclaration;
|
|
12
|
+
const tslib_1 = require("tslib");
|
|
13
|
+
const ts = tslib_1.__importStar(require("typescript"));
|
|
14
|
+
function findComponentMetadata(component) {
|
|
15
|
+
for (const decorator of ts.getDecorators(component) ?? []) {
|
|
16
|
+
const expression = decorator.expression;
|
|
17
|
+
if (!ts.isCallExpression(expression) ||
|
|
18
|
+
!ts.isIdentifier(expression.expression) ||
|
|
19
|
+
expression.expression.text !== 'Component') {
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const [metadata] = expression.arguments;
|
|
23
|
+
if (metadata && ts.isObjectLiteralExpression(metadata)) {
|
|
24
|
+
return metadata;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
function findComponentImportsArray(component) {
|
|
30
|
+
const metadata = findComponentMetadata(component);
|
|
31
|
+
if (!metadata) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
for (const property of metadata.properties) {
|
|
35
|
+
if (ts.isPropertyAssignment(property) &&
|
|
36
|
+
property.name.getText(component.getSourceFile()) === 'imports' &&
|
|
37
|
+
ts.isArrayLiteralExpression(property.initializer)) {
|
|
38
|
+
return property.initializer;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
function isExplicitlyNonStandaloneComponent(component) {
|
|
44
|
+
const metadata = findComponentMetadata(component);
|
|
45
|
+
if (!metadata) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
return metadata.properties.some((property) => ts.isPropertyAssignment(property) &&
|
|
49
|
+
property.name.getText(component.getSourceFile()) === 'standalone' &&
|
|
50
|
+
property.initializer.kind === ts.SyntaxKind.FalseKeyword);
|
|
51
|
+
}
|
|
52
|
+
function findNgModuleMetadata(moduleClass) {
|
|
53
|
+
for (const decorator of ts.getDecorators(moduleClass) ?? []) {
|
|
54
|
+
const expression = decorator.expression;
|
|
55
|
+
if (!ts.isCallExpression(expression) ||
|
|
56
|
+
!ts.isIdentifier(expression.expression) ||
|
|
57
|
+
expression.expression.text !== 'NgModule') {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const [metadata] = expression.arguments;
|
|
61
|
+
if (metadata && ts.isObjectLiteralExpression(metadata)) {
|
|
62
|
+
return metadata;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
function findNgModuleArrayProperty(moduleClass, propertyName) {
|
|
68
|
+
const metadata = findNgModuleMetadata(moduleClass);
|
|
69
|
+
if (!metadata) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
for (const property of metadata.properties) {
|
|
73
|
+
if (ts.isPropertyAssignment(property) &&
|
|
74
|
+
property.name.getText(moduleClass.getSourceFile()) === propertyName &&
|
|
75
|
+
ts.isArrayLiteralExpression(property.initializer)) {
|
|
76
|
+
return property.initializer;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
function findNgModuleDeclarationsArray(moduleClass) {
|
|
82
|
+
return findNgModuleArrayProperty(moduleClass, 'declarations');
|
|
83
|
+
}
|
|
84
|
+
function findNgModuleImportsArray(moduleClass) {
|
|
85
|
+
return findNgModuleArrayProperty(moduleClass, 'imports');
|
|
86
|
+
}
|
|
87
|
+
function findDecoratorImportsArrays(sourceFile) {
|
|
88
|
+
const arrays = [];
|
|
89
|
+
const visitNode = (node) => {
|
|
90
|
+
if (ts.isClassDeclaration(node)) {
|
|
91
|
+
for (const decorator of ts.getDecorators(node) ?? []) {
|
|
92
|
+
const expression = decorator.expression;
|
|
93
|
+
const metadata = ts.isCallExpression(expression) ? expression.arguments[0] : undefined;
|
|
94
|
+
if (!metadata || !ts.isObjectLiteralExpression(metadata)) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
for (const property of metadata.properties) {
|
|
98
|
+
if (ts.isPropertyAssignment(property) &&
|
|
99
|
+
property.name.getText(sourceFile) === 'imports' &&
|
|
100
|
+
ts.isArrayLiteralExpression(property.initializer)) {
|
|
101
|
+
arrays.push(property.initializer);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
ts.forEachChild(node, visitNode);
|
|
107
|
+
};
|
|
108
|
+
visitNode(sourceFile);
|
|
109
|
+
return arrays;
|
|
110
|
+
}
|
|
111
|
+
function getNgModuleClasses(sourceFile) {
|
|
112
|
+
return sourceFile.statements.filter((statement) => ts.isClassDeclaration(statement) && !!findNgModuleMetadata(statement));
|
|
113
|
+
}
|
|
114
|
+
function resolveClassDeclaration(typeChecker, expression) {
|
|
115
|
+
if (!ts.isIdentifier(expression)) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
const symbol = typeChecker.getSymbolAtLocation(expression);
|
|
119
|
+
if (!symbol) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
const resolvedSymbol = symbol.flags & ts.SymbolFlags.Alias ? typeChecker.getAliasedSymbol(symbol) : symbol;
|
|
123
|
+
const declaration = resolvedSymbol.valueDeclaration ?? resolvedSymbol.declarations?.[0];
|
|
124
|
+
return declaration && ts.isClassDeclaration(declaration) ? declaration : null;
|
|
125
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type ButtonVisualVariant = 'primary' | 'neutral' | 'danger';
|
|
2
|
+
export type ButtonVisualAppearance = 'solid' | 'outline' | 'text';
|
|
3
|
+
export type ButtonVisualSize = 'sm' | 'lg';
|
|
4
|
+
export type ButtonVisualDirective = 'dfButton' | 'dfIconButton';
|
|
5
|
+
export interface StaticButtonVisual {
|
|
6
|
+
variant: ButtonVisualVariant;
|
|
7
|
+
appearance: ButtonVisualAppearance;
|
|
8
|
+
size: ButtonVisualSize | null;
|
|
9
|
+
mirror: boolean;
|
|
10
|
+
transparent: boolean;
|
|
11
|
+
iconOnly: boolean;
|
|
12
|
+
matchedClass: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ButtonVisualAttributesOptions {
|
|
15
|
+
directive?: ButtonVisualDirective;
|
|
16
|
+
includeIconOnly?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare const BUTTON_VISUAL_DIRECTIVE_IMPORTS: Record<ButtonVisualDirective, string>;
|
|
19
|
+
export declare const BUTTON_DYNAMIC_VISUAL_CLASSES: Set<string>;
|
|
20
|
+
export declare function hasIconOnlyButtonClasses(classes: string[]): boolean;
|
|
21
|
+
export declare function getStaticButtonVisual(classes: string[]): StaticButtonVisual | null;
|
|
22
|
+
export declare function getButtonVisualSize(classes: string[]): ButtonVisualSize | null;
|
|
23
|
+
export declare function getButtonVisualAttributes(visual: StaticButtonVisual, options?: ButtonVisualAttributesOptions): string[];
|
|
24
|
+
export declare function getRemovableButtonVisualClasses(visual: StaticButtonVisual): Set<string>;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BUTTON_DYNAMIC_VISUAL_CLASSES = exports.BUTTON_VISUAL_DIRECTIVE_IMPORTS = void 0;
|
|
4
|
+
exports.hasIconOnlyButtonClasses = hasIconOnlyButtonClasses;
|
|
5
|
+
exports.getStaticButtonVisual = getStaticButtonVisual;
|
|
6
|
+
exports.getButtonVisualSize = getButtonVisualSize;
|
|
7
|
+
exports.getButtonVisualAttributes = getButtonVisualAttributes;
|
|
8
|
+
exports.getRemovableButtonVisualClasses = getRemovableButtonVisualClasses;
|
|
9
|
+
exports.BUTTON_VISUAL_DIRECTIVE_IMPORTS = {
|
|
10
|
+
dfButton: 'DfButton',
|
|
11
|
+
dfIconButton: 'DfIconButton'
|
|
12
|
+
};
|
|
13
|
+
const BUTTON_VARIANTS = ['primary', 'neutral', 'danger'];
|
|
14
|
+
exports.BUTTON_DYNAMIC_VISUAL_CLASSES = new Set([
|
|
15
|
+
'btn-primary',
|
|
16
|
+
'btn-outline-primary',
|
|
17
|
+
'btn-neutral',
|
|
18
|
+
'btn-outline-neutral',
|
|
19
|
+
'btn-danger',
|
|
20
|
+
'btn-outline-danger',
|
|
21
|
+
'btn-sm',
|
|
22
|
+
'btn-lg',
|
|
23
|
+
'df-btn-tertiary',
|
|
24
|
+
'df-btn-transparent',
|
|
25
|
+
'df-btn-icononly',
|
|
26
|
+
'df-btn-primary-mirror',
|
|
27
|
+
'df-btn-outline-primary-mirror',
|
|
28
|
+
'df-btn-neutral-mirror',
|
|
29
|
+
'df-btn-outline-neutral-mirror',
|
|
30
|
+
'df-btn-danger-mirror',
|
|
31
|
+
'df-btn-outline-danger-mirror'
|
|
32
|
+
]);
|
|
33
|
+
function hasIconOnlyButtonClasses(classes) {
|
|
34
|
+
return classes.includes('df-btn-icononly');
|
|
35
|
+
}
|
|
36
|
+
function getStaticButtonVisual(classes) {
|
|
37
|
+
for (const variant of BUTTON_VARIANTS) {
|
|
38
|
+
const solidClass = `btn-${variant}`;
|
|
39
|
+
if (classes.includes(solidClass)) {
|
|
40
|
+
return getStaticButtonVisualFromClass(classes, variant, 'solid', false, solidClass);
|
|
41
|
+
}
|
|
42
|
+
const outlineClass = `btn-outline-${variant}`;
|
|
43
|
+
if (classes.includes(outlineClass)) {
|
|
44
|
+
return getStaticButtonVisualFromClass(classes, variant, 'outline', false, outlineClass);
|
|
45
|
+
}
|
|
46
|
+
const mirrorSolidClass = `df-btn-${variant}-mirror`;
|
|
47
|
+
if (classes.includes(mirrorSolidClass)) {
|
|
48
|
+
return getStaticButtonVisualFromClass(classes, variant, 'solid', true, mirrorSolidClass);
|
|
49
|
+
}
|
|
50
|
+
const mirrorOutlineClass = `df-btn-outline-${variant}-mirror`;
|
|
51
|
+
if (classes.includes(mirrorOutlineClass)) {
|
|
52
|
+
return getStaticButtonVisualFromClass(classes, variant, 'outline', true, mirrorOutlineClass);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
function getStaticButtonVisualFromClass(classes, variant, appearance, mirror, matchedClass) {
|
|
58
|
+
return {
|
|
59
|
+
variant,
|
|
60
|
+
appearance: classes.includes('df-btn-tertiary') ? 'text' : appearance,
|
|
61
|
+
size: getButtonVisualSize(classes),
|
|
62
|
+
mirror,
|
|
63
|
+
transparent: classes.includes('df-btn-transparent'),
|
|
64
|
+
iconOnly: hasIconOnlyButtonClasses(classes),
|
|
65
|
+
matchedClass
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function getButtonVisualSize(classes) {
|
|
69
|
+
if (classes.includes('btn-sm') === classes.includes('btn-lg')) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
return classes.includes('btn-sm') ? 'sm' : 'lg';
|
|
73
|
+
}
|
|
74
|
+
function getButtonVisualAttributes(visual, options = {}) {
|
|
75
|
+
const attributes = [];
|
|
76
|
+
if (options.directive) {
|
|
77
|
+
attributes.push(options.directive);
|
|
78
|
+
}
|
|
79
|
+
if (visual.variant !== 'primary') {
|
|
80
|
+
attributes.push(`variant="${visual.variant}"`);
|
|
81
|
+
}
|
|
82
|
+
if (visual.appearance !== 'solid') {
|
|
83
|
+
attributes.push(`appearance="${visual.appearance}"`);
|
|
84
|
+
}
|
|
85
|
+
if (visual.size) {
|
|
86
|
+
attributes.push(`size="${visual.size}"`);
|
|
87
|
+
}
|
|
88
|
+
if (visual.mirror) {
|
|
89
|
+
attributes.push('mirror');
|
|
90
|
+
}
|
|
91
|
+
if (visual.transparent) {
|
|
92
|
+
attributes.push('transparent');
|
|
93
|
+
}
|
|
94
|
+
if (options.includeIconOnly && visual.iconOnly) {
|
|
95
|
+
attributes.push('iconOnly');
|
|
96
|
+
}
|
|
97
|
+
return attributes;
|
|
98
|
+
}
|
|
99
|
+
function getRemovableButtonVisualClasses(visual) {
|
|
100
|
+
const removableClasses = new Set([
|
|
101
|
+
'btn',
|
|
102
|
+
visual.matchedClass,
|
|
103
|
+
'df-btn-tertiary',
|
|
104
|
+
'df-btn-transparent',
|
|
105
|
+
'df-btn-icononly'
|
|
106
|
+
]);
|
|
107
|
+
if (visual.size) {
|
|
108
|
+
removableClasses.add(`btn-${visual.size}`);
|
|
109
|
+
}
|
|
110
|
+
return removableClasses;
|
|
111
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as ts from 'typescript';
|
|
2
|
+
import { ComponentMigrationSourceContext } from './types';
|
|
3
|
+
export type ComponentTemplatePredicate = (templates: string[]) => boolean;
|
|
4
|
+
export declare function sourceFileUsesComponentTemplate(context: ComponentMigrationSourceContext, predicate: ComponentTemplatePredicate): boolean;
|
|
5
|
+
export declare function moduleDeclaresComponentTemplate(context: ComponentMigrationSourceContext, moduleClass: ts.ClassDeclaration, predicate: ComponentTemplatePredicate): boolean;
|
|
6
|
+
export declare function sourceFileDeclaresComponentTemplate(context: ComponentMigrationSourceContext, predicate: ComponentTemplatePredicate): boolean;
|
|
7
|
+
export declare function sourceFileNeedsComponentTemplate(context: ComponentMigrationSourceContext, predicate: ComponentTemplatePredicate): boolean;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sourceFileUsesComponentTemplate = sourceFileUsesComponentTemplate;
|
|
4
|
+
exports.moduleDeclaresComponentTemplate = moduleDeclaresComponentTemplate;
|
|
5
|
+
exports.sourceFileDeclaresComponentTemplate = sourceFileDeclaresComponentTemplate;
|
|
6
|
+
exports.sourceFileNeedsComponentTemplate = sourceFileNeedsComponentTemplate;
|
|
7
|
+
const angular_component_1 = require("./angular-component");
|
|
8
|
+
function sourceFileUsesComponentTemplate(context, predicate) {
|
|
9
|
+
return [...context.templatesByComponent.values()].some(predicate);
|
|
10
|
+
}
|
|
11
|
+
function moduleDeclaresComponentTemplate(context, moduleClass, predicate) {
|
|
12
|
+
const declarations = (0, angular_component_1.findNgModuleDeclarationsArray)(moduleClass);
|
|
13
|
+
return (declarations?.elements.some((element) => {
|
|
14
|
+
const component = (0, angular_component_1.resolveClassDeclaration)(context.typeChecker, element);
|
|
15
|
+
const templates = component ? context.projectTemplatesByComponent.get(component) : undefined;
|
|
16
|
+
return !!templates && predicate(templates);
|
|
17
|
+
}) ?? false);
|
|
18
|
+
}
|
|
19
|
+
function sourceFileDeclaresComponentTemplate(context, predicate) {
|
|
20
|
+
return (0, angular_component_1.getNgModuleClasses)(context.sourceFile).some((moduleClass) => moduleDeclaresComponentTemplate(context, moduleClass, predicate));
|
|
21
|
+
}
|
|
22
|
+
function sourceFileNeedsComponentTemplate(context, predicate) {
|
|
23
|
+
return sourceFileUsesComponentTemplate(context, predicate) || sourceFileDeclaresComponentTemplate(context, predicate);
|
|
24
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as ts from 'typescript';
|
|
2
|
+
import { MigrationTodo } from './todo-comments';
|
|
3
|
+
import { TemplateEdit } from './template-edits';
|
|
4
|
+
import { ComponentMigrationSourceContext } from './types';
|
|
5
|
+
export interface ComponentNamedImport {
|
|
6
|
+
importedName: string;
|
|
7
|
+
localName: string;
|
|
8
|
+
moduleName: string;
|
|
9
|
+
}
|
|
10
|
+
interface ReplacementResult {
|
|
11
|
+
scopeName: string;
|
|
12
|
+
importName: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ComponentScopeImportOptions {
|
|
15
|
+
context: ComponentMigrationSourceContext;
|
|
16
|
+
newImport: {
|
|
17
|
+
moduleName: string;
|
|
18
|
+
symbolName: string;
|
|
19
|
+
};
|
|
20
|
+
componentNeedsNewImport: (templates: string[]) => boolean;
|
|
21
|
+
componentKeepsLegacyScope?: (templates: string[]) => boolean;
|
|
22
|
+
legacyImports: ComponentNamedImport[];
|
|
23
|
+
legacyScopeImportedNames?: Iterable<string>;
|
|
24
|
+
cleanupScopeImportedNames?: Iterable<string>;
|
|
25
|
+
getReplacement?: (legacyImport: ComponentNamedImport) => ReplacementResult;
|
|
26
|
+
indirectComponentImportsTodo?: MigrationTodo;
|
|
27
|
+
addTopLevelImport?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface ComponentScopeImportEdits {
|
|
30
|
+
edits: TemplateEdit[];
|
|
31
|
+
newImports: Set<string>;
|
|
32
|
+
}
|
|
33
|
+
export interface StandaloneComponentImportOptions {
|
|
34
|
+
indirectComponentImportsTodo?: MigrationTodo;
|
|
35
|
+
legacyImports?: ComponentNamedImport[];
|
|
36
|
+
legacyScopeImportedNames?: Iterable<string>;
|
|
37
|
+
componentKeepsLegacyScope?: (templates: string[]) => boolean;
|
|
38
|
+
}
|
|
39
|
+
export declare function getComponentNamedImports(sourceFile: ts.SourceFile, moduleNames: Iterable<string>, importedNames?: Iterable<string>): ComponentNamedImport[];
|
|
40
|
+
export declare function editComponentScopeImports(options: ComponentScopeImportOptions): ComponentScopeImportEdits;
|
|
41
|
+
export declare function editStandaloneComponentImports(context: ComponentMigrationSourceContext, moduleName: string, optionsOrTodo?: MigrationTodo | StandaloneComponentImportOptions): TemplateEdit[];
|
|
42
|
+
export declare function hasIdentifierReferenceOutsideImports(sourceFile: ts.SourceFile, symbolName: string): boolean;
|
|
43
|
+
export declare function editRemovableLegacyImports(sourceFile: ts.SourceFile, moduleNames: Iterable<string>, legacyImports: ComponentNamedImport[], shouldRemove: (legacyImport: ComponentNamedImport) => boolean): TemplateEdit[];
|
|
44
|
+
export declare function editLegacyImportTodos(sourceFile: ts.SourceFile, moduleNames: Iterable<string>, shouldAddTodo: (legacyImport: ComponentNamedImport) => boolean, todo: MigrationTodo): TemplateEdit[];
|
|
45
|
+
export {};
|