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
package/README.md
CHANGED
|
@@ -1,332 +1,240 @@
|
|
|
1
1
|
# semmet-angular
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Accessible Angular UI generation for Angular applications.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Semmet Angular is a collection of Angular CLI schematics that generate accessible, editable application code: components, starter blocks, tests, and delivery scaffolds.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
The generated code belongs to the consuming project. There is no Semmet runtime UI package to import at runtime; `semmet-angular` is only needed when generating files.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## Core Positioning
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Semmet Angular is not a visual design system.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
It generates accessible Angular building blocks with semantic HTML, ARIA wiring, keyboard/focus behavior, signal-based state, and minimal functional CSS. The consuming project owns the final layout, spacing, typography, color, radius, shadow, motion, and brand expression.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Use isolated components for precise application UI, and optional starter blocks for common editable section scaffolds.
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## Usage
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
20
|
ng add semmet-angular
|
|
21
|
-
ng generate semmet-angular:
|
|
21
|
+
ng generate semmet-angular:button cta-button
|
|
22
|
+
ng generate semmet-angular:list-group feature-list
|
|
22
23
|
ng generate semmet-angular:block section-card
|
|
24
|
+
ng generate semmet-angular:e2e
|
|
23
25
|
ng generate semmet-angular:ci
|
|
24
26
|
ng generate semmet-angular:docker
|
|
25
27
|
ng generate semmet-angular:deploy
|
|
26
28
|
```
|
|
27
29
|
|
|
28
|
-
|
|
30
|
+
Generated components are standalone Angular files:
|
|
29
31
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
- **Compositions / Blocks**: seções prontas como `section-card`, `section-faq`, `section-pricing`, `section-stats`, `section-table`, `section-form`, `section-tabs`, `section-list-group`, `section-alert`, `section-progress`, `section-carousel`, `header-navbar`, `footer-navigation` e `command-list`.
|
|
36
|
-
- **Delivery**: `ng add`, `ci`, `docker`, `deploy` e `verify`.
|
|
37
|
-
|
|
38
|
-
## Comandos de Composição
|
|
39
|
-
|
|
40
|
-
Compositions/blocks geram seções Angular standalone usando os componentes correspondentes da própria Semmet. O CSS gerado fica local no block e usa tokens locais de espaçamento para manter ritmo de landing page sem injetar estilo global na aplicação.
|
|
41
|
-
|
|
42
|
-
| Comando | Gera | Usa como base |
|
|
43
|
-
|---|---|---|
|
|
44
|
-
| `ng generate semmet-angular:block hero` | Seção hero semântica | Estrutura de seção |
|
|
45
|
-
| `ng generate semmet-angular:block section-card` | Seção de cards | `card` |
|
|
46
|
-
| `ng generate semmet-angular:block section-faq` | Seção de FAQ | `accordion` |
|
|
47
|
-
| `ng generate semmet-angular:block section-pricing` | Seção de preços | `card` |
|
|
48
|
-
| `ng generate semmet-angular:block section-stats` | Seção de métricas | Estrutura de seção |
|
|
49
|
-
| `ng generate semmet-angular:block section-table` | Seção com tabela | `table` |
|
|
50
|
-
| `ng generate semmet-angular:block section-form` | Seção com formulário | `form` |
|
|
51
|
-
| `ng generate semmet-angular:block section-tabs` | Seção com abas | `tabs` |
|
|
52
|
-
| `ng generate semmet-angular:block section-list-group` | Seção com lista de ações | `list-group` |
|
|
53
|
-
| `ng generate semmet-angular:block section-alert` | Seção com alerta | `alert` |
|
|
54
|
-
| `ng generate semmet-angular:block section-progress` | Seção com progresso | `progress-bar` |
|
|
55
|
-
| `ng generate semmet-angular:block section-carousel` | Seção com carousel | `carousel` |
|
|
56
|
-
| `ng generate semmet-angular:block header-navbar` | Header com navegação | `navbar` |
|
|
57
|
-
| `ng generate semmet-angular:block footer-navigation` | Footer com navegação | `navbar` |
|
|
58
|
-
| `ng generate semmet-angular:block command-list` | Seção de comandos | Estrutura de seção |
|
|
59
|
-
|
|
60
|
-
## Fluxo de Entrega
|
|
61
|
-
|
|
62
|
-
Depois de rodar `ng add semmet-angular`, use:
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
npm test
|
|
66
|
-
npm run e2e
|
|
67
|
-
npm run e2e:ui
|
|
68
|
-
npm run verify
|
|
32
|
+
```text
|
|
33
|
+
cta-button.ts
|
|
34
|
+
cta-button.html
|
|
35
|
+
cta-button.css
|
|
36
|
+
cta-button.spec.ts
|
|
69
37
|
```
|
|
70
38
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
O script `npm run verify` é criado sem sobrescrever um script `verify` existente. Quando os scripts estão disponíveis no `package.json` da aplicação, ele compõe um fluxo simples com:
|
|
39
|
+
Playwright e2e specs are opt-in:
|
|
74
40
|
|
|
75
41
|
```bash
|
|
76
|
-
|
|
77
|
-
npm run e2e
|
|
78
|
-
npm run build
|
|
79
|
-
npm run lint
|
|
42
|
+
ng generate semmet-angular:button cta-button --e2e
|
|
80
43
|
```
|
|
81
44
|
|
|
82
|
-
`
|
|
45
|
+
Only pass `--e2e` when the consuming app has Playwright configured — run `ng generate semmet-angular:e2e` first if it doesn't. `ng add semmet-angular` no longer configures Playwright by default; e2e infrastructure is opt-in and explicit.
|
|
83
46
|
|
|
84
|
-
##
|
|
47
|
+
## Components vs Starter Blocks
|
|
85
48
|
|
|
86
|
-
|
|
87
|
-
ng generate semmet-angular:ci
|
|
88
|
-
```
|
|
49
|
+
### Components
|
|
89
50
|
|
|
90
|
-
|
|
51
|
+
Components and directives are the core of Semmet Angular. They are the best choice when the consuming application needs precise control over markup, layout, and visual design.
|
|
91
52
|
|
|
92
|
-
|
|
53
|
+
They provide the accessibility contract while leaving layout and visual design to the application:
|
|
93
54
|
|
|
94
|
-
|
|
55
|
+
- semantic root elements where the native element matters;
|
|
56
|
+
- headless directives where accessibility comes from relationships between elements;
|
|
57
|
+
- ARIA attributes and accessible names/descriptions;
|
|
58
|
+
- keyboard and focus behavior;
|
|
59
|
+
- signal-based state;
|
|
60
|
+
- projected rich content through `ng-template` when needed;
|
|
61
|
+
- open visual inputs such as `variant` and `size` as `string`, not closed visual unions.
|
|
95
62
|
|
|
96
|
-
|
|
63
|
+
Examples:
|
|
97
64
|
|
|
98
65
|
```bash
|
|
99
|
-
ng generate semmet-angular:
|
|
66
|
+
ng generate semmet-angular:button save-button
|
|
67
|
+
ng generate semmet-angular:card testimonial-card
|
|
68
|
+
ng generate semmet-angular:input-group search-box
|
|
69
|
+
ng generate semmet-angular:list-group feature-list
|
|
70
|
+
ng generate semmet-angular:tabs settings-tabs
|
|
100
71
|
```
|
|
101
72
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
O `nginx.conf` inclui fallback de SPA com `try_files ... /index.html`. Por padrão, o comando não sobrescreve arquivos existentes; use `--force` para substituir a configuração Docker atual.
|
|
73
|
+
### Starter Blocks
|
|
105
74
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
ng generate semmet-angular:deploy
|
|
110
|
-
```
|
|
75
|
+
Blocks are optional section scaffolds. They are useful for fast first drafts, common marketing/product sections, and quick app structure.
|
|
111
76
|
|
|
112
|
-
|
|
77
|
+
They are not a public UI API and they are not meant to preserve a Semmet layout. A generated block is local application code. If the target UI needs a different structure, replace the block markup or switch to isolated components.
|
|
113
78
|
|
|
114
79
|
```bash
|
|
115
|
-
ng generate semmet-angular:
|
|
116
|
-
ng generate semmet-angular:
|
|
117
|
-
ng generate semmet-angular:
|
|
118
|
-
ng generate semmet-angular:
|
|
119
|
-
ng generate semmet-angular:
|
|
80
|
+
ng generate semmet-angular:block hero
|
|
81
|
+
ng generate semmet-angular:block section-card
|
|
82
|
+
ng generate semmet-angular:block section-pricing
|
|
83
|
+
ng generate semmet-angular:block section-table
|
|
84
|
+
ng generate semmet-angular:block section-form
|
|
85
|
+
ng generate semmet-angular:block section-tabs
|
|
86
|
+
ng generate semmet-angular:block section-list-group
|
|
87
|
+
ng generate semmet-angular:block header-navbar
|
|
88
|
+
ng generate semmet-angular:block footer-navigation
|
|
120
89
|
```
|
|
121
90
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
## Testes Gerados
|
|
91
|
+
Generated block HTML includes an inline comment reminding developers that the scaffold is editable and replaceable.
|
|
125
92
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
```text
|
|
129
|
-
minha-faq.ts
|
|
130
|
-
minha-faq.html
|
|
131
|
-
minha-faq.css
|
|
132
|
-
minha-faq.spec.ts
|
|
133
|
-
minha-faq.e2e-spec.ts
|
|
134
|
-
```
|
|
93
|
+
## Minimal Functional CSS
|
|
135
94
|
|
|
136
|
-
|
|
95
|
+
Generated CSS is intentionally sparse.
|
|
137
96
|
|
|
138
|
-
|
|
97
|
+
Keep CSS only when it supports structure, behavior, or accessibility:
|
|
139
98
|
|
|
140
|
-
|
|
99
|
+
- open/closed state;
|
|
100
|
+
- overlay positioning;
|
|
101
|
+
- visible focus;
|
|
102
|
+
- hidden content;
|
|
103
|
+
- native-control inheritance;
|
|
104
|
+
- basic box behavior needed by the component.
|
|
141
105
|
|
|
142
|
-
|
|
106
|
+
Do not treat generated CSS as a theme. Typography, color, radius, shadow, decorative borders, visual hover states, spacing rhythm, and final layout belong to the consuming project.
|
|
143
107
|
|
|
144
|
-
|
|
108
|
+
## Projected Content
|
|
145
109
|
|
|
146
|
-
|
|
147
|
-
import { Component, signal } from '@angular/core';
|
|
148
|
-
import { Faq, FaqItem } from './faq/faq';
|
|
149
|
-
import { ProfilePanel } from './profile-panel/profile-panel';
|
|
150
|
-
import { SettingsPanel } from './settings-panel/settings-panel';
|
|
110
|
+
Rich content uses Angular projection patterns instead of string-only APIs.
|
|
151
111
|
|
|
152
|
-
|
|
153
|
-
selector: 'app-root',
|
|
154
|
-
imports: [Faq, FaqItem, ProfilePanel, SettingsPanel],
|
|
155
|
-
templateUrl: './app.html',
|
|
156
|
-
})
|
|
157
|
-
export class App {
|
|
158
|
-
readonly userId = signal(123);
|
|
159
|
-
|
|
160
|
-
reload(): void {}
|
|
161
|
-
}
|
|
162
|
-
```
|
|
112
|
+
Example after generating `search-box`:
|
|
163
113
|
|
|
164
114
|
```html
|
|
165
|
-
<app-
|
|
166
|
-
<ng-template
|
|
167
|
-
<app-
|
|
115
|
+
<app-search-box label="Search" type="search" [(value)]="query">
|
|
116
|
+
<ng-template searchBoxPrefix>
|
|
117
|
+
<app-search-icon aria-hidden="true" />
|
|
168
118
|
</ng-template>
|
|
169
119
|
|
|
170
|
-
<ng-template
|
|
171
|
-
|
|
120
|
+
<ng-template searchBoxSuffix>
|
|
121
|
+
{{ query().length }}
|
|
172
122
|
</ng-template>
|
|
173
|
-
</app-
|
|
123
|
+
</app-search-box>
|
|
174
124
|
```
|
|
175
125
|
|
|
176
|
-
|
|
126
|
+
Example after generating `testimonial-card`:
|
|
177
127
|
|
|
178
128
|
```html
|
|
179
|
-
<app-
|
|
180
|
-
<
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
</app-settings-tabs>
|
|
184
|
-
|
|
185
|
-
<app-featured-carousel>
|
|
186
|
-
<ng-template featuredCarouselSlide id="intro" label="Introdução">
|
|
187
|
-
<app-intro-slide />
|
|
188
|
-
</ng-template>
|
|
189
|
-
</app-featured-carousel>
|
|
190
|
-
|
|
191
|
-
<app-details label="Mostrar detalhes do perfil" [(expanded)]="profileDetailsOpen">
|
|
192
|
-
<ng-template detailsContent>
|
|
193
|
-
<app-profile-details [userId]="userId()" />
|
|
194
|
-
</ng-template>
|
|
195
|
-
</app-details>
|
|
129
|
+
<app-testimonial-card>
|
|
130
|
+
<h3 testimonialCardHeading>Customer quote</h3>
|
|
131
|
+
<p>Semmet gives the accessibility structure; this app owns the content and layout.</p>
|
|
132
|
+
</app-testimonial-card>
|
|
196
133
|
```
|
|
197
134
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
Os componentes estruturais menores mantêm APIs simples por input e adicionam slots seguros onde o componente gerado continua dono da estrutura acessível:
|
|
135
|
+
Example after generating `feature-list`:
|
|
201
136
|
|
|
202
137
|
```html
|
|
203
|
-
<
|
|
204
|
-
|
|
205
|
-
<
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
</
|
|
216
|
-
|
|
217
|
-
<app-save-button label="Salvar">
|
|
218
|
-
<ng-template saveButtonLeading>
|
|
219
|
-
<app-save-icon aria-hidden="true" />
|
|
220
|
-
</ng-template>
|
|
221
|
-
</app-save-button>
|
|
222
|
-
|
|
223
|
-
<app-status-badge accessibleLabel="Build passou">
|
|
224
|
-
<ng-template statusBadgeLabel>Passou</ng-template>
|
|
225
|
-
</app-status-badge>
|
|
226
|
-
|
|
227
|
-
<app-main-navbar brand="Acme">
|
|
228
|
-
<ng-template mainNavbarActions>
|
|
229
|
-
<a href="/conta">Conta</a>
|
|
230
|
-
</ng-template>
|
|
231
|
-
</app-main-navbar>
|
|
138
|
+
<ul featureList label="Pricing features" [(activeId)]="activeFeature">
|
|
139
|
+
@for (item of features; track item.id) {
|
|
140
|
+
<li
|
|
141
|
+
featureListItem
|
|
142
|
+
[value]="item.id"
|
|
143
|
+
#featureItem="featureListItem"
|
|
144
|
+
[class.active]="featureItem.active()"
|
|
145
|
+
>
|
|
146
|
+
<span>{{ item.label }}</span>
|
|
147
|
+
<strong>{{ item.value }}</strong>
|
|
148
|
+
</li>
|
|
149
|
+
}
|
|
150
|
+
</ul>
|
|
151
|
+
```
|
|
232
152
|
|
|
233
|
-
|
|
234
|
-
<ng-template resultsTableEmpty>Nenhum resultado de receita ainda.</ng-template>
|
|
235
|
-
</app-results-table>
|
|
153
|
+
## Delivery Schematics
|
|
236
154
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
155
|
+
```bash
|
|
156
|
+
ng generate semmet-angular:e2e
|
|
157
|
+
ng generate semmet-angular:ci
|
|
158
|
+
ng generate semmet-angular:docker
|
|
159
|
+
ng generate semmet-angular:deploy
|
|
242
160
|
```
|
|
243
161
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
-
|
|
316
|
-
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
## Opções
|
|
323
|
-
|
|
324
|
-
Todo comando de componente aceita as mesmas três opções de `ng generate component`:
|
|
325
|
-
|
|
326
|
-
- `name` (obrigatório, posicional) — nome do componente.
|
|
327
|
-
- `project` — projeto alvo; por padrão, usa o projeto atual/default.
|
|
328
|
-
- `path` — diretório alvo; por padrão, usa `src/app` do projeto.
|
|
329
|
-
|
|
330
|
-
## Licença
|
|
162
|
+
The delivery schematics are explicit and optional:
|
|
163
|
+
|
|
164
|
+
- `e2e` configures Playwright (dependency, npm scripts, `playwright.config.ts`) and folds `npm run e2e` into an existing `verify` script.
|
|
165
|
+
- `ci` generates a GitHub Actions workflow from existing package scripts.
|
|
166
|
+
- `docker` generates Docker/Nginx packaging files for an Angular SPA.
|
|
167
|
+
- `deploy` generates minimal deployment configuration for supported platforms.
|
|
168
|
+
|
|
169
|
+
## Available Component Commands
|
|
170
|
+
|
|
171
|
+
Overlays and disclosure:
|
|
172
|
+
|
|
173
|
+
- `accordion`
|
|
174
|
+
- `alert-dialog`
|
|
175
|
+
- `dialog`
|
|
176
|
+
- `disclosure`
|
|
177
|
+
- `menu-button`
|
|
178
|
+
- `offcanvas`
|
|
179
|
+
- `popover`
|
|
180
|
+
- `tooltip`
|
|
181
|
+
|
|
182
|
+
Navigation and structure:
|
|
183
|
+
|
|
184
|
+
- `breadcrumb`
|
|
185
|
+
- `card`
|
|
186
|
+
- `landmarks`
|
|
187
|
+
- `list-group`
|
|
188
|
+
- `navbar`
|
|
189
|
+
- `navigation-menu`
|
|
190
|
+
- `pagination`
|
|
191
|
+
- `skip-link`
|
|
192
|
+
- `tabs`
|
|
193
|
+
- `toolbar`
|
|
194
|
+
- `tree-view`
|
|
195
|
+
|
|
196
|
+
Forms and inputs:
|
|
197
|
+
|
|
198
|
+
- `checkbox`
|
|
199
|
+
- `combobox`
|
|
200
|
+
- `form`
|
|
201
|
+
- `input`
|
|
202
|
+
- `input-group`
|
|
203
|
+
- `listbox`
|
|
204
|
+
- `meter`
|
|
205
|
+
- `progress-bar`
|
|
206
|
+
- `radio-group`
|
|
207
|
+
- `select`
|
|
208
|
+
- `slider`
|
|
209
|
+
- `spinbutton`
|
|
210
|
+
- `switch`
|
|
211
|
+
- `textarea`
|
|
212
|
+
|
|
213
|
+
Feedback, media, and display:
|
|
214
|
+
|
|
215
|
+
- `alert`
|
|
216
|
+
- `avatar`
|
|
217
|
+
- `badge`
|
|
218
|
+
- `button`
|
|
219
|
+
- `button-group`
|
|
220
|
+
- `carousel`
|
|
221
|
+
- `close-button`
|
|
222
|
+
- `rating`
|
|
223
|
+
- `skeleton`
|
|
224
|
+
- `spinner`
|
|
225
|
+
- `steps`
|
|
226
|
+
- `table`
|
|
227
|
+
- `toast`
|
|
228
|
+
|
|
229
|
+
## Options
|
|
230
|
+
|
|
231
|
+
Common component options:
|
|
232
|
+
|
|
233
|
+
- `name` required, positional.
|
|
234
|
+
- `project` target Angular project.
|
|
235
|
+
- `path` target directory.
|
|
236
|
+
- `e2e` optional boolean. Generates a Playwright spec only when explicitly requested.
|
|
237
|
+
|
|
238
|
+
## License
|
|
331
239
|
|
|
332
240
|
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "semmet-angular",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"description": "Accessible UI delivery dev kit in Angular: schematics that generate components, compositions, tests, and delivery scaffolds as native editable Angular code.",
|
|
5
5
|
"publisher": "danilodevsilva",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
},
|
|
26
26
|
"schematics": "./src/collection.json",
|
|
27
27
|
"files": [
|
|
28
|
+
"README.md",
|
|
28
29
|
"README.en.md",
|
|
29
|
-
"README.pt-BR.md",
|
|
30
30
|
"src",
|
|
31
31
|
"!src/**/*_spec.ts",
|
|
32
32
|
"!src/**/*_spec.js",
|
|
@@ -1,57 +1,26 @@
|
|
|
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-md: 12px;
|
|
8
|
-
--semmet-space-2xs: 8px;
|
|
9
|
-
--semmet-space-xs: 16px;
|
|
10
|
-
--semmet-space-sm: 24px;
|
|
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
|
-
line-height: 1.5;
|
|
17
|
-
color: var(--semmet-color-on-surface);
|
|
18
|
-
background: var(--semmet-color-surface);
|
|
19
|
-
border: 1px solid var(--semmet-color-outline);
|
|
20
|
-
border-radius: var(--semmet-radius-md);
|
|
21
|
-
overflow: hidden;
|
|
22
3
|
}
|
|
23
4
|
|
|
24
5
|
h3 {
|
|
25
6
|
margin: 0;
|
|
26
7
|
}
|
|
27
8
|
|
|
28
|
-
h3:not(:first-of-type) {
|
|
29
|
-
border-top: 1px solid var(--semmet-color-outline);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
9
|
button {
|
|
33
10
|
display: flex;
|
|
34
11
|
align-items: center;
|
|
35
|
-
gap: var(--semmet-space-xs);
|
|
36
12
|
width: 100%;
|
|
37
|
-
padding: var(--semmet-space-xs) var(--semmet-space-sm);
|
|
38
13
|
font: inherit;
|
|
39
|
-
font-weight: 500;
|
|
40
14
|
color: inherit;
|
|
41
15
|
background: none;
|
|
42
16
|
border: none;
|
|
43
17
|
cursor: pointer;
|
|
44
18
|
text-align: left;
|
|
45
|
-
transition: background-color var(--semmet-motion);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
button:hover {
|
|
49
|
-
background: color-mix(in srgb, var(--semmet-color-on-surface) 6%, transparent);
|
|
50
19
|
}
|
|
51
20
|
|
|
52
21
|
button:focus-visible {
|
|
53
|
-
outline: 2px solid
|
|
54
|
-
outline-offset:
|
|
22
|
+
outline: 2px solid currentColor;
|
|
23
|
+
outline-offset: 2px;
|
|
55
24
|
}
|
|
56
25
|
|
|
57
26
|
button::after {
|
|
@@ -60,17 +29,11 @@ button::after {
|
|
|
60
29
|
height: 0.5rem;
|
|
61
30
|
margin-left: auto;
|
|
62
31
|
flex-shrink: 0;
|
|
63
|
-
border-right: 2px solid
|
|
64
|
-
border-bottom: 2px solid
|
|
32
|
+
border-right: 2px solid currentColor;
|
|
33
|
+
border-bottom: 2px solid currentColor;
|
|
65
34
|
transform: rotate(45deg);
|
|
66
|
-
transition: transform var(--semmet-motion);
|
|
67
35
|
}
|
|
68
36
|
|
|
69
37
|
button[aria-expanded='true']::after {
|
|
70
38
|
transform: rotate(-135deg);
|
|
71
39
|
}
|
|
72
|
-
|
|
73
|
-
[role='region'] {
|
|
74
|
-
padding: 0 var(--semmet-space-sm) var(--semmet-space-sm);
|
|
75
|
-
color: var(--semmet-color-on-surface-variant);
|
|
76
|
-
}
|