ds-tis 1.0.0-beta.10
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/LICENSE +49 -0
- package/README.md +125 -0
- package/css/base/forced-colors.css +62 -0
- package/css/base/icons.css +73 -0
- package/css/base/index.css +4 -0
- package/css/base/reset.css +80 -0
- package/css/base/typography.css +211 -0
- package/css/components/accordion.css +153 -0
- package/css/components/alert.css +161 -0
- package/css/components/avatar.css +76 -0
- package/css/components/badge.css +83 -0
- package/css/components/breadcrumb.css +58 -0
- package/css/components/button.css +364 -0
- package/css/components/card.css +159 -0
- package/css/components/checkbox.css +296 -0
- package/css/components/combobox.css +330 -0
- package/css/components/divider.css +20 -0
- package/css/components/form-field.css +137 -0
- package/css/components/index.css +28 -0
- package/css/components/input.css +356 -0
- package/css/components/link.css +67 -0
- package/css/components/menu.css +246 -0
- package/css/components/modal.css +236 -0
- package/css/components/pagination.css +132 -0
- package/css/components/radio.css +280 -0
- package/css/components/select.css +399 -0
- package/css/components/skeleton.css +52 -0
- package/css/components/spinner.css +59 -0
- package/css/components/tabs.css +79 -0
- package/css/components/textarea.css +218 -0
- package/css/components/toggle.css +202 -0
- package/css/components/tooltip.css +116 -0
- package/css/design-system.css +13 -0
- package/css/tokens/generated/component.css +720 -0
- package/css/tokens/generated/foundation.css +282 -0
- package/css/tokens/generated/index.css +5 -0
- package/css/tokens/generated/theme-dark.css +243 -0
- package/css/tokens/generated/theme-light.css +244 -0
- package/css/tokens/index.css +6 -0
- package/css/utilities/elevation.css +24 -0
- package/css/utilities/index.css +2 -0
- package/css/utilities/layout.css +132 -0
- package/docs/agent-consumer-usage.en.md +322 -0
- package/docs/agent-consumer-usage.md +294 -0
- package/docs/api/adrs.json +186 -0
- package/docs/api/components.json +2071 -0
- package/docs/api/consumer-context.json +66 -0
- package/docs/api/foundations.json +94 -0
- package/docs/api/tokens.json +6839 -0
- package/docs/llms-full.txt +23699 -0
- package/docs/llms.txt +109 -0
- package/docs/templates/contact.html +364 -0
- package/docs/templates/dashboard.html +318 -0
- package/docs/templates/index.html +232 -0
- package/docs/templates/login.html +286 -0
- package/docs/templates/settings.html +365 -0
- package/docs/templates/signup.html +350 -0
- package/js/accordion.js +192 -0
- package/js/combobox.js +263 -0
- package/js/menu.js +301 -0
- package/js/modal.js +256 -0
- package/js/package.json +3 -0
- package/js/tabs.js +200 -0
- package/js/theme/apply.js +75 -0
- package/js/theme/brand-contrast-audit.js +133 -0
- package/js/theme/color.js +149 -0
- package/js/theme/config-schema.js +40 -0
- package/js/theme/contrast.js +76 -0
- package/js/theme/export.js +118 -0
- package/js/theme/index.js +21 -0
- package/js/theme/overlay.js +29 -0
- package/js/theme/package.json +3 -0
- package/js/theme/palette.js +103 -0
- package/js/theme/radius.js +76 -0
- package/js/theme/semantic-mapper.js +138 -0
- package/js/theme/typography.js +33 -0
- package/js/theme/url-state.js +52 -0
- package/js/tooltip.js +227 -0
- package/package.json +139 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
# Using DS TIS with agents in consumer projects
|
|
2
|
+
|
|
3
|
+
This guide is the official instruction for AI agents implementing screens in
|
|
4
|
+
consumer applications with DS TIS. It does not replace `AGENTS.md`, which is
|
|
5
|
+
for maintaining this repository. The focus here is consumption: building real
|
|
6
|
+
screens with the package's public API without inventing an official layer that
|
|
7
|
+
does not exist.
|
|
8
|
+
|
|
9
|
+
Use this guide before generating, reviewing or refactoring any screen in a
|
|
10
|
+
consumer application.
|
|
11
|
+
|
|
12
|
+
## Scope
|
|
13
|
+
|
|
14
|
+
DS TIS is stack-agnostic. Its public foundation is HTML, CSS and JavaScript
|
|
15
|
+
distributed by the `ds-tis` package. React, Vue, Angular, Svelte or another
|
|
16
|
+
framework may wrap this foundation inside the consumer application, but that
|
|
17
|
+
wrapper belongs to the consumer project.
|
|
18
|
+
|
|
19
|
+
Do not present React, Vue or Angular wrappers as official DS TIS APIs unless
|
|
20
|
+
they exist in this repository.
|
|
21
|
+
|
|
22
|
+
## Expected inputs
|
|
23
|
+
|
|
24
|
+
Before implementing, the agent must gather:
|
|
25
|
+
|
|
26
|
+
- the goal of the screen or flow;
|
|
27
|
+
- the consumer project's stack and conventions;
|
|
28
|
+
- the installed `ds-tis` version, when available;
|
|
29
|
+
- existing routes, layouts, providers and local patterns;
|
|
30
|
+
- expected states: loading, empty, error, disabled, success, read-only, destructive and responsive;
|
|
31
|
+
- accessibility, language, data and permission constraints.
|
|
32
|
+
|
|
33
|
+
If these inputs are unclear, inspect the project first. Ask the owner only when
|
|
34
|
+
the decision changes product behavior, real data, permissions or local architecture.
|
|
35
|
+
|
|
36
|
+
## Required sources
|
|
37
|
+
|
|
38
|
+
Before writing new markup, consult the public DS sources:
|
|
39
|
+
|
|
40
|
+
- `README.md` for installation and primary imports;
|
|
41
|
+
- `docs/llms.txt` for the lightweight LLM index;
|
|
42
|
+
- `docs/llms-full.txt` for complete canonical context;
|
|
43
|
+
- `docs/api/components.json` for components, readiness, responsibility, variants, consumed tokens and JS runtime metadata (`runtime.level`, `runtime.module`, `runtime.init`, `runtime.destroy`, `runtime.events`);
|
|
44
|
+
- `docs/api/tokens.json` for Foundation, Semantic and Component layers;
|
|
45
|
+
- component pages at `docs/<component>.html`;
|
|
46
|
+
- templates under `docs/templates/` and exports under `ds-tis/templates/*` when the flow matches a published pattern.
|
|
47
|
+
|
|
48
|
+
Do not depend on memory or assumptions about classes. When in doubt, read the
|
|
49
|
+
component page and the JSON API.
|
|
50
|
+
|
|
51
|
+
The tarball includes machine-readable context. After installation, read it
|
|
52
|
+
through `ds-tis/metadata`, `ds-tis/metadata/components`,
|
|
53
|
+
`ds-tis/metadata/tokens`, `ds-tis/agent-guide`, `ds-tis/agent-guide/en`, `ds-tis/llms` and
|
|
54
|
+
`ds-tis/llms-full`, or directly from `node_modules/ds-tis/docs/`. Without the
|
|
55
|
+
package, use the public fallback
|
|
56
|
+
`https://tis-experience.github.io/ds-tis/docs/api/components.json`.
|
|
57
|
+
|
|
58
|
+
`ds-tis/metadata` points to `consumer-context.json`, a compact manifest with
|
|
59
|
+
official entrypoints, version, sources of truth and the responsive contract.
|
|
60
|
+
JSON modules may require an import attribute in some stacks; agents and scripts
|
|
61
|
+
may also read the file through the package resolver or filesystem.
|
|
62
|
+
|
|
63
|
+
## Readiness and responsibility
|
|
64
|
+
|
|
65
|
+
Before selecting a component, read `readiness` and `responsibility` in
|
|
66
|
+
`docs/api/components.json`:
|
|
67
|
+
|
|
68
|
+
| Readiness | Expected use |
|
|
69
|
+
|---|---|
|
|
70
|
+
| `app-ready` | Recommended for applications within the documented public API. |
|
|
71
|
+
| `composition` | Public and stable, but the application owns orchestration, navigation or shared state. |
|
|
72
|
+
| `experimental` | Do not use in a critical flow without explicitly accepting the limitation in `readinessNotes`. |
|
|
73
|
+
|
|
74
|
+
`responsibility.model` identifies who owns behavior:
|
|
75
|
+
|
|
76
|
+
- `native`: use the appropriate HTML element; the app owns data and business events;
|
|
77
|
+
- `presentation`: there is no component runtime; the app supplies content and context;
|
|
78
|
+
- `consumer`: the DS provides visual composition, while the app owns orchestration;
|
|
79
|
+
- `ds-runtime`: the DS owns reusable interaction; initialize the module declared in `runtime`.
|
|
80
|
+
|
|
81
|
+
Do not promote an Experimental component to App-ready locally. If the project
|
|
82
|
+
fills a gap with custom code, identify it as a local adaptation and record the
|
|
83
|
+
demand for the DS.
|
|
84
|
+
|
|
85
|
+
## Official imports
|
|
86
|
+
|
|
87
|
+
Install the current version from the npm registry:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npm install ds-tis
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
During the beta phase, the npm `latest` and `beta` dist-tags point to the same
|
|
94
|
+
prerelease; `npm install ds-tis@beta` makes the channel explicit. In production,
|
|
95
|
+
prefer `"ds-tis": "1.0.0-beta.10"` in `package.json`. GitHub release fallback:
|
|
96
|
+
`npm install github:tis-experience/ds-tis#v1.0.0-beta.10`.
|
|
97
|
+
|
|
98
|
+
Import the public CSS once in the application's global entrypoint:
|
|
99
|
+
|
|
100
|
+
```js
|
|
101
|
+
import 'ds-tis/css';
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
For Accordion, Combobox, Modal, Action Menu, Tabs and Tooltip, initialize the
|
|
105
|
+
public behavior after render or hydration. On teardown (SPA route, view or
|
|
106
|
+
portal), call the corresponding `destroy` function to remove listeners:
|
|
107
|
+
|
|
108
|
+
```js
|
|
109
|
+
import { initAccordions, destroyAccordions } from 'ds-tis/accordion';
|
|
110
|
+
import { initComboboxes, destroyComboboxes } from 'ds-tis/combobox';
|
|
111
|
+
import { initModals, destroyModals } from 'ds-tis/modal';
|
|
112
|
+
import { initActionMenus, destroyActionMenus } from 'ds-tis/menu';
|
|
113
|
+
import { initTabs, destroyTabs } from 'ds-tis/tabs';
|
|
114
|
+
import { initTooltips, destroyTooltips } from 'ds-tis/tooltip';
|
|
115
|
+
|
|
116
|
+
initAccordions();
|
|
117
|
+
initComboboxes();
|
|
118
|
+
initModals();
|
|
119
|
+
initActionMenus();
|
|
120
|
+
initTabs();
|
|
121
|
+
initTooltips();
|
|
122
|
+
|
|
123
|
+
// when leaving the view / unmounting:
|
|
124
|
+
destroyAccordions();
|
|
125
|
+
destroyComboboxes();
|
|
126
|
+
destroyModals();
|
|
127
|
+
destroyActionMenus();
|
|
128
|
+
destroyTabs();
|
|
129
|
+
destroyTooltips();
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
A `required` module does not automatically make a component App-ready.
|
|
133
|
+
Accordion, Combobox, Modal, Action Menu, Tabs and Tooltip have completed the
|
|
134
|
+
executable ADR-020 gate. Their modules remain required whenever those
|
|
135
|
+
components are used because they preserve the published interactive and
|
|
136
|
+
accessible contract.
|
|
137
|
+
|
|
138
|
+
In the App-ready Combobox, DOM focus stays on the input while arrow keys update
|
|
139
|
+
`aria-activedescendant`; `Escape` closes the listbox without moving focus. The
|
|
140
|
+
`ds-combobox-change` event exposes `value`, `input`, `root` and the selected
|
|
141
|
+
`option` in `detail`.
|
|
142
|
+
|
|
143
|
+
In the App-ready Modal, only siblings outside the dialog path receive `inert`;
|
|
144
|
+
the runtime preserves and restores each node's previous state. `ds-modal-open`
|
|
145
|
+
and `ds-modal-close` expose the overlay, dialog and relevant focus reference in
|
|
146
|
+
`detail`.
|
|
147
|
+
|
|
148
|
+
In the App-ready Action Menu, `menuitem`, `menuitemradio` and
|
|
149
|
+
`menuitemcheckbox` are part of the contract. `aria-disabled` items remain
|
|
150
|
+
focusable but do not activate or close the menu; typeahead, arrows, Home/End and
|
|
151
|
+
Escape are maintained by the runtime.
|
|
152
|
+
|
|
153
|
+
In the App-ready Tabs, the runtime keeps exactly one tab in the focus order,
|
|
154
|
+
skips disabled tabs with arrows and Home/End, synchronizes `aria-selected` with
|
|
155
|
+
`hidden` on panels and ensures focus entry on the selected tabpanel. Tab buttons
|
|
156
|
+
without an explicit `type` are normalized to `type="button"`, preventing
|
|
157
|
+
accidental form submission. `ds-tabs-change` exposes the root, tab, panel and
|
|
158
|
+
previous tab in `detail`.
|
|
159
|
+
|
|
160
|
+
In the App-ready Tooltip, the runtime ensures valid `role="tooltip"`, ID and
|
|
161
|
+
`aria-describedby` even when the markup omits them. Focus and hover open it
|
|
162
|
+
without moving DOM focus; blur and leaving both trigger and content close it;
|
|
163
|
+
Escape keeps it dismissed until pointer and focus leave. Content stays
|
|
164
|
+
hoverable under WCAG 1.4.13. `ds-tooltip-show` and `ds-tooltip-hide` expose the
|
|
165
|
+
root, trigger and content in `detail`.
|
|
166
|
+
|
|
167
|
+
For theme customization, use the public theme engine:
|
|
168
|
+
|
|
169
|
+
```js
|
|
170
|
+
import { applyTheme, toCssSnippet } from 'ds-tis/theme';
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
When a published template is a useful starting point, use its export:
|
|
174
|
+
|
|
175
|
+
```js
|
|
176
|
+
import loginTemplate from 'ds-tis/templates/login.html?raw';
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
`ds-tis/templates/*` points to public HTML templates. Adapt content, routes and
|
|
180
|
+
data to the consumer application; do not copy fictional text into production.
|
|
181
|
+
|
|
182
|
+
## JavaScript runtime by component
|
|
183
|
+
|
|
184
|
+
Read `docs/api/components.json` before importing JS modules. Each component
|
|
185
|
+
exposes `runtime`:
|
|
186
|
+
|
|
187
|
+
| Field | Meaning |
|
|
188
|
+
|---|---|
|
|
189
|
+
| `null` | CSS-only; no published JS module. |
|
|
190
|
+
| `runtime.level: "required"` | The interactive and accessible contract depends on initialization (Accordion, Combobox, Modal, Action Menu, Tabs and Tooltip). |
|
|
191
|
+
| `runtime.level: "optional"` | Reserved for enhancements unnecessary to the accessible contract; no current module uses this level. |
|
|
192
|
+
| `runtime.module` | Package export (`ds-tis/accordion`, `ds-tis/combobox`, `ds-tis/modal`, `ds-tis/menu`, `ds-tis/tabs`, `ds-tis/tooltip`). |
|
|
193
|
+
| `runtime.init` | Function called after render or hydration. |
|
|
194
|
+
| `runtime.destroy` | Function called during teardown. |
|
|
195
|
+
| `runtime.events` | Public events emitted by the module. |
|
|
196
|
+
|
|
197
|
+
The top-level `runtimeModules` array in `components.json` lists every published
|
|
198
|
+
module. Do not import JS for components with `runtime: null`.
|
|
199
|
+
|
|
200
|
+
## Responsive contract
|
|
201
|
+
|
|
202
|
+
The DS uses an `intrinsic-first` strategy and publishes no automatic
|
|
203
|
+
breakpoints. `publicBreakpoints` is intentionally empty: `sm`, `md`, `lg` and
|
|
204
|
+
`full` variants are explicit product choices, not viewport-triggered rules.
|
|
205
|
+
Read `responsiveContract`, `responsiveProfiles` and each component's
|
|
206
|
+
`responsive` field in `ds-tis/metadata/components`.
|
|
207
|
+
|
|
208
|
+
- `container`: the component preserves its anatomy in the supplied width; the app owns grid and reflow;
|
|
209
|
+
- `viewport-constrained`: Modal and Tooltip apply intrinsic viewport limits;
|
|
210
|
+
- `consumer-managed-horizontal`: Tabs, Breadcrumb and Pagination do not remove or summarize items; the app decides overflow, reduction or an alternative composition;
|
|
211
|
+
- `consumer-selectable-width`: Button provides explicit width choices; the app decides when to apply them.
|
|
212
|
+
|
|
213
|
+
The tarball is exercised at 320×568, 568×320 and 1280×800. This proves the
|
|
214
|
+
reference fixture and overlay limits; it does not replace tests with the
|
|
215
|
+
consumer product's content, zoom, language, orientation and layout.
|
|
216
|
+
|
|
217
|
+
## Implementation rules
|
|
218
|
+
|
|
219
|
+
1. Choose existing components before creating ad hoc markup. Read `readiness`, `responsibility` and `runtime` in `docs/api/components.json`.
|
|
220
|
+
2. Use the documented public anatomy. Do not use isolated internal classes as autonomous components.
|
|
221
|
+
3. Forms must combine `ds-field` with the actual control: `ds-input`, `ds-select`, `ds-textarea`, `ds-combobox`, `ds-checkbox`, `ds-radio` or `ds-toggle`. For Input, the native field remains inside the public anatomy with `ds-input__field`.
|
|
222
|
+
4. Do not hardcode `#hex`, `rgb()`, `px` or `rem` when a public token, class, variant or utility exists for the same role.
|
|
223
|
+
5. Preserve the DS visual chain. Public tokens appear as `var(--ds-...)`; do not invent local values for color, spacing, radius, border, typography or focus ring without justification.
|
|
224
|
+
6. Preserve accessibility: semantic landmarks, heading order, labels, `aria-*`, `aria-describedby`, `aria-expanded`, `aria-current`, keyboard support, disabled/error/read-only states and a visible focus ring.
|
|
225
|
+
7. States are not decoration. Implement loading, empty, error, disabled, hover, focus and responsive states when they belong to the expected flow.
|
|
226
|
+
8. Icons should follow the consumer project's library when one exists; when reproducing DS examples, prefer the documented visual vocabulary.
|
|
227
|
+
9. Do not invent official wrappers. In React, Vue or Angular, create local app components only as adaptations of public anatomy and state that boundary.
|
|
228
|
+
10. Do not change DS tokens, generated CSS or documentation from the consumer project. Record real gaps and open a demand for the DS.
|
|
229
|
+
|
|
230
|
+
## Recommended workflow
|
|
231
|
+
|
|
232
|
+
1. Read the request, identify the stack and find the global entrypoint for `ds-tis/css`.
|
|
233
|
+
2. Inventory the screen: navigation, forms, feedback, cards, overlays, lists, loading, empty states and actions.
|
|
234
|
+
3. Map each part to an existing DS component and check readiness. Use local markup only when no suitable DS component exists.
|
|
235
|
+
4. Read the component HTML page and `docs/api/components.json` before writing anatomy.
|
|
236
|
+
5. Implement with public DS classes without copying internal classes outside their component context.
|
|
237
|
+
6. Initialize JS modules when `components.json` declares a runtime: always for `required`, and for `optional` when the screen needs the enhancement.
|
|
238
|
+
7. Apply `ds-tis/theme` only for an actual runtime brand or mode requirement.
|
|
239
|
+
8. Run the consumer project's tests and linters. When possible, validate accessibility with axe, Playwright, a real browser or an equivalent tool.
|
|
240
|
+
9. Deliver evidence: components, imports, relevant tokens/classes, accessibility validation and assumed limits.
|
|
241
|
+
|
|
242
|
+
## Framework adaptation
|
|
243
|
+
|
|
244
|
+
React, Vue and Angular may render public DS anatomy through local components.
|
|
245
|
+
The adaptation must:
|
|
246
|
+
|
|
247
|
+
- preserve public DS class names;
|
|
248
|
+
- preserve labels, IDs, `aria-*` and `for`/`id` relationships;
|
|
249
|
+
- expose local product-aligned props without promising an official DS API;
|
|
250
|
+
- initialize JS modules after render or hydration when required;
|
|
251
|
+
- avoid recreating complex behavior when the DS already exports a public helper such as `ds-tis/combobox`.
|
|
252
|
+
|
|
253
|
+
Correct boundary example: "I created `AppTextField` in the consumer application
|
|
254
|
+
using `ds-field` + `ds-input`; this is a local app wrapper, not an official
|
|
255
|
+
component exported by `ds-tis`."
|
|
256
|
+
|
|
257
|
+
## Short prompt for a consumer agent
|
|
258
|
+
|
|
259
|
+
Copy this block to start an agent that will implement a screen with DS TIS in a
|
|
260
|
+
consumer project:
|
|
261
|
+
|
|
262
|
+
```text
|
|
263
|
+
Role: DS TIS consumer agent.
|
|
264
|
+
|
|
265
|
+
Input artifact:
|
|
266
|
+
- Screen or flow request.
|
|
267
|
+
- Consumer project stack.
|
|
268
|
+
- Current app files defining layout, global styles, routes and local components.
|
|
269
|
+
- Installed ds-tis version, if any.
|
|
270
|
+
|
|
271
|
+
Required sources:
|
|
272
|
+
- README.md
|
|
273
|
+
- docs/llms.txt
|
|
274
|
+
- docs/llms-full.txt
|
|
275
|
+
- docs/api/components.json (readiness, responsibility and runtime)
|
|
276
|
+
- docs/api/tokens.json
|
|
277
|
+
- docs/<component>.html for every component used
|
|
278
|
+
- docs/templates/ or ds-tis/templates/* when a relevant template exists
|
|
279
|
+
|
|
280
|
+
Rules:
|
|
281
|
+
- Install with `npm install ds-tis`; pin the exact version in production during beta.
|
|
282
|
+
- Import ds-tis/css once in the global entrypoint.
|
|
283
|
+
- For each component, derive the module from runtime.module in docs/api/components.json; when runtime.level is required, call init after render/hydration and destroy before unmount.
|
|
284
|
+
- Prefer App-ready components; treat Composition as an explicit app boundary and do not use Experimental in critical flows without recording the limitation.
|
|
285
|
+
- Use ds-tis/theme only for an actual runtime theme or brand requirement.
|
|
286
|
+
- Choose existing components before creating ad hoc markup.
|
|
287
|
+
- Use public component anatomy; do not use isolated internal classes.
|
|
288
|
+
- Form controls must combine ds-field with the actual control, such as ds-input + ds-input__field.
|
|
289
|
+
- Do not hardcode hex/rgb/px/rem when a public token, class or variant exists.
|
|
290
|
+
- Preserve landmarks, labels, aria-*, keyboard behavior, focus ring and disabled/error/read-only states.
|
|
291
|
+
- In React/Vue/Angular, adapt public anatomy into local app wrappers; do not invent official DS TIS wrappers.
|
|
292
|
+
|
|
293
|
+
Expected output:
|
|
294
|
+
- Changed files.
|
|
295
|
+
- DS components used and why.
|
|
296
|
+
- Added DS imports.
|
|
297
|
+
- Relevant public tokens and classes.
|
|
298
|
+
- Accessibility and keyboard evidence.
|
|
299
|
+
- Assumed limits or DS gaps that require a demand.
|
|
300
|
+
|
|
301
|
+
Blocked before:
|
|
302
|
+
- Creating an official DS API that does not exist.
|
|
303
|
+
- Changing ds-tis package tokens or CSS inside the consumer application.
|
|
304
|
+
- Replacing an existing DS component with ad hoc markup without justification.
|
|
305
|
+
- Removing labels, aria-* or focus ring.
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
## Delivery checklist
|
|
309
|
+
|
|
310
|
+
Before finishing, the agent must report:
|
|
311
|
+
|
|
312
|
+
- DS components used and alternatives rejected;
|
|
313
|
+
- readiness and responsibility for each component used;
|
|
314
|
+
- imports added: `ds-tis/css`, JS modules declared in `components.json`, `ds-tis/theme` and/or `ds-tis/templates/*`;
|
|
315
|
+
- main public classes such as `ds-field`, `ds-input` and `ds-input__field`;
|
|
316
|
+
- relevant CSS tokens when customization uses `var(--ds-...)`;
|
|
317
|
+
- accessibility evidence: labels, landmarks, `aria-*`, keyboard, focus ring and contrast when applicable;
|
|
318
|
+
- implemented states: default, hover, focus, disabled, error, loading, empty and responsive as required by the flow;
|
|
319
|
+
- assumed limitations and gaps that belong in the DS or product backlog.
|
|
320
|
+
|
|
321
|
+
If an item does not apply, state why. Never leave missing states or
|
|
322
|
+
accessibility implicit.
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# Uso do DS TIS por agents em projetos consumidores
|
|
2
|
+
|
|
3
|
+
Este guia é a instrução oficial para agents IA que precisam implementar telas em aplicações consumidoras usando o DS TIS. Ele não substitui `AGENTS.md`, que é voltado para manutenção deste repositório. Aqui o foco é consumo: montar telas reais com a API pública do pacote, sem inventar uma camada oficial que não existe.
|
|
4
|
+
|
|
5
|
+
Use este guia antes de gerar, revisar ou refatorar qualquer tela em um app consumidor.
|
|
6
|
+
|
|
7
|
+
## Escopo
|
|
8
|
+
|
|
9
|
+
O DS TIS é stack-agnóstico. A base pública é HTML, CSS e JavaScript distribuídos pelo pacote `ds-tis`. React, Vue, Angular, Svelte ou outro framework podem encapsular essa base dentro do app consumidor, mas esse encapsulamento é responsabilidade do projeto consumidor.
|
|
10
|
+
|
|
11
|
+
Não apresente wrappers React/Vue/Angular como API oficial do DS TIS se eles não existem neste repositório.
|
|
12
|
+
|
|
13
|
+
## Entradas esperadas
|
|
14
|
+
|
|
15
|
+
Antes de implementar, o agent deve reunir:
|
|
16
|
+
|
|
17
|
+
- objetivo da tela ou fluxo;
|
|
18
|
+
- stack e convenções do projeto consumidor;
|
|
19
|
+
- versão instalada do pacote `ds-tis`, quando disponível;
|
|
20
|
+
- rotas, layouts, providers e padrões locais já existentes;
|
|
21
|
+
- lista de estados esperados: loading, empty, error, disabled, success, read-only, destructive e responsive;
|
|
22
|
+
- restrições de acessibilidade, idioma, dados e permissões.
|
|
23
|
+
|
|
24
|
+
Se essas entradas não estiverem claras, inspecione o projeto primeiro. Pergunte ao owner somente quando a decisão mudar comportamento de produto, dados reais, permissões ou arquitetura local.
|
|
25
|
+
|
|
26
|
+
## Fontes obrigatórias
|
|
27
|
+
|
|
28
|
+
Antes de escrever markup novo, consulte as fontes públicas do DS:
|
|
29
|
+
|
|
30
|
+
- `README.md` para instalação e imports principais;
|
|
31
|
+
- `docs/llms.txt` para o índice leve consumível por LLMs;
|
|
32
|
+
- `docs/llms-full.txt` para contexto textual completo;
|
|
33
|
+
- `docs/api/components.json` para componentes, readiness, responsabilidade, variantes, tokens consumidos e metadados de runtime JS (`runtime.level`, `runtime.module`, `runtime.init`, `runtime.destroy`, `runtime.events`);
|
|
34
|
+
- `docs/api/tokens.json` para camadas Foundation, Semantic e Component;
|
|
35
|
+
- páginas HTML dos componentes em `docs/<component>.html`;
|
|
36
|
+
- templates em `docs/templates/` e exports `ds-tis/templates/*`, quando o fluxo se aproxima de um padrão já publicado.
|
|
37
|
+
|
|
38
|
+
Não dependa de memória ou suposições sobre classes. Quando houver dúvida, leia a página do componente e a API JSON.
|
|
39
|
+
|
|
40
|
+
O tarball inclui o contexto machine-readable. Depois da instalação, leia pelos
|
|
41
|
+
exports `ds-tis/metadata`, `ds-tis/metadata/components`,
|
|
42
|
+
`ds-tis/metadata/tokens`, `ds-tis/agent-guide`, `ds-tis/agent-guide/en`, `ds-tis/llms` e
|
|
43
|
+
`ds-tis/llms-full`, ou diretamente em `node_modules/ds-tis/docs/`. Sem o pacote
|
|
44
|
+
instalado, use o fallback público
|
|
45
|
+
`https://tis-experience.github.io/ds-tis/docs/api/components.json`.
|
|
46
|
+
|
|
47
|
+
`ds-tis/metadata` aponta para `consumer-context.json`: um manifesto pequeno com
|
|
48
|
+
entrypoints oficiais, versão, fontes de verdade e contrato responsivo. JSON
|
|
49
|
+
modules podem exigir import attribute na stack usada; agents e scripts também
|
|
50
|
+
podem ler o arquivo diretamente pelo package resolver ou filesystem.
|
|
51
|
+
|
|
52
|
+
## Readiness e responsabilidade
|
|
53
|
+
|
|
54
|
+
Antes de escolher um componente, leia `readiness` e `responsibility` em `docs/api/components.json`:
|
|
55
|
+
|
|
56
|
+
| Readiness | Uso esperado |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `app-ready` | Recomendado para aplicações dentro da API pública documentada. |
|
|
59
|
+
| `composition` | Público e estável, mas a aplicação mantém orquestração, navegação ou estado entre as partes. |
|
|
60
|
+
| `experimental` | Não usar em fluxo crítico sem aceitar explicitamente a limitação em `readinessNotes`. |
|
|
61
|
+
|
|
62
|
+
`responsibility.model` informa quem mantém o comportamento:
|
|
63
|
+
|
|
64
|
+
- `native`: use o elemento HTML adequado; o app controla dados e eventos de negócio;
|
|
65
|
+
- `presentation`: não há runtime de componente; o app fornece conteúdo e contexto;
|
|
66
|
+
- `consumer`: o DS entrega a composição visual, mas o app mantém a orquestração;
|
|
67
|
+
- `ds-runtime`: o DS mantém a interação reutilizável; inicialize o módulo indicado em `runtime`.
|
|
68
|
+
|
|
69
|
+
Não promova localmente um componente Experimental a App-ready. Se o projeto completar um gap com código próprio, declare que ele é uma adaptação local e registre a demanda no DS.
|
|
70
|
+
|
|
71
|
+
## Imports oficiais
|
|
72
|
+
|
|
73
|
+
Instale a versão corrente pelo npm registry:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npm install ds-tis
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Durante a fase beta, as dist-tags npm `latest` e `beta` apontam para a mesma pré-release; `npm install ds-tis@beta` explicita o canal. Em produção, prefira `"ds-tis": "1.0.0-beta.10"` no `package.json`. Fallback por release GitHub: `npm install github:tis-experience/ds-tis#v1.0.0-beta.10`.
|
|
80
|
+
|
|
81
|
+
Importe o CSS público uma vez no entrypoint global do app:
|
|
82
|
+
|
|
83
|
+
```js
|
|
84
|
+
import 'ds-tis/css';
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Para Accordion, Combobox, Modal, Action Menu, Tabs e Tooltip, inicialize o comportamento público quando o app renderizar ou hidratar os componentes. Ao desmontar (SPA, rota, portal), chame o `destroy` correspondente para limpar listeners:
|
|
88
|
+
|
|
89
|
+
```js
|
|
90
|
+
import { initAccordions, destroyAccordions } from 'ds-tis/accordion';
|
|
91
|
+
import { initComboboxes, destroyComboboxes } from 'ds-tis/combobox';
|
|
92
|
+
import { initModals, destroyModals } from 'ds-tis/modal';
|
|
93
|
+
import { initActionMenus, destroyActionMenus } from 'ds-tis/menu';
|
|
94
|
+
import { initTabs, destroyTabs } from 'ds-tis/tabs';
|
|
95
|
+
import { initTooltips, destroyTooltips } from 'ds-tis/tooltip';
|
|
96
|
+
|
|
97
|
+
initAccordions();
|
|
98
|
+
initComboboxes();
|
|
99
|
+
initModals();
|
|
100
|
+
initActionMenus();
|
|
101
|
+
initTabs();
|
|
102
|
+
initTooltips();
|
|
103
|
+
|
|
104
|
+
// ao sair da view / unmount:
|
|
105
|
+
destroyAccordions();
|
|
106
|
+
destroyComboboxes();
|
|
107
|
+
destroyModals();
|
|
108
|
+
destroyActionMenus();
|
|
109
|
+
destroyTabs();
|
|
110
|
+
destroyTooltips();
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Ter módulo `required` não significa automaticamente estar App-ready. Accordion,
|
|
114
|
+
Combobox, Modal, Action Menu, Tabs e Tooltip concluíram o gate executável da
|
|
115
|
+
ADR-020. Seus módulos continuam obrigatórios quando os componentes forem usados,
|
|
116
|
+
pois mantêm o contrato interativo e acessível publicado.
|
|
117
|
+
|
|
118
|
+
No Combobox App-ready, o foco DOM permanece no input enquanto as setas atualizam
|
|
119
|
+
`aria-activedescendant`; `Escape` fecha o listbox sem remover esse foco. O evento
|
|
120
|
+
`ds-combobox-change` expõe `value`, `input`, `root` e a `option` selecionada em
|
|
121
|
+
`detail`.
|
|
122
|
+
|
|
123
|
+
No Modal App-ready, apenas os irmãos fora do caminho do diálogo recebem `inert`;
|
|
124
|
+
o runtime preserva e restaura o estado anterior de cada nó. `ds-modal-open` e
|
|
125
|
+
`ds-modal-close` expõem overlay, dialog e a referência de foco relevante em
|
|
126
|
+
`detail`.
|
|
127
|
+
|
|
128
|
+
No Action Menu App-ready, `menuitem`, `menuitemradio` e `menuitemcheckbox` fazem
|
|
129
|
+
parte do contrato. Itens `aria-disabled` permanecem alcançáveis pelo foco, mas
|
|
130
|
+
não ativam nem fecham o menu; typeahead, setas, Home/End e Escape são mantidos
|
|
131
|
+
pelo runtime.
|
|
132
|
+
|
|
133
|
+
No Tabs App-ready, o runtime mantém exatamente um tab no fluxo de foco, ignora
|
|
134
|
+
tabs disabled nas setas/Home/End, sincroniza `aria-selected` com `hidden` nos
|
|
135
|
+
painéis e garante entrada de foco no tabpanel selecionado. Botões de tab sem
|
|
136
|
+
`type` explícito são normalizados para `type="button"`, evitando submit acidental
|
|
137
|
+
quando o componente está dentro de um formulário. `ds-tabs-change` expõe root,
|
|
138
|
+
tab, panel e tab anterior em `detail`.
|
|
139
|
+
|
|
140
|
+
No Tooltip App-ready, o runtime assegura `role="tooltip"`, ID e
|
|
141
|
+
`aria-describedby` válidos mesmo quando o markup omite esses atributos. Foco e
|
|
142
|
+
hover abrem sem mover o foco DOM; blur e saída conjunta fecham; Escape mantém o
|
|
143
|
+
conteúdo dispensado até pointer/foco saírem. A área de conteúdo permanece
|
|
144
|
+
hoverable conforme WCAG 1.4.13. `ds-tooltip-show` e `ds-tooltip-hide` expõem root,
|
|
145
|
+
trigger e content em `detail`.
|
|
146
|
+
|
|
147
|
+
Para customização de tema, use o theme engine público:
|
|
148
|
+
|
|
149
|
+
```js
|
|
150
|
+
import { applyTheme, toCssSnippet } from 'ds-tis/theme';
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Quando fizer sentido partir de um template, use os exports publicados:
|
|
154
|
+
|
|
155
|
+
```js
|
|
156
|
+
import loginTemplate from 'ds-tis/templates/login.html?raw';
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
O caminho `ds-tis/templates/*` referencia templates HTML públicos. Adapte conteúdo, rotas e dados ao app consumidor; não copie textos fictícios para produção.
|
|
160
|
+
|
|
161
|
+
## Runtime JS por componente
|
|
162
|
+
|
|
163
|
+
Consulte `docs/api/components.json` antes de importar módulos JS. Cada componente expõe `runtime`:
|
|
164
|
+
|
|
165
|
+
| Campo | Significado |
|
|
166
|
+
|---|---|
|
|
167
|
+
| `null` | CSS-only — sem módulo JS publicado. |
|
|
168
|
+
| `runtime.level: "required"` | O contrato interativo e acessível depende de init (Accordion, Combobox, Modal, Action Menu, Tabs e Tooltip). |
|
|
169
|
+
| `runtime.level: "optional"` | Reservado para enhancement que não seja necessário ao contrato acessível; nenhum módulo atual usa este nível. |
|
|
170
|
+
| `runtime.module` | Export do pacote (`ds-tis/accordion`, `ds-tis/combobox`, `ds-tis/modal`, `ds-tis/menu`, `ds-tis/tabs`, `ds-tis/tooltip`). |
|
|
171
|
+
| `runtime.init` | Função a chamar após render/hydration (`initAccordions`, `initComboboxes`, `initModals`, `initActionMenus`, `initTabs`, `initTooltips`). |
|
|
172
|
+
| `runtime.destroy` | Função a chamar ao desmontar (`destroyAccordions`, `destroyComboboxes`, `destroyModals`, `destroyActionMenus`, `destroyTabs`, `destroyTooltips`). |
|
|
173
|
+
| `runtime.events` | Eventos públicos emitidos pelo módulo (`ds-modal-open`, `ds-combobox-change`, etc.). |
|
|
174
|
+
|
|
175
|
+
O array `runtimeModules` no topo de `components.json` lista todos os módulos publicados. Não importe JS de componentes com `runtime: null`.
|
|
176
|
+
|
|
177
|
+
## Contrato responsivo
|
|
178
|
+
|
|
179
|
+
O DS usa estratégia `intrinsic-first` e não publica breakpoints automáticos.
|
|
180
|
+
`publicBreakpoints` é uma lista vazia por design: variantes `sm`, `md`, `lg` ou
|
|
181
|
+
`full` são escolhas explícitas do produto, não regras ativadas pela viewport.
|
|
182
|
+
Consulte `responsiveContract`, `responsiveProfiles` e o campo `responsive` de
|
|
183
|
+
cada componente em `ds-tis/metadata/components`.
|
|
184
|
+
|
|
185
|
+
- `container`: o componente preserva sua anatomia na largura oferecida; o app mantém grid e reflow;
|
|
186
|
+
- `viewport-constrained`: Modal e Tooltip aplicam limites intrínsecos contra a viewport;
|
|
187
|
+
- `consumer-managed-horizontal`: Tabs, Breadcrumb e Pagination não removem nem resumem itens; o app decide overflow, redução ou composição alternativa;
|
|
188
|
+
- `consumer-selectable-width`: Button oferece escolhas explícitas de largura; o app decide quando usá-las.
|
|
189
|
+
|
|
190
|
+
O tarball é exercitado em 320×568, 568×320 e 1280×800. Isso prova a fixture de
|
|
191
|
+
referência e os limites de overlays; não substitui teste do conteúdo, zoom,
|
|
192
|
+
idioma, orientação e layout reais do produto consumidor.
|
|
193
|
+
|
|
194
|
+
## Regras de implementação
|
|
195
|
+
|
|
196
|
+
1. Escolha componentes existentes antes de criar markup ad hoc. Consulte `readiness`, `responsibility` e `runtime` em `docs/api/components.json`.
|
|
197
|
+
2. Use a anatomia pública do componente conforme documentada. Não use classes internas isoladas como se fossem componentes autônomos.
|
|
198
|
+
3. Formulários devem compor `ds-field` com o controle real: `ds-input`, `ds-select`, `ds-textarea`, `ds-combobox`, `ds-checkbox`, `ds-radio` ou `ds-toggle`. Para Input, o campo nativo continua dentro da anatomia pública com `ds-input__field`.
|
|
199
|
+
4. Não hardcode `#hex`, `rgb()`, `px` ou `rem` quando existir token, classe, variante ou utilitário público do DS para o mesmo papel.
|
|
200
|
+
5. Preserve a cadeia visual do DS. Tokens públicos aparecem como CSS variables `var(--ds-...)`; não invente valores locais para cor, spacing, radius, border, typography ou focus ring sem justificar.
|
|
201
|
+
6. Preserve acessibilidade: landmarks semânticos, heading order, labels, `aria-*`, `aria-describedby`, `aria-expanded`, `aria-current`, teclado, estados disabled/error/read-only e focus ring visível.
|
|
202
|
+
7. Estados não são decoração. Implemente loading, empty, error, disabled, hover, focus e responsive quando fizerem parte do fluxo esperado.
|
|
203
|
+
8. Ícones devem seguir o padrão do projeto consumidor quando houver biblioteca instalada; quando a tela reproduzir exemplos do DS, prefira o mesmo vocabulário visual documentado.
|
|
204
|
+
9. Não invente wrappers oficiais. Em React/Vue/Angular, crie componentes locais do app apenas como adaptação da anatomia pública e declare esse limite.
|
|
205
|
+
10. Não altere tokens, CSS gerado ou documentação do DS a partir do projeto consumidor. Se encontrar gap real, registre a limitação e abra demanda para o DS.
|
|
206
|
+
|
|
207
|
+
## Fluxo recomendado
|
|
208
|
+
|
|
209
|
+
1. Leia o pedido, identifique a stack e encontre o entrypoint global onde `ds-tis/css` deve ser importado.
|
|
210
|
+
2. Faça inventário das partes da tela: navegação, formulário, feedback, cards, overlays, listas, loading, empty states e ações.
|
|
211
|
+
3. Mapeie cada parte para componentes DS existentes e confira readiness. Só use markup local quando o DS não tiver componente adequado.
|
|
212
|
+
4. Consulte a página HTML do componente e `docs/api/components.json` antes de escrever a anatomia.
|
|
213
|
+
5. Implemente com classes públicas do DS, sem copiar classes internas fora do contexto do componente.
|
|
214
|
+
6. Inicialize módulos JS quando `components.json` indicar `runtime` — `required` sempre; `optional` quando a tela precisar de teclado, overlay ou focus management completo.
|
|
215
|
+
7. Aplique tema com `ds-tis/theme` somente quando a tela tiver requisito de brand/mode em runtime.
|
|
216
|
+
8. Rode os testes e linters do projeto consumidor. Quando possível, valide acessibilidade com axe, Playwright, browser real ou ferramenta equivalente.
|
|
217
|
+
9. Entregue evidências: componentes usados, imports, tokens/classes relevantes, validação a11y e limites assumidos.
|
|
218
|
+
|
|
219
|
+
## Adaptação por framework
|
|
220
|
+
|
|
221
|
+
React, Vue e Angular podem renderizar a anatomia pública do DS por meio de componentes locais. Essa adaptação deve:
|
|
222
|
+
|
|
223
|
+
- manter os nomes de classes públicas do DS;
|
|
224
|
+
- preservar labels, IDs, `aria-*` e relações `for`/`id`;
|
|
225
|
+
- expor props locais alinhadas ao produto, não prometer API oficial do DS;
|
|
226
|
+
- manter inicialização de módulos JS depois do render/hydration quando necessário;
|
|
227
|
+
- evitar recriar comportamento complexo quando o DS já exporta helper público, como `ds-tis/combobox`.
|
|
228
|
+
|
|
229
|
+
Exemplo de limite correto: "Criei `AppTextField` no app consumidor usando `ds-field` + `ds-input`; isso é wrapper local do app, não componente oficial exportado por `ds-tis`."
|
|
230
|
+
|
|
231
|
+
## Prompt curto para agent consumidor
|
|
232
|
+
|
|
233
|
+
Copie este bloco para iniciar um agent que vai implementar uma tela usando o DS TIS em um projeto consumidor:
|
|
234
|
+
|
|
235
|
+
```text
|
|
236
|
+
Role: Agent consumidor do DS TIS.
|
|
237
|
+
|
|
238
|
+
Artefato de entrada:
|
|
239
|
+
- Pedido da tela/fluxo.
|
|
240
|
+
- Stack do projeto consumidor.
|
|
241
|
+
- Arquivos atuais do app que definem layout, estilos globais, rotas e componentes locais.
|
|
242
|
+
- Versao instalada de ds-tis, se existir.
|
|
243
|
+
|
|
244
|
+
Fontes obrigatorias:
|
|
245
|
+
- README.md
|
|
246
|
+
- docs/llms.txt
|
|
247
|
+
- docs/llms-full.txt
|
|
248
|
+
- docs/api/components.json (readiness, responsibility e runtime)
|
|
249
|
+
- docs/api/tokens.json
|
|
250
|
+
- docs/<component>.html dos componentes usados
|
|
251
|
+
- docs/templates/ ou ds-tis/templates/* quando houver template aplicavel
|
|
252
|
+
|
|
253
|
+
Regras:
|
|
254
|
+
- Instale via `npm install ds-tis`; durante a beta, fixe a versão exata em produção.
|
|
255
|
+
- Importe ds-tis/css uma vez no entrypoint global.
|
|
256
|
+
- Para cada componente usado, derive o módulo de `runtime.module` em docs/api/components.json; quando `runtime.level` for required, chame init após render/hydration e destroy antes do unmount.
|
|
257
|
+
- Prefira componentes app-ready; trate composition como fronteira explícita do app e não use experimental em fluxo crítico sem registrar a limitação.
|
|
258
|
+
- Use ds-tis/theme apenas para requisito real de tema/brand em runtime.
|
|
259
|
+
- Escolha componentes existentes antes de criar markup ad hoc.
|
|
260
|
+
- Use anatomia publica dos componentes; nao use classes internas isoladas.
|
|
261
|
+
- Form controls devem compor ds-field + controle real, como ds-input + ds-input__field.
|
|
262
|
+
- Nao hardcode hex/rgb/px/rem quando existir token, classe ou variante publica.
|
|
263
|
+
- Preserve landmarks, labels, aria-*, teclado, focus ring e estados disabled/error/read-only.
|
|
264
|
+
- Em React/Vue/Angular, adapte a anatomia publica em wrappers locais do app; nao invente wrappers oficiais do DS TIS.
|
|
265
|
+
|
|
266
|
+
Saida esperada:
|
|
267
|
+
- Arquivos alterados.
|
|
268
|
+
- Componentes DS usados e por que foram escolhidos.
|
|
269
|
+
- Imports DS adicionados.
|
|
270
|
+
- Tokens/classes publicas relevantes.
|
|
271
|
+
- Evidencia de acessibilidade e teclado.
|
|
272
|
+
- Limites assumidos ou gaps do DS que precisam virar demanda.
|
|
273
|
+
|
|
274
|
+
Bloqueado antes de:
|
|
275
|
+
- Criar API oficial do DS que nao existe.
|
|
276
|
+
- Alterar tokens ou CSS do pacote ds-tis dentro do app consumidor.
|
|
277
|
+
- Trocar componente DS existente por markup ad hoc sem justificar.
|
|
278
|
+
- Remover labels, aria-* ou focus ring.
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
## Checklist de entrega
|
|
282
|
+
|
|
283
|
+
Antes de concluir, o agent deve reportar:
|
|
284
|
+
|
|
285
|
+
- componentes DS usados e componentes descartados;
|
|
286
|
+
- readiness e responsabilidade dos componentes usados;
|
|
287
|
+
- imports adicionados: `ds-tis/css`, módulos JS com `runtime` em `components.json`, `ds-tis/theme` e/ou `ds-tis/templates/*`;
|
|
288
|
+
- classes públicas principais usadas, como `ds-field`, `ds-input` e `ds-input__field`;
|
|
289
|
+
- tokens CSS relevantes quando houver customização via `var(--ds-...)`;
|
|
290
|
+
- evidência de acessibilidade: labels, landmarks, `aria-*`, teclado, focus ring e contraste quando aplicável;
|
|
291
|
+
- estados implementados: default, hover, focus, disabled, error, loading, empty e responsive conforme o fluxo;
|
|
292
|
+
- limitações assumidas e gaps que precisam ser tratados no DS ou no produto.
|
|
293
|
+
|
|
294
|
+
Se um item não se aplica, declare o motivo. Não deixe ausência de estado ou acessibilidade implícita.
|