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.
- 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 +2 -32
- 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 +0 -1
- package/src/utils/generate-composition.js.map +1 -1
- package/src/utils/generate-composition.ts +0 -1
- package/src/utils/schema-types.d.ts +1 -0
- package/src/utils/schema-types.ts +1 -0
- package/README.pt-BR.md +0 -330
|
@@ -1,56 +1,22 @@
|
|
|
1
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-radius-sm: 8px;
|
|
7
|
-
--semmet-space-2xs: 8px;
|
|
8
|
-
--semmet-space-xs: 16px;
|
|
9
|
-
--semmet-target-md: 40px;
|
|
10
|
-
--semmet-motion: 160ms cubic-bezier(0.2, 0, 0, 1);
|
|
11
|
-
|
|
12
2
|
display: block;
|
|
13
|
-
font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
14
|
-
font-size: 0.9375rem;
|
|
15
3
|
}
|
|
16
4
|
|
|
17
5
|
span {
|
|
18
6
|
display: block;
|
|
19
|
-
margin-bottom: var(--semmet-space-2xs);
|
|
20
|
-
font-weight: 500;
|
|
21
|
-
color: var(--semmet-color-on-surface);
|
|
22
7
|
}
|
|
23
8
|
|
|
24
9
|
ul {
|
|
25
10
|
margin: 0;
|
|
26
|
-
padding:
|
|
11
|
+
padding: 0;
|
|
27
12
|
list-style: none;
|
|
28
|
-
border: 1px solid var(--semmet-color-outline);
|
|
29
|
-
border-radius: var(--semmet-radius-sm);
|
|
30
|
-
background: var(--semmet-color-surface);
|
|
31
|
-
max-width: 16rem;
|
|
32
13
|
}
|
|
33
14
|
|
|
34
15
|
ul:focus-visible {
|
|
35
|
-
outline: 2px solid
|
|
36
|
-
outline-offset:
|
|
16
|
+
outline: 2px solid currentColor;
|
|
17
|
+
outline-offset: 2px;
|
|
37
18
|
}
|
|
38
19
|
|
|
39
20
|
[role='option'] {
|
|
40
|
-
min-height: var(--semmet-target-md);
|
|
41
|
-
padding: var(--semmet-space-2xs) var(--semmet-space-xs);
|
|
42
|
-
border-radius: 6px;
|
|
43
|
-
color: var(--semmet-color-on-surface);
|
|
44
21
|
cursor: pointer;
|
|
45
|
-
transition: background-color var(--semmet-motion);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
[role='option'][aria-selected='true'] {
|
|
49
|
-
background: color-mix(in srgb, var(--semmet-color-primary) 12%, transparent);
|
|
50
|
-
color: var(--semmet-color-primary);
|
|
51
|
-
font-weight: 500;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
[role='option']:hover {
|
|
55
|
-
background: color-mix(in srgb, var(--semmet-color-on-surface) 6%, transparent);
|
|
56
22
|
}
|
|
@@ -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="Choose an option" />
|
|
7
7
|
-->
|
|
8
|
-
<span [id]="instanceId + '-label'">
|
|
8
|
+
<span [id]="instanceId + '-label'">{{ label() }}</span>
|
|
9
9
|
<ul
|
|
10
10
|
role="listbox"
|
|
11
11
|
[attr.aria-labelledby]="instanceId + '-label'"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, computed, signal } from '@angular/core';
|
|
1
|
+
import { Component, computed, input, signal } from '@angular/core';
|
|
2
2
|
|
|
3
3
|
interface <%= classify(name) %>Option {
|
|
4
4
|
id: number;
|
|
@@ -22,6 +22,8 @@ export class <%= classify(name) %> {
|
|
|
22
22
|
|
|
23
23
|
protected readonly activeIndex = signal(0);
|
|
24
24
|
|
|
25
|
+
readonly label = input('Choose an option');
|
|
26
|
+
|
|
25
27
|
protected readonly activeDescendantId = computed(
|
|
26
28
|
() => `${this.instanceId}-option-${this.options[this.activeIndex()].id}`
|
|
27
29
|
);
|
package/src/listbox/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 listbox 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,46 +1,17 @@
|
|
|
1
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-sm: 8px;
|
|
8
|
-
--semmet-radius-md: 12px;
|
|
9
|
-
--semmet-space-3xs: 4px;
|
|
10
|
-
--semmet-space-2xs: 8px;
|
|
11
|
-
--semmet-space-xs: 16px;
|
|
12
|
-
--semmet-target-md: 40px;
|
|
13
|
-
--semmet-elevation-3: 0 8px 24px rgba(20, 24, 23, 0.18), 0 2px 8px rgba(20, 24, 23, 0.1);
|
|
14
|
-
--semmet-motion: 160ms cubic-bezier(0.2, 0, 0, 1);
|
|
15
|
-
|
|
16
2
|
position: relative;
|
|
17
3
|
display: inline-block;
|
|
18
|
-
font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
19
|
-
font-size: 0.9375rem;
|
|
20
4
|
}
|
|
21
5
|
|
|
22
6
|
button {
|
|
23
7
|
display: flex;
|
|
24
8
|
align-items: center;
|
|
25
|
-
gap: var(--semmet-space-2xs);
|
|
26
|
-
min-height: var(--semmet-target-md);
|
|
27
9
|
font: inherit;
|
|
28
|
-
font-weight: 500;
|
|
29
|
-
color: var(--semmet-color-on-surface);
|
|
30
|
-
background: var(--semmet-color-surface);
|
|
31
|
-
border: 1px solid var(--semmet-color-outline);
|
|
32
|
-
border-radius: var(--semmet-radius-sm);
|
|
33
|
-
padding: var(--semmet-space-2xs) var(--semmet-space-xs);
|
|
34
10
|
cursor: pointer;
|
|
35
|
-
transition: background-color var(--semmet-motion);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
button:hover {
|
|
39
|
-
background: color-mix(in srgb, var(--semmet-color-on-surface) 6%, transparent);
|
|
40
11
|
}
|
|
41
12
|
|
|
42
13
|
button:focus-visible {
|
|
43
|
-
outline: 2px solid
|
|
14
|
+
outline: 2px solid currentColor;
|
|
44
15
|
outline-offset: 2px;
|
|
45
16
|
}
|
|
46
17
|
|
|
@@ -48,10 +19,9 @@ button::after {
|
|
|
48
19
|
content: '';
|
|
49
20
|
width: 0.4rem;
|
|
50
21
|
height: 0.4rem;
|
|
51
|
-
border-right: 2px solid
|
|
52
|
-
border-bottom: 2px solid
|
|
22
|
+
border-right: 2px solid currentColor;
|
|
23
|
+
border-bottom: 2px solid currentColor;
|
|
53
24
|
transform: rotate(45deg);
|
|
54
|
-
transition: transform var(--semmet-motion);
|
|
55
25
|
}
|
|
56
26
|
|
|
57
27
|
button[aria-expanded='true']::after {
|
|
@@ -61,28 +31,18 @@ button[aria-expanded='true']::after {
|
|
|
61
31
|
ul {
|
|
62
32
|
position: absolute;
|
|
63
33
|
z-index: 1;
|
|
64
|
-
top:
|
|
34
|
+
top: 100%;
|
|
65
35
|
left: 0;
|
|
66
|
-
min-width: 10rem;
|
|
67
36
|
margin: 0;
|
|
68
|
-
padding:
|
|
37
|
+
padding: 0;
|
|
69
38
|
list-style: none;
|
|
70
|
-
background: var(--semmet-color-surface);
|
|
71
|
-
border-radius: var(--semmet-radius-md);
|
|
72
|
-
box-shadow: var(--semmet-elevation-3);
|
|
73
39
|
}
|
|
74
40
|
|
|
75
41
|
[role='menuitem'] {
|
|
76
|
-
min-height: var(--semmet-target-md);
|
|
77
|
-
padding: var(--semmet-space-2xs) var(--semmet-space-xs);
|
|
78
|
-
border-radius: 6px;
|
|
79
|
-
color: var(--semmet-color-on-surface);
|
|
80
42
|
cursor: pointer;
|
|
81
|
-
transition: background-color var(--semmet-motion);
|
|
82
43
|
}
|
|
83
44
|
|
|
84
|
-
[role='menuitem']:hover,
|
|
85
45
|
[role='menuitem']:focus-visible {
|
|
86
|
-
|
|
87
|
-
outline:
|
|
46
|
+
outline: 2px solid currentColor;
|
|
47
|
+
outline-offset: 2px;
|
|
88
48
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Usage from a parent component template:
|
|
4
4
|
Import <%= classify(name) %> in that parent component.
|
|
5
5
|
|
|
6
|
-
<<%= selector %> />
|
|
6
|
+
<<%= selector %> label="Options" [items]="menuItems" />
|
|
7
7
|
-->
|
|
8
8
|
<button
|
|
9
9
|
#menuButton
|
|
@@ -15,7 +15,7 @@ Import <%= classify(name) %> in that parent component.
|
|
|
15
15
|
(click)="toggle()"
|
|
16
16
|
(keydown)="handleButtonKeydown($event)"
|
|
17
17
|
>
|
|
18
|
-
|
|
18
|
+
{{ label() }}
|
|
19
19
|
</button>
|
|
20
20
|
<ul
|
|
21
21
|
#menu
|
|
@@ -24,7 +24,7 @@ Import <%= classify(name) %> in that parent component.
|
|
|
24
24
|
[attr.aria-labelledby]="instanceId + '-button'"
|
|
25
25
|
[hidden]="!isOpen()"
|
|
26
26
|
>
|
|
27
|
-
@for (item of items; track item.id; let i = $index) {
|
|
27
|
+
@for (item of items(); track item.id; let i = $index) {
|
|
28
28
|
<li role="none">
|
|
29
29
|
<div
|
|
30
30
|
#menuItem
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import { Component, ElementRef, Injector, afterNextRender, inject, signal, viewChild, viewChildren } from '@angular/core';
|
|
1
|
+
import { Component, ElementRef, Injector, afterNextRender, inject, input, signal, viewChild, viewChildren } from '@angular/core';
|
|
2
2
|
|
|
3
3
|
interface <%= classify(name) %>Item {
|
|
4
4
|
id: number;
|
|
5
5
|
label: string;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
+
const DEFAULT_ITEMS: readonly <%= classify(name) %>Item[] = [
|
|
9
|
+
{ id: 1, label: 'First option' },
|
|
10
|
+
{ id: 2, label: 'Second option' },
|
|
11
|
+
{ id: 3, label: 'Third option' },
|
|
12
|
+
];
|
|
13
|
+
|
|
8
14
|
let nextId = 0;
|
|
9
15
|
|
|
10
16
|
@Component({
|
|
@@ -23,14 +29,11 @@ export class <%= classify(name) %> {
|
|
|
23
29
|
private readonly menuItems = viewChildren<ElementRef<HTMLElement>>('menuItem');
|
|
24
30
|
|
|
25
31
|
protected readonly instanceId = `<%= dasherize(name) %>-${nextId++}`;
|
|
26
|
-
protected readonly items: <%= classify(name) %>Item[] = [
|
|
27
|
-
{ id: 1, label: 'First option' },
|
|
28
|
-
{ id: 2, label: 'Second option' },
|
|
29
|
-
{ id: 3, label: 'Third option' },
|
|
30
|
-
];
|
|
31
|
-
|
|
32
32
|
protected readonly isOpen = signal(false);
|
|
33
33
|
|
|
34
|
+
readonly label = input('Options');
|
|
35
|
+
readonly items = input<readonly <%= classify(name) %>Item[]>(DEFAULT_ITEMS);
|
|
36
|
+
|
|
34
37
|
protected toggle(): void {
|
|
35
38
|
this.isOpen.set(true);
|
|
36
39
|
this.focusFirstItem();
|
|
@@ -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 menu 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,23 +1,11 @@
|
|
|
1
1
|
:host {
|
|
2
|
-
--semmet-color-primary: #18181b;
|
|
3
|
-
--semmet-color-on-surface: #18181b;
|
|
4
|
-
--semmet-space-2xs: 8px;
|
|
5
|
-
|
|
6
2
|
display: block;
|
|
7
|
-
font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
8
|
-
font-size: 0.9375rem;
|
|
9
3
|
}
|
|
10
4
|
|
|
11
5
|
label {
|
|
12
6
|
display: block;
|
|
13
|
-
margin-bottom: var(--semmet-space-2xs);
|
|
14
|
-
font-weight: 500;
|
|
15
|
-
color: var(--semmet-color-on-surface);
|
|
16
7
|
}
|
|
17
8
|
|
|
18
9
|
meter {
|
|
19
10
|
width: 100%;
|
|
20
|
-
max-width: 20rem;
|
|
21
|
-
height: 0.75rem;
|
|
22
|
-
accent-color: var(--semmet-color-primary);
|
|
23
11
|
}
|
|
@@ -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="Disk usage" />
|
|
7
7
|
-->
|
|
8
|
-
<label [for]="instanceId">
|
|
8
|
+
<label [for]="instanceId">{{ label() }}</label>
|
|
9
9
|
<meter [id]="instanceId" min="0" max="100" [value]="value()" low="50" high="90" optimum="0">
|
|
10
10
|
{{ value() }}%
|
|
11
11
|
</meter>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, signal } from '@angular/core';
|
|
1
|
+
import { Component, input, signal } from '@angular/core';
|
|
2
2
|
|
|
3
3
|
let nextId = 0;
|
|
4
4
|
|
|
@@ -11,4 +11,6 @@ let nextId = 0;
|
|
|
11
11
|
export class <%= classify(name) %> {
|
|
12
12
|
protected readonly instanceId = `<%= dasherize(name) %>-${nextId++}`;
|
|
13
13
|
protected readonly value = signal(70);
|
|
14
|
+
|
|
15
|
+
readonly label = input('Disk usage');
|
|
14
16
|
}
|
package/src/meter/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 meter 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,40 +1,17 @@
|
|
|
1
1
|
:host {
|
|
2
|
-
--semmet-color-primary: #18181b;
|
|
3
|
-
--semmet-color-surface: #ffffff;
|
|
4
|
-
--semmet-color-surface-muted: #f4f4f5;
|
|
5
|
-
--semmet-color-outline: #d4d4d8;
|
|
6
|
-
--semmet-color-on-surface: #27272a;
|
|
7
|
-
--semmet-color-on-surface-variant: #71717a;
|
|
8
|
-
--semmet-radius-md: 10px;
|
|
9
|
-
--semmet-space-3xs: 4px;
|
|
10
|
-
--semmet-space-2xs: 8px;
|
|
11
|
-
--semmet-space-xs: 16px;
|
|
12
|
-
--semmet-target-md: 40px;
|
|
13
|
-
--semmet-motion: 160ms cubic-bezier(0.2, 0, 0, 1);
|
|
14
|
-
|
|
15
2
|
display: block;
|
|
16
|
-
font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
17
3
|
}
|
|
18
4
|
|
|
19
5
|
.semmet-navbar {
|
|
20
6
|
display: grid;
|
|
21
7
|
grid-template-columns: 1fr auto;
|
|
22
8
|
align-items: center;
|
|
23
|
-
gap: var(--semmet-space-xs);
|
|
24
|
-
padding: var(--semmet-space-2xs);
|
|
25
|
-
border: 1px solid var(--semmet-color-outline);
|
|
26
|
-
border-radius: var(--semmet-radius-md);
|
|
27
|
-
color: var(--semmet-color-on-surface);
|
|
28
|
-
background: var(--semmet-color-surface);
|
|
29
9
|
}
|
|
30
10
|
|
|
31
11
|
.semmet-navbar__brand {
|
|
32
12
|
display: inline-flex;
|
|
33
13
|
align-items: center;
|
|
34
|
-
min-height: var(--semmet-target-md);
|
|
35
14
|
color: inherit;
|
|
36
|
-
font-size: 1.0625rem;
|
|
37
|
-
font-weight: 800;
|
|
38
15
|
text-decoration: none;
|
|
39
16
|
}
|
|
40
17
|
|
|
@@ -43,13 +20,11 @@
|
|
|
43
20
|
display: inline-flex;
|
|
44
21
|
align-items: center;
|
|
45
22
|
justify-content: center;
|
|
46
|
-
width: var(--semmet-target-md);
|
|
47
|
-
height: var(--semmet-target-md);
|
|
48
|
-
border: 1px solid var(--semmet-color-outline);
|
|
49
|
-
border-radius: var(--semmet-radius-md);
|
|
50
23
|
color: inherit;
|
|
51
|
-
background:
|
|
24
|
+
background: none;
|
|
25
|
+
border: 0;
|
|
52
26
|
cursor: pointer;
|
|
27
|
+
font: inherit;
|
|
53
28
|
}
|
|
54
29
|
|
|
55
30
|
.semmet-navbar__toggle span,
|
|
@@ -58,7 +33,6 @@
|
|
|
58
33
|
display: block;
|
|
59
34
|
width: 1.125rem;
|
|
60
35
|
height: 0.125rem;
|
|
61
|
-
border-radius: 999px;
|
|
62
36
|
background: currentColor;
|
|
63
37
|
}
|
|
64
38
|
|
|
@@ -92,42 +66,21 @@
|
|
|
92
66
|
|
|
93
67
|
.semmet-navbar__list {
|
|
94
68
|
display: grid;
|
|
95
|
-
gap: var(--semmet-space-3xs);
|
|
96
69
|
margin: 0;
|
|
97
|
-
padding:
|
|
70
|
+
padding: 0;
|
|
98
71
|
list-style: none;
|
|
99
72
|
}
|
|
100
73
|
|
|
101
74
|
.semmet-navbar__actions {
|
|
102
75
|
display: flex;
|
|
103
76
|
flex-wrap: wrap;
|
|
104
|
-
gap: var(--semmet-space-2xs);
|
|
105
|
-
padding-top: var(--semmet-space-xs);
|
|
106
77
|
}
|
|
107
78
|
|
|
108
79
|
.semmet-navbar__link {
|
|
109
80
|
display: flex;
|
|
110
81
|
align-items: center;
|
|
111
|
-
|
|
112
|
-
padding: var(--semmet-space-2xs) var(--semmet-space-xs);
|
|
113
|
-
border-radius: var(--semmet-radius-md);
|
|
114
|
-
color: var(--semmet-color-on-surface-variant);
|
|
115
|
-
font-weight: 650;
|
|
82
|
+
color: inherit;
|
|
116
83
|
text-decoration: none;
|
|
117
|
-
transition:
|
|
118
|
-
background-color var(--semmet-motion),
|
|
119
|
-
color var(--semmet-motion),
|
|
120
|
-
opacity var(--semmet-motion);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
.semmet-navbar__link:hover:not(.semmet-navbar__link--disabled) {
|
|
124
|
-
color: var(--semmet-color-on-surface);
|
|
125
|
-
background: var(--semmet-color-surface-muted);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
.semmet-navbar__link--current {
|
|
129
|
-
color: var(--semmet-color-on-surface);
|
|
130
|
-
background: var(--semmet-color-surface-muted);
|
|
131
84
|
}
|
|
132
85
|
|
|
133
86
|
.semmet-navbar__link--disabled {
|
|
@@ -139,14 +92,13 @@
|
|
|
139
92
|
.semmet-navbar__toggle:focus-visible,
|
|
140
93
|
.semmet-navbar__link:focus-visible,
|
|
141
94
|
.semmet-navbar__actions :is(a, button):focus-visible {
|
|
142
|
-
outline: 2px solid
|
|
95
|
+
outline: 2px solid currentColor;
|
|
143
96
|
outline-offset: 2px;
|
|
144
97
|
}
|
|
145
98
|
|
|
146
99
|
@media (min-width: 48rem) {
|
|
147
100
|
.semmet-navbar {
|
|
148
101
|
grid-template-columns: auto 1fr;
|
|
149
|
-
padding-inline: var(--semmet-space-2xs);
|
|
150
102
|
}
|
|
151
103
|
|
|
152
104
|
.semmet-navbar__toggle {
|
|
@@ -156,20 +108,12 @@
|
|
|
156
108
|
.semmet-navbar__menu {
|
|
157
109
|
display: flex;
|
|
158
110
|
align-items: center;
|
|
159
|
-
justify-content: flex-end;
|
|
160
|
-
gap: var(--semmet-space-xs);
|
|
161
111
|
grid-column: auto;
|
|
162
112
|
}
|
|
163
113
|
|
|
164
114
|
.semmet-navbar__list {
|
|
165
115
|
display: flex;
|
|
166
116
|
align-items: center;
|
|
167
|
-
justify-content: flex-end;
|
|
168
|
-
gap: var(--semmet-space-3xs);
|
|
169
117
|
padding: 0;
|
|
170
118
|
}
|
|
171
|
-
|
|
172
|
-
.semmet-navbar__actions {
|
|
173
|
-
padding-top: 0;
|
|
174
|
-
}
|
|
175
119
|
}
|
package/src/navbar/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 navbar 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
|
}
|