semmet-angular 0.42.0 → 0.44.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 (218) hide show
  1. package/README.en.md +2 -315
  2. package/README.md +172 -264
  3. package/package.json +2 -2
  4. package/src/accordion/files/__name@dasherize__/__name@dasherize__.css.template +4 -41
  5. package/src/accordion/schema.json +19 -4
  6. package/src/alert/files/__name@dasherize__/__name@dasherize__.css.template +1 -25
  7. package/src/alert/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
  8. package/src/alert/files/__name@dasherize__/__name@dasherize__.ts.template +4 -1
  9. package/src/alert/schema.json +19 -4
  10. package/src/alert-dialog/files/__name@dasherize__/__name@dasherize__.css.template +3 -56
  11. package/src/alert-dialog/files/__name@dasherize__/__name@dasherize__.html.template +6 -6
  12. package/src/alert-dialog/files/__name@dasherize__/__name@dasherize__.ts.template +7 -1
  13. package/src/alert-dialog/schema.json +19 -4
  14. package/src/avatar/files/__name@dasherize__/__name@dasherize__.css.template +17 -0
  15. package/src/avatar/files/__name@dasherize__/__name@dasherize__.html.template +28 -0
  16. package/src/avatar/files/__name@dasherize__/__name@dasherize__.spec.ts.template +27 -0
  17. package/src/avatar/files/__name@dasherize__/__name@dasherize__.ts.template +35 -0
  18. package/src/avatar/index.d.ts +1 -0
  19. package/src/avatar/index.js +6 -0
  20. package/src/avatar/index.js.map +1 -0
  21. package/src/avatar/index.ts +3 -0
  22. package/src/avatar/schema.d.ts +1 -0
  23. package/src/avatar/schema.js +3 -0
  24. package/src/avatar/schema.js.map +1 -0
  25. package/src/avatar/schema.json +44 -0
  26. package/src/avatar/schema.ts +1 -0
  27. package/src/badge/files/__name@dasherize__/__name@dasherize__.css.template +0 -77
  28. package/src/badge/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
  29. package/src/badge/schema.json +19 -4
  30. package/src/block/files/__name@dasherize__/__name@dasherize__.css.template +10 -81
  31. package/src/block/files/__name@dasherize__/__name@dasherize__.html.template +33 -25
  32. package/src/block/files/__name@dasherize__/__name@dasherize__.ts.template +41 -10
  33. package/src/block/schema.json +19 -4
  34. package/src/breadcrumb/files/__name@dasherize__/__name@dasherize__.css.template +2 -23
  35. package/src/breadcrumb/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
  36. package/src/breadcrumb/files/__name@dasherize__/__name@dasherize__.ts.template +9 -5
  37. package/src/breadcrumb/schema.json +19 -4
  38. package/src/button/files/__name@dasherize__/__name@dasherize__.css.template +2 -79
  39. package/src/button/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
  40. package/src/button/schema.json +19 -4
  41. package/src/button-group/files/__name@dasherize__/__name@dasherize__.css.template +2 -70
  42. package/src/button-group/files/__name@dasherize__/__name@dasherize__.ts.template +1 -2
  43. package/src/button-group/schema.json +19 -4
  44. package/src/card/files/__name@dasherize__/__name@dasherize__.css.template +0 -67
  45. package/src/card/files/__name@dasherize__/__name@dasherize__.html.template +10 -55
  46. package/src/card/files/__name@dasherize__/__name@dasherize__.ts.template +2 -45
  47. package/src/card/schema.json +19 -4
  48. package/src/carousel/files/__name@dasherize__/__name@dasherize__.css.template +2 -32
  49. package/src/carousel/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
  50. package/src/carousel/files/__name@dasherize__/__name@dasherize__.ts.template +4 -0
  51. package/src/carousel/schema.json +19 -4
  52. package/src/checkbox/files/__name@dasherize__/__name@dasherize__.css.template +5 -21
  53. package/src/checkbox/schema.json +19 -4
  54. package/src/close-button/files/__name@dasherize__/__name@dasherize__.css.template +9 -47
  55. package/src/close-button/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
  56. package/src/close-button/schema.json +19 -4
  57. package/src/collection.json +21 -1
  58. package/src/combobox/files/__name@dasherize__/__name@dasherize__.css.template +4 -49
  59. package/src/combobox/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  60. package/src/combobox/files/__name@dasherize__/__name@dasherize__.ts.template +11 -8
  61. package/src/combobox/schema.json +19 -4
  62. package/src/dialog/files/__name@dasherize__/__name@dasherize__.css.template +3 -45
  63. package/src/dialog/files/__name@dasherize__/__name@dasherize__.html.template +5 -5
  64. package/src/dialog/files/__name@dasherize__/__name@dasherize__.ts.template +6 -1
  65. package/src/dialog/schema.json +19 -4
  66. package/src/disclosure/files/__name@dasherize__/__name@dasherize__.css.template +4 -36
  67. package/src/disclosure/schema.json +19 -4
  68. package/src/e2e/index.d.ts +2 -0
  69. package/src/e2e/index.js +90 -0
  70. package/src/e2e/index.js.map +1 -0
  71. package/src/e2e/index.ts +106 -0
  72. package/src/e2e/schema.d.ts +2 -0
  73. package/src/e2e/schema.js +3 -0
  74. package/src/e2e/schema.js.map +1 -0
  75. package/src/e2e/schema.json +9 -0
  76. package/src/e2e/schema.ts +1 -0
  77. package/src/form/files/__name@dasherize__/__name@dasherize__.css.template +1 -77
  78. package/src/form/files/__name@dasherize__/__name@dasherize__.html.template +7 -7
  79. package/src/form/files/__name@dasherize__/__name@dasherize__.ts.template +20 -7
  80. package/src/form/schema.json +19 -4
  81. package/src/input/files/__name@dasherize__/__name@dasherize__.css.template +2 -58
  82. package/src/input/schema.json +19 -4
  83. package/src/input-group/files/__name@dasherize__/__name@dasherize__.css.template +2 -68
  84. package/src/input-group/files/__name@dasherize__/__name@dasherize__.html.template +13 -5
  85. package/src/input-group/files/__name@dasherize__/__name@dasherize__.ts.template +21 -6
  86. package/src/input-group/schema.json +19 -4
  87. package/src/landmarks/files/__name@dasherize__/__name@dasherize__.css.template +0 -24
  88. package/src/landmarks/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  89. package/src/landmarks/files/__name@dasherize__/__name@dasherize__.ts.template +5 -2
  90. package/src/landmarks/schema.json +19 -4
  91. package/src/list-group/files/__name@dasherize__/__name@dasherize__.css.template +0 -123
  92. package/src/list-group/files/__name@dasherize__/__name@dasherize__.e2e-spec.ts.template +8 -9
  93. package/src/list-group/files/__name@dasherize__/__name@dasherize__.html.template +13 -47
  94. package/src/list-group/files/__name@dasherize__/__name@dasherize__.spec.ts.template +46 -24
  95. package/src/list-group/files/__name@dasherize__/__name@dasherize__.ts.template +97 -39
  96. package/src/list-group/schema.json +19 -4
  97. package/src/listbox/files/__name@dasherize__/__name@dasherize__.css.template +3 -37
  98. package/src/listbox/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  99. package/src/listbox/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
  100. package/src/listbox/schema.json +19 -4
  101. package/src/menu-button/files/__name@dasherize__/__name@dasherize__.css.template +7 -47
  102. package/src/menu-button/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
  103. package/src/menu-button/files/__name@dasherize__/__name@dasherize__.ts.template +10 -7
  104. package/src/menu-button/schema.json +19 -4
  105. package/src/meter/files/__name@dasherize__/__name@dasherize__.css.template +0 -12
  106. package/src/meter/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  107. package/src/meter/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
  108. package/src/meter/schema.json +19 -4
  109. package/src/navbar/files/__name@dasherize__/__name@dasherize__.css.template +6 -62
  110. package/src/navbar/schema.json +19 -4
  111. package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.css.template +6 -37
  112. package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.html.template +7 -6
  113. package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.ts.template +15 -1
  114. package/src/navigation-menu/schema.json +19 -4
  115. package/src/ng-add/index.d.ts +1 -1
  116. package/src/ng-add/index.js +2 -72
  117. package/src/ng-add/index.js.map +1 -1
  118. package/src/ng-add/index.ts +3 -86
  119. package/src/ng-add/schema.d.ts +0 -1
  120. package/src/ng-add/schema.json +0 -5
  121. package/src/ng-add/schema.ts +0 -1
  122. package/src/offcanvas/files/__name@dasherize__/__name@dasherize__.css.template +3 -70
  123. package/src/offcanvas/schema.json +19 -4
  124. package/src/pagination/files/__name@dasherize__/__name@dasherize__.css.template +2 -33
  125. package/src/pagination/files/__name@dasherize__/__name@dasherize__.html.template +6 -6
  126. package/src/pagination/files/__name@dasherize__/__name@dasherize__.ts.template +7 -1
  127. package/src/pagination/schema.json +19 -4
  128. package/src/popover/files/__name@dasherize__/__name@dasherize__.css.template +8 -69
  129. package/src/popover/schema.json +19 -4
  130. package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.css.template +1 -31
  131. package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
  132. package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
  133. package/src/progress-bar/schema.json +19 -4
  134. package/src/radio-group/files/__name@dasherize__/__name@dasherize__.css.template +4 -31
  135. package/src/radio-group/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  136. package/src/radio-group/files/__name@dasherize__/__name@dasherize__.ts.template +2 -1
  137. package/src/radio-group/schema.json +19 -4
  138. package/src/rating/files/__name@dasherize__/__name@dasherize__.css.template +17 -0
  139. package/src/rating/files/__name@dasherize__/__name@dasherize__.html.template +34 -0
  140. package/src/rating/files/__name@dasherize__/__name@dasherize__.spec.ts.template +38 -0
  141. package/src/rating/files/__name@dasherize__/__name@dasherize__.ts.template +75 -0
  142. package/src/rating/index.d.ts +1 -0
  143. package/src/rating/index.js +6 -0
  144. package/src/rating/index.js.map +1 -0
  145. package/src/rating/index.ts +3 -0
  146. package/src/rating/schema.d.ts +1 -0
  147. package/src/rating/schema.js +3 -0
  148. package/src/rating/schema.js.map +1 -0
  149. package/src/rating/schema.json +44 -0
  150. package/src/rating/schema.ts +1 -0
  151. package/src/select/files/__name@dasherize__/__name@dasherize__.css.template +4 -55
  152. package/src/select/schema.json +19 -4
  153. package/src/skeleton/files/__name@dasherize__/__name@dasherize__.css.template +2 -29
  154. package/src/skeleton/files/__name@dasherize__/__name@dasherize__.ts.template +1 -3
  155. package/src/skeleton/schema.json +19 -4
  156. package/src/skip-link/files/__name@dasherize__/__name@dasherize__.css.template +2 -14
  157. package/src/skip-link/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  158. package/src/skip-link/files/__name@dasherize__/__name@dasherize__.ts.template +5 -2
  159. package/src/skip-link/schema.json +19 -4
  160. package/src/slider/files/__name@dasherize__/__name@dasherize__.css.template +6 -20
  161. package/src/slider/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  162. package/src/slider/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
  163. package/src/slider/schema.json +19 -4
  164. package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.css.template +6 -35
  165. package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
  166. package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
  167. package/src/spinbutton/schema.json +19 -4
  168. package/src/spinner/files/__name@dasherize__/__name@dasherize__.css.template +0 -43
  169. package/src/spinner/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
  170. package/src/spinner/schema.json +19 -4
  171. package/src/steps/files/__name@dasherize__/__name@dasherize__.css.template +36 -0
  172. package/src/steps/files/__name@dasherize__/__name@dasherize__.html.template +44 -0
  173. package/src/steps/files/__name@dasherize__/__name@dasherize__.spec.ts.template +35 -0
  174. package/src/steps/files/__name@dasherize__/__name@dasherize__.ts.template +107 -0
  175. package/src/steps/index.d.ts +1 -0
  176. package/src/steps/index.js +6 -0
  177. package/src/steps/index.js.map +1 -0
  178. package/src/steps/index.ts +3 -0
  179. package/src/steps/schema.d.ts +1 -0
  180. package/src/steps/schema.js +3 -0
  181. package/src/steps/schema.js.map +1 -0
  182. package/src/steps/schema.json +44 -0
  183. package/src/steps/schema.ts +1 -0
  184. package/src/switch/files/__name@dasherize__/__name@dasherize__.css.template +7 -22
  185. package/src/switch/schema.json +19 -4
  186. package/src/table/files/__name@dasherize__/__name@dasherize__.css.template +0 -25
  187. package/src/table/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
  188. package/src/table/files/__name@dasherize__/__name@dasherize__.ts.template +3 -0
  189. package/src/table/schema.json +19 -4
  190. package/src/tabs/files/__name@dasherize__/__name@dasherize__.css.template +5 -44
  191. package/src/tabs/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  192. package/src/tabs/files/__name@dasherize__/__name@dasherize__.ts.template +2 -0
  193. package/src/tabs/schema.json +19 -4
  194. package/src/textarea/files/__name@dasherize__/__name@dasherize__.css.template +2 -59
  195. package/src/textarea/schema.json +19 -4
  196. package/src/toast/files/__name@dasherize__/__name@dasherize__.css.template +1 -35
  197. package/src/toast/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
  198. package/src/toast/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
  199. package/src/toast/schema.json +19 -4
  200. package/src/toolbar/files/__name@dasherize__/__name@dasherize__.css.template +2 -36
  201. package/src/toolbar/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
  202. package/src/toolbar/files/__name@dasherize__/__name@dasherize__.ts.template +11 -8
  203. package/src/toolbar/schema.json +19 -4
  204. package/src/tooltip/files/__name@dasherize__/__name@dasherize__.css.template +1 -32
  205. package/src/tooltip/schema.json +19 -4
  206. package/src/tree-view/files/__name@dasherize__/__name@dasherize__.css.template +5 -27
  207. package/src/tree-view/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
  208. package/src/tree-view/files/__name@dasherize__/__name@dasherize__.ts.template +16 -13
  209. package/src/tree-view/schema.json +19 -4
  210. package/src/utils/generate-component.js +3 -1
  211. package/src/utils/generate-component.js.map +1 -1
  212. package/src/utils/generate-component.ts +3 -1
  213. package/src/utils/generate-composition.js +0 -1
  214. package/src/utils/generate-composition.js.map +1 -1
  215. package/src/utils/generate-composition.ts +0 -1
  216. package/src/utils/schema-types.d.ts +1 -0
  217. package/src/utils/schema-types.ts +1 -0
  218. package/README.pt-BR.md +0 -330
