semmet-angular 0.41.0 → 0.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +2 -315
- package/README.md +169 -264
- package/package.json +2 -2
- package/src/accordion/files/__name@dasherize__/__name@dasherize__.css.template +4 -41
- package/src/accordion/schema.json +19 -4
- package/src/alert/files/__name@dasherize__/__name@dasherize__.css.template +1 -25
- package/src/alert/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/alert/files/__name@dasherize__/__name@dasherize__.ts.template +4 -1
- package/src/alert/schema.json +19 -4
- package/src/alert-dialog/files/__name@dasherize__/__name@dasherize__.css.template +3 -56
- package/src/alert-dialog/files/__name@dasherize__/__name@dasherize__.html.template +6 -6
- package/src/alert-dialog/files/__name@dasherize__/__name@dasherize__.ts.template +7 -1
- package/src/alert-dialog/schema.json +19 -4
- package/src/avatar/files/__name@dasherize__/__name@dasherize__.css.template +17 -0
- package/src/avatar/files/__name@dasherize__/__name@dasherize__.html.template +28 -0
- package/src/avatar/files/__name@dasherize__/__name@dasherize__.spec.ts.template +27 -0
- package/src/avatar/files/__name@dasherize__/__name@dasherize__.ts.template +35 -0
- package/src/avatar/index.d.ts +1 -0
- package/src/avatar/index.js +6 -0
- package/src/avatar/index.js.map +1 -0
- package/src/avatar/index.ts +3 -0
- package/src/avatar/schema.d.ts +1 -0
- package/src/avatar/schema.js +3 -0
- package/src/avatar/schema.js.map +1 -0
- package/src/avatar/schema.json +44 -0
- package/src/avatar/schema.ts +1 -0
- package/src/badge/files/__name@dasherize__/__name@dasherize__.css.template +0 -77
- package/src/badge/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
- package/src/badge/schema.json +19 -4
- package/src/block/files/__name@dasherize__/__name@dasherize__.css.template +10 -81
- package/src/block/files/__name@dasherize__/__name@dasherize__.html.template +33 -25
- package/src/block/files/__name@dasherize__/__name@dasherize__.ts.template +41 -10
- package/src/block/schema.json +19 -4
- package/src/breadcrumb/files/__name@dasherize__/__name@dasherize__.css.template +2 -23
- package/src/breadcrumb/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
- package/src/breadcrumb/files/__name@dasherize__/__name@dasherize__.ts.template +9 -5
- package/src/breadcrumb/schema.json +19 -4
- package/src/button/files/__name@dasherize__/__name@dasherize__.css.template +2 -79
- package/src/button/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
- package/src/button/schema.json +19 -4
- package/src/button-group/files/__name@dasherize__/__name@dasherize__.css.template +2 -70
- package/src/button-group/files/__name@dasherize__/__name@dasherize__.ts.template +1 -2
- package/src/button-group/schema.json +19 -4
- package/src/card/files/__name@dasherize__/__name@dasherize__.css.template +0 -67
- package/src/card/files/__name@dasherize__/__name@dasherize__.html.template +10 -55
- package/src/card/files/__name@dasherize__/__name@dasherize__.ts.template +2 -45
- package/src/card/schema.json +19 -4
- package/src/carousel/files/__name@dasherize__/__name@dasherize__.css.template +4 -33
- package/src/carousel/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
- package/src/carousel/files/__name@dasherize__/__name@dasherize__.ts.template +4 -0
- package/src/carousel/schema.json +19 -4
- package/src/checkbox/files/__name@dasherize__/__name@dasherize__.css.template +5 -21
- package/src/checkbox/schema.json +19 -4
- package/src/close-button/files/__name@dasherize__/__name@dasherize__.css.template +9 -47
- package/src/close-button/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
- package/src/close-button/schema.json +19 -4
- package/src/collection.json +15 -0
- package/src/combobox/files/__name@dasherize__/__name@dasherize__.css.template +4 -49
- package/src/combobox/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/combobox/files/__name@dasherize__/__name@dasherize__.ts.template +11 -8
- package/src/combobox/schema.json +19 -4
- package/src/dialog/files/__name@dasherize__/__name@dasherize__.css.template +3 -45
- package/src/dialog/files/__name@dasherize__/__name@dasherize__.html.template +5 -5
- package/src/dialog/files/__name@dasherize__/__name@dasherize__.ts.template +6 -1
- package/src/dialog/schema.json +19 -4
- package/src/disclosure/files/__name@dasherize__/__name@dasherize__.css.template +4 -36
- package/src/disclosure/schema.json +19 -4
- package/src/form/files/__name@dasherize__/__name@dasherize__.css.template +1 -77
- package/src/form/files/__name@dasherize__/__name@dasherize__.html.template +7 -7
- package/src/form/files/__name@dasherize__/__name@dasherize__.ts.template +20 -7
- package/src/form/schema.json +19 -4
- package/src/input/files/__name@dasherize__/__name@dasherize__.css.template +2 -58
- package/src/input/schema.json +19 -4
- package/src/input-group/files/__name@dasherize__/__name@dasherize__.css.template +2 -68
- package/src/input-group/files/__name@dasherize__/__name@dasherize__.html.template +13 -5
- package/src/input-group/files/__name@dasherize__/__name@dasherize__.ts.template +21 -6
- package/src/input-group/schema.json +19 -4
- package/src/landmarks/files/__name@dasherize__/__name@dasherize__.css.template +0 -24
- package/src/landmarks/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/landmarks/files/__name@dasherize__/__name@dasherize__.ts.template +5 -2
- package/src/landmarks/schema.json +19 -4
- package/src/list-group/files/__name@dasherize__/__name@dasherize__.css.template +0 -123
- package/src/list-group/files/__name@dasherize__/__name@dasherize__.e2e-spec.ts.template +8 -9
- package/src/list-group/files/__name@dasherize__/__name@dasherize__.html.template +13 -47
- package/src/list-group/files/__name@dasherize__/__name@dasherize__.spec.ts.template +46 -24
- package/src/list-group/files/__name@dasherize__/__name@dasherize__.ts.template +97 -39
- package/src/list-group/schema.json +19 -4
- package/src/listbox/files/__name@dasherize__/__name@dasherize__.css.template +3 -37
- package/src/listbox/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/listbox/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
- package/src/listbox/schema.json +19 -4
- package/src/menu-button/files/__name@dasherize__/__name@dasherize__.css.template +7 -47
- package/src/menu-button/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/menu-button/files/__name@dasherize__/__name@dasherize__.ts.template +10 -7
- package/src/menu-button/schema.json +19 -4
- package/src/meter/files/__name@dasherize__/__name@dasherize__.css.template +0 -12
- package/src/meter/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/meter/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
- package/src/meter/schema.json +19 -4
- package/src/navbar/files/__name@dasherize__/__name@dasherize__.css.template +6 -62
- package/src/navbar/schema.json +19 -4
- package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.css.template +6 -37
- package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.html.template +7 -6
- package/src/navigation-menu/files/__name@dasherize__/__name@dasherize__.ts.template +15 -1
- package/src/navigation-menu/schema.json +19 -4
- package/src/offcanvas/files/__name@dasherize__/__name@dasherize__.css.template +3 -70
- package/src/offcanvas/schema.json +19 -4
- package/src/pagination/files/__name@dasherize__/__name@dasherize__.css.template +2 -33
- package/src/pagination/files/__name@dasherize__/__name@dasherize__.html.template +6 -6
- package/src/pagination/files/__name@dasherize__/__name@dasherize__.ts.template +7 -1
- package/src/pagination/schema.json +19 -4
- package/src/popover/files/__name@dasherize__/__name@dasherize__.css.template +8 -69
- package/src/popover/schema.json +19 -4
- package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.css.template +1 -31
- package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/progress-bar/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
- package/src/progress-bar/schema.json +19 -4
- package/src/radio-group/files/__name@dasherize__/__name@dasherize__.css.template +4 -31
- package/src/radio-group/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/radio-group/files/__name@dasherize__/__name@dasherize__.ts.template +2 -1
- package/src/radio-group/schema.json +19 -4
- package/src/rating/files/__name@dasherize__/__name@dasherize__.css.template +17 -0
- package/src/rating/files/__name@dasherize__/__name@dasherize__.html.template +34 -0
- package/src/rating/files/__name@dasherize__/__name@dasherize__.spec.ts.template +38 -0
- package/src/rating/files/__name@dasherize__/__name@dasherize__.ts.template +75 -0
- package/src/rating/index.d.ts +1 -0
- package/src/rating/index.js +6 -0
- package/src/rating/index.js.map +1 -0
- package/src/rating/index.ts +3 -0
- package/src/rating/schema.d.ts +1 -0
- package/src/rating/schema.js +3 -0
- package/src/rating/schema.js.map +1 -0
- package/src/rating/schema.json +44 -0
- package/src/rating/schema.ts +1 -0
- package/src/select/files/__name@dasherize__/__name@dasherize__.css.template +4 -55
- package/src/select/schema.json +19 -4
- package/src/skeleton/files/__name@dasherize__/__name@dasherize__.css.template +2 -29
- package/src/skeleton/files/__name@dasherize__/__name@dasherize__.ts.template +1 -3
- package/src/skeleton/schema.json +19 -4
- package/src/skip-link/files/__name@dasherize__/__name@dasherize__.css.template +2 -14
- package/src/skip-link/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/skip-link/files/__name@dasherize__/__name@dasherize__.ts.template +5 -2
- package/src/skip-link/schema.json +19 -4
- package/src/slider/files/__name@dasherize__/__name@dasherize__.css.template +6 -20
- package/src/slider/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/slider/files/__name@dasherize__/__name@dasherize__.ts.template +3 -1
- package/src/slider/schema.json +19 -4
- package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.css.template +6 -35
- package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
- package/src/spinbutton/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
- package/src/spinbutton/schema.json +19 -4
- package/src/spinner/files/__name@dasherize__/__name@dasherize__.css.template +0 -43
- package/src/spinner/files/__name@dasherize__/__name@dasherize__.ts.template +2 -5
- package/src/spinner/schema.json +19 -4
- package/src/steps/files/__name@dasherize__/__name@dasherize__.css.template +36 -0
- package/src/steps/files/__name@dasherize__/__name@dasherize__.html.template +44 -0
- package/src/steps/files/__name@dasherize__/__name@dasherize__.spec.ts.template +35 -0
- package/src/steps/files/__name@dasherize__/__name@dasherize__.ts.template +107 -0
- package/src/steps/index.d.ts +1 -0
- package/src/steps/index.js +6 -0
- package/src/steps/index.js.map +1 -0
- package/src/steps/index.ts +3 -0
- package/src/steps/schema.d.ts +1 -0
- package/src/steps/schema.js +3 -0
- package/src/steps/schema.js.map +1 -0
- package/src/steps/schema.json +44 -0
- package/src/steps/schema.ts +1 -0
- package/src/switch/files/__name@dasherize__/__name@dasherize__.css.template +7 -22
- package/src/switch/schema.json +19 -4
- package/src/table/files/__name@dasherize__/__name@dasherize__.css.template +0 -25
- package/src/table/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/table/files/__name@dasherize__/__name@dasherize__.ts.template +3 -0
- package/src/table/schema.json +19 -4
- package/src/tabs/files/__name@dasherize__/__name@dasherize__.css.template +5 -44
- package/src/tabs/files/__name@dasherize__/__name@dasherize__.html.template +2 -2
- package/src/tabs/files/__name@dasherize__/__name@dasherize__.ts.template +2 -0
- package/src/tabs/schema.json +19 -4
- package/src/textarea/files/__name@dasherize__/__name@dasherize__.css.template +2 -59
- package/src/textarea/schema.json +19 -4
- package/src/toast/files/__name@dasherize__/__name@dasherize__.css.template +1 -35
- package/src/toast/files/__name@dasherize__/__name@dasherize__.html.template +4 -4
- package/src/toast/files/__name@dasherize__/__name@dasherize__.ts.template +5 -1
- package/src/toast/schema.json +19 -4
- package/src/toolbar/files/__name@dasherize__/__name@dasherize__.css.template +2 -36
- package/src/toolbar/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/toolbar/files/__name@dasherize__/__name@dasherize__.ts.template +11 -8
- package/src/toolbar/schema.json +19 -4
- package/src/tooltip/files/__name@dasherize__/__name@dasherize__.css.template +1 -32
- package/src/tooltip/schema.json +19 -4
- package/src/tree-view/files/__name@dasherize__/__name@dasherize__.css.template +5 -27
- package/src/tree-view/files/__name@dasherize__/__name@dasherize__.html.template +3 -3
- package/src/tree-view/files/__name@dasherize__/__name@dasherize__.ts.template +16 -13
- package/src/tree-view/schema.json +19 -4
- package/src/utils/generate-component.js +3 -1
- package/src/utils/generate-component.js.map +1 -1
- package/src/utils/generate-component.ts +3 -1
- package/src/utils/generate-composition.js +7 -2
- package/src/utils/generate-composition.js.map +1 -1
- package/src/utils/generate-composition.ts +9 -2
- package/src/utils/schema-types.d.ts +1 -0
- package/src/utils/schema-types.ts +1 -0
- package/README.pt-BR.md +0 -330
package/README.md
CHANGED
|
@@ -1,332 +1,237 @@
|
|
|
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
|
|
23
24
|
ng generate semmet-angular:ci
|
|
24
25
|
ng generate semmet-angular:docker
|
|
25
26
|
ng generate semmet-angular:deploy
|
|
26
27
|
```
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
Generated components are standalone Angular files:
|
|
29
30
|
|
|
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
|
|
31
|
+
```text
|
|
32
|
+
cta-button.ts
|
|
33
|
+
cta-button.html
|
|
34
|
+
cta-button.css
|
|
35
|
+
cta-button.spec.ts
|
|
69
36
|
```
|
|
70
37
|
|
|
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:
|
|
38
|
+
Playwright e2e specs are opt-in:
|
|
74
39
|
|
|
75
40
|
```bash
|
|
76
|
-
|
|
77
|
-
npm run e2e
|
|
78
|
-
npm run build
|
|
79
|
-
npm run lint
|
|
41
|
+
ng generate semmet-angular:button cta-button --e2e
|
|
80
42
|
```
|
|
81
43
|
|
|
82
|
-
`
|
|
44
|
+
Only pass `--e2e` when the consuming app has Playwright configured. The current roadmap is to move Playwright setup into an explicit schematic instead of doing it by default in `ng add`.
|
|
83
45
|
|
|
84
|
-
##
|
|
46
|
+
## Components vs Starter Blocks
|
|
85
47
|
|
|
86
|
-
|
|
87
|
-
ng generate semmet-angular:ci
|
|
88
|
-
```
|
|
48
|
+
### Components
|
|
89
49
|
|
|
90
|
-
|
|
50
|
+
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
51
|
|
|
92
|
-
|
|
52
|
+
They provide the accessibility contract while leaving layout and visual design to the application:
|
|
93
53
|
|
|
94
|
-
|
|
54
|
+
- semantic root elements where the native element matters;
|
|
55
|
+
- headless directives where accessibility comes from relationships between elements;
|
|
56
|
+
- ARIA attributes and accessible names/descriptions;
|
|
57
|
+
- keyboard and focus behavior;
|
|
58
|
+
- signal-based state;
|
|
59
|
+
- projected rich content through `ng-template` when needed;
|
|
60
|
+
- open visual inputs such as `variant` and `size` as `string`, not closed visual unions.
|
|
95
61
|
|
|
96
|
-
|
|
62
|
+
Examples:
|
|
97
63
|
|
|
98
64
|
```bash
|
|
99
|
-
ng generate semmet-angular:
|
|
65
|
+
ng generate semmet-angular:button save-button
|
|
66
|
+
ng generate semmet-angular:card testimonial-card
|
|
67
|
+
ng generate semmet-angular:input-group search-box
|
|
68
|
+
ng generate semmet-angular:list-group feature-list
|
|
69
|
+
ng generate semmet-angular:tabs settings-tabs
|
|
100
70
|
```
|
|
101
71
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
O `nginx.conf` inclui fallback de SPA com `try_files ... /index.html`. Por padrão, o schematic não sobrescreve arquivos existentes; use `--force` para substituir a configuração Docker atual.
|
|
72
|
+
### Starter Blocks
|
|
105
73
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
ng generate semmet-angular:deploy
|
|
110
|
-
```
|
|
74
|
+
Blocks are optional section scaffolds. They are useful for fast first drafts, common marketing/product sections, and quick app structure.
|
|
111
75
|
|
|
112
|
-
|
|
76
|
+
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
77
|
|
|
114
78
|
```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:
|
|
79
|
+
ng generate semmet-angular:block hero
|
|
80
|
+
ng generate semmet-angular:block section-card
|
|
81
|
+
ng generate semmet-angular:block section-pricing
|
|
82
|
+
ng generate semmet-angular:block section-table
|
|
83
|
+
ng generate semmet-angular:block section-form
|
|
84
|
+
ng generate semmet-angular:block section-tabs
|
|
85
|
+
ng generate semmet-angular:block section-list-group
|
|
86
|
+
ng generate semmet-angular:block header-navbar
|
|
87
|
+
ng generate semmet-angular:block footer-navigation
|
|
120
88
|
```
|
|
121
89
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
## Testes Gerados
|
|
90
|
+
Generated block HTML includes an inline comment reminding developers that the scaffold is editable and replaceable.
|
|
125
91
|
|
|
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
|
-
```
|
|
92
|
+
## Minimal Functional CSS
|
|
135
93
|
|
|
136
|
-
|
|
94
|
+
Generated CSS is intentionally sparse.
|
|
137
95
|
|
|
138
|
-
|
|
96
|
+
Keep CSS only when it supports structure, behavior, or accessibility:
|
|
139
97
|
|
|
140
|
-
|
|
98
|
+
- open/closed state;
|
|
99
|
+
- overlay positioning;
|
|
100
|
+
- visible focus;
|
|
101
|
+
- hidden content;
|
|
102
|
+
- native-control inheritance;
|
|
103
|
+
- basic box behavior needed by the component.
|
|
141
104
|
|
|
142
|
-
|
|
105
|
+
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
106
|
|
|
144
|
-
|
|
107
|
+
## Projected Content
|
|
145
108
|
|
|
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';
|
|
109
|
+
Rich content uses Angular projection patterns instead of string-only APIs.
|
|
151
110
|
|
|
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
|
-
```
|
|
111
|
+
Example after generating `search-box`:
|
|
163
112
|
|
|
164
113
|
```html
|
|
165
|
-
<app-
|
|
166
|
-
<ng-template
|
|
167
|
-
<app-
|
|
114
|
+
<app-search-box label="Search" type="search" [(value)]="query">
|
|
115
|
+
<ng-template searchBoxPrefix>
|
|
116
|
+
<app-search-icon aria-hidden="true" />
|
|
168
117
|
</ng-template>
|
|
169
118
|
|
|
170
|
-
<ng-template
|
|
171
|
-
|
|
119
|
+
<ng-template searchBoxSuffix>
|
|
120
|
+
{{ query().length }}
|
|
172
121
|
</ng-template>
|
|
173
|
-
</app-
|
|
122
|
+
</app-search-box>
|
|
174
123
|
```
|
|
175
124
|
|
|
176
|
-
|
|
125
|
+
Example after generating `testimonial-card`:
|
|
177
126
|
|
|
178
127
|
```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>
|
|
128
|
+
<app-testimonial-card>
|
|
129
|
+
<h3 testimonialCardHeading>Customer quote</h3>
|
|
130
|
+
<p>Semmet gives the accessibility structure; this app owns the content and layout.</p>
|
|
131
|
+
</app-testimonial-card>
|
|
196
132
|
```
|
|
197
133
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
Os schematics estruturais menores mantêm APIs simples por input e adicionam slots seguros onde o componente gerado continua dono da estrutura acessível:
|
|
134
|
+
Example after generating `feature-list`:
|
|
201
135
|
|
|
202
136
|
```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>
|
|
137
|
+
<ul featureList label="Pricing features" [(activeId)]="activeFeature">
|
|
138
|
+
@for (item of features; track item.id) {
|
|
139
|
+
<li
|
|
140
|
+
featureListItem
|
|
141
|
+
[value]="item.id"
|
|
142
|
+
#featureItem="featureListItem"
|
|
143
|
+
[class.active]="featureItem.active()"
|
|
144
|
+
>
|
|
145
|
+
<span>{{ item.label }}</span>
|
|
146
|
+
<strong>{{ item.value }}</strong>
|
|
147
|
+
</li>
|
|
148
|
+
}
|
|
149
|
+
</ul>
|
|
150
|
+
```
|
|
232
151
|
|
|
233
|
-
|
|
234
|
-
<ng-template resultsTableEmpty>Nenhum resultado de receita ainda.</ng-template>
|
|
235
|
-
</app-results-table>
|
|
152
|
+
## Delivery Schematics
|
|
236
153
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
</app-view-switcher>
|
|
154
|
+
```bash
|
|
155
|
+
ng generate semmet-angular:ci
|
|
156
|
+
ng generate semmet-angular:docker
|
|
157
|
+
ng generate semmet-angular:deploy
|
|
242
158
|
```
|
|
243
159
|
|
|
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
|
-
Todo componente gerado compartilha um visual inspirado em Material Design — superfícies limpas, elevação sutil e escala consistente de raio/movimento — usando sua própria paleta de cores (não as cores do Material, para evitar qualquer risco de cópia visual). Os tokens são CSS custom properties declaradas no `:host` de cada componente (por exemplo, `--semmet-color-primary`, `--semmet-radius-md`, `--semmet-elevation-1`), então você pode usar os defaults como estão ou sobrescrever a família inteira em uma stylesheet global sem tocar nos arquivos gerados.
|
|
321
|
-
|
|
322
|
-
## Opções
|
|
323
|
-
|
|
324
|
-
Todo schematic 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
|
|
160
|
+
The delivery schematics are explicit and optional:
|
|
161
|
+
|
|
162
|
+
- `ci` generates a GitHub Actions workflow from existing package scripts.
|
|
163
|
+
- `docker` generates Docker/Nginx packaging files for an Angular SPA.
|
|
164
|
+
- `deploy` generates minimal deployment configuration for supported platforms.
|
|
165
|
+
|
|
166
|
+
## Available Component Commands
|
|
167
|
+
|
|
168
|
+
Overlays and disclosure:
|
|
169
|
+
|
|
170
|
+
- `accordion`
|
|
171
|
+
- `alert-dialog`
|
|
172
|
+
- `dialog`
|
|
173
|
+
- `disclosure`
|
|
174
|
+
- `menu-button`
|
|
175
|
+
- `offcanvas`
|
|
176
|
+
- `popover`
|
|
177
|
+
- `tooltip`
|
|
178
|
+
|
|
179
|
+
Navigation and structure:
|
|
180
|
+
|
|
181
|
+
- `breadcrumb`
|
|
182
|
+
- `card`
|
|
183
|
+
- `landmarks`
|
|
184
|
+
- `list-group`
|
|
185
|
+
- `navbar`
|
|
186
|
+
- `navigation-menu`
|
|
187
|
+
- `pagination`
|
|
188
|
+
- `skip-link`
|
|
189
|
+
- `tabs`
|
|
190
|
+
- `toolbar`
|
|
191
|
+
- `tree-view`
|
|
192
|
+
|
|
193
|
+
Forms and inputs:
|
|
194
|
+
|
|
195
|
+
- `checkbox`
|
|
196
|
+
- `combobox`
|
|
197
|
+
- `form`
|
|
198
|
+
- `input`
|
|
199
|
+
- `input-group`
|
|
200
|
+
- `listbox`
|
|
201
|
+
- `meter`
|
|
202
|
+
- `progress-bar`
|
|
203
|
+
- `radio-group`
|
|
204
|
+
- `select`
|
|
205
|
+
- `slider`
|
|
206
|
+
- `spinbutton`
|
|
207
|
+
- `switch`
|
|
208
|
+
- `textarea`
|
|
209
|
+
|
|
210
|
+
Feedback, media, and display:
|
|
211
|
+
|
|
212
|
+
- `alert`
|
|
213
|
+
- `avatar`
|
|
214
|
+
- `badge`
|
|
215
|
+
- `button`
|
|
216
|
+
- `button-group`
|
|
217
|
+
- `carousel`
|
|
218
|
+
- `close-button`
|
|
219
|
+
- `rating`
|
|
220
|
+
- `skeleton`
|
|
221
|
+
- `spinner`
|
|
222
|
+
- `steps`
|
|
223
|
+
- `table`
|
|
224
|
+
- `toast`
|
|
225
|
+
|
|
226
|
+
## Options
|
|
227
|
+
|
|
228
|
+
Common component options:
|
|
229
|
+
|
|
230
|
+
- `name` required, positional.
|
|
231
|
+
- `project` target Angular project.
|
|
232
|
+
- `path` target directory.
|
|
233
|
+
- `e2e` optional boolean. Generates a Playwright spec only when explicitly requested.
|
|
234
|
+
|
|
235
|
+
## License
|
|
331
236
|
|
|
332
237
|
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "semmet-angular",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.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
|
-
}
|