semmet-angular 0.42.0 → 0.43.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 (202) hide show
  1. package/README.en.md +2 -315
  2. package/README.md +169 -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 +15 -0
  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/form/files/__name@dasherize__/__name@dasherize__.css.template +1 -77
  69. package/src/form/files/__name@dasherize__/__name@dasherize__.html.template +7 -7
  70. package/src/form/files/__name@dasherize__/__name@dasherize__.ts.template +20 -7
  71. package/src/form/schema.json +19 -4
  72. package/src/input/files/__name@dasherize__/__name@dasherize__.css.template +2 -58
  73. package/src/input/schema.json +19 -4
  74. package/src/input-group/files/__name@dasherize__/__name@dasherize__.css.template +2 -68
  75. package/src/input-group/files/__name@dasherize__/__name@dasherize__.html.template +13 -5
  76. package/src/input-group/files/__name@dasherize__/__name@dasherize__.ts.template +21 -6
  77. package/src/input-group/schema.json +19 -4
  78. package/src/landmarks/files/__name@dasherize__/__name@dasherize__.css.template +0 -24
  79. package/src/landmarks/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  80. package/src/landmarks/files/__name@dasherize__/__name@dasherize__.ts.template +5 -2
  81. package/src/landmarks/schema.json +19 -4
  82. package/src/list-group/files/__name@dasherize__/__name@dasherize__.css.template +0 -123
  83. package/src/list-group/files/__name@dasherize__/__name@dasherize__.e2e-spec.ts.template +8 -9
  84. package/src/list-group/files/__name@dasherize__/__name@dasherize__.html.template +13 -47
  85. package/src/list-group/files/__name@dasherize__/__name@dasherize__.spec.ts.template +46 -24
  86. package/src/list-group/files/__name@dasherize__/__name@dasherize__.ts.template +97 -39
  87. package/src/list-group/schema.json +19 -4
  88. package/src/listbox/files/__name@dasherize__/__name@dasherize__.css.template +3 -37
  89. package/src/listbox/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  90. package/src/listbox/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
  91. package/src/listbox/schema.json +19 -4
  92. package/src/menu-button/files/__name@dasherize__/__name@dasherize__.css.template +7 -47
  93. package/src/menu-button/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
  94. package/src/menu-button/files/__name@dasherize__/__name@dasherize__.ts.template +10 -7
  95. package/src/menu-button/schema.json +19 -4
  96. package/src/meter/files/__name@dasherize__/__name@dasherize__.css.template +0 -12
  97. package/src/meter/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  98. package/src/meter/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
  99. package/src/meter/schema.json +19 -4
  100. package/src/navbar/files/__name@dasherize__/__name@dasherize__.css.template +6 -62
  101. package/src/navbar/schema.json +19 -4
  102. package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.css.template +6 -37
  103. package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.html.template +7 -6
  104. package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.ts.template +15 -1
  105. package/src/navigation-menu/schema.json +19 -4
  106. package/src/offcanvas/files/__name@dasherize__/__name@dasherize__.css.template +3 -70
  107. package/src/offcanvas/schema.json +19 -4
  108. package/src/pagination/files/__name@dasherize__/__name@dasherize__.css.template +2 -33
  109. package/src/pagination/files/__name@dasherize__/__name@dasherize__.html.template +6 -6
  110. package/src/pagination/files/__name@dasherize__/__name@dasherize__.ts.template +7 -1
  111. package/src/pagination/schema.json +19 -4
  112. package/src/popover/files/__name@dasherize__/__name@dasherize__.css.template +8 -69
  113. package/src/popover/schema.json +19 -4
  114. package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.css.template +1 -31
  115. package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
  116. package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
  117. package/src/progress-bar/schema.json +19 -4
  118. package/src/radio-group/files/__name@dasherize__/__name@dasherize__.css.template +4 -31
  119. package/src/radio-group/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  120. package/src/radio-group/files/__name@dasherize__/__name@dasherize__.ts.template +2 -1
  121. package/src/radio-group/schema.json +19 -4
  122. package/src/rating/files/__name@dasherize__/__name@dasherize__.css.template +17 -0
  123. package/src/rating/files/__name@dasherize__/__name@dasherize__.html.template +34 -0
  124. package/src/rating/files/__name@dasherize__/__name@dasherize__.spec.ts.template +38 -0
  125. package/src/rating/files/__name@dasherize__/__name@dasherize__.ts.template +75 -0
  126. package/src/rating/index.d.ts +1 -0
  127. package/src/rating/index.js +6 -0
  128. package/src/rating/index.js.map +1 -0
  129. package/src/rating/index.ts +3 -0
  130. package/src/rating/schema.d.ts +1 -0
  131. package/src/rating/schema.js +3 -0
  132. package/src/rating/schema.js.map +1 -0
  133. package/src/rating/schema.json +44 -0
  134. package/src/rating/schema.ts +1 -0
  135. package/src/select/files/__name@dasherize__/__name@dasherize__.css.template +4 -55
  136. package/src/select/schema.json +19 -4
  137. package/src/skeleton/files/__name@dasherize__/__name@dasherize__.css.template +2 -29
  138. package/src/skeleton/files/__name@dasherize__/__name@dasherize__.ts.template +1 -3
  139. package/src/skeleton/schema.json +19 -4
  140. package/src/skip-link/files/__name@dasherize__/__name@dasherize__.css.template +2 -14
  141. package/src/skip-link/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  142. package/src/skip-link/files/__name@dasherize__/__name@dasherize__.ts.template +5 -2
  143. package/src/skip-link/schema.json +19 -4
  144. package/src/slider/files/__name@dasherize__/__name@dasherize__.css.template +6 -20
  145. package/src/slider/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  146. package/src/slider/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
  147. package/src/slider/schema.json +19 -4
  148. package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.css.template +6 -35
  149. package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
  150. package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
  151. package/src/spinbutton/schema.json +19 -4
  152. package/src/spinner/files/__name@dasherize__/__name@dasherize__.css.template +0 -43
  153. package/src/spinner/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
  154. package/src/spinner/schema.json +19 -4
  155. package/src/steps/files/__name@dasherize__/__name@dasherize__.css.template +36 -0
  156. package/src/steps/files/__name@dasherize__/__name@dasherize__.html.template +44 -0
  157. package/src/steps/files/__name@dasherize__/__name@dasherize__.spec.ts.template +35 -0
  158. package/src/steps/files/__name@dasherize__/__name@dasherize__.ts.template +107 -0
  159. package/src/steps/index.d.ts +1 -0
  160. package/src/steps/index.js +6 -0
  161. package/src/steps/index.js.map +1 -0
  162. package/src/steps/index.ts +3 -0
  163. package/src/steps/schema.d.ts +1 -0
  164. package/src/steps/schema.js +3 -0
  165. package/src/steps/schema.js.map +1 -0
  166. package/src/steps/schema.json +44 -0
  167. package/src/steps/schema.ts +1 -0
  168. package/src/switch/files/__name@dasherize__/__name@dasherize__.css.template +7 -22
  169. package/src/switch/schema.json +19 -4
  170. package/src/table/files/__name@dasherize__/__name@dasherize__.css.template +0 -25
  171. package/src/table/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
  172. package/src/table/files/__name@dasherize__/__name@dasherize__.ts.template +3 -0
  173. package/src/table/schema.json +19 -4
  174. package/src/tabs/files/__name@dasherize__/__name@dasherize__.css.template +5 -44
  175. package/src/tabs/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
  176. package/src/tabs/files/__name@dasherize__/__name@dasherize__.ts.template +2 -0
  177. package/src/tabs/schema.json +19 -4
  178. package/src/textarea/files/__name@dasherize__/__name@dasherize__.css.template +2 -59
  179. package/src/textarea/schema.json +19 -4
  180. package/src/toast/files/__name@dasherize__/__name@dasherize__.css.template +1 -35
  181. package/src/toast/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
  182. package/src/toast/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
  183. package/src/toast/schema.json +19 -4
  184. package/src/toolbar/files/__name@dasherize__/__name@dasherize__.css.template +2 -36
  185. package/src/toolbar/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
  186. package/src/toolbar/files/__name@dasherize__/__name@dasherize__.ts.template +11 -8
  187. package/src/toolbar/schema.json +19 -4
  188. package/src/tooltip/files/__name@dasherize__/__name@dasherize__.css.template +1 -32
  189. package/src/tooltip/schema.json +19 -4
  190. package/src/tree-view/files/__name@dasherize__/__name@dasherize__.css.template +5 -27
  191. package/src/tree-view/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
  192. package/src/tree-view/files/__name@dasherize__/__name@dasherize__.ts.template +16 -13
  193. package/src/tree-view/schema.json +19 -4
  194. package/src/utils/generate-component.js +3 -1
  195. package/src/utils/generate-component.js.map +1 -1
  196. package/src/utils/generate-component.ts +3 -1
  197. package/src/utils/generate-composition.js +0 -1
  198. package/src/utils/generate-composition.js.map +1 -1
  199. package/src/utils/generate-composition.ts +0 -1
  200. package/src/utils/schema-types.d.ts +1 -0
  201. package/src/utils/schema-types.ts +1 -0
  202. 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 select 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,12 +1,4 @@