@@ -9,21 +9,36 @@
9
9
  "name": {
10
10
  "type": "string",
11
11
  "description": "The name for the new component. Used to derive the class name, selector, and file names.",
12
- "$default": { "$source": "argv", "index": 0 },
12
+ "$default": {
13
+ "$source": "argv",
14
+ "index": 0
15
+ },
13
16
  "x-prompt": "What name would you like to use for the textarea component?"
14
17
  },
18
+ "e2e": {
19
+ "type": "boolean",
20
+ "default": false,
21
+ "description": "Generate a Playwright e2e spec for this component. Requires Playwright to be installed/configured in the consuming app."
22
+ },
15
23
  "path": {
16
24
  "type": "string",
17
25
  "format": "path",
18
- "$default": { "$source": "workingDirectory" },
26
+ "$default": {
27
+ "$source": "workingDirectory"
28
+ },
19
29
  "description": "The path where the component files should be created, relative to the workspace root. Defaults to the project's source root.",
20
30
  "visible": false
21
31
  },
22
32
  "project": {
23
33
  "type": "string",
24
34
  "description": "The name of the project to add the component to.",
25
- "$default": { "$source": "projectName" }
35
+ "$default": {
36
+ "$source": "projectName"
37
+ }
26
38
  }
27
39
  },
