semmet-angular 0.41.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.
- package/README.en.md +2 -315
- package/README.md +169 -264
- package/package.json +2 -2
- package/src/accordion/files/__name@dasherize__/__name@dasherize__.css.template +4 -41
- package/src/accordion/schema.json +19 -4
- package/src/alert/files/__name@dasherize__/__name@dasherize__.css.template +1 -25
- package/src/alert/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/alert/files/__name@dasherize__/__name@dasherize__.ts.template +4 -1
- package/src/alert/schema.json +19 -4
- package/src/alert-dialog/files/__name@dasherize__/__name@dasherize__.css.template +3 -56
- package/src/alert-dialog/files/__name@dasherize__/__name@dasherize__.html.template +6 -6
- package/src/alert-dialog/files/__name@dasherize__/__name@dasherize__.ts.template +7 -1
- package/src/alert-dialog/schema.json +19 -4
- package/src/avatar/files/__name@dasherize__/__name@dasherize__.css.template +17 -0
- package/src/avatar/files/__name@dasherize__/__name@dasherize__.html.template +28 -0
- package/src/avatar/files/__name@dasherize__/__name@dasherize__.spec.ts.template +27 -0
- package/src/avatar/files/__name@dasherize__/__name@dasherize__.ts.template +35 -0
- package/src/avatar/index.d.ts +1 -0
- package/src/avatar/index.js +6 -0
- package/src/avatar/index.js.map +1 -0
- package/src/avatar/index.ts +3 -0
- package/src/avatar/schema.d.ts +1 -0
- package/src/avatar/schema.js +3 -0
- package/src/avatar/schema.js.map +1 -0
- package/src/avatar/schema.json +44 -0
- package/src/avatar/schema.ts +1 -0
- package/src/badge/files/__name@dasherize__/__name@dasherize__.css.template +0 -77
- package/src/badge/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
- package/src/badge/schema.json +19 -4
- package/src/block/files/__name@dasherize__/__name@dasherize__.css.template +10 -81
- package/src/block/files/__name@dasherize__/__name@dasherize__.html.template +33 -25
- package/src/block/files/__name@dasherize__/__name@dasherize__.ts.template +41 -10
- package/src/block/schema.json +19 -4
- package/src/breadcrumb/files/__name@dasherize__/__name@dasherize__.css.template +2 -23
- package/src/breadcrumb/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
- package/src/breadcrumb/files/__name@dasherize__/__name@dasherize__.ts.template +9 -5
- package/src/breadcrumb/schema.json +19 -4
- package/src/button/files/__name@dasherize__/__name@dasherize__.css.template +2 -79
- package/src/button/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
- package/src/button/schema.json +19 -4
- package/src/button-group/files/__name@dasherize__/__name@dasherize__.css.template +2 -70
- package/src/button-group/files/__name@dasherize__/__name@dasherize__.ts.template +1 -2
- package/src/button-group/schema.json +19 -4
- package/src/card/files/__name@dasherize__/__name@dasherize__.css.template +0 -67
- package/src/card/files/__name@dasherize__/__name@dasherize__.html.template +10 -55
- package/src/card/files/__name@dasherize__/__name@dasherize__.ts.template +2 -45
- package/src/card/schema.json +19 -4
- package/src/carousel/files/__name@dasherize__/__name@dasherize__.css.template +4 -33
- package/src/carousel/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
- package/src/carousel/files/__name@dasherize__/__name@dasherize__.ts.template +4 -0
- package/src/carousel/schema.json +19 -4
- package/src/checkbox/files/__name@dasherize__/__name@dasherize__.css.template +5 -21
- package/src/checkbox/schema.json +19 -4
- package/src/close-button/files/__name@dasherize__/__name@dasherize__.css.template +9 -47
- package/src/close-button/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
- package/src/close-button/schema.json +19 -4
- package/src/collection.json +15 -0
- package/src/combobox/files/__name@dasherize__/__name@dasherize__.css.template +4 -49
- package/src/combobox/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/combobox/files/__name@dasherize__/__name@dasherize__.ts.template +11 -8
- package/src/combobox/schema.json +19 -4
- package/src/dialog/files/__name@dasherize__/__name@dasherize__.css.template +3 -45
- package/src/dialog/files/__name@dasherize__/__name@dasherize__.html.template +5 -5
- package/src/dialog/files/__name@dasherize__/__name@dasherize__.ts.template +6 -1
- package/src/dialog/schema.json +19 -4
- package/src/disclosure/files/__name@dasherize__/__name@dasherize__.css.template +4 -36
- package/src/disclosure/schema.json +19 -4
- package/src/form/files/__name@dasherize__/__name@dasherize__.css.template +1 -77
- package/src/form/files/__name@dasherize__/__name@dasherize__.html.template +7 -7
- package/src/form/files/__name@dasherize__/__name@dasherize__.ts.template +20 -7
- package/src/form/schema.json +19 -4
- package/src/input/files/__name@dasherize__/__name@dasherize__.css.template +2 -58
- package/src/input/schema.json +19 -4
- package/src/input-group/files/__name@dasherize__/__name@dasherize__.css.template +2 -68
- package/src/input-group/files/__name@dasherize__/__name@dasherize__.html.template +13 -5
- package/src/input-group/files/__name@dasherize__/__name@dasherize__.ts.template +21 -6
- package/src/input-group/schema.json +19 -4
- package/src/landmarks/files/__name@dasherize__/__name@dasherize__.css.template +0 -24
- package/src/landmarks/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/landmarks/files/__name@dasherize__/__name@dasherize__.ts.template +5 -2
- package/src/landmarks/schema.json +19 -4
- package/src/list-group/files/__name@dasherize__/__name@dasherize__.css.template +0 -123
- package/src/list-group/files/__name@dasherize__/__name@dasherize__.e2e-spec.ts.template +8 -9
- package/src/list-group/files/__name@dasherize__/__name@dasherize__.html.template +13 -47
- package/src/list-group/files/__name@dasherize__/__name@dasherize__.spec.ts.template +46 -24
- package/src/list-group/files/__name@dasherize__/__name@dasherize__.ts.template +97 -39
- package/src/list-group/schema.json +19 -4
- package/src/listbox/files/__name@dasherize__/__name@dasherize__.css.template +3 -37
- package/src/listbox/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/listbox/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
- package/src/listbox/schema.json +19 -4
- package/src/menu-button/files/__name@dasherize__/__name@dasherize__.css.template +7 -47
- package/src/menu-button/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/menu-button/files/__name@dasherize__/__name@dasherize__.ts.template +10 -7
- package/src/menu-button/schema.json +19 -4
- package/src/meter/files/__name@dasherize__/__name@dasherize__.css.template +0 -12
- package/src/meter/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/meter/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
- package/src/meter/schema.json +19 -4
- package/src/navbar/files/__name@dasherize__/__name@dasherize__.css.template +6 -62
- package/src/navbar/schema.json +19 -4
- package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.css.template +6 -37
- package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.html.template +7 -6
- package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.ts.template +15 -1
- package/src/navigation-menu/schema.json +19 -4
- package/src/offcanvas/files/__name@dasherize__/__name@dasherize__.css.template +3 -70
- package/src/offcanvas/schema.json +19 -4
- package/src/pagination/files/__name@dasherize__/__name@dasherize__.css.template +2 -33
- package/src/pagination/files/__name@dasherize__/__name@dasherize__.html.template +6 -6
- package/src/pagination/files/__name@dasherize__/__name@dasherize__.ts.template +7 -1
- package/src/pagination/schema.json +19 -4
- package/src/popover/files/__name@dasherize__/__name@dasherize__.css.template +8 -69
- package/src/popover/schema.json +19 -4
- package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.css.template +1 -31
- package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
- package/src/progress-bar/schema.json +19 -4
- package/src/radio-group/files/__name@dasherize__/__name@dasherize__.css.template +4 -31
- package/src/radio-group/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/radio-group/files/__name@dasherize__/__name@dasherize__.ts.template +2 -1
- package/src/radio-group/schema.json +19 -4
- package/src/rating/files/__name@dasherize__/__name@dasherize__.css.template +17 -0
- package/src/rating/files/__name@dasherize__/__name@dasherize__.html.template +34 -0
- package/src/rating/files/__name@dasherize__/__name@dasherize__.spec.ts.template +38 -0
- package/src/rating/files/__name@dasherize__/__name@dasherize__.ts.template +75 -0
- package/src/rating/index.d.ts +1 -0
- package/src/rating/index.js +6 -0
- package/src/rating/index.js.map +1 -0
- package/src/rating/index.ts +3 -0
- package/src/rating/schema.d.ts +1 -0
- package/src/rating/schema.js +3 -0
- package/src/rating/schema.js.map +1 -0
- package/src/rating/schema.json +44 -0
- package/src/rating/schema.ts +1 -0
- package/src/select/files/__name@dasherize__/__name@dasherize__.css.template +4 -55
- package/src/select/schema.json +19 -4
- package/src/skeleton/files/__name@dasherize__/__name@dasherize__.css.template +2 -29
- package/src/skeleton/files/__name@dasherize__/__name@dasherize__.ts.template +1 -3
- package/src/skeleton/schema.json +19 -4
- package/src/skip-link/files/__name@dasherize__/__name@dasherize__.css.template +2 -14
- package/src/skip-link/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/skip-link/files/__name@dasherize__/__name@dasherize__.ts.template +5 -2
- package/src/skip-link/schema.json +19 -4
- package/src/slider/files/__name@dasherize__/__name@dasherize__.css.template +6 -20
- package/src/slider/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/slider/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
- package/src/slider/schema.json +19 -4
- package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.css.template +6 -35
- package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
- package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
- package/src/spinbutton/schema.json +19 -4
- package/src/spinner/files/__name@dasherize__/__name@dasherize__.css.template +0 -43
- package/src/spinner/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
- package/src/spinner/schema.json +19 -4
- package/src/steps/files/__name@dasherize__/__name@dasherize__.css.template +36 -0
- package/src/steps/files/__name@dasherize__/__name@dasherize__.html.template +44 -0
- package/src/steps/files/__name@dasherize__/__name@dasherize__.spec.ts.template +35 -0
- package/src/steps/files/__name@dasherize__/__name@dasherize__.ts.template +107 -0
- package/src/steps/index.d.ts +1 -0
- package/src/steps/index.js +6 -0
- package/src/steps/index.js.map +1 -0
- package/src/steps/index.ts +3 -0
- package/src/steps/schema.d.ts +1 -0
- package/src/steps/schema.js +3 -0
- package/src/steps/schema.js.map +1 -0
- package/src/steps/schema.json +44 -0
- package/src/steps/schema.ts +1 -0
- package/src/switch/files/__name@dasherize__/__name@dasherize__.css.template +7 -22
- package/src/switch/schema.json +19 -4
- package/src/table/files/__name@dasherize__/__name@dasherize__.css.template +0 -25
- package/src/table/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/table/files/__name@dasherize__/__name@dasherize__.ts.template +3 -0
- package/src/table/schema.json +19 -4
- package/src/tabs/files/__name@dasherize__/__name@dasherize__.css.template +5 -44
- package/src/tabs/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/tabs/files/__name@dasherize__/__name@dasherize__.ts.template +2 -0
- package/src/tabs/schema.json +19 -4
- package/src/textarea/files/__name@dasherize__/__name@dasherize__.css.template +2 -59
- package/src/textarea/schema.json +19 -4
- package/src/toast/files/__name@dasherize__/__name@dasherize__.css.template +1 -35
- package/src/toast/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
- package/src/toast/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
- package/src/toast/schema.json +19 -4
- package/src/toolbar/files/__name@dasherize__/__name@dasherize__.css.template +2 -36
- package/src/toolbar/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/toolbar/files/__name@dasherize__/__name@dasherize__.ts.template +11 -8
- package/src/toolbar/schema.json +19 -4
- package/src/tooltip/files/__name@dasherize__/__name@dasherize__.css.template +1 -32
- package/src/tooltip/schema.json +19 -4
- package/src/tree-view/files/__name@dasherize__/__name@dasherize__.css.template +5 -27
- package/src/tree-view/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/tree-view/files/__name@dasherize__/__name@dasherize__.ts.template +16 -13
- package/src/tree-view/schema.json +19 -4
- package/src/utils/generate-component.js +3 -1
- package/src/utils/generate-component.js.map +1 -1
- package/src/utils/generate-component.ts +3 -1
- package/src/utils/generate-composition.js +7 -2
- package/src/utils/generate-composition.js.map +1 -1
- package/src/utils/generate-composition.ts +9 -2
- package/src/utils/schema-types.d.ts +1 -0
- package/src/utils/schema-types.ts +1 -0
- package/README.pt-BR.md +0 -330
package/src/button/schema.json
CHANGED
|
@@ -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": {
|
|
12
|
+
"$default": {
|
|
13
|
+
"$source": "argv",
|
|
14
|
+
"index": 0
|
|
15
|
+
},
|
|
13
16
|
"x-prompt": "What name would you like to use for the button 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": {
|
|
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": {
|
|
35
|
+
"$default": {
|
|
36
|
+
"$source": "projectName"
|
|
37
|
+
}
|
|
26
38
|
}
|
|
27
39
|
},
|
|
28
|
-
"required": [
|
|
40
|
+
"required": [
|
|
41
|
+
"name",
|
|
42
|
+
"project"
|
|
43
|
+
]
|
|
29
44
|
}
|
|
@@ -1,29 +1,9 @@
|
|
|
1
1
|
:host {
|
|
2
|
-
--semmet-color-primary: #18181b;
|
|
3
|
-
--semmet-color-on-primary: #ffffff;
|
|
4
|
-
--semmet-color-surface: #ffffff;
|
|
5
|
-
--semmet-color-surface-muted: #f4f4f5;
|
|
6
|
-
--semmet-color-outline: #d4d4d8;
|
|
7
|
-
--semmet-color-on-surface: #27272a;
|
|
8
|
-
--semmet-radius-sm: 8px;
|
|
9
|
-
--semmet-space-2xs: 8px;
|
|
10
|
-
--semmet-space-xs: 16px;
|
|
11
|
-
--semmet-space-sm: 24px;
|
|
12
|
-
--semmet-target-sm: 32px;
|
|
13
|
-
--semmet-target-md: 40px;
|
|
14
|
-
--semmet-target-lg: 48px;
|
|
15
|
-
--semmet-motion: 160ms cubic-bezier(0.2, 0, 0, 1);
|
|
16
|
-
|
|
17
2
|
display: inline-block;
|
|
18
|
-
font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
19
3
|
}
|
|
20
4
|
|
|
21
5
|
.semmet-button-group {
|
|
22
6
|
display: inline-flex;
|
|
23
|
-
border: 1px solid var(--semmet-color-outline);
|
|
24
|
-
border-radius: var(--semmet-radius-sm);
|
|
25
|
-
overflow: hidden;
|
|
26
|
-
background: var(--semmet-color-surface);
|
|
27
7
|
}
|
|
28
8
|
|
|
29
9
|
.semmet-button-group--vertical {
|
|
@@ -34,56 +14,8 @@
|
|
|
34
14
|
display: inline-flex;
|
|
35
15
|
align-items: center;
|
|
36
16
|
justify-content: center;
|
|
37
|
-
min-width: 2.75rem;
|
|
38
|
-
border: 0;
|
|
39
|
-
border-inline-end: 1px solid var(--semmet-color-outline);
|
|
40
|
-
color: var(--semmet-color-on-surface);
|
|
41
|
-
background: var(--semmet-color-surface);
|
|
42
17
|
font: inherit;
|
|
43
|
-
font-weight: 650;
|
|
44
|
-
line-height: 1.2;
|
|
45
|
-
white-space: nowrap;
|
|
46
18
|
cursor: pointer;
|
|
47
|
-
transition:
|
|
48
|
-
background-color var(--semmet-motion),
|
|
49
|
-
color var(--semmet-motion),
|
|
50
|
-
opacity var(--semmet-motion);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.semmet-button-group--vertical .semmet-button-group__button {
|
|
54
|
-
border-inline-end: 0;
|
|
55
|
-
border-block-end: 1px solid var(--semmet-color-outline);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
.semmet-button-group__button:last-child {
|
|
59
|
-
border-inline-end: 0;
|
|
60
|
-
border-block-end: 0;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
.semmet-button-group--sm .semmet-button-group__button {
|
|
64
|
-
min-height: var(--semmet-target-sm);
|
|
65
|
-
padding: var(--semmet-space-2xs) var(--semmet-space-xs);
|
|
66
|
-
font-size: 0.875rem;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
.semmet-button-group--md .semmet-button-group__button {
|
|
70
|
-
min-height: var(--semmet-target-md);
|
|
71
|
-
padding: var(--semmet-space-2xs) var(--semmet-space-xs);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.semmet-button-group--lg .semmet-button-group__button {
|
|
75
|
-
min-height: var(--semmet-target-lg);
|
|
76
|
-
padding: var(--semmet-space-xs) var(--semmet-space-sm);
|
|
77
|
-
font-size: 1rem;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.semmet-button-group__button:hover:not(:disabled) {
|
|
81
|
-
background: var(--semmet-color-surface-muted);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.semmet-button-group__button--pressed {
|
|
85
|
-
color: var(--semmet-color-on-primary);
|
|
86
|
-
background: var(--semmet-color-primary);
|
|
87
19
|
}
|
|
88
20
|
|
|
89
21
|
.semmet-button-group__button:disabled {
|
|
@@ -94,6 +26,6 @@
|
|
|
94
26
|
.semmet-button-group__button:focus-visible {
|
|
95
27
|
position: relative;
|
|
96
28
|
z-index: 1;
|
|
97
|
-
outline: 2px solid
|
|
98
|
-
outline-offset:
|
|
29
|
+
outline: 2px solid currentColor;
|
|
30
|
+
outline-offset: 2px;
|
|
99
31
|
}
|
|
@@ -3,7 +3,6 @@ import { Component, Directive, TemplateRef, booleanAttribute, computed, contentC
|
|
|
3
3
|
|
|
4
4
|
type <%= classify(name) %>Orientation = 'horizontal' | 'vertical';
|
|
5
5
|
type <%= classify(name) %>SelectionMode = 'none' | 'single' | 'multiple';
|
|
6
|
-
type <%= classify(name) %>Size = 'sm' | 'md' | 'lg';
|
|
7
6
|
|
|
8
7
|
export interface <%= classify(name) %>Item {
|
|
9
8
|
id: string;
|
|
@@ -41,7 +40,7 @@ export class <%= classify(name) %> {
|
|
|
41
40
|
readonly label = input('View options');
|
|
42
41
|
readonly orientation = input<<%= classify(name) %>Orientation>('horizontal');
|
|
43
42
|
readonly selectionMode = input<<%= classify(name) %>SelectionMode>('single');
|
|
44
|
-
readonly size = input
|
|
43
|
+
readonly size = input<string>('md');
|
|
45
44
|
readonly disabled = input(false, { transform: booleanAttribute });
|
|
46
45
|
readonly items = input<readonly <%= classify(name) %>Item[]>(DEFAULT_ITEMS);
|
|
47
46
|
readonly selectedIds = model<readonly string[]>(DEFAULT_SELECTED_IDS);
|
|
@@ -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": {
|
|
12
|
+
"$default": {
|
|
13
|
+
"$source": "argv",
|
|
14
|
+
"index": 0
|
|
15
|
+
},
|
|
13
16
|
"x-prompt": "What name would you like to use for the button group 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": {
|
|
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": {
|
|
35
|
+
"$default": {
|
|
36
|
+
"$source": "projectName"
|
|
37
|
+
}
|
|
26
38
|
}
|
|
27
39
|
},
|
|
28
|
-
"required": [
|
|
40
|
+
"required": [
|
|
41
|
+
"name",
|
|
42
|
+
"project"
|
|
43
|
+
]
|
|
29
44
|
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
:host {
|
|
2
|
-
--semmet-color-primary: #18181b;
|
|
3
|
-
--semmet-color-surface: #ffffff;
|
|
4
|
-
--semmet-color-outline: #d4d4d8;
|
|
5
|
-
--semmet-color-on-surface: #18181b;
|
|
6
|
-
--semmet-color-on-surface-variant: #52525b;
|
|
7
|
-
--semmet-radius-md: 12px;
|
|
8
|
-
--semmet-space-2xs: 8px;
|
|
9
|
-
--semmet-space-xs: 16px;
|
|
10
|
-
--semmet-space-sm: 24px;
|
|
11
|
-
|
|
12
|
-
display: block;
|
|
13
|
-
font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
14
|
-
font-size: 0.9375rem;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
article {
|
|
18
|
-
overflow: hidden;
|
|
19
|
-
background: var(--semmet-color-surface);
|
|
20
|
-
border: 1px solid var(--semmet-color-outline);
|
|
21
|
-
border-radius: var(--semmet-radius-md);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
h3 {
|
|
25
|
-
margin: var(--semmet-space-sm) var(--semmet-space-sm) var(--semmet-space-2xs);
|
|
26
|
-
font-size: 1.0625rem;
|
|
27
|
-
font-weight: 500;
|
|
28
|
-
color: var(--semmet-color-on-surface);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
p {
|
|
32
|
-
margin: 0;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.semmet-card__media :is(img, video, svg) {
|
|
36
|
-
display: block;
|
|
37
|
-
width: 100%;
|
|
38
|
-
height: auto;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.semmet-card__description {
|
|
42
|
-
margin: 0 var(--semmet-space-sm) var(--semmet-space-xs);
|
|
43
|
-
color: var(--semmet-color-on-surface-variant);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.semmet-card__actions {
|
|
47
|
-
display: flex;
|
|
48
|
-
flex-wrap: wrap;
|
|
49
|
-
gap: var(--semmet-space-xs);
|
|
50
|
-
margin: 0 var(--semmet-space-sm) var(--semmet-space-sm);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
a {
|
|
54
|
-
color: var(--semmet-color-primary);
|
|
55
|
-
font-weight: 500;
|
|
56
|
-
text-decoration: none;
|
|
57
|
-
border-radius: 4px;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
a:hover {
|
|
61
|
-
text-decoration: underline;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
a:focus-visible {
|
|
65
|
-
outline: 2px solid var(--semmet-color-primary);
|
|
66
|
-
outline-offset: 2px;
|
|
67
|
-
}
|
|
@@ -1,62 +1,17 @@
|
|
|
1
|
-
<!-- Semmet Angular: Card
|
|
1
|
+
<!-- Semmet Angular: Card - semantic article with a required accessible heading anchor. -->
|
|
2
2
|
<!--
|
|
3
3
|
Usage from a parent component template:
|
|
4
|
-
Import <%= classify(name) %>
|
|
5
|
-
|
|
6
|
-
<<%= selector %> title="Accessible components" description="Generate Angular components with ARIA." />
|
|
4
|
+
Import <%= classify(name) %> in that parent component.
|
|
7
5
|
|
|
8
6
|
<<%= selector %>>
|
|
9
|
-
<
|
|
10
|
-
|
|
11
|
-
</
|
|
12
|
-
|
|
13
|
-
<ng-template <%= camelize(name) %>Title>
|
|
14
|
-
Accessible components
|
|
15
|
-
</ng-template>
|
|
16
|
-
|
|
17
|
-
<ng-template <%= camelize(name) %>Description>
|
|
18
|
-
Generate Angular components with ARIA, keyboard behavior and signals.
|
|
19
|
-
</ng-template>
|
|
20
|
-
|
|
21
|
-
<ng-template <%= camelize(name) %>Actions>
|
|
22
|
-
<a href="/docs">Read docs</a>
|
|
23
|
-
</ng-template>
|
|
7
|
+
<h3 <%= camelize(name) %>Heading>Accessible components</h3>
|
|
8
|
+
<p>Generate Angular components with ARIA, keyboard behavior and signals.</p>
|
|
9
|
+
<a href="/docs">Read docs</a>
|
|
24
10
|
</<%= selector %>>
|
|
25
11
|
-->
|
|
26
|
-
<article [attr.aria-labelledby]="
|
|
27
|
-
|
|
28
|
-
<
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
@if (hasTitle()) {
|
|
34
|
-
<h3 [id]="instanceId + '-title'">
|
|
35
|
-
@if (titleTemplate(); as titleSlot) {
|
|
36
|
-
<ng-container [ngTemplateOutlet]="titleSlot.templateRef" />
|
|
37
|
-
} @else {
|
|
38
|
-
{{ title() }}
|
|
39
|
-
}
|
|
40
|
-
</h3>
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
@if (hasDescription()) {
|
|
44
|
-
<div class="semmet-card__description">
|
|
45
|
-
@if (descriptionTemplate(); as descriptionSlot) {
|
|
46
|
-
<ng-container [ngTemplateOutlet]="descriptionSlot.templateRef" />
|
|
47
|
-
} @else {
|
|
48
|
-
<p>{{ description() }}</p>
|
|
49
|
-
}
|
|
50
|
-
</div>
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
@if (hasActions()) {
|
|
54
|
-
<div class="semmet-card__actions">
|
|
55
|
-
@if (actions(); as actionsSlot) {
|
|
56
|
-
<ng-container [ngTemplateOutlet]="actionsSlot.templateRef" />
|
|
57
|
-
} @else {
|
|
58
|
-
<a [href]="linkHref()">{{ linkLabel() }}</a>
|
|
59
|
-
}
|
|
60
|
-
</div>
|
|
61
|
-
}
|
|
12
|
+
<article [attr.aria-labelledby]="instanceId + '-heading'">
|
|
13
|
+
<div [id]="instanceId + '-heading'">
|
|
14
|
+
<ng-content select="[<%= camelize(name) %>Heading]" />
|
|
15
|
+
</div>
|
|
16
|
+
<ng-content />
|
|
62
17
|
</article>
|
|
@@ -1,56 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Component, Directive, TemplateRef, computed, contentChild, inject, input } from '@angular/core';
|
|
1
|
+
import { Component } from '@angular/core';
|
|
3
2
|
|
|
4
3
|
let nextId = 0;
|
|
5
4
|
|
|
6
|
-
@Directive({
|
|
7
|
-
selector: 'ng-template[<%= camelize(name) %>Media]',
|
|
8
|
-
})
|
|
9
|
-
export class <%= classify(name) %>Media {
|
|
10
|
-
readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
@Directive({
|
|
14
|
-
selector: 'ng-template[<%= camelize(name) %>Title]',
|
|
15
|
-
})
|
|
16
|
-
export class <%= classify(name) %>Title {
|
|
17
|
-
readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
@Directive({
|
|
21
|
-
selector: 'ng-template[<%= camelize(name) %>Description]',
|
|
22
|
-
})
|
|
23
|
-
export class <%= classify(name) %>Description {
|
|
24
|
-
readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
@Directive({
|
|
28
|
-
selector: 'ng-template[<%= camelize(name) %>Actions]',
|
|
29
|
-
})
|
|
30
|
-
export class <%= classify(name) %>Actions {
|
|
31
|
-
readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
5
|
@Component({
|
|
35
6
|
selector: '<%= selector %>',
|
|
36
|
-
imports: [
|
|
7
|
+
imports: [],
|
|
37
8
|
templateUrl: './<%= dasherize(name) %>.html',
|
|
38
9
|
styleUrl: './<%= dasherize(name) %>.css',
|
|
39
10
|
})
|
|
40
11
|
export class <%= classify(name) %> {
|
|
41
|
-
protected readonly media = contentChild(<%= classify(name) %>Media);
|
|
42
|
-
protected readonly titleTemplate = contentChild(<%= classify(name) %>Title);
|
|
43
|
-
protected readonly descriptionTemplate = contentChild(<%= classify(name) %>Description);
|
|
44
|
-
protected readonly actions = contentChild(<%= classify(name) %>Actions);
|
|
45
12
|
protected readonly instanceId = `<%= dasherize(name) %>-${nextId++}`;
|
|
46
|
-
|
|
47
|
-
readonly title = input('Card title');
|
|
48
|
-
readonly description = input('Card description text.');
|
|
49
|
-
readonly linkHref = input('#');
|
|
50
|
-
readonly linkLabel = input('Learn more');
|
|
51
|
-
|
|
52
|
-
protected readonly hasTitle = computed(() => Boolean(this.titleTemplate()) || this.title().trim().length > 0);
|
|
53
|
-
protected readonly labelledBy = computed(() => this.hasTitle() ? `${this.instanceId}-title` : null);
|
|
54
|
-
protected readonly hasDescription = computed(() => Boolean(this.descriptionTemplate()) || this.description().trim().length > 0);
|
|
55
|
-
protected readonly hasActions = computed(() => Boolean(this.actions()) || this.linkLabel().trim().length > 0);
|
|
56
13
|
}
|
package/src/card/schema.json
CHANGED
|
@@ -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": {
|
|
12
|
+
"$default": {
|
|
13
|
+
"$source": "argv",
|
|
14
|
+
"index": 0
|
|
15
|
+
},
|
|
13
16
|
"x-prompt": "What name would you like to use for the card 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": {
|
|
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": {
|
|
35
|
+
"$default": {
|
|
36
|
+
"$source": "projectName"
|
|
37
|
+
}
|
|
26
38
|
}
|
|
27
39
|
},
|
|
28
|
-
"required": [
|
|
40
|
+
"required": [
|
|
41
|
+
"name",
|
|
42
|
+
"project"
|
|
43
|
+
]
|
|
29
44
|
}
|
|
@@ -1,25 +1,12 @@
|
|
|
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-md: 12px;
|
|
8
|
-
--semmet-space-xs: 16px;
|
|
9
|
-
--semmet-space-sm: 24px;
|
|
10
|
-
--semmet-target-md: 40px;
|
|
11
|
-
--semmet-motion: 160ms cubic-bezier(0.2, 0, 0, 1);
|
|
12
|
-
|
|
13
2
|
display: block;
|
|
14
|
-
font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
15
|
-
font-size: 0.9375rem;
|
|
16
3
|
}
|
|
17
4
|
|
|
18
5
|
section {
|
|
19
6
|
position: relative;
|
|
20
|
-
display:
|
|
7
|
+
display: grid;
|
|
8
|
+
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
21
9
|
align-items: center;
|
|
22
|
-
gap: var(--semmet-space-xs);
|
|
23
10
|
}
|
|
24
11
|
|
|
25
12
|
[aria-live] {
|
|
@@ -28,29 +15,13 @@ section {
|
|
|
28
15
|
display: flex;
|
|
29
16
|
align-items: center;
|
|
30
17
|
justify-content: center;
|
|
31
|
-
padding: var(--semmet-space-sm);
|
|
32
|
-
color: var(--semmet-color-on-surface);
|
|
33
|
-
background: var(--semmet-color-surface);
|
|
34
|
-
border: 1px solid var(--semmet-color-outline);
|
|
35
|
-
border-radius: var(--semmet-radius-md);
|
|
36
18
|
text-align: center;
|
|
37
19
|
}
|
|
38
20
|
|
|
39
21
|
button {
|
|
40
22
|
flex-shrink: 0;
|
|
41
|
-
|
|
42
|
-
height: var(--semmet-target-md);
|
|
43
|
-
font-size: 1.25rem;
|
|
44
|
-
color: var(--semmet-color-on-primary);
|
|
45
|
-
background: var(--semmet-color-primary);
|
|
46
|
-
border: none;
|
|
47
|
-
border-radius: 50%;
|
|
23
|
+
font: inherit;
|
|
48
24
|
cursor: pointer;
|
|
49
|
-
transition: background-color var(--semmet-motion);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
button:hover {
|
|
53
|
-
background: color-mix(in srgb, var(--semmet-color-primary) 88%, black);
|
|
54
25
|
}
|
|
55
26
|
|
|
56
27
|
button:disabled {
|
|
@@ -59,6 +30,6 @@ button:disabled {
|
|
|
59
30
|
}
|
|
60
31
|
|
|
61
32
|
button:focus-visible {
|
|
62
|
-
outline: 2px solid
|
|
33
|
+
outline: 2px solid currentColor;
|
|
63
34
|
outline-offset: 2px;
|
|
64
35
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Usage from a parent component template:
|
|
4
4
|
Import <%= classify(name) %> and <%= classify(name) %>Slide in that parent component.
|
|
5
5
|
|
|
6
|
-
<<%= selector
|
|
6
|
+
<<%= selector %> label="Featured items">
|
|
7
7
|
<ng-template <%= camelize(name) %>Slide id="intro" label="Introduction">
|
|
8
8
|
<app-intro-slide />
|
|
9
9
|
</ng-template>
|
|
@@ -15,7 +15,8 @@ Import <%= classify(name) %> and <%= classify(name) %>Slide in that parent compo
|
|
|
15
15
|
|
|
16
16
|
Set [preserveContent]="false" on <<%= selector %>> to destroy inactive slide content.
|
|
17
17
|
-->
|
|
18
|
-
<section aria-roledescription="carousel" aria-label="
|
|
18
|
+
<section aria-roledescription="carousel" [attr.aria-label]="label()">
|
|
19
|
+
<button type="button" [disabled]="slides().length <= 1" (click)="previous()" [attr.aria-label]="previousLabel()">‹</button>
|
|
19
20
|
<div aria-live="polite">
|
|
20
21
|
@for (slide of slides(); track slide.id(); let i = $index) {
|
|
21
22
|
<div
|
|
@@ -29,6 +30,5 @@ Set [preserveContent]="false" on <<%= selector %>> to destroy inactive slide con
|
|
|
29
30
|
</div>
|
|
30
31
|
}
|
|
31
32
|
</div>
|
|
32
|
-
<button type="button" [disabled]="slides().length <= 1" (click)="
|
|
33
|
-
<button type="button" [disabled]="slides().length <= 1" (click)="next()" aria-label="Next slide">›</button>
|
|
33
|
+
<button type="button" [disabled]="slides().length <= 1" (click)="next()" [attr.aria-label]="nextLabel()">›</button>
|
|
34
34
|
</section>
|
|
@@ -35,6 +35,10 @@ export class <%= classify(name) %>Slide {
|
|
|
35
35
|
export class <%= classify(name) %> {
|
|
36
36
|
protected readonly slides = contentChildren(<%= classify(name) %>Slide);
|
|
37
37
|
protected readonly instanceId = `<%= dasherize(name) %>-${nextId++}`;
|
|
38
|
+
|
|
39
|
+
readonly label = input('Featured items');
|
|
40
|
+
readonly previousLabel = input('Previous slide');
|
|
41
|
+
readonly nextLabel = input('Next slide');
|
|
38
42
|
readonly preserveContent = input(true, { transform: booleanAttribute });
|
|
39
43
|
|
|
40
44
|
protected readonly activeIndex = signal(0);
|
package/src/carousel/schema.json
CHANGED
|
@@ -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": {
|
|
12
|
+
"$default": {
|
|
13
|
+
"$source": "argv",
|
|
14
|
+
"index": 0
|
|
15
|
+
},
|
|
13
16
|
"x-prompt": "What name would you like to use for the carousel 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": {
|
|
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": {
|
|
35
|
+
"$default": {
|
|
36
|
+
"$source": "projectName"
|
|
37
|
+
}
|
|
26
38
|
}
|
|
27
39
|
},
|
|
28
|
-
"required": [
|
|
40
|
+
"required": [
|
|
41
|
+
"name",
|
|
42
|
+
"project"
|
|
43
|
+
]
|
|
29
44
|
}
|
|
@@ -1,24 +1,12 @@
|
|
|
1
1
|
:host {
|
|
2
|
-
--semmet-color-primary: #18181b;
|
|
3
|
-
--semmet-color-on-primary: #ffffff;
|
|
4
|
-
--semmet-color-outline: #71717a;
|
|
5
|
-
--semmet-color-on-surface: #18181b;
|
|
6
|
-
--semmet-space-sm: 24px;
|
|
7
|
-
--semmet-target-sm: 32px;
|
|
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
|
[role='checkbox'] {
|
|
16
6
|
position: relative;
|
|
17
7
|
display: inline-flex;
|
|
18
8
|
align-items: center;
|
|
19
|
-
padding-left:
|
|
20
|
-
min-height: var(--semmet-target-sm);
|
|
21
|
-
color: var(--semmet-color-on-surface);
|
|
9
|
+
padding-left: 1.5rem;
|
|
22
10
|
cursor: pointer;
|
|
23
11
|
user-select: none;
|
|
24
12
|
}
|
|
@@ -30,15 +18,12 @@
|
|
|
30
18
|
width: 1.125rem;
|
|
31
19
|
height: 1.125rem;
|
|
32
20
|
box-sizing: border-box;
|
|
33
|
-
border: 2px solid
|
|
34
|
-
border-radius: 4px;
|
|
21
|
+
border: 2px solid currentColor;
|
|
35
22
|
background: transparent;
|
|
36
|
-
transition: background-color var(--semmet-motion), border-color var(--semmet-motion);
|
|
37
23
|
}
|
|
38
24
|
|
|
39
25
|
[role='checkbox'][aria-checked='true']::before {
|
|
40
|
-
background:
|
|
41
|
-
border-color: var(--semmet-color-primary);
|
|
26
|
+
background: currentColor;
|
|
42
27
|
}
|
|
43
28
|
|
|
44
29
|
[role='checkbox']::after {
|
|
@@ -54,11 +39,10 @@
|
|
|
54
39
|
}
|
|
55
40
|
|
|
56
41
|
[role='checkbox'][aria-checked='true']::after {
|
|
57
|
-
border-color:
|
|
42
|
+
border-color: Canvas;
|
|
58
43
|
}
|
|
59
44
|
|
|
60
45
|
[role='checkbox']:focus-visible {
|
|
61
|
-
outline: 2px solid
|
|
46
|
+
outline: 2px solid currentColor;
|
|
62
47
|
outline-offset: 2px;
|
|
63
|
-
border-radius: 4px;
|
|
64
48
|
}
|