1
1
  :host {
2
- --semmet-color-surface: #ffffff;
3
- --semmet-color-outline: #d4d4d8;
4
- --semmet-color-skeleton: #e4e4e7;
5
- --semmet-color-skeleton-highlight: #f4f4f5;
6
- --semmet-radius-sm: 8px;
7
- --semmet-radius-md: 12px;
8
- --semmet-space-2xs: 8px;
9
-
10
2
  display: block;
11
3
  width: 100%;
12
4
  }
@@ -17,8 +9,7 @@
17
9
  display: block;
18
10
  overflow: hidden;
19
11
  box-sizing: border-box;
20
- background: var(--semmet-color-skeleton);
21
- border-radius: var(--semmet-radius-sm);
12
+ background: currentColor;
22
13
  }
23
14
 
24
15
  .semmet-skeleton {
@@ -34,19 +25,15 @@
34
25
 
35
26
  .semmet-skeleton--card {
36
27
  min-height: 16rem;
37
- border: 1px solid var(--semmet-color-outline);
38
- border-radius: var(--semmet-radius-md);
39
28
  }
40
29
 
41
30
  .semmet-skeleton--media {
42
31
  height: 12.5rem;
43
- border-radius: var(--semmet-radius-md);
44
32
  }
45
33
 
46
34
  .semmet-skeleton-text {
47
35
  display: grid;
48
36
  width: 100%;
49
- gap: var(--semmet-space-2xs);
50
37
  }
51
38
 
52
39
  .semmet-skeleton__line {
@@ -60,12 +47,7 @@
60
47
  position: absolute;
61
48
  inset: 0;
62
49
  transform: translateX(-100%);
63
- background: linear-gradient(
64
- 90deg,
65
- transparent,
66
- var(--semmet-color-skeleton-highlight),
67
- transparent
68
- );
50
+ background: linear-gradient(90deg, transparent, Canvas, transparent);
69
51
  animation: semmet-skeleton-shimmer 1.35s ease-in-out infinite;
70
52
  }
71
53
 
@@ -75,15 +57,6 @@
75
57
  }