28
- "required": ["name", "project"]
40
+ "required": [
41
+ "name",
42
+ "project"
43
+ ]
29
44
  }
@@ -1,30 +1,10 @@
1
1
  :host {
2
- --semmet-color-on-surface: #18181b;
3
- --semmet-color-inverse-surface: #27272a;
4
- --semmet-color-inverse-on-surface: #ffffff;
5
- --semmet-radius-sm: 8px;
6
- --semmet-space-3xs: 4px;
7
- --semmet-space-2xs: 8px;
8
- --semmet-space-xs: 16px;
9
- --semmet-space-sm: 24px;
10
- --semmet-target-md: 40px;
11
- --semmet-elevation-3: 0 8px 24px rgba(20, 24, 23, 0.18), 0 2px 8px rgba(20, 24, 23, 0.1);
12
- --semmet-motion: 160ms cubic-bezier(0.2, 0, 0, 1);
13
-
14
2
  display: block;
15
- font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
16
- font-size: 0.9375rem;
17
3
  }
18
4
 
19
5
  button {
20
6
  font: inherit;
21
- font-weight: 500;
22
- color: var(--semmet-color-on-surface);
23
7
  background: none;
24
- border: 1px solid currentColor;
25
- border-radius: var(--semmet-radius-sm);
26
- min-height: var(--semmet-target-md);
27
- padding: var(--semmet-space-2xs) var(--semmet-space-xs);
28
8
  cursor: pointer;
29
9
  }
