semmet-angular 0.42.0 → 0.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +2 -315
- package/README.md +172 -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 +21 -1
- 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/e2e/index.d.ts +2 -0
- package/src/e2e/index.js +90 -0
- package/src/e2e/index.js.map +1 -0
- package/src/e2e/index.ts +106 -0
- package/src/e2e/schema.d.ts +2 -0
- package/src/e2e/schema.js +3 -0
- package/src/e2e/schema.js.map +1 -0
- package/src/e2e/schema.json +9 -0
- package/src/e2e/schema.ts +1 -0
- 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/ng-add/index.d.ts +1 -1
- package/src/ng-add/index.js +2 -72
- package/src/ng-add/index.js.map +1 -1
- package/src/ng-add/index.ts +3 -86
- package/src/ng-add/schema.d.ts +0 -1
- package/src/ng-add/schema.json +0 -5
- package/src/ng-add/schema.ts +0 -1
- 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
|
@@ -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 disclosure 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
|
}
|
package/src/e2e/index.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.e2e = e2e;
|
|
4
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
|
5
|
+
const tasks_1 = require("@angular-devkit/schematics/tasks");
|
|
6
|
+
const PLAYWRIGHT_VERSION = '^1.61.1';
|
|
7
|
+
const TYPES_NODE_VERSION = '^20.11.0';
|
|
8
|
+
function e2e() {
|
|
9
|
+
return (0, schematics_1.chain)([addPlaywrightDependency, addPackageScripts, extendVerificationScript, addPlaywrightConfig, installPackages]);
|
|
10
|
+
}
|
|
11
|
+
function addPlaywrightDependency(tree) {
|
|
12
|
+
const packageJson = readJson(tree, '/package.json');
|
|
13
|
+
const devDependencies = packageJson.devDependencies ?? {};
|
|
14
|
+
packageJson.devDependencies = {
|
|
15
|
+
...devDependencies,
|
|
16
|
+
'@playwright/test': devDependencies['@playwright/test'] ?? PLAYWRIGHT_VERSION,
|
|
17
|
+
'@types/node': devDependencies['@types/node'] ?? TYPES_NODE_VERSION,
|
|
18
|
+
};
|
|
19
|
+
writeJson(tree, '/package.json', packageJson);
|
|
20
|
+
}
|
|
21
|
+
function addPackageScripts(tree) {
|
|
22
|
+
const packageJson = readJson(tree, '/package.json');
|
|
23
|
+
const scripts = packageJson.scripts ?? {};
|
|
24
|
+
packageJson.scripts = {
|
|
25
|
+
...scripts,
|
|
26
|
+
e2e: scripts.e2e ?? 'playwright test',
|
|
27
|
+
'e2e:ui': scripts['e2e:ui'] ?? 'playwright test --ui',
|
|
28
|
+
'e2e:report': scripts['e2e:report'] ?? 'playwright show-report',
|
|
29
|
+
};
|
|
30
|
+
writeJson(tree, '/package.json', packageJson);
|
|
31
|
+
}
|
|
32
|
+
/** Folds `npm run e2e` into a `verify` script that `ng add` may have already created without it. */
|
|
33
|
+
function extendVerificationScript(tree) {
|
|
34
|
+
const packageJson = readJson(tree, '/package.json');
|
|
35
|
+
const scripts = packageJson.scripts ?? {};
|
|
36
|
+
if (!scripts.verify || scripts.verify.includes('npm run e2e')) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
packageJson.scripts = {
|
|
40
|
+
...scripts,
|
|
41
|
+
verify: `${scripts.verify} && npm run e2e`,
|
|
42
|
+
};
|
|
43
|
+
writeJson(tree, '/package.json', packageJson);
|
|
44
|
+
}
|
|
45
|
+
function addPlaywrightConfig(tree) {
|
|
46
|
+
if (tree.exists('/playwright.config.ts')) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
tree.create('/playwright.config.ts', `/// <reference types="node" />
|
|
50
|
+
|
|
51
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
52
|
+
|
|
53
|
+
export default defineConfig({
|
|
54
|
+
testDir: './src',
|
|
55
|
+
testMatch: '**/*.e2e-spec.ts',
|
|
56
|
+
fullyParallel: true,
|
|
57
|
+
forbidOnly: !!process.env['CI'],
|
|
58
|
+
retries: process.env['CI'] ? 2 : 0,
|
|
59
|
+
workers: process.env['CI'] ? 1 : undefined,
|
|
60
|
+
reporter: 'html',
|
|
61
|
+
use: {
|
|
62
|
+
baseURL: 'http://localhost:4200',
|
|
63
|
+
trace: 'on-first-retry',
|
|
64
|
+
},
|
|
65
|
+
webServer: {
|
|
66
|
+
command: 'npm run start',
|
|
67
|
+
url: 'http://localhost:4200',
|
|
68
|
+
reuseExistingServer: !process.env['CI'],
|
|
69
|
+
timeout: 120 * 1000,
|
|
70
|
+
},
|
|
71
|
+
projects: [
|
|
72
|
+
{
|
|
73
|
+
name: 'chromium',
|
|
74
|
+
use: { ...devices['Desktop Chrome'] },
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
});
|
|
78
|
+
`);
|
|
79
|
+
}
|
|
80
|
+
function installPackages(_tree, context) {
|
|
81
|
+
context.addTask(new tasks_1.NodePackageInstallTask());
|
|
82
|
+
}
|
|
83
|
+
function readJson(tree, path) {
|
|
84
|
+
const content = tree.readText(path);
|
|
85
|
+
return JSON.parse(content);
|
|
86
|
+
}
|
|
87
|
+
function writeJson(tree, path, value) {
|
|
88
|
+
tree.overwrite(path, `${JSON.stringify(value, null, 2)}\n`);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;AAMA,kBAEC;AARD,2DAAiF;AACjF,4DAA0E;AAE1E,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAEtC,SAAgB,GAAG;IACjB,OAAO,IAAA,kBAAK,EAAC,CAAC,uBAAuB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAC,CAAC;AAC7H,CAAC;AAED,SAAS,uBAAuB,CAAC,IAAU;IACzC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,WAAW,CAAC,eAAe,IAAI,EAAE,CAAC;IAE1D,WAAW,CAAC,eAAe,GAAG;QAC5B,GAAG,eAAe;QAClB,kBAAkB,EAAE,eAAe,CAAC,kBAAkB,CAAC,IAAI,kBAAkB;QAC7E,aAAa,EAAE,eAAe,CAAC,aAAa,CAAC,IAAI,kBAAkB;KACpE,CAAC;IAEF,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAU;IACnC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC;IAE1C,WAAW,CAAC,OAAO,GAAG;QACpB,GAAG,OAAO;QACV,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,iBAAiB;QACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,sBAAsB;QACrD,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,wBAAwB;KAChE,CAAC;IAEF,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,oGAAoG;AACpG,SAAS,wBAAwB,CAAC,IAAU;IAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,EAAE,CAAC;IAE1C,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,WAAW,CAAC,OAAO,GAAG;QACpB,GAAG,OAAO;QACV,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,iBAAiB;KAC3C,CAAC;IAEF,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAU;IACrC,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACzC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,MAAM,CACT,uBAAuB,EACvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BH,CACE,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAW,EAAE,OAAyB;IAC7D,OAAO,CAAC,OAAO,CAAC,IAAI,8BAAsB,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,QAAQ,CAAC,IAAU,EAAE,IAAY;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAwB,CAAC;AACpD,CAAC;AAED,SAAS,SAAS,CAAC,IAAU,EAAE,IAAY,EAAE,KAA0B;IACrE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC"}
|
package/src/e2e/index.ts
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Rule, SchematicContext, Tree, chain } from '@angular-devkit/schematics';
|
|
2
|
+
import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks';
|
|
3
|
+
|
|
4
|
+
const PLAYWRIGHT_VERSION = '^1.61.1';
|
|
5
|
+
const TYPES_NODE_VERSION = '^20.11.0';
|
|
6
|
+
|
|
7
|
+
export function e2e(): Rule {
|
|
8
|
+
return chain([addPlaywrightDependency, addPackageScripts, extendVerificationScript, addPlaywrightConfig, installPackages]);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function addPlaywrightDependency(tree: Tree): void {
|
|
12
|
+
const packageJson = readJson(tree, '/package.json');
|
|
13
|
+
const devDependencies = packageJson.devDependencies ?? {};
|
|
14
|
+
|
|
15
|
+
packageJson.devDependencies = {
|
|
16
|
+
...devDependencies,
|
|
17
|
+
'@playwright/test': devDependencies['@playwright/test'] ?? PLAYWRIGHT_VERSION,
|
|
18
|
+
'@types/node': devDependencies['@types/node'] ?? TYPES_NODE_VERSION,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
writeJson(tree, '/package.json', packageJson);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function addPackageScripts(tree: Tree): void {
|
|
25
|
+
const packageJson = readJson(tree, '/package.json');
|
|
26
|
+
const scripts = packageJson.scripts ?? {};
|
|
27
|
+
|
|
28
|
+
packageJson.scripts = {
|
|
29
|
+
...scripts,
|
|
30
|
+
e2e: scripts.e2e ?? 'playwright test',
|
|
31
|
+
'e2e:ui': scripts['e2e:ui'] ?? 'playwright test --ui',
|
|
32
|
+
'e2e:report': scripts['e2e:report'] ?? 'playwright show-report',
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
writeJson(tree, '/package.json', packageJson);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Folds `npm run e2e` into a `verify` script that `ng add` may have already created without it. */
|
|
39
|
+
function extendVerificationScript(tree: Tree): void {
|
|
40
|
+
const packageJson = readJson(tree, '/package.json');
|
|
41
|
+
const scripts = packageJson.scripts ?? {};
|
|
42
|
+
|
|
43
|
+
if (!scripts.verify || scripts.verify.includes('npm run e2e')) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
packageJson.scripts = {
|
|
48
|
+
...scripts,
|
|
49
|
+
verify: `${scripts.verify} && npm run e2e`,
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
writeJson(tree, '/package.json', packageJson);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function addPlaywrightConfig(tree: Tree): void {
|
|
56
|
+
if (tree.exists('/playwright.config.ts')) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
tree.create(
|
|
61
|
+
'/playwright.config.ts',
|
|
62
|
+
`/// <reference types="node" />
|
|
63
|
+
|
|
64
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
65
|
+
|
|
66
|
+
export default defineConfig({
|
|
67
|
+
testDir: './src',
|
|
68
|
+
testMatch: '**/*.e2e-spec.ts',
|
|
69
|
+
fullyParallel: true,
|
|
70
|
+
forbidOnly: !!process.env['CI'],
|
|
71
|
+
retries: process.env['CI'] ? 2 : 0,
|
|
72
|
+
workers: process.env['CI'] ? 1 : undefined,
|
|
73
|
+
reporter: 'html',
|
|
74
|
+
use: {
|
|
75
|
+
baseURL: 'http://localhost:4200',
|
|
76
|
+
trace: 'on-first-retry',
|
|
77
|
+
},
|
|
78
|
+
webServer: {
|
|
79
|
+
command: 'npm run start',
|
|
80
|
+
url: 'http://localhost:4200',
|
|
81
|
+
reuseExistingServer: !process.env['CI'],
|
|
82
|
+
timeout: 120 * 1000,
|
|
83
|
+
},
|
|
84
|
+
projects: [
|
|
85
|
+
{
|
|
86
|
+
name: 'chromium',
|
|
87
|
+
use: { ...devices['Desktop Chrome'] },
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
});
|
|
91
|
+
`
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function installPackages(_tree: Tree, context: SchematicContext): void {
|
|
96
|
+
context.addTask(new NodePackageInstallTask());
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function readJson(tree: Tree, path: string): Record<string, any> {
|
|
100
|
+
const content = tree.readText(path);
|
|
101
|
+
return JSON.parse(content) as Record<string, any>;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function writeJson(tree: Tree, path: string, value: Record<string, any>): void {
|
|
105
|
+
tree.overwrite(path, `${JSON.stringify(value, null, 2)}\n`);
|
|
106
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema",
|
|
3
|
+
"$id": "SemmetAngularE2e",
|
|
4
|
+
"title": "Semmet Angular E2E Options Schema",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"description": "Configures Playwright e2e support for an Angular workspace.",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {}
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export interface Schema {}
|
|
@@ -1,122 +1,46 @@
|
|
|
1
1
|
:host {
|
|
2
|
-
--semmet-color-primary: #18181b;
|
|
3
|
-
--semmet-color-on-primary: #ffffff;
|
|
4
|
-
--semmet-color-danger: #b42318;
|
|
5
|
-
--semmet-color-surface: #ffffff;
|
|
6
|
-
--semmet-color-outline: #d4d4d8;
|
|
7
|
-
--semmet-color-on-surface: #18181b;
|
|
8
|
-
--semmet-color-on-surface-variant: #52525b;
|
|
9
|
-
--semmet-radius-sm: 8px;
|
|
10
|
-
--semmet-radius-md: 12px;
|
|
11
|
-
--semmet-space-2xs: 8px;
|
|
12
|
-
--semmet-space-xs: 16px;
|
|
13
|
-
--semmet-space-sm: 24px;
|
|
14
|
-
--semmet-target-md: 40px;
|
|
15
|
-
--semmet-motion: 160ms cubic-bezier(0.2, 0, 0, 1);
|
|
16
|
-
|
|
17
2
|
display: block;
|
|
18
|
-
max-width: 34rem;
|
|
19
|
-
font-family: Roboto, system-ui, -apple-system, 'Segoe UI', sans-serif;
|
|
20
|
-
font-size: 0.9375rem;
|
|
21
3
|
}
|
|
22
4
|
|
|
23
5
|
form {
|
|
24
6
|
display: grid;
|
|
25
|
-
gap: var(--semmet-space-xs);
|
|
26
|
-
padding: var(--semmet-space-sm);
|
|
27
|
-
color: var(--semmet-color-on-surface);
|
|
28
|
-
background: var(--semmet-color-surface);
|
|
29
|
-
border: 1px solid var(--semmet-color-outline);
|
|
30
|
-
border-radius: var(--semmet-radius-md);
|
|
31
7
|
}
|
|
32
8
|
|
|
33
9
|
h2 {
|
|
34
10
|
margin: 0;
|
|
35
|
-
font-size: 1.125rem;
|
|
36
|
-
font-weight: 600;
|
|
37
11
|
}
|
|
38
12
|
|
|
39
13
|
.semmet-field {
|
|
40
14
|
display: grid;
|
|
41
|
-
gap: var(--semmet-space-2xs);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
label {
|
|
45
|
-
font-weight: 500;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
label span {
|
|
49
|
-
color: var(--semmet-color-danger);
|
|
50
15
|
}
|
|
51
16
|
|
|
52
17
|
input,
|
|
53
18
|
textarea {
|
|
54
19
|
width: 100%;
|
|
55
20
|
box-sizing: border-box;
|
|
56
|
-
border: 1px solid var(--semmet-color-outline);
|
|
57
|
-
border-radius: var(--semmet-radius-sm);
|
|
58
|
-
padding: var(--semmet-space-2xs) var(--semmet-space-xs);
|
|
59
21
|
font: inherit;
|
|
60
|
-
color: var(--semmet-color-on-surface);
|
|
61
|
-
background: var(--semmet-color-surface);
|
|
62
|
-
transition: border-color var(--semmet-motion);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
input {
|
|
66
|
-
min-height: var(--semmet-target-md);
|
|
67
22
|
}
|
|
68
23
|
|
|
69
24
|
textarea {
|
|
70
25
|
min-height: 7rem;
|
|
71
26
|
resize: vertical;
|
|
72
|
-
line-height: 1.5;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
input[aria-invalid='true'],
|
|
76
|
-
textarea[aria-invalid='true'] {
|
|
77
|
-
border-color: var(--semmet-color-danger);
|
|
78
27
|
}
|
|
79
28
|
|
|
80
29
|
input:focus-visible,
|
|
81
30
|
textarea:focus-visible,
|
|
82
31
|
button:focus-visible {
|
|
83
|
-
outline: 2px solid
|
|
32
|
+
outline: 2px solid currentColor;
|
|
84
33
|
outline-offset: 2px;
|
|
85
34
|
}
|
|
86
35
|
|
|
87
36
|
button {
|
|
88
37
|
justify-self: start;
|
|
89
|
-
min-height: var(--semmet-target-md);
|
|
90
|
-
border: 0;
|
|
91
|
-
border-radius: var(--semmet-radius-sm);
|
|
92
|
-
padding: var(--semmet-space-2xs) var(--semmet-space-xs);
|
|
93
38
|
font: inherit;
|
|
94
|
-
font-weight: 600;
|
|
95
|
-
color: var(--semmet-color-on-primary);
|
|
96
|
-
background: var(--semmet-color-primary);
|
|
97
39
|
cursor: pointer;
|
|
98
|
-
transition:
|
|
99
|
-
background-color var(--semmet-motion),
|
|
100
|
-
transform var(--semmet-motion);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
button:hover {
|
|
104
|
-
transform: translateY(-1px);
|
|
105
40
|
}
|
|
106
41
|
|
|
107
42
|
.semmet-hint,
|
|
108
43
|
.semmet-error,
|
|
109
44
|
.semmet-status {
|
|
110
45
|
margin: 0;
|
|
111
|
-
font-size: 0.8125rem;
|
|
112
|
-
line-height: 1.4;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
.semmet-hint,
|
|
116
|
-
.semmet-status {
|
|
117
|
-
color: var(--semmet-color-on-surface-variant);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
.semmet-error {
|
|
121
|
-
color: var(--semmet-color-danger);
|
|
122
46
|
}
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
Usage from a parent component template:
|
|
4
4
|
Import <%= classify(name) %> in that parent component.
|
|
5
5
|
|
|
6
|
-
<<%= selector %> />
|
|
6
|
+
<<%= selector %> title="Contact form" submitLabel="Submit" />
|
|
7
7
|
-->
|
|
8
8
|
<form [attr.aria-labelledby]="instanceId + '-title'" (submit)="submit($event)" novalidate>
|
|
9
|
-
<h2 [id]="instanceId + '-title'">
|
|
9
|
+
<h2 [id]="instanceId + '-title'">{{ title() }}</h2>
|
|
10
10
|
|
|
11
11
|
<div class="semmet-field">
|
|
12
12
|
<label [for]="instanceId + '-name'">
|
|
13
|
-
|
|
13
|
+
{{ nameLabel() }}
|
|
14
14
|
<span aria-hidden="true">*</span>
|
|
15
15
|
</label>
|
|
16
16
|
<input
|
|
@@ -30,7 +30,7 @@ Import <%= classify(name) %> in that parent component.
|
|
|
30
30
|
|
|
31
31
|
<div class="semmet-field">
|
|
32
32
|
<label [for]="instanceId + '-email'">
|
|
33
|
-
|
|
33
|
+
{{ emailLabel() }}
|
|
34
34
|
<span aria-hidden="true">*</span>
|
|
35
35
|
</label>
|
|
36
36
|
<input
|
|
@@ -50,7 +50,7 @@ Import <%= classify(name) %> in that parent component.
|
|
|
50
50
|
|
|
51
51
|
<div class="semmet-field">
|
|
52
52
|
<label [for]="instanceId + '-message'">
|
|
53
|
-
|
|
53
|
+
{{ messageLabel() }}
|
|
54
54
|
<span aria-hidden="true">*</span>
|
|
55
55
|
</label>
|
|
56
56
|
<textarea
|
|
@@ -62,13 +62,13 @@ Import <%= classify(name) %> in that parent component.
|
|
|
62
62
|
[attr.aria-describedby]="messageError() ? instanceId + '-message-error' : instanceId + '-message-hint'"
|
|
63
63
|
(input)="updateField('message', $event)"
|
|
64
64
|
></textarea>
|
|
65
|
-
<p class="semmet-hint" [id]="instanceId + '-message-hint'">
|
|
65
|
+
<p class="semmet-hint" [id]="instanceId + '-message-hint'">{{ messageHint() }}</p>
|
|
66
66
|
@if (messageError()) {
|
|
67
67
|
<p class="semmet-error" [id]="instanceId + '-message-error'" role="alert">{{ messageError() }}</p>
|
|
68
68
|
}
|
|
69
69
|
</div>
|
|
70
70
|
|
|
71
|
-
<button type="submit">
|
|
71
|
+
<button type="submit">{{ submitLabel() }}</button>
|
|
72
72
|
|
|
73
73
|
@if (statusMessage()) {
|
|
74
74
|
<p class="semmet-status" role="status">{{ statusMessage() }}</p>
|
|
@@ -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) %>State {
|
|
4
4
|
name: string;
|
|
@@ -26,12 +26,25 @@ export class <%= classify(name) %> {
|
|
|
26
26
|
message: '',
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
+
readonly title = input('Contact form');
|
|
30
|
+
readonly nameLabel = input('Name');
|
|
31
|
+
readonly emailLabel = input('Email');
|
|
32
|
+
readonly messageLabel = input('Message');
|
|
33
|
+
readonly messageHint = input('Minimum 10 characters.');
|
|
34
|
+
readonly submitLabel = input('Submit');
|
|
35
|
+
readonly nameRequiredMessage = input('Enter your name.');
|
|
36
|
+
readonly emailRequiredMessage = input('Enter your email address.');
|
|
37
|
+
readonly emailInvalidMessage = input('Enter a valid email address.');
|
|
38
|
+
readonly messageRequiredMessage = input('Enter a message with at least 10 characters.');
|
|
39
|
+
readonly invalidStatusMessage = input('Check the highlighted fields and try again.');
|
|
40
|
+
readonly validStatusMessage = input('Form is valid and ready to submit.');
|
|
41
|
+
|
|
29
42
|
protected readonly nameError = computed(() => {
|
|
30
43
|
if (!this.submitted() || this.form().name.trim()) {
|
|
31
44
|
return '';
|
|
32
45
|
}
|
|
33
46
|
|
|
34
|
-
return
|
|
47
|
+
return this.nameRequiredMessage();
|
|
35
48
|
});
|
|
36
49
|
|
|
37
50
|
protected readonly emailError = computed(() => {
|
|
@@ -41,10 +54,10 @@ export class <%= classify(name) %> {
|
|
|
41
54
|
|
|
42
55
|
const email = this.form().email.trim();
|
|
43
56
|
if (!email) {
|
|
44
|
-
return
|
|
57
|
+
return this.emailRequiredMessage();
|
|
45
58
|
}
|
|
46
59
|
|
|
47
|
-
return this.emailPattern.test(email) ? '' :
|
|
60
|
+
return this.emailPattern.test(email) ? '' : this.emailInvalidMessage();
|
|
48
61
|
});
|
|
49
62
|
|
|
50
63
|
protected readonly messageError = computed(() => {
|
|
@@ -52,7 +65,7 @@ export class <%= classify(name) %> {
|
|
|
52
65
|
return '';
|
|
53
66
|
}
|
|
54
67
|
|
|
55
|
-
return
|
|
68
|
+
return this.messageRequiredMessage();
|
|
56
69
|
});
|
|
57
70
|
|
|
58
71
|
protected readonly isInvalid = computed(() => Boolean(this.nameError() || this.emailError() || this.messageError()));
|
|
@@ -67,10 +80,10 @@ export class <%= classify(name) %> {
|
|
|
67
80
|
this.submitted.set(true);
|
|
68
81
|
|
|
69
82
|
if (this.isInvalid()) {
|
|
70
|
-
this.statusMessage.set(
|
|
83
|
+
this.statusMessage.set(this.invalidStatusMessage());
|
|
71
84
|
return;
|
|
72
85
|
}
|
|
73
86
|
|
|
74
|
-
this.statusMessage.set(
|
|
87
|
+
this.statusMessage.set(this.validStatusMessage());
|
|
75
88
|
}
|
|
76
89
|
}
|
package/src/form/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 form 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,83 +1,27 @@
|
|
|
1
1
|
:host {
|
|
2
|
-
--semmet-color-primary: #18181b;
|
|
3
|
-
--semmet-color-danger: #b42318;
|
|
4
|
-
--semmet-color-surface: #ffffff;
|
|
5
|
-
--semmet-color-outline: #d4d4d8;
|
|
6
|
-
--semmet-color-on-surface: #18181b;
|
|
7
|
-
--semmet-color-on-surface-variant: #52525b;
|
|
8
|
-
--semmet-color-disabled: #f4f4f5;
|
|
9
|
-
--semmet-radius-sm: 8px;
|
|
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
|
-
font-size: 0.9375rem;
|
|
18
3
|
}
|
|
19
4
|
|
|
20
5
|
.semmet-field {
|
|
21
6
|
display: grid;
|
|
22
|
-
gap: var(--semmet-space-2xs);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
label {
|
|
26
|
-
font-weight: 500;
|
|
27
|
-
color: var(--semmet-color-on-surface);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
label span {
|
|
31
|
-
color: var(--semmet-color-danger);
|
|
32
7
|
}
|
|
33
8
|
|
|
34
9
|
input {
|
|
35
10
|
width: 100%;
|
|
36
|
-
min-height: var(--semmet-target-md);
|
|
37
11
|
box-sizing: border-box;
|
|
38
|
-
border: 1px solid var(--semmet-color-outline);
|
|
39
|
-
border-radius: var(--semmet-radius-sm);
|
|
40
|
-
padding: var(--semmet-space-2xs) var(--semmet-space-xs);
|
|
41
12
|
font: inherit;
|
|
42
|
-
color: var(--semmet-color-on-surface);
|
|
43
|
-
background: var(--semmet-color-surface);
|
|
44
|
-
transition:
|
|
45
|
-
border-color var(--semmet-motion),
|
|
46
|
-
box-shadow var(--semmet-motion),
|
|
47
|
-
background-color var(--semmet-motion);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
input::placeholder {
|
|
51
|
-
color: var(--semmet-color-on-surface-variant);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
input[aria-invalid='true'] {
|
|
55
|
-
border-color: var(--semmet-color-danger);
|
|
56
13
|
}
|
|
57
14
|
|
|
58
15
|
input:disabled {
|
|
59
|
-
color: var(--semmet-color-on-surface-variant);
|
|
60
|
-
background: var(--semmet-color-disabled);
|
|
61
16
|
cursor: not-allowed;
|
|
62
17
|
}
|
|
63
18
|
|
|
64
19
|
input:focus-visible {
|
|
65
|
-
outline: 2px solid
|
|
66
|
-
outline-offset:
|
|
67
|
-
border-color: var(--semmet-color-primary);
|
|
20
|
+
outline: 2px solid currentColor;
|
|
21
|
+
outline-offset: 2px;
|
|
68
22
|
}
|
|
69
23
|
|
|
70
24
|
.semmet-field__hint,
|
|
71
25
|
.semmet-field__error {
|
|
72
26
|
margin: 0;
|
|
73
|
-
font-size: 0.8125rem;
|
|
74
|
-
line-height: 1.4;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
.semmet-field__hint {
|
|
78
|
-
color: var(--semmet-color-on-surface-variant);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.semmet-field__error {
|
|
82
|
-
color: var(--semmet-color-danger);
|
|
83
27
|
}
|
package/src/input/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 input 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
|
}
|