76
58
  }
77
59
 
78
- @media (prefers-color-scheme: dark) {
79
- :host {
80
- --semmet-color-surface: #18181b;
81
- --semmet-color-outline: #3f3f46;
82
- --semmet-color-skeleton: #27272a;
83
- --semmet-color-skeleton-highlight: #3f3f46;
84
- }
85
- }
86
-
87
60
  @media (prefers-reduced-motion: reduce) {
88
61
  .semmet-skeleton--animated::after,
89
62
  .semmet-skeleton-text--animated .semmet-skeleton__line::after {
@@ -1,7 +1,5 @@
1
1
  import { Component, booleanAttribute, computed, input, numberAttribute } from '@angular/core';
2
2
 
3
- type <%= classify(name) %>Variant = 'rect' | 'text' | 'circle' | 'card' | 'media';
4
-
5
3
  let nextId = 0;
6
4
 
7
5
  @Component({
@@ -13,7 +11,7 @@ let nextId = 0;
13
11
  export class <%= classify(name) %> {
14
12
  protected readonly instanceId = `<%= dasherize(name) %>-${nextId++}`;
15
13
 
16
- readonly variant = input<<%= classify(name) %>Variant>('rect');
14
+ readonly variant = input<string>('rect');
17
15
  readonly width = input<string | null>(null);
18
16
  readonly height = input<string | null>(null);
19
17
  readonly size = input<string | null>(null);
@@ -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 skeleton 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,12 +1,5 @@
1
1
  :host {
2
- --semmet-color-primary: #18181b;
3
- --semmet-color-on-primary: #ffffff;
4
- --semmet-radius-sm: 8px;
5
- --semmet-motion: 160ms cubic-bezier(0.2, 0, 0, 1);
6
-
7
2
  display: block;
8
- font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
9
- font-size: 0.9375rem;
10
3
  }
11
4
 
12
5
  .skip-link {
@@ -14,17 +7,12 @@
14
7
  top: -3rem;
15
8
  left: 0.5rem;
16
9
  z-index: 100;
17
- padding: 0.5rem 1rem;
18
- color: var(--semmet-color-on-primary);
19
- background: var(--semmet-color-primary);
20
- border-radius: var(--semmet-radius-sm);
10
+ color: inherit;
21
11
  text-decoration: none;
22
- font-weight: 500;
23
- transition: top var(--semmet-motion);
24
12
  }
25
13
 
26
14
  .skip-link:focus-visible {
27
15
  top: 0.5rem;
28
- outline: 2px solid var(--semmet-color-on-primary);
16
+ outline: 2px solid currentColor;
29
17
  outline-offset: 2px;
30
18
  }
@@ -3,8 +3,8 @@
3
3
  Usage from a parent component template:
4
4
  Import <%= classify(name) %> in that parent component.
5
5
 
6
- <<%= selector %> />
6
+ <<%= selector %> targetId="main-content" label="Skip to main content" />
7
7
  <main id="main-content">Main content</main>
8
8
  -->
9
- <a class="skip-link" href="#main-content">Skip to main content</a>
9
+ <a class="skip-link" [href]="'#' + targetId()">{{ label() }}</a>
10
10
  <!-- Add id="main-content" to your <main> element -->
@@ -1,4 +1,4 @@
1
- import { Component } from '@angular/core';
1
+ import { Component, input } from '@angular/core';
2
2
 
3
3
  @Component({
4
4
  selector: '<%= selector %>',
@@ -6,4 +6,7 @@ import { Component } from '@angular/core';
6
6
  templateUrl: './<%= dasherize(name) %>.html',
7
7
  styleUrl: './<%= dasherize(name) %>.css',
8
8
  })
9
- export class <%= classify(name) %> {}
9
+ export class <%= classify(name) %> {
10
+ readonly targetId = input('main-content');
11
+ readonly label = input('Skip to main content');
12
+ }
@@ -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 skip link 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,28 +1,15 @@
1
1
  :host {
2
- --semmet-color-primary: #18181b;
3
- --semmet-color-outline: #d4d4d8;
4
- --semmet-color-on-surface: #18181b;
5
- --semmet-space-xs: 16px;
6
- --semmet-motion: 120ms cubic-bezier(0.2, 0, 0, 1);
7
-
8
2
  display: block;
9
- font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
10
- font-size: 0.9375rem;
11
- max-width: 20rem;
12
3
  }
13
4
 
14
5
  label {
15
6
  display: block;
16
- margin-bottom: var(--semmet-space-xs);
17
- font-weight: 500;
18
- color: var(--semmet-color-on-surface);
19
7
  }
20
8
 
21
9
  .track {
22
10
  position: relative;
23
11
  height: 0.25rem;
24
- border-radius: 999px;
25
- background: var(--semmet-color-outline);
12
+ background: currentColor;
26
13
  cursor: pointer;
27
14
  touch-action: none;
28
15
  }
@@ -32,8 +19,7 @@ label {
32
19
  top: 0;
33
20
  left: 0;
34
21
  height: 100%;
35
- border-radius: 999px;
36
- background: var(--semmet-color-primary);
22
+ background: currentColor;
37
23
  }
38
24
 
39
25
  .thumb {
@@ -43,13 +29,13 @@ label {
43
29
  height: 1.125rem;
44
30
  transform: translate(-50%, -50%);
45
31
  border-radius: 50%;
46
- background: var(--semmet-color-primary);
47
- box-shadow: 0 1px 3px rgba(20, 24, 23, 0.25);
32
+ background: Canvas;
33
+ border: 2px solid currentColor;
34
+ box-sizing: border-box;
48
35
  cursor: pointer;
49
- transition: box-shadow var(--semmet-motion);
50
36
  }
51
37
 
52
38
  .thumb:focus-visible {
53
- outline: 2px solid var(--semmet-color-primary);
39
+ outline: 2px solid currentColor;
54
40
  outline-offset: 2px;
55
41
  }
@@ -3,9 +3,9 @@
3
3
  Usage from a parent component template:
4
4
  Import <%= classify(name) %> in that parent component.
5
5
 
6
- <<%= selector %> />
6
+ <<%= selector %> label="Volume" />
7
7
  -->
8
- <label [id]="instanceId + '-label'">Volume</label>
8
+ <label [id]="instanceId + '-label'">{{ label() }}</label>
9
9
  <div #track class="track" (pointerdown)="handlePointerDown($event)" (pointermove)="handlePointerMove($event)">
10
10
  <div class="fill" [style.width.%]="value()"></div>
11
11
  <div
@@ -1,4 +1,4 @@
1
- import { Component, ElementRef, signal, viewChild } from '@angular/core';
1
+ import { Component, ElementRef, input, signal, viewChild } from '@angular/core';
2
2
 
3
3
  const MIN = 0;
4
4
  const MAX = 100;
@@ -20,6 +20,8 @@ export class <%= classify(name) %> {
20
20
  protected readonly max = MAX;
21
21
  protected readonly value = signal(50);
22
22
 
23
+ readonly label = input('Volume');
24
+
23
25
  protected handleKeydown(event: KeyboardEvent): void {
24
26
  switch (event.key) {
25
27
  case 'ArrowRight':
@@ -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 slider 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,66 +1,37 @@
1
1
  :host {
2
- --semmet-color-primary: #18181b;
3
- --semmet-color-outline: #d4d4d8;
4
- --semmet-color-on-surface: #18181b;
5
- --semmet-radius-sm: 8px;
6
- --semmet-space-2xs: 8px;
7
- --semmet-target-md: 40px;
8
- --semmet-motion: 160ms cubic-bezier(0.2, 0, 0, 1);
9
-
10
2
  display: inline-block;
11
- font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
12
- font-size: 0.9375rem;
13
3
  }
14
4
 
15
5
  label {
16
6
  display: block;
17
- margin-bottom: var(--semmet-space-2xs);
18
- font-weight: 500;
19
- color: var(--semmet-color-on-surface);
20
7
  }
21
8
 
22
9
  .stepper {
23
10
  display: inline-flex;
24
11
  align-items: center;
25
- border: 1px solid var(--semmet-color-outline);
26
- border-radius: var(--semmet-radius-sm);
27
- overflow: hidden;
28
12
  }
29
13
 
30
14
  button {
31
15
  font: inherit;
32
- font-size: 1.125rem;
33
- color: var(--semmet-color-on-surface);
34
16
  background: none;
35
17
  border: none;
36
- min-width: var(--semmet-target-md);
37
- min-height: var(--semmet-target-md);
18
+ min-width: 2rem;
38
19
  cursor: pointer;
39
- transition: background-color var(--semmet-motion);
40
- }
41
-
42
- button:hover {
43
- background: color-mix(in srgb, var(--semmet-color-on-surface) 6%, transparent);
44
20
  }
45
21
 
46
22
  button:focus-visible {
47
- outline: 2px solid var(--semmet-color-primary);
48
- outline-offset: -2px;
23
+ outline: 2px solid currentColor;
24
+ outline-offset: 2px;
49
25
  }
50
26
 
51
27
  input {
52
28
  width: 3rem;
53
- min-height: var(--semmet-target-md);
54
- border: none;
55
- border-left: 1px solid var(--semmet-color-outline);
56
- border-right: 1px solid var(--semmet-color-outline);
29
+ box-sizing: border-box;
57
30
  text-align: center;
58
31
  font: inherit;
59
- color: var(--semmet-color-on-surface);
60
- box-sizing: border-box;
61
32
  }
62
33
 
63
34
  input:focus-visible {
64
- outline: 2px solid var(--semmet-color-primary);
65
- outline-offset: -2px;
35
+ outline: 2px solid currentColor;
36
+ outline-offset: 2px;
66
37
  }
@@ -3,11 +3,11 @@
3
3
  Usage from a parent component template:
4
4
  Import <%= classify(name) %> in that parent component.
5
5
 
6
- <<%= selector %> />
6
+ <<%= selector %> label="Quantity" />
7
7
  -->
8
- <label [id]="instanceId + '-label'" [for]="instanceId + '-input'">Quantity</label>
8
+ <label [id]="instanceId + '-label'" [for]="instanceId + '-input'">{{ label() }}</label>
9
9
  <div class="stepper">
10
- <button type="button" (click)="decrement()" aria-label="Decrease quantity">−</button>
10
+ <button type="button" (click)="decrement()" [attr.aria-label]="decrementLabel()">−</button>
11
11
  <input
12
12
  type="text"
13
13
  inputmode="numeric"
@@ -21,5 +21,5 @@ Import <%= classify(name) %> in that parent component.
21
21
  (keydown)="handleKeydown($event)"
22
22
  (change)="handleInput($event)"
23
23
  />
24
- <button type="button" (click)="increment()" aria-label="Increase quantity">+</button>
24
+ <button type="button" (click)="increment()" [attr.aria-label]="incrementLabel()">+</button>
25
25
  </div>
@@ -1,4 +1,4 @@
1
- import { Component, signal } from '@angular/core';
1
+ import { Component, input, signal } from '@angular/core';
2
2
 
3
3
  const MIN = 0;
4
4
  const MAX = 99;
@@ -17,6 +17,10 @@ export class <%= classify(name) %> {
17
17
  protected readonly max = MAX;
18
18
  protected readonly value = signal(1);
19
19
 
20
+ readonly label = input('Quantity');
21
+ readonly decrementLabel = input('Decrease quantity');
22
+ readonly incrementLabel = input('Increase quantity');
23
+
20
24
  protected increment(): void {
21
25
  this.setValue(this.value() + 1);
22
26
  }
@@ -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 spinbutton 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,36 +1,13 @@
1
1
  :host {
2
- --semmet-color-primary: #18181b;
3
- --semmet-color-neutral: #71717a;
4
- --semmet-color-success: #067647;
5
- --semmet-color-warning: #b54708;
6
- --semmet-color-danger: #b42318;
7
- --semmet-space-2xs: 8px;
8
-
9
2
  display: inline-block;
10
- font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
11
3
  }
12
4
 
13
5
  .semmet-spinner {
14
6
  display: inline-flex;
15
7
  align-items: center;
16
- gap: var(--semmet-space-2xs);
17
- color: var(--semmet-color-primary);
18
- font-weight: 600;
19
8
  line-height: 1;
20
9
  }
21
10
 
22
- .semmet-spinner--sm {
23
- font-size: 0.75rem;
24
- }
25
-
26
- .semmet-spinner--md {
27
- font-size: 0.875rem;
28
- }
29
-
30
- .semmet-spinner--lg {
31
- font-size: 1rem;
32
- }
33
-
34
11
  .semmet-spinner__visual {
35
12
  display: inline-block;
36
13
  width: 1.25em;
@@ -41,26 +18,6 @@
41
18
  animation: semmet-spinner-spin 700ms linear infinite;
42
19
  }
43
20
 
44
- .semmet-spinner--neutral {
45
- color: var(--semmet-color-neutral);
46
- }
47
-
48
- .semmet-spinner--primary {
49
- color: var(--semmet-color-primary);
50
- }
51
-
52
- .semmet-spinner--success {
53
- color: var(--semmet-color-success);
54
- }
55
-
56
- .semmet-spinner--warning {
57
- color: var(--semmet-color-warning);
58
- }
59
-
60
- .semmet-spinner--danger {
61
- color: var(--semmet-color-danger);
62
- }
63
-
64
21
  .semmet-spinner__label--visually-hidden {
65
22
  position: absolute;
66
23
  width: 1px;
@@ -1,8 +1,5 @@
1
1
  import { Component, booleanAttribute, computed, input } from '@angular/core';
2
2
 
3
- type <%= classify(name) %>Variant = 'neutral' | 'primary' | 'success' | 'warning' | 'danger';
4
- type <%= classify(name) %>Size = 'sm' | 'md' | 'lg';
5
-
6
3
  let nextId = 0;
7
4
 
8
5
  @Component({
@@ -15,8 +12,8 @@ export class <%= classify(name) %> {
15
12
  protected readonly instanceId = `<%= dasherize(name) %>-${nextId++}`;
16
13
 
17
14
  readonly label = input('Loading');
18
- readonly variant = input<<%= classify(name) %>Variant>('primary');
19
- readonly size = input<<%= classify(name) %>Size>('md');
15
+ readonly variant = input<string>('primary');
16
+ readonly size = input<string>('md');
20
17
  readonly labelVisible = input(false, { transform: booleanAttribute });
21
18
  readonly decorative = input(false, { transform: booleanAttribute });
22
19