30
10
 
@@ -36,27 +16,13 @@ button:focus-visible {
36
16
  [role='status'] {
37
17
  position: fixed;
38
18
  left: 50%;
39
- bottom: var(--semmet-space-sm);
19
+ bottom: 0;
40
20
  transform: translateX(-50%);
41
21
  display: flex;
42
22
  align-items: center;
43
- gap: var(--semmet-space-xs);
44
- padding: var(--semmet-space-xs);
45
- color: var(--semmet-color-inverse-on-surface);
46
- background: var(--semmet-color-inverse-surface);
47
- border-radius: var(--semmet-radius-sm);
48
- box-shadow: var(--semmet-elevation-3);
49
23
  }
50
24
 
51
25
  [role='status'] button {
52
- font-size: 1.125rem;
53
- line-height: 1;
54
26
  color: inherit;
55
27
  border: none;
56
- padding: var(--semmet-space-3xs) var(--semmet-space-2xs);
57
- transition: background-color var(--semmet-motion);
58
- }
59
-
60
- [role='status'] button:hover {
61
- background: color-mix(in srgb, var(--semmet-color-inverse-on-surface) 20%, transparent);
62
28
  }
@@ -3,13 +3,13 @@
3
3
  Usage from a parent component template:
4
4
  Import <%= classify(name) %> in that parent component.
5
5
 
6
- <<%= selector %> />
6
+ <<%= selector %> triggerLabel="Save" message="Your changes have been saved." />
7
7
  -->
8
- <button type="button" (click)="show()">Save</button>
8
+ <button type="button" (click)="show()">{{ triggerLabel() }}</button>
9
9
 
10
10
  @if (visible()) {
11
11
  <div role="status" [id]="instanceId">
12
- <span>Your changes have been saved.</span>
13
- <button type="button" (click)="dismiss()" aria-label="Dismiss">×</button>
12
+ <span>{{ message() }}</span>
13
+ <button type="button" (click)="dismiss()" [attr.aria-label]="dismissLabel()">×</button>
14
14
  </div>
15
15
  }
@@ -1,4 +1,4 @@
1
- import { Component, DestroyRef, inject, signal } from '@angular/core';
1
+ import { Component, DestroyRef, inject, input, signal } from '@angular/core';
2
2
 
3
3
  const AUTO_DISMISS_MS = 5000;
4
4
 
@@ -16,6 +16,10 @@ export class <%= classify(name) %> {
16
16
  protected readonly instanceId = `<%= dasherize(name) %>-${nextId++}`;
17
17
  protected readonly visible = signal(false);
18
18
 
19
+ readonly triggerLabel = input('Save');
20
+ readonly message = input('Your changes have been saved.');
21
+ readonly dismissLabel = input('Dismiss');
22
+
19
23
  constructor() {
20
24
  inject(DestroyRef).onDestroy(() => clearTimeout(this.dismissTimeout));
21
25
  }
@@ -9,21 +9,36 @@
9
9
  "name": {
10
10
  "type": "string",
11
11
  "description": "The name for the new component. Used to derive the class name, selector, and file names.",
12
- "$default": { "$source": "argv", "index": 0 },
12
+ "$default": {
13
+ "$source": "argv",
14
+ "index": 0
15
+ },
13
16
  "x-prompt": "What name would you like to use for the toast component?"
14
17
  },
18
+ "e2e": {
19
+ "type": "boolean",
20
+ "default": false,
21
+ "description": "Generate a Playwright e2e spec for this component. Requires Playwright to be installed/configured in the consuming app."
22
+ },
15
23
  "path": {
16
24
  "type": "string",
17
25
  "format": "path",
18
- "$default": { "$source": "workingDirectory" },
26
+ "$default": {
27
+ "$source": "workingDirectory"
28
+ },
19
29
  "description": "The path where the component files should be created, relative to the workspace root. Defaults to the project's source root.",
20
30
  "visible": false
21
31
  },
22
32
  "project": {
23
33
  "type": "string",
24
34
  "description": "The name of the project to add the component to.",
25
- "$default": { "$source": "projectName" }
35
+ "$default": {
36
+ "$source": "projectName"
37
+ }
26
38
  }
27
39
  },
28
- "required": ["name", "project"]
40
+ "required": [
41
+ "name",
42
+ "project"
43
+ ]
29
44
  }
@@ -1,53 +1,19 @@
1
1
  :host {
2
- --semmet-color-primary: #18181b;
3
- --semmet-color-on-primary: #ffffff;
4
- --semmet-color-surface: #ffffff;
5
- --semmet-color-outline: #d4d4d8;
6
- --semmet-color-on-surface: #18181b;
7
- --semmet-radius-sm: 8px;
8
- --semmet-space-3xs: 4px;
9
- --semmet-space-2xs: 8px;
10
- --semmet-space-xs: 16px;
11
- --semmet-target-md: 40px;
12
- --semmet-motion: 160ms cubic-bezier(0.2, 0, 0, 1);
13
-
14
2
  display: inline-block;
15
- font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
16
- font-size: 0.9375rem;
17
3
  }
18
4
 
19
5
  [role='toolbar'] {
20
6
  display: inline-flex;
21
- gap: var(--semmet-space-3xs);
22
- padding: var(--semmet-space-3xs);
23
- background: var(--semmet-color-surface);
24
- border: 1px solid var(--semmet-color-outline);
25
- border-radius: var(--semmet-radius-sm);
26
7
  }
27
8
 
28
9
  button {
29
10
  font: inherit;
30
- font-weight: 500;
31
- color: var(--semmet-color-on-surface);
32
11
  background: none;
33
12
  border: none;
34
- border-radius: 6px;
35
- min-height: var(--semmet-target-md);
36
- padding: var(--semmet-space-2xs) var(--semmet-space-xs);
37
13
  cursor: pointer;
38
- transition: background-color var(--semmet-motion), color var(--semmet-motion);
39
- }
40
-
41
- button:hover {
42
- background: color-mix(in srgb, var(--semmet-color-on-surface) 6%, transparent);
43
14
  }
