@design-factory/angular 21.1.0-next.1 → 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.
Files changed (331) hide show
  1. package/.ai/docs/components/accordion/accessibility.md +45 -0
  2. package/.ai/docs/components/accordion/api.md +279 -0
  3. package/.ai/docs/components/accordion/developer.md +43 -0
  4. package/.ai/docs/components/accordion/guidelines.md +99 -0
  5. package/.ai/docs/components/accordion/overview.md +17 -0
  6. package/.ai/docs/components/alert/accessibility.md +24 -0
  7. package/.ai/docs/components/alert/api.md +65 -0
  8. package/.ai/docs/components/alert/developer.md +63 -0
  9. package/.ai/docs/components/alert/guidelines.md +62 -0
  10. package/.ai/docs/components/alert/overview.md +12 -0
  11. package/.ai/docs/components/button/accessibility.md +25 -0
  12. package/.ai/docs/components/button/api.md +71 -0
  13. package/.ai/docs/components/button/developer.md +52 -0
  14. package/.ai/docs/components/button/guidelines.md +75 -0
  15. package/.ai/docs/components/button/overview.md +15 -0
  16. package/.ai/docs/components/buttongroup/api.md +16 -0
  17. package/.ai/docs/components/buttongroup/developer.md +32 -0
  18. package/.ai/docs/components/drawer/accessibility.md +15 -0
  19. package/.ai/docs/components/drawer/api.md +56 -0
  20. package/.ai/docs/components/drawer/developer.md +36 -0
  21. package/.ai/docs/components/drawer/examples.md +9 -0
  22. package/.ai/docs/components/drawer/guidelines.md +58 -0
  23. package/.ai/docs/components/drawer/overview.md +19 -0
  24. package/.ai/docs/components/dropdown/accessibility.md +27 -0
  25. package/.ai/docs/components/dropdown/api.md +85 -0
  26. package/.ai/docs/components/dropdown/developer.md +59 -0
  27. package/.ai/docs/components/dropdown/guidelines.md +80 -0
  28. package/.ai/docs/components/dropdown/overview.md +16 -0
  29. package/.ai/docs/components/sidenav/accessibility.md +48 -0
  30. package/.ai/docs/components/sidenav/api.md +110 -0
  31. package/.ai/docs/components/sidenav/developer.md +14 -0
  32. package/.ai/docs/components/sidenav/guidelines.md +83 -0
  33. package/.ai/docs/components/sidenav/overview.md +16 -0
  34. package/.ai/docs/components/tooltip/accessibility.md +11 -0
  35. package/.ai/docs/components/tooltip/api.md +39 -0
  36. package/.ai/docs/components/tooltip/developer.md +16 -0
  37. package/.ai/docs/components/tooltip/guidelines.md +84 -0
  38. package/.ai/docs/components/tooltip/overview.md +23 -0
  39. package/.ai/docs/components/topnav/accessibility.md +51 -0
  40. package/.ai/docs/components/topnav/api.md +190 -0
  41. package/.ai/docs/components/topnav/developer.md +43 -0
  42. package/.ai/docs/components/topnav/guidelines.md +121 -0
  43. package/.ai/docs/components/topnav/overview.md +17 -0
  44. package/.ai/docs/demos/accordion/addons-subtitle/accordion-addons-subtitle.html +75 -0
  45. package/.ai/docs/demos/accordion/addons-subtitle/accordion-addons-subtitle.ts +27 -0
  46. package/.ai/docs/demos/accordion/basic/accordion-basic.html +16 -0
  47. package/.ai/docs/demos/accordion/basic/accordion-basic.ts +14 -0
  48. package/.ai/docs/demos/accordion/close-others/accordion-close-others.html +16 -0
  49. package/.ai/docs/demos/accordion/close-others/accordion-close-others.ts +14 -0
  50. package/.ai/docs/demos/accordion/interactive/accordion-interactive.html +84 -0
  51. package/.ai/docs/demos/accordion/interactive/accordion-interactive.ts +30 -0
  52. package/.ai/docs/demos/accordion/interactive-addons-subtitle/accordion-interactive-addons-subtitle.html +126 -0
  53. package/.ai/docs/demos/accordion/interactive-addons-subtitle/accordion-interactive-addons-subtitle.ts +33 -0
  54. package/.ai/docs/demos/accordion/programmatic-control/accordion-programmatic-control.html +36 -0
  55. package/.ai/docs/demos/accordion/programmatic-control/accordion-programmatic-control.ts +15 -0
  56. package/.ai/docs/demos/accordion/selectable/accordion-selectable.html +16 -0
  57. package/.ai/docs/demos/accordion/selectable/accordion-selectable.ts +14 -0
  58. package/.ai/docs/demos/accordion/selectable-extended/accordion-selectable-extended.html +28 -0
  59. package/.ai/docs/demos/accordion/selectable-extended/accordion-selectable-extended.ts +80 -0
  60. package/.ai/docs/demos/accordion/separator/accordion-separator.html +16 -0
  61. package/.ai/docs/demos/accordion/separator/accordion-separator.ts +14 -0
  62. package/.ai/docs/demos/alert/banner/alert-banner.html +15 -0
  63. package/.ai/docs/demos/alert/banner/alert-banner.ts +16 -0
  64. package/.ai/docs/demos/alert/basic/alert-basic.html +6 -0
  65. package/.ai/docs/demos/alert/basic/alert-basic.ts +9 -0
  66. package/.ai/docs/demos/alert/card/alert-card.html +15 -0
  67. package/.ai/docs/demos/alert/card/alert-card.ts +9 -0
  68. package/.ai/docs/demos/alert/dismissal/alert-dismissal.html +5 -0
  69. package/.ai/docs/demos/alert/dismissal/alert-dismissal.ts +27 -0
  70. package/.ai/docs/demos/alert/expandable/alert-expandable.html +9 -0
  71. package/.ai/docs/demos/alert/expandable/alert-expandable.ts +11 -0
  72. package/.ai/docs/demos/button/basic/button-basic.html +4 -0
  73. package/.ai/docs/demos/button/basic/button-basic.ts +9 -0
  74. package/.ai/docs/demos/button/disabled/button-disabled.html +18 -0
  75. package/.ai/docs/demos/button/disabled/button-disabled.ts +12 -0
  76. package/.ai/docs/demos/button/icons/button-icons.html +17 -0
  77. package/.ai/docs/demos/button/icons/button-icons.ts +10 -0
  78. package/.ai/docs/demos/button/surfaces/button-surfaces.html +13 -0
  79. package/.ai/docs/demos/button/surfaces/button-surfaces.ts +9 -0
  80. package/.ai/docs/demos/button/variants/button-variants.html +49 -0
  81. package/.ai/docs/demos/button/variants/button-variants.ts +9 -0
  82. package/.ai/docs/demos/buttongroup/basic/buttongroup-basic.html +6 -0
  83. package/.ai/docs/demos/buttongroup/basic/buttongroup-basic.ts +10 -0
  84. package/.ai/docs/demos/buttongroup/disabled/buttongroup-disabled.html +6 -0
  85. package/.ai/docs/demos/buttongroup/disabled/buttongroup-disabled.ts +10 -0
  86. package/.ai/docs/demos/buttongroup/mirror/buttongroup-mirror.html +8 -0
  87. package/.ai/docs/demos/buttongroup/mirror/buttongroup-mirror.ts +10 -0
  88. package/.ai/docs/demos/buttongroup/orientation/buttongroup-orientation.html +19 -0
  89. package/.ai/docs/demos/buttongroup/orientation/buttongroup-orientation.ts +10 -0
  90. package/.ai/docs/demos/buttongroup/sizing/buttongroup-sizing.html +19 -0
  91. package/.ai/docs/demos/buttongroup/sizing/buttongroup-sizing.ts +10 -0
  92. package/.ai/docs/demos/drawer/inline/drawer-inline-basic.html +46 -0
  93. package/.ai/docs/demos/drawer/inline/drawer-inline-basic.ts +33 -0
  94. package/.ai/docs/demos/drawer/overlay/drawer-overlay-basic.html +30 -0
  95. package/.ai/docs/demos/drawer/overlay/drawer-overlay-basic.ts +25 -0
  96. package/.ai/docs/demos/dropdown/basic/dropdown-basic.html +8 -0
  97. package/.ai/docs/demos/dropdown/basic/dropdown-basic.ts +15 -0
  98. package/.ai/docs/demos/dropdown/sizes/dropdown-sizes.html +9 -0
  99. package/.ai/docs/demos/dropdown/sizes/dropdown-sizes.ts +21 -0
  100. package/.ai/docs/demos/dropdown/split/dropdown-split.html +9 -0
  101. package/.ai/docs/demos/dropdown/split/dropdown-split.ts +11 -0
  102. package/.ai/docs/demos/dropdown/toggle/dropdown-toggle.html +22 -0
  103. package/.ai/docs/demos/dropdown/toggle/dropdown-toggle.ts +10 -0
  104. package/.ai/docs/demos/sidenav/sidenav-basic-no-icon/routes.ts +95 -0
  105. package/.ai/docs/demos/sidenav/sidenav-basic-no-icon/sidenav-basic-no-icon.html +42 -0
  106. package/.ai/docs/demos/sidenav/sidenav-basic-no-icon/sidenav-basic-no-icon.ts +12 -0
  107. package/.ai/docs/demos/sidenav/sidenav-basic-with-icon/routes.ts +41 -0
  108. package/.ai/docs/demos/sidenav/sidenav-basic-with-icon/sidenav-basic-with-icon.html +34 -0
  109. package/.ai/docs/demos/sidenav/sidenav-basic-with-icon/sidenav-basic-with-icon.ts +12 -0
  110. package/.ai/docs/demos/tooltip/basic/tooltip-basic.html +1 -0
  111. package/.ai/docs/demos/tooltip/basic/tooltip-basic.ts +10 -0
  112. package/.ai/docs/demos/tooltip/placements/tooltip-placements.html +35 -0
  113. package/.ai/docs/demos/tooltip/placements/tooltip-placements.ts +12 -0
  114. package/.ai/docs/demos/tooltip/sizes/tooltip-sizes.html +5 -0
  115. package/.ai/docs/demos/tooltip/sizes/tooltip-sizes.ts +10 -0
  116. package/.ai/docs/demos/topnav/brand/topnav-brand.ts +64 -0
  117. package/.ai/docs/demos/topnav/environment-banner/topnav-environment-banner.ts +20 -0
  118. package/.ai/docs/demos/topnav/navigation/routes.ts +35 -0
  119. package/.ai/docs/demos/topnav/navigation/topnav-navigation-flat.ts +67 -0
  120. package/.ai/docs/demos/topnav/navigation/topnav-navigation-tree.ts +82 -0
  121. package/.ai/docs/demos/topnav/quick-actions/notifications.ts +75 -0
  122. package/.ai/docs/demos/topnav/quick-actions/topnav-quick-actions.ts +108 -0
  123. package/.ai/docs/demos/topnav/quick-actions/user-account.ts +23 -0
  124. package/.ai/index.md +26 -0
  125. package/fesm2022/design-factory-angular-accordion.mjs +1153 -0
  126. package/fesm2022/design-factory-angular-accordion.mjs.map +1 -0
  127. package/fesm2022/design-factory-angular-alert.mjs +312 -0
  128. package/fesm2022/design-factory-angular-alert.mjs.map +1 -0
  129. package/fesm2022/design-factory-angular-breakpoints.mjs +53 -0
  130. package/fesm2022/design-factory-angular-breakpoints.mjs.map +1 -0
  131. package/fesm2022/design-factory-angular-button.mjs +240 -0
  132. package/fesm2022/design-factory-angular-button.mjs.map +1 -0
  133. package/fesm2022/design-factory-angular-buttongroup.mjs +75 -0
  134. package/fesm2022/design-factory-angular-buttongroup.mjs.map +1 -0
  135. package/fesm2022/design-factory-angular-drawer.mjs +76 -81
  136. package/fesm2022/design-factory-angular-drawer.mjs.map +1 -1
  137. package/fesm2022/design-factory-angular-dropdown.mjs +323 -0
  138. package/fesm2022/design-factory-angular-dropdown.mjs.map +1 -0
  139. package/fesm2022/design-factory-angular-form-field.mjs +287 -0
  140. package/fesm2022/design-factory-angular-form-field.mjs.map +1 -0
  141. package/fesm2022/design-factory-angular-icon.mjs +24 -0
  142. package/fesm2022/design-factory-angular-icon.mjs.map +1 -0
  143. package/fesm2022/design-factory-angular-input.mjs +34 -0
  144. package/fesm2022/design-factory-angular-input.mjs.map +1 -0
  145. package/fesm2022/design-factory-angular-internals.mjs +119 -39
  146. package/fesm2022/design-factory-angular-internals.mjs.map +1 -1
  147. package/fesm2022/design-factory-angular-separator.mjs +43 -0
  148. package/fesm2022/design-factory-angular-separator.mjs.map +1 -0
  149. package/fesm2022/design-factory-angular-sidenav.mjs +766 -438
  150. package/fesm2022/design-factory-angular-sidenav.mjs.map +1 -1
  151. package/fesm2022/design-factory-angular-slider.mjs +451 -0
  152. package/fesm2022/design-factory-angular-slider.mjs.map +1 -0
  153. package/fesm2022/design-factory-angular-theme.mjs +30 -20
  154. package/fesm2022/design-factory-angular-theme.mjs.map +1 -1
  155. package/fesm2022/design-factory-angular-toggle.mjs +172 -0
  156. package/fesm2022/design-factory-angular-toggle.mjs.map +1 -0
  157. package/fesm2022/design-factory-angular-tooltip.mjs +138 -0
  158. package/fesm2022/design-factory-angular-tooltip.mjs.map +1 -0
  159. package/fesm2022/design-factory-angular-topnav.mjs +635 -558
  160. package/fesm2022/design-factory-angular-topnav.mjs.map +1 -1
  161. package/package.json +61 -8
  162. package/schematics/collection.json +35 -0
  163. package/schematics/component-migration/accordion/constants.d.ts +10 -0
  164. package/schematics/component-migration/accordion/constants.js +46 -0
  165. package/schematics/component-migration/accordion/guide.md +257 -0
  166. package/schematics/component-migration/accordion/index.d.ts +2 -0
  167. package/schematics/component-migration/accordion/index.js +5 -0
  168. package/schematics/component-migration/accordion/migration.d.ts +2 -0
  169. package/schematics/component-migration/accordion/migration.js +13 -0
  170. package/schematics/component-migration/accordion/schema.json +25 -0
  171. package/schematics/component-migration/accordion/steps/accordion-imports.d.ts +3 -0
  172. package/schematics/component-migration/accordion/steps/accordion-imports.js +41 -0
  173. package/schematics/component-migration/accordion/steps/template-migration.d.ts +3 -0
  174. package/schematics/component-migration/accordion/steps/template-migration.js +554 -0
  175. package/schematics/component-migration/accordion/steps/title-content.d.ts +9 -0
  176. package/schematics/component-migration/accordion/steps/title-content.js +75 -0
  177. package/schematics/component-migration/ai/prompt.md +83 -0
  178. package/schematics/component-migration/alert/guide.md +246 -0
  179. package/schematics/component-migration/alert/index.d.ts +2 -0
  180. package/schematics/component-migration/alert/index.js +5 -0
  181. package/schematics/component-migration/alert/migration.d.ts +2 -0
  182. package/schematics/component-migration/alert/migration.js +50 -0
  183. package/schematics/component-migration/alert/schema.json +25 -0
  184. package/schematics/component-migration/alert/steps/alert-imports.d.ts +4 -0
  185. package/schematics/component-migration/alert/steps/alert-imports.js +97 -0
  186. package/schematics/component-migration/alert/steps/animation-input.d.ts +3 -0
  187. package/schematics/component-migration/alert/steps/animation-input.js +17 -0
  188. package/schematics/component-migration/alert/steps/close-output.d.ts +3 -0
  189. package/schematics/component-migration/alert/steps/close-output.js +17 -0
  190. package/schematics/component-migration/alert/steps/icon-directive-imports.d.ts +3 -0
  191. package/schematics/component-migration/alert/steps/icon-directive-imports.js +84 -0
  192. package/schematics/component-migration/alert/steps/icon-directive.d.ts +3 -0
  193. package/schematics/component-migration/alert/steps/icon-directive.js +10 -0
  194. package/schematics/component-migration/alert/steps/legacy-module-imports.d.ts +3 -0
  195. package/schematics/component-migration/alert/steps/legacy-module-imports.js +57 -0
  196. package/schematics/component-migration/alert/steps/programmatic-close.d.ts +3 -0
  197. package/schematics/component-migration/alert/steps/programmatic-close.js +44 -0
  198. package/schematics/component-migration/alert/steps/selector.d.ts +3 -0
  199. package/schematics/component-migration/alert/steps/selector.js +18 -0
  200. package/schematics/component-migration/alert/steps/static-classes.d.ts +3 -0
  201. package/schematics/component-migration/alert/steps/static-classes.js +97 -0
  202. package/schematics/component-migration/alert/steps/static-type.d.ts +3 -0
  203. package/schematics/component-migration/alert/steps/static-type.js +28 -0
  204. package/schematics/component-migration/alert/steps/template-reference.d.ts +3 -0
  205. package/schematics/component-migration/alert/steps/template-reference.js +15 -0
  206. package/schematics/component-migration/alert/steps/template-todos.d.ts +3 -0
  207. package/schematics/component-migration/alert/steps/template-todos.js +78 -0
  208. package/schematics/component-migration/button/guide.md +278 -0
  209. package/schematics/component-migration/button/index.d.ts +2 -0
  210. package/schematics/component-migration/button/index.js +5 -0
  211. package/schematics/component-migration/button/migration.d.ts +2 -0
  212. package/schematics/component-migration/button/migration.js +180 -0
  213. package/schematics/component-migration/button/schema.json +25 -0
  214. package/schematics/component-migration/button/steps/static-classes.d.ts +10 -0
  215. package/schematics/component-migration/button/steps/static-classes.js +128 -0
  216. package/schematics/component-migration/button/steps/template-todos.d.ts +19 -0
  217. package/schematics/component-migration/button/steps/template-todos.js +120 -0
  218. package/schematics/component-migration/button/types.d.ts +7 -0
  219. package/schematics/component-migration/button/types.js +2 -0
  220. package/schematics/component-migration/dropdown/guide.md +252 -0
  221. package/schematics/component-migration/dropdown/index.d.ts +2 -0
  222. package/schematics/component-migration/dropdown/index.js +5 -0
  223. package/schematics/component-migration/dropdown/migration.d.ts +2 -0
  224. package/schematics/component-migration/dropdown/migration.js +41 -0
  225. package/schematics/component-migration/dropdown/schema.json +25 -0
  226. package/schematics/component-migration/dropdown/steps/dropdown-imports.d.ts +3 -0
  227. package/schematics/component-migration/dropdown/steps/dropdown-imports.js +308 -0
  228. package/schematics/component-migration/dropdown/steps/template-attributes.d.ts +10 -0
  229. package/schematics/component-migration/dropdown/steps/template-attributes.js +57 -0
  230. package/schematics/component-migration/dropdown/steps/template-helpers.d.ts +20 -0
  231. package/schematics/component-migration/dropdown/steps/template-helpers.js +125 -0
  232. package/schematics/component-migration/dropdown/steps/template-imports.d.ts +22 -0
  233. package/schematics/component-migration/dropdown/steps/template-imports.js +12 -0
  234. package/schematics/component-migration/dropdown/steps/template-items.d.ts +7 -0
  235. package/schematics/component-migration/dropdown/steps/template-items.js +58 -0
  236. package/schematics/component-migration/dropdown/steps/template-menu.d.ts +14 -0
  237. package/schematics/component-migration/dropdown/steps/template-menu.js +107 -0
  238. package/schematics/component-migration/dropdown/steps/template-todos.d.ts +19 -0
  239. package/schematics/component-migration/dropdown/steps/template-todos.js +118 -0
  240. package/schematics/component-migration/dropdown/steps/template-toggle.d.ts +9 -0
  241. package/schematics/component-migration/dropdown/steps/template-toggle.js +70 -0
  242. package/schematics/component-migration/dropdown/steps/template-wrapper.d.ts +12 -0
  243. package/schematics/component-migration/dropdown/steps/template-wrapper.js +105 -0
  244. package/schematics/component-migration/index.d.ts +3 -0
  245. package/schematics/component-migration/index.js +26 -0
  246. package/schematics/component-migration/next-steps/index.d.ts +13 -0
  247. package/schematics/component-migration/next-steps/index.js +34 -0
  248. package/schematics/component-migration/registry.d.ts +1 -0
  249. package/schematics/component-migration/registry.js +15 -0
  250. package/schematics/component-migration/schema.json +20 -0
  251. package/schematics/component-migration/shared/ai-handoff.d.ts +2 -0
  252. package/schematics/component-migration/shared/ai-handoff.js +28 -0
  253. package/schematics/component-migration/shared/angular-component.d.ts +10 -0
  254. package/schematics/component-migration/shared/angular-component.js +125 -0
  255. package/schematics/component-migration/shared/button-visual-classes.d.ts +24 -0
  256. package/schematics/component-migration/shared/button-visual-classes.js +111 -0
  257. package/schematics/component-migration/shared/component-context.d.ts +7 -0
  258. package/schematics/component-migration/shared/component-context.js +24 -0
  259. package/schematics/component-migration/shared/component-imports.d.ts +45 -0
  260. package/schematics/component-migration/shared/component-imports.js +380 -0
  261. package/schematics/component-migration/shared/create-component-schematic.d.ts +3 -0
  262. package/schematics/component-migration/shared/create-component-schematic.js +55 -0
  263. package/schematics/component-migration/shared/import-edits.d.ts +11 -0
  264. package/schematics/component-migration/shared/import-edits.js +157 -0
  265. package/schematics/component-migration/shared/legacy-config-todos.d.ts +3 -0
  266. package/schematics/component-migration/shared/legacy-config-todos.js +90 -0
  267. package/schematics/component-migration/shared/migrate-project.d.ts +12 -0
  268. package/schematics/component-migration/shared/migrate-project.js +151 -0
  269. package/schematics/component-migration/shared/project-templates.d.ts +15 -0
  270. package/schematics/component-migration/shared/project-templates.js +43 -0
  271. package/schematics/component-migration/shared/scan-project.d.ts +3 -0
  272. package/schematics/component-migration/shared/scan-project.js +24 -0
  273. package/schematics/component-migration/shared/static-placement.d.ts +1 -0
  274. package/schematics/component-migration/shared/static-placement.js +45 -0
  275. package/schematics/component-migration/shared/template-edits.d.ts +28 -0
  276. package/schematics/component-migration/shared/template-edits.js +153 -0
  277. package/schematics/component-migration/shared/template-result.d.ts +3 -0
  278. package/schematics/component-migration/shared/template-result.js +11 -0
  279. package/schematics/component-migration/shared/testing.d.ts +13 -0
  280. package/schematics/component-migration/shared/testing.js +59 -0
  281. package/schematics/component-migration/shared/todo-comments.d.ts +10 -0
  282. package/schematics/component-migration/shared/todo-comments.js +81 -0
  283. package/schematics/component-migration/shared/types.d.ts +41 -0
  284. package/schematics/component-migration/shared/types.js +2 -0
  285. package/schematics/component-migration/tooltip/guide.md +196 -0
  286. package/schematics/component-migration/tooltip/index.d.ts +2 -0
  287. package/schematics/component-migration/tooltip/index.js +5 -0
  288. package/schematics/component-migration/tooltip/migration.d.ts +2 -0
  289. package/schematics/component-migration/tooltip/migration.js +50 -0
  290. package/schematics/component-migration/tooltip/schema.json +25 -0
  291. package/schematics/component-migration/tooltip/steps/template-attributes.d.ts +13 -0
  292. package/schematics/component-migration/tooltip/steps/template-attributes.js +266 -0
  293. package/schematics/component-migration/tooltip/steps/template-todos.d.ts +24 -0
  294. package/schematics/component-migration/tooltip/steps/template-todos.js +115 -0
  295. package/schematics/component-migration/tooltip/steps/tooltip-imports.d.ts +3 -0
  296. package/schematics/component-migration/tooltip/steps/tooltip-imports.js +79 -0
  297. package/schematics/component-migration/utils/component-resource-collector.d.ts +34 -0
  298. package/schematics/component-migration/utils/component-resource-collector.js +107 -0
  299. package/schematics/component-migration/utils/project_tsconfig_paths.d.ts +18 -0
  300. package/schematics/component-migration/utils/project_tsconfig_paths.js +105 -0
  301. package/schematics/component-migration/utils/typescript/compiler_host.d.ts +44 -0
  302. package/schematics/component-migration/utils/typescript/compiler_host.js +87 -0
  303. package/schematics/component-migration/utils/typescript/decorators.d.ts +22 -0
  304. package/schematics/component-migration/utils/typescript/decorators.js +41 -0
  305. package/schematics/component-migration/utils/typescript/functions.d.ts +14 -0
  306. package/schematics/component-migration/utils/typescript/functions.js +20 -0
  307. package/schematics/component-migration/utils/typescript/imports.d.ts +17 -0
  308. package/schematics/component-migration/utils/typescript/imports.js +110 -0
  309. package/schematics/component-migration/utils/typescript/parse_tsconfig.d.ts +9 -0
  310. package/schematics/component-migration/utils/typescript/parse_tsconfig.js +29 -0
  311. package/schematics/component-migration/utils/typescript/property-name.d.ts +13 -0
  312. package/schematics/component-migration/utils/typescript/property-name.js +22 -0
  313. package/schematics/package.json +3 -0
  314. package/types/design-factory-angular-accordion.d.ts +553 -0
  315. package/types/design-factory-angular-alert.d.ts +166 -0
  316. package/types/design-factory-angular-breakpoints.d.ts +13 -0
  317. package/types/design-factory-angular-button.d.ts +166 -0
  318. package/types/design-factory-angular-buttongroup.d.ts +45 -0
  319. package/types/design-factory-angular-drawer.d.ts +19 -26
  320. package/types/design-factory-angular-dropdown.d.ts +148 -0
  321. package/types/design-factory-angular-form-field.d.ts +122 -0
  322. package/types/design-factory-angular-icon.d.ts +11 -0
  323. package/types/design-factory-angular-input.d.ts +16 -0
  324. package/types/design-factory-angular-internals.d.ts +78 -19
  325. package/types/design-factory-angular-separator.d.ts +29 -0
  326. package/types/design-factory-angular-sidenav.d.ts +114 -17
  327. package/types/design-factory-angular-slider.d.ts +239 -0
  328. package/types/design-factory-angular-toggle.d.ts +93 -0
  329. package/types/design-factory-angular-tooltip.d.ts +113 -0
  330. package/types/design-factory-angular-topnav.d.ts +47 -52
  331. package/drawer/README.md +0 -54
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.editDropdownWrapper = editDropdownWrapper;
4
+ exports.countDropdownWrapperUsage = countDropdownWrapperUsage;
5
+ const template_items_1 = require("./template-items");
6
+ const template_menu_1 = require("./template-menu");
7
+ const template_toggle_1 = require("./template-toggle");
8
+ const template_todos_1 = require("./template-todos");
9
+ const template_helpers_1 = require("./template-helpers");
10
+ const template_wrapper_1 = require("./template-wrapper");
11
+ function editDropdownWrapper(wrapper, context, edits) {
12
+ const descendants = (0, template_helpers_1.getDescendantElements)(wrapper);
13
+ const toggles = descendants.filter(template_helpers_1.hasNgbDropdownToggle);
14
+ const menus = descendants.filter(template_helpers_1.hasNgbDropdownMenu);
15
+ const [menu] = menus;
16
+ const hasAnchor = descendants.some(template_helpers_1.hasNgbDropdownAnchor);
17
+ const split = toggles.some((toggle) => (0, template_toggle_1.hasSplitPattern)(toggle, wrapper));
18
+ const nestedDropdown = descendants.some(template_helpers_1.hasNgbDropdown);
19
+ const wrapperTodos = (0, template_wrapper_1.getUnsupportedWrapperTodos)(wrapper);
20
+ const hasDatepickerMenu = !!menu && (0, template_menu_1.hasDatepickerMenuContent)(menu);
21
+ const unsupportedMenu = !!menu && !(0, template_menu_1.hasEmptyMenuContent)(menu) && !(0, template_menu_1.hasRichMenuContent)(menu) && !(0, template_items_1.hasMigratableMenuContent)(menu);
22
+ const unsupportedStructure = toggles.length !== 1 ||
23
+ menus.length !== 1 ||
24
+ hasAnchor ||
25
+ split ||
26
+ nestedDropdown ||
27
+ hasDatepickerMenu ||
28
+ unsupportedMenu;
29
+ if (unsupportedStructure) {
30
+ (0, template_todos_1.editDropdownTemplateTodos)(wrapper, edits, {
31
+ ...wrapperTodos,
32
+ ...(menu ? (0, template_menu_1.getMenuTodoContext)(menu) : {}),
33
+ structure: unsupportedStructure,
34
+ anchor: hasAnchor,
35
+ split,
36
+ datepicker: hasDatepickerMenu
37
+ });
38
+ return { migrated: false, standaloneImports: [] };
39
+ }
40
+ const [toggle] = toggles;
41
+ const referenceName = (0, template_wrapper_1.getDropdownReferenceName)(wrapper, context);
42
+ const standaloneImports = [];
43
+ const toggleResult = (0, template_toggle_1.editToggle)(toggle, referenceName, edits);
44
+ const movedWrapperAttributes = (0, template_wrapper_1.getMovedWrapperAttributes)(wrapper, menu);
45
+ const menuResult = (0, template_menu_1.editMenu)(menu, referenceName, movedWrapperAttributes, edits);
46
+ standaloneImports.push(...toggleResult.imports, ...menuResult.imports);
47
+ (0, template_wrapper_1.editWrapper)(wrapper, edits);
48
+ (0, template_todos_1.editDropdownTemplateTodos)(wrapper, edits, {
49
+ ...wrapperTodos,
50
+ ...menuResult.todos,
51
+ migrated: true
52
+ });
53
+ return { migrated: true, standaloneImports };
54
+ }
55
+ function countDropdownWrapperUsage(element) {
56
+ return (0, template_helpers_1.hasNgbDropdown)(element);
57
+ }
@@ -0,0 +1,20 @@
1
+ import { TmplAstBoundAttribute, TmplAstBoundEvent, TmplAstElement, TmplAstReference, TmplAstTextAttribute } from '@angular/compiler';
2
+ import { TemplateEdit } from '../../shared/template-edits';
3
+ export type DropdownAttribute = TmplAstTextAttribute | TmplAstBoundAttribute;
4
+ export type DropdownEditableNode = DropdownAttribute | TmplAstBoundEvent | TmplAstReference;
5
+ export declare function getDescendantElements(element: TmplAstElement): TmplAstElement[];
6
+ export declare function renameAttribute(attribute: DropdownEditableNode, name: string, edits: TemplateEdit[]): void;
7
+ export declare function removeAttribute(attribute: DropdownEditableNode): TemplateEdit;
8
+ export declare function getAttributeValue(attribute: DropdownAttribute | undefined): string;
9
+ export declare function getEventValue(event: TmplAstBoundEvent | undefined): string;
10
+ export declare function insertStartTagAttributes(element: TmplAstElement, attributes: string[], edits: TemplateEdit[]): void;
11
+ export declare function editStartTagName(element: TmplAstElement, tagName: string, edits: TemplateEdit[]): void;
12
+ export declare function editEndTagName(element: TmplAstElement, tagName: string, edits: TemplateEdit[]): void;
13
+ export declare function editStaticClassTokens(element: TmplAstElement, removableClasses: Set<string>, edits: TemplateEdit[]): void;
14
+ export declare function hasAttributeOrInput(element: TmplAstElement, name: string): boolean;
15
+ export declare function getDropdownAttribute(element: TmplAstElement, name: string): DropdownAttribute | undefined;
16
+ export declare function hasNgbDropdown(element: TmplAstElement): boolean;
17
+ export declare function hasNgbDropdownToggle(element: TmplAstElement): boolean;
18
+ export declare function hasNgbDropdownMenu(element: TmplAstElement): boolean;
19
+ export declare function hasNgbDropdownItem(element: TmplAstElement): boolean;
20
+ export declare function hasNgbDropdownAnchor(element: TmplAstElement): boolean;
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDescendantElements = getDescendantElements;
4
+ exports.renameAttribute = renameAttribute;
5
+ exports.removeAttribute = removeAttribute;
6
+ exports.getAttributeValue = getAttributeValue;
7
+ exports.getEventValue = getEventValue;
8
+ exports.insertStartTagAttributes = insertStartTagAttributes;
9
+ exports.editStartTagName = editStartTagName;
10
+ exports.editEndTagName = editEndTagName;
11
+ exports.editStaticClassTokens = editStaticClassTokens;
12
+ exports.hasAttributeOrInput = hasAttributeOrInput;
13
+ exports.getDropdownAttribute = getDropdownAttribute;
14
+ exports.hasNgbDropdown = hasNgbDropdown;
15
+ exports.hasNgbDropdownToggle = hasNgbDropdownToggle;
16
+ exports.hasNgbDropdownMenu = hasNgbDropdownMenu;
17
+ exports.hasNgbDropdownItem = hasNgbDropdownItem;
18
+ exports.hasNgbDropdownAnchor = hasNgbDropdownAnchor;
19
+ const compiler_1 = require("@angular/compiler");
20
+ const template_edits_1 = require("../../shared/template-edits");
21
+ function getDescendantElements(element) {
22
+ const descendants = [];
23
+ (0, template_edits_1.visitTemplateNodes)(element.children, (node) => {
24
+ if (node instanceof compiler_1.TmplAstElement) {
25
+ descendants.push(node);
26
+ }
27
+ });
28
+ return descendants;
29
+ }
30
+ function getAttributeKeySpan(attribute) {
31
+ return attribute.keySpan ?? attribute.sourceSpan;
32
+ }
33
+ function renameAttribute(attribute, name, edits) {
34
+ const keySpan = getAttributeKeySpan(attribute);
35
+ edits.push({
36
+ start: keySpan.start.offset,
37
+ end: keySpan.end.offset,
38
+ text: name
39
+ });
40
+ }
41
+ function removeAttribute(attribute) {
42
+ const content = attribute.sourceSpan.start.file.content;
43
+ const start = attribute.sourceSpan.start.offset;
44
+ return {
45
+ start: /\s/.test(content[start - 1] ?? '') ? start - 1 : start,
46
+ end: attribute.sourceSpan.end.offset,
47
+ text: ''
48
+ };
49
+ }
50
+ function getAttributeValue(attribute) {
51
+ return (attribute?.valueSpan?.toString().trim() ?? (typeof attribute?.value === 'string' ? attribute.value.trim() : ''));
52
+ }
53
+ function getEventValue(event) {
54
+ return (event?.handler?.source ?? '').trim();
55
+ }
56
+ function insertStartTagAttributes(element, attributes, edits) {
57
+ if (attributes.length === 0) {
58
+ return;
59
+ }
60
+ const offset = (0, template_edits_1.getStartTagInsertOffset)(element);
61
+ edits.push({
62
+ start: offset,
63
+ end: offset,
64
+ text: ` ${attributes.join(' ')}`
65
+ });
66
+ }
67
+ function editStartTagName(element, tagName, edits) {
68
+ const start = element.startSourceSpan.start.offset + 1;
69
+ edits.push({
70
+ start,
71
+ end: start + element.name.length,
72
+ text: tagName
73
+ });
74
+ }
75
+ function editEndTagName(element, tagName, edits) {
76
+ if (!element.endSourceSpan) {
77
+ return;
78
+ }
79
+ const start = element.endSourceSpan.start.offset + 2;
80
+ edits.push({
81
+ start,
82
+ end: start + element.name.length,
83
+ text: tagName
84
+ });
85
+ }
86
+ function editStaticClassTokens(element, removableClasses, edits) {
87
+ const classAttribute = (0, template_edits_1.findTextAttribute)(element, 'class');
88
+ if (!classAttribute) {
89
+ return;
90
+ }
91
+ const remainingClasses = classAttribute.value
92
+ .split(/\s+/)
93
+ .filter((className) => className && !removableClasses.has(className));
94
+ if (remainingClasses.length === 0) {
95
+ edits.push((0, template_edits_1.removeTextAttribute)(classAttribute));
96
+ }
97
+ else if (classAttribute.valueSpan) {
98
+ edits.push({
99
+ start: classAttribute.valueSpan.start.offset,
100
+ end: classAttribute.valueSpan.end.offset,
101
+ text: remainingClasses.join(' ')
102
+ });
103
+ }
104
+ }
105
+ function hasAttributeOrInput(element, name) {
106
+ return !!(0, template_edits_1.findTextAttribute)(element, name) || !!(0, template_edits_1.findBoundAttribute)(element, name);
107
+ }
108
+ function getDropdownAttribute(element, name) {
109
+ return (0, template_edits_1.findTextAttribute)(element, name) ?? (0, template_edits_1.findBoundAttribute)(element, name);
110
+ }
111
+ function hasNgbDropdown(element) {
112
+ return hasAttributeOrInput(element, 'ngbDropdown');
113
+ }
114
+ function hasNgbDropdownToggle(element) {
115
+ return hasAttributeOrInput(element, 'ngbDropdownToggle') || hasAttributeOrInput(element, 'dropdownToggle');
116
+ }
117
+ function hasNgbDropdownMenu(element) {
118
+ return hasAttributeOrInput(element, 'ngbDropdownMenu');
119
+ }
120
+ function hasNgbDropdownItem(element) {
121
+ return hasAttributeOrInput(element, 'ngbDropdownItem');
122
+ }
123
+ function hasNgbDropdownAnchor(element) {
124
+ return hasAttributeOrInput(element, 'ngbDropdownAnchor');
125
+ }
@@ -0,0 +1,22 @@
1
+ export declare const DROPDOWN_IMPORTS: {
2
+ dropdown: {
3
+ moduleName: string;
4
+ symbolName: string;
5
+ };
6
+ toggle: {
7
+ moduleName: string;
8
+ symbolName: string;
9
+ };
10
+ itemButton: {
11
+ moduleName: string;
12
+ symbolName: string;
13
+ };
14
+ itemLink: {
15
+ moduleName: string;
16
+ symbolName: string;
17
+ };
18
+ separator: {
19
+ moduleName: string;
20
+ symbolName: string;
21
+ };
22
+ };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DROPDOWN_IMPORTS = void 0;
4
+ const DROPDOWN_IMPORT_MODULE = '@design-factory/angular/dropdown';
5
+ const SEPARATOR_IMPORT_MODULE = '@design-factory/angular/separator';
6
+ exports.DROPDOWN_IMPORTS = {
7
+ dropdown: { moduleName: DROPDOWN_IMPORT_MODULE, symbolName: 'DfDropdown' },
8
+ toggle: { moduleName: DROPDOWN_IMPORT_MODULE, symbolName: 'DfDropdownToggle' },
9
+ itemButton: { moduleName: DROPDOWN_IMPORT_MODULE, symbolName: 'DfDropdownItemButton' },
10
+ itemLink: { moduleName: DROPDOWN_IMPORT_MODULE, symbolName: 'DfDropdownItemLink' },
11
+ separator: { moduleName: SEPARATOR_IMPORT_MODULE, symbolName: 'DfSeparator' }
12
+ };
@@ -0,0 +1,7 @@
1
+ import { TmplAstElement } from '@angular/compiler';
2
+ import { TemplateEdit } from '../../shared/template-edits';
3
+ import { StandaloneImportRequirement } from '../../shared/types';
4
+ export declare function isSimpleDivider(element: TmplAstElement): boolean;
5
+ export declare function hasMigratableMenuContent(menu: TmplAstElement): boolean;
6
+ export declare function editDropdownItem(element: TmplAstElement, edits: TemplateEdit[]): StandaloneImportRequirement[];
7
+ export declare function editDivider(element: TmplAstElement, edits: TemplateEdit[]): StandaloneImportRequirement[];
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSimpleDivider = isSimpleDivider;
4
+ exports.hasMigratableMenuContent = hasMigratableMenuContent;
5
+ exports.editDropdownItem = editDropdownItem;
6
+ exports.editDivider = editDivider;
7
+ const compiler_1 = require("@angular/compiler");
8
+ const template_edits_1 = require("../../shared/template-edits");
9
+ const template_imports_1 = require("./template-imports");
10
+ const template_todos_1 = require("./template-todos");
11
+ const template_helpers_1 = require("./template-helpers");
12
+ function getClassBinding(element, name) {
13
+ return element.inputs.find((input) => input.type === compiler_1.BindingType.Class && input.name === name);
14
+ }
15
+ function isWhitespaceTextNode(node) {
16
+ return node instanceof compiler_1.TmplAstText && node.value.trim() === '';
17
+ }
18
+ function isSimpleDivider(element) {
19
+ return (element.name === 'hr' &&
20
+ (0, template_edits_1.getStaticClassTokens)(element).includes('dropdown-divider') &&
21
+ element.inputs.length === 0 &&
22
+ element.outputs.length === 0 &&
23
+ element.references.length === 0 &&
24
+ element.attributes.every((attribute) => attribute.name === 'class') &&
25
+ element.children.every(isWhitespaceTextNode));
26
+ }
27
+ function hasMigratableMenuContent(menu) {
28
+ return (0, template_helpers_1.getDescendantElements)(menu).some((element) => (0, template_helpers_1.hasNgbDropdownItem)(element) || isSimpleDivider(element));
29
+ }
30
+ function editDropdownItem(element, edits) {
31
+ const item = (0, template_helpers_1.getDropdownAttribute)(element, 'ngbDropdownItem');
32
+ if (!item) {
33
+ return [];
34
+ }
35
+ if (element.name !== 'button' && element.name !== 'a') {
36
+ (0, template_todos_1.editDropdownTemplateTodos)(element, edits, { unsupportedItemHost: true });
37
+ return [];
38
+ }
39
+ (0, template_helpers_1.renameAttribute)(item, 'dfDropdownItem', edits);
40
+ const removableClasses = new Set(['dropdown-item']);
41
+ if ((0, template_edits_1.getStaticClassTokens)(element).includes('active') && !(0, template_helpers_1.hasAttributeOrInput)(element, 'active')) {
42
+ removableClasses.add('active');
43
+ (0, template_helpers_1.insertStartTagAttributes)(element, ['active'], edits);
44
+ }
45
+ (0, template_helpers_1.editStaticClassTokens)(element, removableClasses, edits);
46
+ const activeBinding = getClassBinding(element, 'active');
47
+ if (activeBinding) {
48
+ (0, template_helpers_1.renameAttribute)(activeBinding, 'active', edits);
49
+ }
50
+ return [element.name === 'button' ? template_imports_1.DROPDOWN_IMPORTS.itemButton : template_imports_1.DROPDOWN_IMPORTS.itemLink];
51
+ }
52
+ function editDivider(element, edits) {
53
+ if (!isSimpleDivider(element)) {
54
+ return [];
55
+ }
56
+ edits.push((0, template_edits_1.replaceElement)(element, '<df-separator />'));
57
+ return [template_imports_1.DROPDOWN_IMPORTS.separator];
58
+ }
@@ -0,0 +1,14 @@
1
+ import { TmplAstElement } from '@angular/compiler';
2
+ import { TemplateEdit } from '../../shared/template-edits';
3
+ import { StandaloneImportRequirement } from '../../shared/types';
4
+ import { DropdownTemplateTodoContext } from './template-todos';
5
+ export declare function getMenuSize(menu: TmplAstElement): 'sm' | 'lg' | null;
6
+ export declare function getMenuClassPlacement(menu: TmplAstElement): string | null;
7
+ export declare function hasRichMenuContent(menu: TmplAstElement): boolean;
8
+ export declare function hasEmptyMenuContent(menu: TmplAstElement): boolean;
9
+ export declare function hasDatepickerMenuContent(menu: TmplAstElement): boolean;
10
+ export declare function getMenuTodoContext(menu: TmplAstElement): DropdownTemplateTodoContext;
11
+ export declare function editMenu(menu: TmplAstElement, referenceName: string, movedWrapperAttributes: string[], edits: TemplateEdit[]): {
12
+ todos: DropdownTemplateTodoContext;
13
+ imports: StandaloneImportRequirement[];
14
+ };
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMenuSize = getMenuSize;
4
+ exports.getMenuClassPlacement = getMenuClassPlacement;
5
+ exports.hasRichMenuContent = hasRichMenuContent;
6
+ exports.hasEmptyMenuContent = hasEmptyMenuContent;
7
+ exports.hasDatepickerMenuContent = hasDatepickerMenuContent;
8
+ exports.getMenuTodoContext = getMenuTodoContext;
9
+ exports.editMenu = editMenu;
10
+ const compiler_1 = require("@angular/compiler");
11
+ const template_edits_1 = require("../../shared/template-edits");
12
+ const template_imports_1 = require("./template-imports");
13
+ const template_items_1 = require("./template-items");
14
+ const template_helpers_1 = require("./template-helpers");
15
+ const MENU_STANDARD_CLASSES = new Set([
16
+ 'dropdown-menu',
17
+ 'dropdown-menu-right',
18
+ 'dropdown-menu-end',
19
+ 'dropdown-menu-left',
20
+ 'dropdown-menu-start',
21
+ 'df-dropdown-menu-sm',
22
+ 'df-dropdown-menu-lg',
23
+ 'dropdown-menu-sm',
24
+ 'dropdown-menu-lg'
25
+ ]);
26
+ function getMenuSize(menu) {
27
+ const classes = (0, template_edits_1.getStaticClassTokens)(menu);
28
+ const hasSmall = classes.includes('df-dropdown-menu-sm') || classes.includes('dropdown-menu-sm');
29
+ const hasLarge = classes.includes('df-dropdown-menu-lg') || classes.includes('dropdown-menu-lg');
30
+ if (hasSmall === hasLarge) {
31
+ return null;
32
+ }
33
+ return hasSmall ? 'sm' : 'lg';
34
+ }
35
+ function getMenuClassPlacement(menu) {
36
+ const classes = (0, template_edits_1.getStaticClassTokens)(menu);
37
+ if (classes.includes('dropdown-menu-right') || classes.includes('dropdown-menu-end')) {
38
+ return 'bottom-end bottom-start top-end top-start';
39
+ }
40
+ return null;
41
+ }
42
+ function isRichMenuElement(element) {
43
+ return (!(0, template_helpers_1.hasNgbDropdownItem)(element) &&
44
+ !(0, template_items_1.isSimpleDivider)(element) &&
45
+ element.name !== 'ng-container' &&
46
+ element.name !== 'ng-template');
47
+ }
48
+ function hasRichMenuElement(children) {
49
+ return children.some((child) => {
50
+ if (!(child instanceof compiler_1.TmplAstElement)) {
51
+ return false;
52
+ }
53
+ if (child.name === 'ng-container' || child.name === 'ng-template') {
54
+ return hasRichMenuElement(child.children);
55
+ }
56
+ return isRichMenuElement(child);
57
+ });
58
+ }
59
+ function hasRichMenuContent(menu) {
60
+ return hasRichMenuElement(menu.children);
61
+ }
62
+ function isEmptyMenuNode(node) {
63
+ if (node instanceof compiler_1.TmplAstText) {
64
+ return node.value.trim() === '';
65
+ }
66
+ if (node instanceof compiler_1.TmplAstElement) {
67
+ return node.children.every(isEmptyMenuNode);
68
+ }
69
+ return false;
70
+ }
71
+ function hasEmptyMenuContent(menu) {
72
+ return menu.children.every(isEmptyMenuNode);
73
+ }
74
+ function hasDatepickerMenuContent(menu) {
75
+ return (0, template_helpers_1.getDescendantElements)(menu).some((element) => element.name === 'ngb-datepicker' ||
76
+ (0, template_helpers_1.hasAttributeOrInput)(element, 'ngbDatepicker') ||
77
+ element.references.some((reference) => reference.value === 'ngbDatepicker'));
78
+ }
79
+ function getMenuTodoContext(menu) {
80
+ const remainingClasses = (0, template_edits_1.getStaticClassTokens)(menu).filter((className) => !MENU_STANDARD_CLASSES.has(className));
81
+ return {
82
+ customMenuClasses: remainingClasses.length > 0,
83
+ richMenu: hasRichMenuContent(menu)
84
+ };
85
+ }
86
+ function editMenu(menu, referenceName, movedWrapperAttributes, edits) {
87
+ const todos = {};
88
+ const imports = [template_imports_1.DROPDOWN_IMPORTS.dropdown];
89
+ const menuAttribute = (0, template_helpers_1.getDropdownAttribute)(menu, 'ngbDropdownMenu');
90
+ const ariaLabelledby = (0, template_edits_1.findTextAttribute)(menu, 'aria-labelledby') ?? (0, template_edits_1.findBoundAttribute)(menu, 'aria-labelledby');
91
+ (0, template_helpers_1.editStartTagName)(menu, 'df-dropdown', edits);
92
+ (0, template_helpers_1.editEndTagName)(menu, 'df-dropdown', edits);
93
+ if (menuAttribute) {
94
+ edits.push((0, template_helpers_1.removeAttribute)(menuAttribute));
95
+ }
96
+ if (ariaLabelledby) {
97
+ edits.push((0, template_helpers_1.removeAttribute)(ariaLabelledby));
98
+ }
99
+ (0, template_helpers_1.editStaticClassTokens)(menu, MENU_STANDARD_CLASSES, edits);
100
+ (0, template_helpers_1.insertStartTagAttributes)(menu, [`#${referenceName}`, ...movedWrapperAttributes], edits);
101
+ Object.assign(todos, getMenuTodoContext(menu));
102
+ for (const child of (0, template_helpers_1.getDescendantElements)(menu)) {
103
+ imports.push(...(0, template_items_1.editDropdownItem)(child, edits));
104
+ imports.push(...(0, template_items_1.editDivider)(child, edits));
105
+ }
106
+ return { todos, imports };
107
+ }
@@ -0,0 +1,19 @@
1
+ import { TmplAstElement } from '@angular/compiler';
2
+ import { TemplateEdit } from '../../shared/template-edits';
3
+ export interface DropdownTemplateTodoContext {
4
+ migrated?: boolean;
5
+ structure?: boolean;
6
+ dynamicToggleClass?: boolean;
7
+ autoClose?: boolean;
8
+ anchor?: boolean;
9
+ split?: boolean;
10
+ datepicker?: boolean;
11
+ richMenu?: boolean;
12
+ customPositioning?: boolean;
13
+ customMenuClasses?: boolean;
14
+ unsupportedItemHost?: boolean;
15
+ iconOnlyMissingAccessibleName?: boolean;
16
+ btnLinkToggle?: boolean;
17
+ programmaticApi?: boolean;
18
+ }
19
+ export declare function editDropdownTemplateTodos(element: TmplAstElement, edits: TemplateEdit[], context: DropdownTemplateTodoContext): void;
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.editDropdownTemplateTodos = editDropdownTemplateTodos;
4
+ const todo_comments_1 = require("../../shared/todo-comments");
5
+ const DROPDOWN_REVIEW_TODO = {
6
+ code: 'dropdown.review',
7
+ message: 'This dropdown was migrated automatically. Verify behavior and visual appearance.'
8
+ };
9
+ const DROPDOWN_STRUCTURE_TODO = {
10
+ code: 'dropdown.structure',
11
+ marker: 'human',
12
+ message: 'Dropdown was left in legacy markup because it is not a supported one-toggle/one-menu pattern. Check adjacent dropdown TODOs for the unsupported feature.'
13
+ };
14
+ const DROPDOWN_AUTO_CLOSE_TODO = {
15
+ code: 'dropdown.auto-close',
16
+ marker: 'human',
17
+ message: 'Legacy autoClose behavior was not migrated. Verify the old dismissal behavior manually.'
18
+ };
19
+ const DROPDOWN_DYNAMIC_TOGGLE_CLASS_TODO = {
20
+ code: 'dropdown.dynamic-toggle-class',
21
+ message: 'Dynamic dropdown toggle classes were not migrated. Check whether they still target legacy button classes.'
22
+ };
23
+ const DROPDOWN_ANCHOR_TODO = {
24
+ code: 'dropdown.anchor',
25
+ marker: 'human',
26
+ message: 'ngbDropdownAnchor is not supported by the new dropdown API. Rebuild the anchor/toggle relationship manually with a supported toggle or another overlay component.'
27
+ };
28
+ const DROPDOWN_SPLIT_TODO = {
29
+ code: 'dropdown.split',
30
+ marker: 'human',
31
+ message: 'Split dropdown button structure was not migrated. Rebuild the split button manually.'
32
+ };
33
+ const DROPDOWN_RICH_MENU_TODO = {
34
+ code: 'dropdown.rich-menu',
35
+ marker: 'human',
36
+ message: 'Dropdown menu contains non-item content. This is not supported by the new dropdown API and will not be supported in future versions. Rebuild it with supported dropdown items or another overlay component.'
37
+ };
38
+ const DROPDOWN_DATEPICKER_TODO = {
39
+ code: 'dropdown.datepicker',
40
+ marker: 'human',
41
+ message: 'Dropdown menu contains an ng-bootstrap datepicker. Datepicker-in-dropdown content is not supported by the new dropdown API. Rebuild it with a datepicker component or another dedicated overlay.'
42
+ };
43
+ const DROPDOWN_CUSTOM_POSITIONING_TODO = {
44
+ code: 'dropdown.custom-positioning',
45
+ marker: 'human',
46
+ message: 'Legacy dropdown positioning configuration was not fully migrated. Verify placement and overlay behavior.'
47
+ };
48
+ const DROPDOWN_CUSTOM_MENU_CLASSES_TODO = {
49
+ code: 'dropdown.custom-menu-classes',
50
+ marker: 'human',
51
+ message: 'Dropdown menu has custom classes. Verify whether the styling still applies to the new overlay.'
52
+ };
53
+ const DROPDOWN_UNSUPPORTED_ITEM_HOST_TODO = {
54
+ code: 'dropdown.unsupported-item-host',
55
+ marker: 'human',
56
+ message: 'ngbDropdownItem is used on an unsupported host. Convert it to a button or link manually.'
57
+ };
58
+ const DROPDOWN_ICON_ONLY_ACCESSIBLE_NAME_TODO = {
59
+ code: 'dropdown.icon-only-accessible-name',
60
+ marker: 'human',
61
+ message: 'Icon-only dropdown toggle needs an accessible name.'
62
+ };
63
+ const DROPDOWN_BTN_LINK_TOGGLE_TODO = {
64
+ code: 'dropdown.btn-link-toggle',
65
+ marker: 'human',
66
+ message: 'btn-link dropdown toggle styling has no direct deterministic visual migration. Verify manually.'
67
+ };
68
+ const DROPDOWN_PROGRAMMATIC_API_TODO = {
69
+ code: 'dropdown.programmatic-api',
70
+ marker: 'human',
71
+ message: 'Programmatic NgbDropdown API usage was not migrated. Replace open, close, toggle, isOpen, ViewChild, ViewChildren, and template-reference usage with the new API manually.'
72
+ };
73
+ function editDropdownTemplateTodos(element, edits, context) {
74
+ const todos = [];
75
+ if (context.migrated) {
76
+ todos.push(DROPDOWN_REVIEW_TODO);
77
+ }
78
+ if (context.structure) {
79
+ todos.push(DROPDOWN_STRUCTURE_TODO);
80
+ }
81
+ if (context.dynamicToggleClass) {
82
+ todos.push(DROPDOWN_DYNAMIC_TOGGLE_CLASS_TODO);
83
+ }
84
+ if (context.autoClose) {
85
+ todos.push(DROPDOWN_AUTO_CLOSE_TODO);
86
+ }
87
+ if (context.anchor) {
88
+ todos.push(DROPDOWN_ANCHOR_TODO);
89
+ }
90
+ if (context.split) {
91
+ todos.push(DROPDOWN_SPLIT_TODO);
92
+ }
93
+ if (context.datepicker) {
94
+ todos.push(DROPDOWN_DATEPICKER_TODO);
95
+ }
96
+ if (context.richMenu) {
97
+ todos.push(DROPDOWN_RICH_MENU_TODO);
98
+ }
99
+ if (context.customPositioning) {
100
+ todos.push(DROPDOWN_CUSTOM_POSITIONING_TODO);
101
+ }
102
+ if (context.customMenuClasses) {
103
+ todos.push(DROPDOWN_CUSTOM_MENU_CLASSES_TODO);
104
+ }
105
+ if (context.unsupportedItemHost) {
106
+ todos.push(DROPDOWN_UNSUPPORTED_ITEM_HOST_TODO);
107
+ }
108
+ if (context.iconOnlyMissingAccessibleName) {
109
+ todos.push(DROPDOWN_ICON_ONLY_ACCESSIBLE_NAME_TODO);
110
+ }
111
+ if (context.btnLinkToggle) {
112
+ todos.push(DROPDOWN_BTN_LINK_TOGGLE_TODO);
113
+ }
114
+ if (context.programmaticApi) {
115
+ todos.push(DROPDOWN_PROGRAMMATIC_API_TODO);
116
+ }
117
+ (0, todo_comments_1.editTemplateTodos)(element, todos, edits);
118
+ }
@@ -0,0 +1,9 @@
1
+ import { TmplAstElement } from '@angular/compiler';
2
+ import { TemplateEdit } from '../../shared/template-edits';
3
+ import { StandaloneImportRequirement } from '../../shared/types';
4
+ import { DropdownTemplateTodoContext } from './template-todos';
5
+ export declare function hasSplitPattern(toggle: TmplAstElement, wrapper: TmplAstElement): boolean;
6
+ export declare function editToggle(toggle: TmplAstElement, referenceName: string, edits: TemplateEdit[]): {
7
+ todos: DropdownTemplateTodoContext;
8
+ imports: StandaloneImportRequirement[];
9
+ };
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasSplitPattern = hasSplitPattern;
4
+ exports.editToggle = editToggle;
5
+ const compiler_1 = require("@angular/compiler");
6
+ const template_edits_1 = require("../../shared/template-edits");
7
+ const button_visual_classes_1 = require("../../shared/button-visual-classes");
8
+ const template_imports_1 = require("./template-imports");
9
+ const template_todos_1 = require("./template-todos");
10
+ const template_helpers_1 = require("./template-helpers");
11
+ function hasTemplateTextContent(node) {
12
+ if (node instanceof compiler_1.TmplAstText) {
13
+ return node.value.trim() !== '';
14
+ }
15
+ if (node instanceof compiler_1.TmplAstBoundText) {
16
+ return node.sourceSpan.toString().trim() !== '';
17
+ }
18
+ const nodeWithChildren = node;
19
+ return nodeWithChildren.children?.some(hasTemplateTextContent) ?? false;
20
+ }
21
+ function hasIconOnlyAccessibleName(element) {
22
+ return (element.attributes.some((attribute) => ['aria-label', 'aria-labelledby', 'prefixAriaLabelledby'].includes(attribute.name) &&
23
+ attribute.value.trim() !== '') ||
24
+ element.inputs.some((input) => ['aria-label', 'aria-labelledby', 'prefixAriaLabelledby'].includes(input.name)) ||
25
+ hasTemplateTextContent(element));
26
+ }
27
+ function hasDynamicLegacyToggleClassBinding(element) {
28
+ return element.inputs.some((input) => input.type === compiler_1.BindingType.Class && button_visual_classes_1.BUTTON_DYNAMIC_VISUAL_CLASSES.has(input.name));
29
+ }
30
+ function hasGenericDynamicClassBinding(element) {
31
+ return (!!(0, template_edits_1.findTextAttribute)(element, 'ngClass') ||
32
+ element.inputs.some((input) => input.name === 'ngClass' || input.name === 'class'));
33
+ }
34
+ function hasSplitPattern(toggle, wrapper) {
35
+ return [...(0, template_edits_1.getStaticClassTokens)(toggle), ...(0, template_edits_1.getStaticClassTokens)(wrapper)].some((className) => ['dropdown-toggle-split', 'df-dropdown-split', 'btn-group'].includes(className));
36
+ }
37
+ function editToggle(toggle, referenceName, edits) {
38
+ const todos = {};
39
+ const toggleAttribute = (0, template_helpers_1.getDropdownAttribute)(toggle, 'ngbDropdownToggle') ?? (0, template_helpers_1.getDropdownAttribute)(toggle, 'dropdownToggle');
40
+ const migratedButtonAttribute = (0, template_edits_1.findTextAttribute)(toggle, 'dfButton');
41
+ const classes = (0, template_edits_1.getStaticClassTokens)(toggle);
42
+ const visual = (0, button_visual_classes_1.getStaticButtonVisual)(classes);
43
+ const attributes = [`[dfDropdownToggle]="${referenceName}"`];
44
+ if (toggleAttribute) {
45
+ edits.push((0, template_helpers_1.removeAttribute)(toggleAttribute));
46
+ }
47
+ if (migratedButtonAttribute) {
48
+ edits.push((0, template_helpers_1.removeAttribute)(migratedButtonAttribute));
49
+ }
50
+ if (visual) {
51
+ attributes.push(...(0, button_visual_classes_1.getButtonVisualAttributes)(visual, { includeIconOnly: true }));
52
+ (0, template_helpers_1.editStaticClassTokens)(toggle, new Set([...(0, button_visual_classes_1.getRemovableButtonVisualClasses)(visual), 'dropdown-toggle']), edits);
53
+ }
54
+ else {
55
+ (0, template_helpers_1.editStaticClassTokens)(toggle, new Set(['dropdown-toggle']), edits);
56
+ }
57
+ if (classes.includes('btn-link')) {
58
+ todos.btnLinkToggle = true;
59
+ }
60
+ if (hasDynamicLegacyToggleClassBinding(toggle) ||
61
+ (classes.includes('btn') && hasGenericDynamicClassBinding(toggle))) {
62
+ todos.dynamicToggleClass = true;
63
+ }
64
+ if ((0, button_visual_classes_1.hasIconOnlyButtonClasses)(classes) && !hasIconOnlyAccessibleName(toggle)) {
65
+ todos.iconOnlyMissingAccessibleName = true;
66
+ }
67
+ (0, template_helpers_1.insertStartTagAttributes)(toggle, attributes, edits);
68
+ (0, template_todos_1.editDropdownTemplateTodos)(toggle, edits, todos);
69
+ return { todos, imports: [template_imports_1.DROPDOWN_IMPORTS.toggle] };
70
+ }
@@ -0,0 +1,12 @@
1
+ import { TmplAstElement } from '@angular/compiler';
2
+ import { TemplateEdit } from '../../shared/template-edits';
3
+ import { DropdownTemplateTodoContext } from './template-todos';
4
+ export interface DropdownTemplateContext {
5
+ usedReferenceNames: Set<string>;
6
+ }
7
+ export declare function getUniqueReferenceName(context: DropdownTemplateContext): string;
8
+ export declare function getProgrammaticReferenceName(element: TmplAstElement): string | null;
9
+ export declare function getDropdownReferenceName(element: TmplAstElement, context: DropdownTemplateContext): string;
10
+ export declare function getMovedWrapperAttributes(wrapper: TmplAstElement, menu: TmplAstElement): string[];
11
+ export declare function editWrapper(wrapper: TmplAstElement, edits: TemplateEdit[]): void;
12
+ export declare function getUnsupportedWrapperTodos(wrapper: TmplAstElement): DropdownTemplateTodoContext;