44
15
 
45
16
  button:focus-visible {
46
- outline: 2px solid var(--semmet-color-primary);
47
- outline-offset: -2px;
48
- }
49
-
50
- button[aria-pressed='true'] {
51
- background: var(--semmet-color-primary);
52
- color: var(--semmet-color-on-primary);
17
+ outline: 2px solid currentColor;
18
+ outline-offset: 2px;
53
19
  }
@@ -3,10 +3,10 @@
3
3
  Usage from a parent component template:
4
4
  Import <%= classify(name) %> in that parent component.
5
5
 
6
- <<%= selector %> />
6
+ <<%= selector %> label="Text formatting" [actions]="formattingActions" />
7
7
  -->
8
- <div role="toolbar" aria-label="Text formatting">
9
- @for (action of actions; track action.id; let i = $index) {
8
+ <div role="toolbar" [attr.aria-label]="label()">
9
+ @for (action of actions(); track action.id; let i = $index) {
10
10
  <button
11
11
  #toolbarButton
12
12
  type="button"
@@ -1,10 +1,16 @@
1
- import { Component, ElementRef, signal, viewChildren } from '@angular/core';
1
+ import { Component, ElementRef, input, signal, viewChildren } from '@angular/core';
2
2
 
3
3
  interface <%= classify(name) %>Action {
4
4
  id: number;
5
5
  label: string;
6
6
  }
7
7
 
8
+ const DEFAULT_ACTIONS: readonly <%= classify(name) %>Action[] = [
9
+ { id: 1, label: 'Bold' },
10
+ { id: 2, label: 'Italic' },
11
+ { id: 3, label: 'Underline' },
12
+ ];
13
+
8
14
  @Component({
9
15
  selector: '<%= selector %>',
10
16
  imports: [],
@@ -14,13 +20,10 @@ interface <%= classify(name) %>Action {
14
20
  export class <%= classify(name) %> {
15
21
  private readonly buttons = viewChildren<ElementRef<HTMLButtonElement>>('toolbarButton');
16
22
 
17
- protected readonly actions: <%= classify(name) %>Action[] = [
18
- { id: 1, label: 'Bold' },
19
- { id: 2, label: 'Italic' },
20
- { id: 3, label: 'Underline' },
21
- ];
23
+ readonly label = input('Text formatting');
24
+ readonly actions = input<readonly <%= classify(name) %>Action[]>(DEFAULT_ACTIONS);
22
25
 
23
- protected readonly activeId = signal(this.actions[0].id);
26
+ protected readonly activeId = signal(DEFAULT_ACTIONS[0].id);
24
27
 
25
28
  private readonly pressedIds = signal<ReadonlySet<number>>(new Set());
26
29
 
@@ -65,7 +68,7 @@ export class <%= classify(name) %> {
65
68
  }
66
69
 
67
70
  event.preventDefault();
68
- this.activeId.set(this.actions[nextIndex].id);
71
+ this.activeId.set(this.actions()[nextIndex].id);
69
72
  items[nextIndex].nativeElement.focus();
70
73
  }
71
74
  }
@@ -9,21 +9,36 @@
9
9
  "name": {
10
10
  "type": "string",
11
11
  "description": "The name for the new component. Used to derive the class name, selector, and file names.",
12
- "$default": { "$source": "argv", "index": 0 },
12
+ "$default": {
13
+ "$source": "argv",
14
+ "index": 0
15
+ },
13
16
  "x-prompt": "What name would you like to use for the toolbar component?"
14
17
  },
18
+ "e2e": {
19
+ "type": "boolean",
20
+ "default": false,
21
+ "description": "Generate a Playwright e2e spec for this component. Requires Playwright to be installed/configured in the consuming app."
22
+ },
15
23
  "path": {
16
24
  "type": "string",
17
25
  "format": "path",
18
- "$default": { "$source": "workingDirectory" },
26
+ "$default": {
27
+ "$source": "workingDirectory"
28
+ },
19
29
  "description": "The path where the component files should be created, relative to the workspace root. Defaults to the project's source root.",
20
30
  "visible": false
21
31
  },
22
32
  "project": {
23
33
  "type": "string",
24
34
  "description": "The name of the project to add the component to.",
25
- "$default": { "$source": "projectName" }
35
+ "$default": {
36
+ "$source": "projectName"
37
+ }
26
38
  }
27
39
  },
28
- "required": ["name", "project"]
40
+ "required": [
41
+ "name",
42
+ "project"
43
+ ]
29
44
  }
@@ -1,39 +1,16 @@
1
1
  :host {
2
- --semmet-color-primary: #18181b;
3
- --semmet-color-inverse-surface: #27272a;
4
- --semmet-color-inverse-on-surface: #ffffff;
5
- --semmet-radius-sm: 6px;
6
- --semmet-space-2xs: 8px;
7
- --semmet-space-xs: 16px;
8
- --semmet-target-md: 40px;
9
- --semmet-elevation-1: 0 1px 2px rgba(20, 24, 23, 0.1), 0 1px 1px rgba(20, 24, 23, 0.06);
10
- --semmet-motion: 120ms cubic-bezier(0.2, 0, 0, 1);
11
-
12
2
  position: relative;
13
3
  display: inline-block;
14
- font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
15
- font-size: 0.9375rem;
16
4
  }
17
5
 
18
6
  button {
19
7
  font: inherit;
20
- font-weight: 500;
21
- color: var(--semmet-color-primary);
22
8
  background: none;
23
- border: 1px solid currentColor;
24
- border-radius: var(--semmet-radius-sm);
25
- min-height: var(--semmet-target-md);
26
- padding: var(--semmet-space-2xs) var(--semmet-space-xs);
27
9
  cursor: pointer;
28
- transition: background-color var(--semmet-motion);
29
- }
30
-
31
- button:hover {
32
- background: color-mix(in srgb, var(--semmet-color-primary) 8%, transparent);
33
10
  }
34
11
 
35
12
  button:focus-visible {
36
- outline: 2px solid var(--semmet-color-primary);
13
+ outline: 2px solid currentColor;
37
14
  outline-offset: 2px;
38
15
  }
39
16
 
@@ -41,13 +18,5 @@ button:focus-visible {
41
18
  position: absolute;
42
19
  bottom: 100%;
43
20
  left: 0;
44
- margin-bottom: var(--semmet-space-2xs);
45
- padding: var(--semmet-space-2xs);
46
- border-radius: var(--semmet-radius-sm);
47
- background: var(--semmet-color-inverse-surface);
48
- color: var(--semmet-color-inverse-on-surface);
49
- font-size: 0.8125rem;
50
- line-height: 1.4;
51
21
  white-space: nowrap;
52
- box-shadow: var(--semmet-elevation-1);
53
22
  }
@@ -9,21 +9,36 @@
9
9
  "name": {
10
10
  "type": "string",
11
11
  "description": "The name for the new component. Used to derive the class name, selector, and file names.",
12
- "$default": { "$source": "argv", "index": 0 },
12
+ "$default": {
13
+ "$source": "argv",
14
+ "index": 0
15
+ },
13
16
  "x-prompt": "What name would you like to use for the tooltip component?"
14
17
  },
18
+ "e2e": {
19
+ "type": "boolean",
20
+ "default": false,
21
+ "description": "Generate a Playwright e2e spec for this component. Requires Playwright to be installed/configured in the consuming app."
22
+ },
15
23
  "path": {
16
24
  "type": "string",
17
25
  "format": "path",
18
- "$default": { "$source": "workingDirectory" },
26
+ "$default": {
27
+ "$source": "workingDirectory"
28
+ },
19
29
  "description": "The path where the component files should be created, relative to the workspace root. Defaults to the project's source root.",
20
30
  "visible": false
21
31
  },
22
32
  "project": {
23
33
  "type": "string",
24
34
  "description": "The name of the project to add the component to.",
25
- "$default": { "$source": "projectName" }
35
+ "$default": {
36
+ "$source": "projectName"
37
+ }
26
38
  }
27
39
  },
28
- "required": ["name", "project"]
40
+ "required": [
41
+ "name",
42
+ "project"
43
+ ]
29
44
  }
@@ -1,17 +1,5 @@
1
1
  :host {
2
- --semmet-color-primary: #18181b;
3
- --semmet-color-on-surface: #18181b;
4
- --semmet-color-on-surface-variant: #52525b;
5
- --semmet-radius-sm: 6px;
6
- --semmet-space-2xs: 8px;
7
- --semmet-space-sm: 24px;
8
- --semmet-target-md: 40px;
9
- --semmet-motion: 160ms cubic-bezier(0.2, 0, 0, 1);
10
-
11
2
  display: block;
12
- font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
13
- font-size: 0.9375rem;
14
- color: var(--semmet-color-on-surface);
15
3
  }
16
4
 
17
5
  [role='tree'],
@@ -22,27 +10,18 @@
22
10
  }
23
11
 
24
12
  [role='group'] {
25
- padding-left: var(--semmet-space-sm);
13
+ padding-left: 1rem;
26
14
  }
27
15
 
28
16
  [role='treeitem'] {
29
17
  display: flex;
30
18
  align-items: center;
31
- gap: var(--semmet-space-2xs);
32
- min-height: var(--semmet-target-md);
33
- padding: var(--semmet-space-2xs);
34
- border-radius: var(--semmet-radius-sm);
35
19
  cursor: pointer;
36
- transition: background-color var(--semmet-motion);
37
- }
38
-
39
- [role='treeitem']:hover {
40
- background: color-mix(in srgb, var(--semmet-color-on-surface) 6%, transparent);
41
20
  }
42
21
 
43
22
  [role='treeitem']:focus-visible {
44
- outline: 2px solid var(--semmet-color-primary);
45
- outline-offset: -2px;
23
+ outline: 2px solid currentColor;
24
+ outline-offset: 2px;
46
25
  }
47
26
 
48
27
  [role='treeitem'][aria-expanded]::before {
@@ -50,10 +29,9 @@
50
29
  width: 0.4rem;
51
30
  height: 0.4rem;
52
31
  flex-shrink: 0;
53
- border-right: 2px solid var(--semmet-color-on-surface-variant);
54
- border-bottom: 2px solid var(--semmet-color-on-surface-variant);
32
+ border-right: 2px solid currentColor;
33
+ border-bottom: 2px solid currentColor;
55
34
  transform: rotate(-45deg);
56
- transition: transform var(--semmet-motion);
57
35
  }
58
36
 
59
37
  [role='treeitem'][aria-expanded='true']::before {
@@ -3,10 +3,10 @@
3
3
  Usage from a parent component template:
4
4
  Import <%= classify(name) %> in that parent component.
5
5
 
6
- <<%= selector %> />
6
+ <<%= selector %> label="Files" [tree]="fileTree" />
7
7
  -->
8
- <ul role="tree" aria-label="Files">
9
- @for (root of tree; track root.id) {
8
+ <ul role="tree" [attr.aria-label]="label()">
9
+ @for (root of tree(); track root.id) {
10
10
  <li
11
11
  #treeItem
12
12
  role="treeitem"
@@ -1,4 +1,4 @@
1
- import { Component, ElementRef, computed, signal, viewChildren } from '@angular/core';
1
+ import { Component, ElementRef, computed, input, signal, viewChildren } from '@angular/core';
2
2
 
3
3
  interface <%= classify(name) %>Node {
4
4
  id: number;
@@ -11,6 +11,17 @@ interface VisibleNode {
11
11
  parentId: number | null;
12
12
  }
13
13
 
14
+ const DEFAULT_TREE: readonly <%= classify(name) %>Node[] = [
15
+ {
16
+ id: 1,
17
+ label: 'Documents',
18
+ children: [
19
+ { id: 2, label: 'Resume.pdf' },
20
+ { id: 3, label: 'Cover Letter.docx' },
21
+ ],
22
+ },
23
+ ];
24
+
14
25
  @Component({
15
26
  selector: '<%= selector %>',
16
27
  imports: [],
@@ -20,23 +31,15 @@ interface VisibleNode {
20
31
  export class <%= classify(name) %> {
21
32
  private readonly treeItems = viewChildren<ElementRef<HTMLElement>>('treeItem');
22
33
 
23
- protected readonly tree: <%= classify(name) %>Node[] = [
24
- {
25
- id: 1,
26
- label: 'Documents',
27
- children: [
28
- { id: 2, label: 'Resume.pdf' },
29
- { id: 3, label: 'Cover Letter.docx' },
30
- ],
31
- },
32
- ];
34
+ readonly label = input('Files');
35
+ readonly tree = input<readonly <%= classify(name) %>Node[]>(DEFAULT_TREE);
33
36
 
34
37
  private readonly expandedIds = signal<ReadonlySet<number>>(new Set([1]));
35
38
  protected readonly activeId = signal(1);
36
39
 
37
40
  protected readonly visibleNodes = computed<VisibleNode[]>(() => {
38
41
  const result: VisibleNode[] = [];
39
- const walk = (nodes: <%= classify(name) %>Node[], parentId: number | null): void => {
42
+ const walk = (nodes: readonly <%= classify(name) %>Node[], parentId: number | null): void => {
40
43
  for (const node of nodes) {
41
44
  result.push({ node, parentId });
42
45
  if (node.children && this.expandedIds().has(node.id)) {
@@ -44,7 +47,7 @@ export class <%= classify(name) %> {
44
47
  }
45
48
  }
46
49
  };
47
- walk(this.tree, null);
50
+ walk(this.tree(), null);
48
51
  return result;
49
52
  });
50
53
 
@@ -9,21 +9,36 @@
9
9
  "name": {
10
10
  "type": "string",
11
11
  "description": "The name for the new component. Used to derive the class name, selector, and file names.",
12
- "$default": { "$source": "argv", "index": 0 },
12
+ "$default": {
13
+ "$source": "argv",
14
+ "index": 0
15
+ },
13
16
  "x-prompt": "What name would you like to use for the tree view component?"
14
17
  },
18
+ "e2e": {
19
+ "type": "boolean",
20
+ "default": false,
21
+ "description": "Generate a Playwright e2e spec for this component. Requires Playwright to be installed/configured in the consuming app."
22
+ },
15
23
  "path": {
16
24
  "type": "string",
17
25
  "format": "path",
18
- "$default": { "$source": "workingDirectory" },
26
+ "$default": {
27
+ "$source": "workingDirectory"
28
+ },
19
29
  "description": "The path where the component files should be created, relative to the workspace root. Defaults to the project's source root.",
20
30
  "visible": false
21
31
  },
22
32
  "project": {
23
33
  "type": "string",
24
34
  "description": "The name of the project to add the component to.",
25
- "$default": { "$source": "projectName" }
35
+ "$default": {
36
+ "$source": "projectName"
37
+ }
26
38
  }
27
39
  },
28
- "required": ["name", "project"]
40
+ "required": [
41
+ "name",
42
+ "project"
43
+ ]
29
44
  }
@@ -15,7 +15,8 @@ const validation_1 = require("@schematics/angular/utility/validation");
15
15
  function createAriaComponentSchematic(config = {}) {
16
16
  return (0, project_1.createProjectSchematic)((options, { project }) => {
17
17
  const includeSharedUnitTest = config.includeSharedUnitTest ?? true;
18
- const includeSharedE2eTest = config.includeSharedE2eTest ?? true;
18
+ const includeE2eTest = options.e2e ?? false;
19
+ const includeSharedE2eTest = (config.includeSharedE2eTest ?? true) && includeE2eTest;
19
20
  options.path ??= (0, workspace_1.buildDefaultPath)(project);
20
21
  const parsedPath = (0, parse_name_1.parseName)(options.path, options.name);
21
22
  const name = parsedPath.name;
@@ -23,6 +24,7 @@ function createAriaComponentSchematic(config = {}) {
23
24
  (0, validation_1.validateHtmlSelector)(selector);
24
25
  (0, validation_1.validateClassName)(core_1.strings.classify(name));
25
26
  const componentTemplateSource = (0, schematics_1.apply)((0, schematics_1.url)('./files'), [
27
+ (0, schematics_1.filter)((path) => !path.endsWith('.e2e-spec.ts.template') || includeE2eTest),
26
28
  (0, schematics_1.applyTemplates)({ ...core_1.strings, name, selector }),
27
29
  (0, schematics_1.move)(parsedPath.path),
28
30
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"generate-component.js","sourceRoot":"","sources":["generate-component.ts"],"names":[],"mappings":";;AAkBA,oEAsCC;AAxDD,2DAA8G;AAC9G,+CAA+C;AAC/C,iEAA6E;AAC7E,qEAAyE;AACzE,uEAAmE;AACnE,uEAAiG;AAQjG;;;;GAIG;AACH,SAAgB,4BAA4B,CAAC,SAAuC,EAAE;IACpF,OAAO,IAAA,gCAAsB,EAA4B,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAChF,MAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,IAAI,IAAI,CAAC;QACnE,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,IAAI,IAAI,CAAC;QACjE,OAAO,CAAC,IAAI,KAAK,IAAA,4BAAgB,EAAC,OAAO,CAAC,CAAC;QAE3C,MAAM,UAAU,GAAG,IAAA,sBAAS,EAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAE7B,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,cAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3F,IAAA,iCAAoB,EAAC,QAAQ,CAAC,CAAC;QAC/B,IAAA,8BAAiB,EAAC,cAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAE1C,MAAM,uBAAuB,GAAG,IAAA,kBAAK,EAAC,IAAA,gBAAG,EAAC,SAAS,CAAC,EAAE;YACpD,IAAA,2BAAc,EAAC,EAAE,GAAG,cAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC9C,IAAA,iBAAI,EAAC,UAAU,CAAC,IAAI,CAAC;SACtB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,CAAC,IAAA,sBAAS,EAAC,uBAAuB,CAAC,CAAC,CAAC;QAEnD,IAAI,qBAAqB,IAAI,oBAAoB,EAAE,CAAC;YAClD,MAAM,kBAAkB,GAAG,IAAA,kBAAK,EAAC,IAAA,gBAAG,EAAC,+BAA+B,CAAC,EAAE;gBACrE,IAAA,mBAAM,EAAC,CAAC,IAAI,EAAE,EAAE;oBACd,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;wBACvC,OAAO,qBAAqB,CAAC;oBAC/B,CAAC;oBACD,IAAI,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;wBAC3C,OAAO,oBAAoB,CAAC;oBAC9B,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC;gBACF,IAAA,2BAAc,EAAC,EAAE,GAAG,cAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC9C,IAAA,iBAAI,EAAC,UAAU,CAAC,IAAI,CAAC;aACtB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,IAAA,sBAAS,EAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,IAAA,kBAAK,EAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"generate-component.js","sourceRoot":"","sources":["generate-component.ts"],"names":[],"mappings":";;AAkBA,oEAwCC;AA1DD,2DAA8G;AAC9G,+CAA+C;AAC/C,iEAA6E;AAC7E,qEAAyE;AACzE,uEAAmE;AACnE,uEAAiG;AAQjG;;;;GAIG;AACH,SAAgB,4BAA4B,CAAC,SAAuC,EAAE;IACpF,OAAO,IAAA,gCAAsB,EAA4B,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QAChF,MAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,IAAI,IAAI,CAAC;QACnE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC;QAC5C,MAAM,oBAAoB,GAAG,CAAC,MAAM,CAAC,oBAAoB,IAAI,IAAI,CAAC,IAAI,cAAc,CAAC;QACrF,OAAO,CAAC,IAAI,KAAK,IAAA,4BAAgB,EAAC,OAAO,CAAC,CAAC;QAE3C,MAAM,UAAU,GAAG,IAAA,sBAAS,EAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAE7B,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,cAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3F,IAAA,iCAAoB,EAAC,QAAQ,CAAC,CAAC;QAC/B,IAAA,8BAAiB,EAAC,cAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAE1C,MAAM,uBAAuB,GAAG,IAAA,kBAAK,EAAC,IAAA,gBAAG,EAAC,SAAS,CAAC,EAAE;YACpD,IAAA,mBAAM,EAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,cAAc,CAAC;YAC3E,IAAA,2BAAc,EAAC,EAAE,GAAG,cAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC9C,IAAA,iBAAI,EAAC,UAAU,CAAC,IAAI,CAAC;SACtB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,CAAC,IAAA,sBAAS,EAAC,uBAAuB,CAAC,CAAC,CAAC;QAEnD,IAAI,qBAAqB,IAAI,oBAAoB,EAAE,CAAC;YAClD,MAAM,kBAAkB,GAAG,IAAA,kBAAK,EAAC,IAAA,gBAAG,EAAC,+BAA+B,CAAC,EAAE;gBACrE,IAAA,mBAAM,EAAC,CAAC,IAAI,EAAE,EAAE;oBACd,IAAI,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;wBACvC,OAAO,qBAAqB,CAAC;oBAC/B,CAAC;oBACD,IAAI,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;wBAC3C,OAAO,oBAAoB,CAAC;oBAC9B,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC;gBACF,IAAA,2BAAc,EAAC,EAAE,GAAG,cAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC9C,IAAA,iBAAI,EAAC,UAAU,CAAC,IAAI,CAAC;aACtB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,IAAA,sBAAS,EAAC,kBAAkB,CAAC,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,IAAA,kBAAK,EAAC,KAAK,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -19,7 +19,8 @@ interface AriaComponentSchematicConfig {
19
19
  export function createAriaComponentSchematic(config: AriaComponentSchematicConfig = {}): (options: ComponentSchematicOptions) => Rule {
20
20
  return createProjectSchematic<ComponentSchematicOptions>((options, { project }) => {
21
21
  const includeSharedUnitTest = config.includeSharedUnitTest ?? true;
22
- const includeSharedE2eTest = config.includeSharedE2eTest ?? true;
22
+ const includeE2eTest = options.e2e ?? false;
23
+ const includeSharedE2eTest = (config.includeSharedE2eTest ?? true) && includeE2eTest;
23
24
  options.path ??= buildDefaultPath(project);
24
25
 
25
26
  const parsedPath = parseName(options.path, options.name);
@@ -30,6 +31,7 @@ export function createAriaComponentSchematic(config: AriaComponentSchematicConfi
30
31
  validateClassName(strings.classify(name));
31
32
 
32
33
  const componentTemplateSource = apply(url('./files'), [
34
+ filter((path) => !path.endsWith('.e2e-spec.ts.template') || includeE2eTest),
33
35
  applyTemplates({ ...strings, name, selector }),
34
36
  move(parsedPath.path),
35
37
  ]);
@@ -40,7 +40,6 @@ function getSupportingComponent(kind) {
40
40
  case 'section-table':
41
41
  return { templatePath: '../table/files', variable: 'table' };
42
42
  case 'header-navbar':
43
- case 'footer-navigation':
44
43
  return { templatePath: '../navbar/files', variable: 'navbar' };
45
44
  case 'section-form':
46
45
  return { templatePath: '../form/files', variable: 'form' };