@flowstack-ui/agent-tools 0.1.0-bootstrap.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/.codex-plugin/plugin.json +37 -0
- package/CHANGELOG.md +21 -0
- package/LICENSE +21 -0
- package/README.md +125 -0
- package/docs/architecture.md +77 -0
- package/docs/releasing.md +26 -0
- package/docs/testing.md +32 -0
- package/package.json +63 -0
- package/public/index.json +2073 -0
- package/public/llms.txt +19 -0
- package/public/packages/atom/0.24.0/components/accordion.txt +131 -0
- package/public/packages/atom/0.24.0/components/alert-dialog.txt +112 -0
- package/public/packages/atom/0.24.0/components/app-bar.txt +96 -0
- package/public/packages/atom/0.24.0/components/aspect-ratio.txt +111 -0
- package/public/packages/atom/0.24.0/components/avatar.txt +119 -0
- package/public/packages/atom/0.24.0/components/badge.txt +123 -0
- package/public/packages/atom/0.24.0/components/bottom-navigation.txt +96 -0
- package/public/packages/atom/0.24.0/components/breadcrumb.txt +96 -0
- package/public/packages/atom/0.24.0/components/button.txt +98 -0
- package/public/packages/atom/0.24.0/components/carousel.txt +128 -0
- package/public/packages/atom/0.24.0/components/checkbox-group.txt +118 -0
- package/public/packages/atom/0.24.0/components/checkbox.txt +100 -0
- package/public/packages/atom/0.24.0/components/clipboard.txt +112 -0
- package/public/packages/atom/0.24.0/components/collapsible.txt +112 -0
- package/public/packages/atom/0.24.0/components/color-picker.txt +117 -0
- package/public/packages/atom/0.24.0/components/combobox.txt +126 -0
- package/public/packages/atom/0.24.0/components/context-menu.txt +114 -0
- package/public/packages/atom/0.24.0/components/data-grid.txt +136 -0
- package/public/packages/atom/0.24.0/components/dialog.txt +116 -0
- package/public/packages/atom/0.24.0/components/direction.txt +132 -0
- package/public/packages/atom/0.24.0/components/divider.txt +94 -0
- package/public/packages/atom/0.24.0/components/drag-drop.txt +141 -0
- package/public/packages/atom/0.24.0/components/drawer.txt +96 -0
- package/public/packages/atom/0.24.0/components/dropdown-menu.txt +112 -0
- package/public/packages/atom/0.24.0/components/feed.txt +132 -0
- package/public/packages/atom/0.24.0/components/field.txt +108 -0
- package/public/packages/atom/0.24.0/components/fieldset.txt +96 -0
- package/public/packages/atom/0.24.0/components/file-upload.txt +120 -0
- package/public/packages/atom/0.24.0/components/form.txt +98 -0
- package/public/packages/atom/0.24.0/components/hover-card.txt +114 -0
- package/public/packages/atom/0.24.0/components/image.txt +94 -0
- package/public/packages/atom/0.24.0/components/input.txt +96 -0
- package/public/packages/atom/0.24.0/components/label.txt +121 -0
- package/public/packages/atom/0.24.0/components/link.txt +100 -0
- package/public/packages/atom/0.24.0/components/list.txt +131 -0
- package/public/packages/atom/0.24.0/components/listbox.txt +120 -0
- package/public/packages/atom/0.24.0/components/menu.txt +126 -0
- package/public/packages/atom/0.24.0/components/menubar.txt +120 -0
- package/public/packages/atom/0.24.0/components/modal.txt +118 -0
- package/public/packages/atom/0.24.0/components/multi-select.txt +120 -0
- package/public/packages/atom/0.24.0/components/nav-list.txt +104 -0
- package/public/packages/atom/0.24.0/components/navigation-menu.txt +104 -0
- package/public/packages/atom/0.24.0/components/number-input.txt +124 -0
- package/public/packages/atom/0.24.0/components/otp-field.txt +122 -0
- package/public/packages/atom/0.24.0/components/pagination.txt +111 -0
- package/public/packages/atom/0.24.0/components/password-toggle-field.txt +116 -0
- package/public/packages/atom/0.24.0/components/popover.txt +122 -0
- package/public/packages/atom/0.24.0/components/pressable.txt +94 -0
- package/public/packages/atom/0.24.0/components/progress.txt +130 -0
- package/public/packages/atom/0.24.0/components/radio-group.txt +118 -0
- package/public/packages/atom/0.24.0/components/rating.txt +122 -0
- package/public/packages/atom/0.24.0/components/reorder.txt +141 -0
- package/public/packages/atom/0.24.0/components/scroll-area.txt +96 -0
- package/public/packages/atom/0.24.0/components/select.txt +126 -0
- package/public/packages/atom/0.24.0/components/sidebar.txt +96 -0
- package/public/packages/atom/0.24.0/components/skip-link.txt +96 -0
- package/public/packages/atom/0.24.0/components/slider.txt +124 -0
- package/public/packages/atom/0.24.0/components/swipeable-item.txt +118 -0
- package/public/packages/atom/0.24.0/components/switch.txt +116 -0
- package/public/packages/atom/0.24.0/components/table.txt +128 -0
- package/public/packages/atom/0.24.0/components/tabs.txt +96 -0
- package/public/packages/atom/0.24.0/components/textarea.txt +96 -0
- package/public/packages/atom/0.24.0/components/toast.txt +124 -0
- package/public/packages/atom/0.24.0/components/toggle-group.txt +118 -0
- package/public/packages/atom/0.24.0/components/toggle.txt +110 -0
- package/public/packages/atom/0.24.0/components/toolbar.txt +98 -0
- package/public/packages/atom/0.24.0/components/tooltip.txt +112 -0
- package/public/packages/atom/0.24.0/components/tree-grid.txt +138 -0
- package/public/packages/atom/0.24.0/components/tree.txt +138 -0
- package/public/packages/atom/0.24.0/components/visually-hidden.txt +119 -0
- package/public/packages/atom/0.24.0/docs/guides/agent-knowledge.txt +55 -0
- package/public/packages/atom/0.24.0/docs/guides/getting-started.txt +65 -0
- package/public/packages/atom/0.24.0/docs/guides/imports.txt +26 -0
- package/public/packages/atom/0.24.0/docs/guides/public-api.txt +100 -0
- package/public/packages/atom/0.24.0/guides/behavior-composition.txt +277 -0
- package/public/packages/atom/0.24.0/guides/layer-selection.txt +807 -0
- package/public/packages/atom/0.24.0/index.txt +89 -0
- package/public/packages/brick/0.1.11/components/accordion.txt +158 -0
- package/public/packages/brick/0.1.11/components/alert-dialog.txt +175 -0
- package/public/packages/brick/0.1.11/components/app-bar.txt +134 -0
- package/public/packages/brick/0.1.11/components/appearance.txt +143 -0
- package/public/packages/brick/0.1.11/components/aspect-ratio.txt +136 -0
- package/public/packages/brick/0.1.11/components/avatar.txt +152 -0
- package/public/packages/brick/0.1.11/components/badge.txt +139 -0
- package/public/packages/brick/0.1.11/components/bleed.txt +104 -0
- package/public/packages/brick/0.1.11/components/bottom-navigation.txt +106 -0
- package/public/packages/brick/0.1.11/components/breadcrumb.txt +96 -0
- package/public/packages/brick/0.1.11/components/button.txt +103 -0
- package/public/packages/brick/0.1.11/components/card.txt +132 -0
- package/public/packages/brick/0.1.11/components/carousel.txt +206 -0
- package/public/packages/brick/0.1.11/components/checkbox-group.txt +175 -0
- package/public/packages/brick/0.1.11/components/checkbox.txt +103 -0
- package/public/packages/brick/0.1.11/components/chip.txt +128 -0
- package/public/packages/brick/0.1.11/components/code-block.txt +134 -0
- package/public/packages/brick/0.1.11/components/code.txt +120 -0
- package/public/packages/brick/0.1.11/components/collapsible.txt +179 -0
- package/public/packages/brick/0.1.11/components/color-picker.txt +135 -0
- package/public/packages/brick/0.1.11/components/color-swatch.txt +98 -0
- package/public/packages/brick/0.1.11/components/combobox.txt +157 -0
- package/public/packages/brick/0.1.11/components/container.txt +112 -0
- package/public/packages/brick/0.1.11/components/context-menu.txt +174 -0
- package/public/packages/brick/0.1.11/components/data-grid.txt +199 -0
- package/public/packages/brick/0.1.11/components/data-list.txt +115 -0
- package/public/packages/brick/0.1.11/components/dialog.txt +176 -0
- package/public/packages/brick/0.1.11/components/divider.txt +104 -0
- package/public/packages/brick/0.1.11/components/drawer.txt +146 -0
- package/public/packages/brick/0.1.11/components/dropdown-menu.txt +179 -0
- package/public/packages/brick/0.1.11/components/feed.txt +143 -0
- package/public/packages/brick/0.1.11/components/field.txt +115 -0
- package/public/packages/brick/0.1.11/components/fieldset.txt +103 -0
- package/public/packages/brick/0.1.11/components/file-upload.txt +154 -0
- package/public/packages/brick/0.1.11/components/form.txt +108 -0
- package/public/packages/brick/0.1.11/components/frame.txt +132 -0
- package/public/packages/brick/0.1.11/components/grid.txt +141 -0
- package/public/packages/brick/0.1.11/components/group.txt +136 -0
- package/public/packages/brick/0.1.11/components/hide.txt +121 -0
- package/public/packages/brick/0.1.11/components/hover-card.txt +156 -0
- package/public/packages/brick/0.1.11/components/icon-button.txt +119 -0
- package/public/packages/brick/0.1.11/components/icon.txt +160 -0
- package/public/packages/brick/0.1.11/components/image.txt +163 -0
- package/public/packages/brick/0.1.11/components/input.txt +101 -0
- package/public/packages/brick/0.1.11/components/link-box.txt +161 -0
- package/public/packages/brick/0.1.11/components/link.txt +133 -0
- package/public/packages/brick/0.1.11/components/list.txt +139 -0
- package/public/packages/brick/0.1.11/components/menubar.txt +174 -0
- package/public/packages/brick/0.1.11/components/multi-select.txt +153 -0
- package/public/packages/brick/0.1.11/components/nav-list.txt +130 -0
- package/public/packages/brick/0.1.11/components/navigation-menu.txt +150 -0
- package/public/packages/brick/0.1.11/components/notification-badge.txt +148 -0
- package/public/packages/brick/0.1.11/components/number-input.txt +150 -0
- package/public/packages/brick/0.1.11/components/otp-field.txt +146 -0
- package/public/packages/brick/0.1.11/components/pagination.txt +124 -0
- package/public/packages/brick/0.1.11/components/password-toggle-field.txt +146 -0
- package/public/packages/brick/0.1.11/components/popover.txt +181 -0
- package/public/packages/brick/0.1.11/components/progress-circle.txt +142 -0
- package/public/packages/brick/0.1.11/components/progress.txt +150 -0
- package/public/packages/brick/0.1.11/components/radio-group.txt +152 -0
- package/public/packages/brick/0.1.11/components/rating.txt +151 -0
- package/public/packages/brick/0.1.11/components/reorderable-list.txt +130 -0
- package/public/packages/brick/0.1.11/components/scroll-area.txt +110 -0
- package/public/packages/brick/0.1.11/components/section.txt +118 -0
- package/public/packages/brick/0.1.11/components/segment-group.txt +116 -0
- package/public/packages/brick/0.1.11/components/select.txt +157 -0
- package/public/packages/brick/0.1.11/components/show.txt +121 -0
- package/public/packages/brick/0.1.11/components/sidebar.txt +126 -0
- package/public/packages/brick/0.1.11/components/skeleton.txt +127 -0
- package/public/packages/brick/0.1.11/components/skip-link.txt +102 -0
- package/public/packages/brick/0.1.11/components/slider.txt +147 -0
- package/public/packages/brick/0.1.11/components/stack.txt +155 -0
- package/public/packages/brick/0.1.11/components/status.txt +110 -0
- package/public/packages/brick/0.1.11/components/surface.txt +194 -0
- package/public/packages/brick/0.1.11/components/swipeable-item.txt +154 -0
- package/public/packages/brick/0.1.11/components/switch.txt +152 -0
- package/public/packages/brick/0.1.11/components/table.txt +183 -0
- package/public/packages/brick/0.1.11/components/tabs.txt +136 -0
- package/public/packages/brick/0.1.11/components/text.txt +148 -0
- package/public/packages/brick/0.1.11/components/textarea.txt +101 -0
- package/public/packages/brick/0.1.11/components/toast.txt +150 -0
- package/public/packages/brick/0.1.11/components/toggle-group.txt +149 -0
- package/public/packages/brick/0.1.11/components/toggle.txt +140 -0
- package/public/packages/brick/0.1.11/components/toolbar.txt +118 -0
- package/public/packages/brick/0.1.11/components/tooltip.txt +156 -0
- package/public/packages/brick/0.1.11/components/tree-grid.txt +160 -0
- package/public/packages/brick/0.1.11/components/tree.txt +156 -0
- package/public/packages/brick/0.1.11/components/visually-hidden.txt +123 -0
- package/public/packages/brick/0.1.11/components/z-stack.txt +143 -0
- package/public/packages/brick/0.1.11/docs/guides/agent-knowledge.txt +67 -0
- package/public/packages/brick/0.1.11/docs/guides/appearance-and-tokens.txt +179 -0
- package/public/packages/brick/0.1.11/docs/guides/browser-support.txt +25 -0
- package/public/packages/brick/0.1.11/docs/guides/control-sizing.txt +59 -0
- package/public/packages/brick/0.1.11/docs/guides/installation.txt +79 -0
- package/public/packages/brick/0.1.11/docs/guides/theme-contract.txt +90 -0
- package/public/packages/brick/0.1.11/guides/interface-composition.txt +665 -0
- package/public/packages/brick/0.1.11/guides/layer-selection.txt +1437 -0
- package/public/packages/brick/0.1.11/index.txt +110 -0
- package/public/packages/colors/0.1.1/docs/agent-knowledge.txt +63 -0
- package/public/packages/colors/0.1.1/docs/architecture.txt +74 -0
- package/public/packages/colors/0.1.1/docs/color-foundations.txt +128 -0
- package/public/packages/colors/0.1.1/docs/compatibility.txt +75 -0
- package/public/packages/colors/0.1.1/docs/dependency-qualification.txt +117 -0
- package/public/packages/colors/0.1.1/docs/installation.txt +48 -0
- package/public/packages/colors/0.1.1/docs/palette-generation.txt +151 -0
- package/public/packages/colors/0.1.1/docs/releasing.txt +34 -0
- package/public/packages/colors/0.1.1/docs/testing.txt +51 -0
- package/public/packages/colors/0.1.1/guides/colors-system.txt +282 -0
- package/public/packages/colors/0.1.1/index.txt +29 -0
- package/public/packages/colors/0.1.1/operations/color-conversion.txt +14 -0
- package/public/packages/colors/0.1.1/operations/color-inspection.txt +23 -0
- package/public/packages/colors/0.1.1/operations/color-measurement.txt +18 -0
- package/public/packages/colors/0.1.1/operations/color-provenance.txt +14 -0
- package/public/packages/colors/0.1.1/operations/named-palette-reference.txt +15 -0
- package/public/packages/colors/0.1.1/operations/palette-candidate.txt +37 -0
- package/public/packages/theme/0.1.1/docs/agent-knowledge.txt +44 -0
- package/public/packages/theme/0.1.1/docs/appearances-and-portals.txt +41 -0
- package/public/packages/theme/0.1.1/docs/architecture.txt +121 -0
- package/public/packages/theme/0.1.1/docs/authoring.txt +141 -0
- package/public/packages/theme/0.1.1/docs/colors-interchange.txt +82 -0
- package/public/packages/theme/0.1.1/docs/fonts.txt +40 -0
- package/public/packages/theme/0.1.1/docs/installation.txt +45 -0
- package/public/packages/theme/0.1.1/docs/migration.txt +40 -0
- package/public/packages/theme/0.1.1/docs/testing.txt +64 -0
- package/public/packages/theme/0.1.1/docs/troubleshooting.txt +53 -0
- package/public/packages/theme/0.1.1/guides/theme-system.txt +340 -0
- package/public/packages/theme/0.1.1/index.txt +31 -0
- package/public/packages/theme/0.1.1/operations/brick-contract-compatibility.txt +35 -0
- package/public/packages/theme/0.1.1/operations/colors-interchange.txt +35 -0
- package/public/packages/theme/0.1.1/operations/theme-artifacts.txt +19 -0
- package/public/packages/theme/0.1.1/operations/theme-cli.txt +10 -0
- package/public/packages/theme/0.1.1/operations/theme-compilation.txt +23 -0
- package/public/packages/theme/0.1.1/operations/theme-definition.txt +36 -0
- package/public/packages/theme/0.1.1/operations/theme-validation.txt +19 -0
- package/public/tasks/data.txt +39 -0
- package/public/tasks/forms.txt +65 -0
- package/public/tasks/layout.txt +37 -0
- package/public/tasks/navigation.txt +51 -0
- package/public/tasks/overlays.txt +39 -0
- package/public/tasks/theming.txt +37 -0
- package/skills/flowstack-ui-builder/SKILL.md +35 -0
- package/skills/flowstack-ui-builder/agents/openai.yaml +4 -0
- package/skills/flowstack-ui-builder/scripts/resolve-agent-knowledge.mjs +399 -0
- package/skills/flowstack-ui-compose/SKILL.md +32 -0
- package/skills/flowstack-ui-compose/agents/openai.yaml +4 -0
- package/skills/flowstack-ui-compose/scripts/resolve-agent-knowledge.mjs +399 -0
- package/skills/flowstack-ui-maintainer/SKILL.md +40 -0
- package/skills/flowstack-ui-maintainer/agents/openai.yaml +4 -0
- package/skills/flowstack-ui-maintainer/scripts/resolve-agent-knowledge.mjs +399 -0
- package/skills/flowstack-ui-review/SKILL.md +29 -0
- package/skills/flowstack-ui-review/agents/openai.yaml +4 -0
- package/skills/flowstack-ui-review/scripts/resolve-agent-knowledge.mjs +399 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# PasswordToggleField
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: password-toggle-field
|
|
6
|
+
|
|
7
|
+
# PasswordToggleField agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Present finished native password entry with a named reveal action while Atom owns visibility, type switching, focus retention, Field validation, reset, and submission safety.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- A reusable password benefits from an explicit keyboard-accessible reveal action and revealing it is acceptable for the product's privacy model.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- The value is ordinary text or a one-time code, or security, observation, or shared-device policy forbids revealing the secret. Use Input, OTPField, or Input with type=password without a reveal control.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Compose a visible Field.Label, then PasswordToggleField.Root with exactly one Input and Toggle. Let Toggle render Brick's private default Icon or supply decorative product artwork without replacing its action name.
|
|
24
|
+
- Choose the Input-family recipe, size, shape, and width on Root; set autocomplete deliberately and localize Root showLabel and hideLabel as the next available actions.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- **MUST:** Include the reveal action only when it is acceptable for the product's security, privacy, observation, recording, and shared-device context.
|
|
29
|
+
- **MUST:** Keep Input as the native value, naming, autocomplete, validity, and submission owner while Atom changes only its owned type between password and text.
|
|
30
|
+
- **MUST:** Provide localized state-aware showLabel and hideLabel values that describe the next action; do not add aria-pressed because the changing action name communicates the available action.
|
|
31
|
+
- **MUST:** Preserve Input focus on Toggle pointer down while keeping Toggle sequentially keyboard reachable by Tab, Enter, and Space.
|
|
32
|
+
- **MUST:** Use visible with onVisibleChange or defaultVisible, preserve Field disabled/read-only/required/invalid behavior, reset uncontrolled visibility, and let Atom restore type=password before native submission.
|
|
33
|
+
- **MUST:** Keep password strength, generation, confirmation, storage, authentication, clipboard, and security policy in the application or service.
|
|
34
|
+
- **MUST:** Load styles.css or core.css plus password-toggle-field.css and Field CSS when composed.
|
|
35
|
+
|
|
36
|
+
## Common mistakes
|
|
37
|
+
|
|
38
|
+
- **Avoid:** Adding reveal where policy forbids it, using an unlabeled eye or aria-pressed, moving pointer focus from Input, or submitting while the DOM input remains type=text. **Instead:** Apply the privacy decision first and preserve Atom's state-aware action, focus, reset, validation, and submit-time password restoration.
|
|
39
|
+
- **Avoid:** Writing a second visibility state, replacing Field relationships, or moving password policy into the styled component. **Instead:** Use the complete Root, Input, Toggle, and optional Icon anatomy and keep product policy in the application.
|
|
40
|
+
|
|
41
|
+
## Validation checklist
|
|
42
|
+
|
|
43
|
+
- Verify visible Field naming, autocomplete, native props, controlled and uncontrolled visibility, password/text switching, localized Show/Hide actions, decorative Icon state, pointer focus retention, keyboard Tab/Enter/Space, disabled/read-only behavior, custom Toggle composition, and refs.
|
|
44
|
+
- Verify Field ID, label, description, and error inheritance with native overrides; required/invalid inline and native validation; reset to defaultVisible; type=password restoration before submission; external form; and no unintended live-region or aria-pressed semantics.
|
|
45
|
+
- Verify all recipes, sizes, allowed shapes, width modes, long localization, narrow width, zoom, RTL, light and dark appearance, forced colors, hover, focus, invalid, disabled, and read-only paint.
|
|
46
|
+
|
|
47
|
+
## Related guidance
|
|
48
|
+
|
|
49
|
+
- `@flowstack-ui/atom/agents/password-toggle-field`
|
|
50
|
+
- `field`
|
|
51
|
+
- `input`
|
|
52
|
+
- `otp-field`
|
|
53
|
+
- `form`
|
|
54
|
+
- `button`
|
|
55
|
+
|
|
56
|
+
## Machine record
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"schema": "flowstack.agent-component.v1",
|
|
61
|
+
"id": "password-toggle-field",
|
|
62
|
+
"name": "PasswordToggleField",
|
|
63
|
+
"package": "@flowstack-ui/brick",
|
|
64
|
+
"layer": "brick",
|
|
65
|
+
"kind": "component",
|
|
66
|
+
"purpose": "Present finished native password entry with a named reveal action while Atom owns visibility, type switching, focus retention, Field validation, reset, and submission safety.",
|
|
67
|
+
"useWhen": [
|
|
68
|
+
"A reusable password benefits from an explicit keyboard-accessible reveal action and revealing it is acceptable for the product's privacy model."
|
|
69
|
+
],
|
|
70
|
+
"avoidWhen": [
|
|
71
|
+
{
|
|
72
|
+
"condition": "The value is ordinary text or a one-time code, or security, observation, or shared-device policy forbids revealing the secret.",
|
|
73
|
+
"useInstead": "Input, OTPField, or Input with type=password without a reveal control"
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"composition": [
|
|
77
|
+
"Compose a visible Field.Label, then PasswordToggleField.Root with exactly one Input and Toggle. Let Toggle render Brick's private default Icon or supply decorative product artwork without replacing its action name.",
|
|
78
|
+
"Choose the Input-family recipe, size, shape, and width on Root; set autocomplete deliberately and localize Root showLabel and hideLabel as the next available actions."
|
|
79
|
+
],
|
|
80
|
+
"rules": [
|
|
81
|
+
{
|
|
82
|
+
"id": "password-toggle-policy",
|
|
83
|
+
"level": "must",
|
|
84
|
+
"statement": "Include the reveal action only when it is acceptable for the product's security, privacy, observation, recording, and shared-device context."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "password-toggle-input-owner",
|
|
88
|
+
"level": "must",
|
|
89
|
+
"statement": "Keep Input as the native value, naming, autocomplete, validity, and submission owner while Atom changes only its owned type between password and text."
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "password-toggle-action-name",
|
|
93
|
+
"level": "must",
|
|
94
|
+
"statement": "Provide localized state-aware showLabel and hideLabel values that describe the next action; do not add aria-pressed because the changing action name communicates the available action."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "password-toggle-focus",
|
|
98
|
+
"level": "must",
|
|
99
|
+
"statement": "Preserve Input focus on Toggle pointer down while keeping Toggle sequentially keyboard reachable by Tab, Enter, and Space."
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "password-toggle-state-form",
|
|
103
|
+
"level": "must",
|
|
104
|
+
"statement": "Use visible with onVisibleChange or defaultVisible, preserve Field disabled/read-only/required/invalid behavior, reset uncontrolled visibility, and let Atom restore type=password before native submission."
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "password-toggle-application-policy",
|
|
108
|
+
"level": "must",
|
|
109
|
+
"statement": "Keep password strength, generation, confirmation, storage, authentication, clipboard, and security policy in the application or service."
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "password-toggle-css",
|
|
113
|
+
"level": "must",
|
|
114
|
+
"statement": "Load styles.css or core.css plus password-toggle-field.css and Field CSS when composed."
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
"commonMistakes": [
|
|
118
|
+
{
|
|
119
|
+
"mistake": "Adding reveal where policy forbids it, using an unlabeled eye or aria-pressed, moving pointer focus from Input, or submitting while the DOM input remains type=text.",
|
|
120
|
+
"correction": "Apply the privacy decision first and preserve Atom's state-aware action, focus, reset, validation, and submit-time password restoration."
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"mistake": "Writing a second visibility state, replacing Field relationships, or moving password policy into the styled component.",
|
|
124
|
+
"correction": "Use the complete Root, Input, Toggle, and optional Icon anatomy and keep product policy in the application."
|
|
125
|
+
}
|
|
126
|
+
],
|
|
127
|
+
"validation": [
|
|
128
|
+
"Verify visible Field naming, autocomplete, native props, controlled and uncontrolled visibility, password/text switching, localized Show/Hide actions, decorative Icon state, pointer focus retention, keyboard Tab/Enter/Space, disabled/read-only behavior, custom Toggle composition, and refs.",
|
|
129
|
+
"Verify Field ID, label, description, and error inheritance with native overrides; required/invalid inline and native validation; reset to defaultVisible; type=password restoration before submission; external form; and no unintended live-region or aria-pressed semantics.",
|
|
130
|
+
"Verify all recipes, sizes, allowed shapes, width modes, long localization, narrow width, zoom, RTL, light and dark appearance, forced colors, hover, focus, invalid, disabled, and read-only paint."
|
|
131
|
+
],
|
|
132
|
+
"related": [
|
|
133
|
+
{
|
|
134
|
+
"kind": "package",
|
|
135
|
+
"package": "@flowstack-ui/atom",
|
|
136
|
+
"id": "password-toggle-field",
|
|
137
|
+
"versionPolicy": "installed-exact"
|
|
138
|
+
},
|
|
139
|
+
"field",
|
|
140
|
+
"input",
|
|
141
|
+
"otp-field",
|
|
142
|
+
"form",
|
|
143
|
+
"button"
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
```
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Popover
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: popover
|
|
6
|
+
|
|
7
|
+
# Popover agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Present a finished compact click-open interactive panel anchored to a trigger or explicit anchor while Atom owns placement, dismissal, focus, portal, and optional modal behavior.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- A trigger needs a small contextual panel for details, filters, or compact editing that belongs near its point of invocation.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- The content is noninteractive help, a passive hover preview, a command or option collection, or a larger blocking task. Use Tooltip, HoverCard, Menu, Select or Combobox, or Dialog.
|
|
20
|
+
- The task should enter from a screen edge or remain as persistent page content. Use Drawer or an in-page Brick composition.
|
|
21
|
+
|
|
22
|
+
## Required composition
|
|
23
|
+
|
|
24
|
+
- Compose Popover.Root with Popover.Trigger and Popover.Portal; add Popover.Anchor only when positioning must reference an element other than Trigger. Inside Popover.Content, arrange Header with Title and optional Description, Body, Footer, and Close as needed; keep Arrow as a direct Content child.
|
|
25
|
+
- Use density=compact for concise filter and utility panels. When a local Appearance scope owns the trigger, portal into that scope or apply the same Appearance to Content because ordinary portal ancestry does not preserve the local theme boundary.
|
|
26
|
+
|
|
27
|
+
## Rules
|
|
28
|
+
|
|
29
|
+
- **MUST:** Use Brick Popover for compact click-open interactive work; choose Menu, Select, or Combobox when the panel's job is command or option selection, and Dialog for a larger blocking workflow.
|
|
30
|
+
- **MUST:** Keep Trigger and portalled Content inside one Root, use Anchor only for a distinct positioning reference, and use the public structure parts instead of recreating panel spacing or hierarchy with private selectors.
|
|
31
|
+
- **MUST:** Give Content an accessible name with one visible Title or an explicit native aria-label or aria-labelledby; add Description or native aria-describedby only when descriptive text is present.
|
|
32
|
+
- **MUST:** Keep the default non-modal behavior for ordinary attached work; set modal only when the compact panel must trap focus, isolate the background, and lock document scrolling.
|
|
33
|
+
- **MUST:** Provide a visible Close when modal is enabled or when outside interaction, Escape, and trigger toggling do not make the dismissal path obvious.
|
|
34
|
+
- **MUST:** Use the owned initial and final focus targets and onInteractOutside preventDefault contract when customization is required; do not replace Atom's focus-out, Escape, completed-interaction, restoration, and nested-layer handling.
|
|
35
|
+
- **MUST:** Use the comfortable default for ordinary contextual work and density=compact for concise filter and utility panels; do not recreate compact rhythm with private selectors.
|
|
36
|
+
- **MUST:** When Content leaves a local Appearance scope through Portal, reproduce that scope on the portalled visual root or target a container inside it.
|
|
37
|
+
- **MUST:** Style from resolved data-side and available-size variables, keep Arrow as a direct Content child, and preserve its shared border and surface paint instead of assuming requested placement or independently recoloring it.
|
|
38
|
+
- **SHOULD:** Keep the panel compact and verify collision shifts and flips, constrained scrolling, action reachability, zoom, touch input, narrow viewports, and LTR and RTL placement.
|
|
39
|
+
- **MUST:** Load styles.css or core.css plus popover.css.
|
|
40
|
+
|
|
41
|
+
## Common mistakes
|
|
42
|
+
|
|
43
|
+
- **Avoid:** Hand-positioning a floating div, using Popover for a menu or tooltip, forcing it modal for every utility panel, or closing it with ad hoc document listeners. **Instead:** Choose by interaction job, use complete Popover anatomy, keep ordinary popovers non-modal, and use the preventable outside-interaction contract.
|
|
44
|
+
- **Avoid:** Assuming portalled Content inherits a nearby Appearance scope or placing Arrow inside an authored viewport wrapper. **Instead:** Make the portal scope explicit and keep Arrow directly under Content so placement and finished surface paint remain intact.
|
|
45
|
+
|
|
46
|
+
## Validation checklist
|
|
47
|
+
|
|
48
|
+
- Verify trigger and Content naming, controlled and disabled state, keyboard, pointer, and touch opening, initial focus, Tab behavior, Close, Escape, outside interaction, focus-out dismissal, outside focus destination, and trigger restoration.
|
|
49
|
+
- Verify explicit Anchor positioning, collision shifts and flips at every supported side, LTR and RTL, available-size variables, direct Arrow geometry, constrained scrolling, nested portalled controlled layers, zoom, and narrow viewports.
|
|
50
|
+
- When modal is enabled, verify a visible close path, focus containment, background isolation, scroll lock, and exit presence; check light and dark Appearance on actual portalled Content and required CSS.
|
|
51
|
+
|
|
52
|
+
## Related guidance
|
|
53
|
+
|
|
54
|
+
- `@flowstack-ui/atom/agents/popover`
|
|
55
|
+
- `dialog`
|
|
56
|
+
- `drawer`
|
|
57
|
+
- `dropdown-menu`
|
|
58
|
+
- `select`
|
|
59
|
+
- `combobox`
|
|
60
|
+
- `hover-card`
|
|
61
|
+
- `tooltip`
|
|
62
|
+
- `appearance`
|
|
63
|
+
|
|
64
|
+
## Machine record
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"schema": "flowstack.agent-component.v1",
|
|
69
|
+
"id": "popover",
|
|
70
|
+
"name": "Popover",
|
|
71
|
+
"package": "@flowstack-ui/brick",
|
|
72
|
+
"layer": "brick",
|
|
73
|
+
"kind": "component",
|
|
74
|
+
"purpose": "Present a finished compact click-open interactive panel anchored to a trigger or explicit anchor while Atom owns placement, dismissal, focus, portal, and optional modal behavior.",
|
|
75
|
+
"useWhen": [
|
|
76
|
+
"A trigger needs a small contextual panel for details, filters, or compact editing that belongs near its point of invocation."
|
|
77
|
+
],
|
|
78
|
+
"avoidWhen": [
|
|
79
|
+
{
|
|
80
|
+
"condition": "The content is noninteractive help, a passive hover preview, a command or option collection, or a larger blocking task.",
|
|
81
|
+
"useInstead": "Tooltip, HoverCard, Menu, Select or Combobox, or Dialog"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"condition": "The task should enter from a screen edge or remain as persistent page content.",
|
|
85
|
+
"useInstead": "Drawer or an in-page Brick composition"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"composition": [
|
|
89
|
+
"Compose Popover.Root with Popover.Trigger and Popover.Portal; add Popover.Anchor only when positioning must reference an element other than Trigger. Inside Popover.Content, arrange Header with Title and optional Description, Body, Footer, and Close as needed; keep Arrow as a direct Content child.",
|
|
90
|
+
"Use density=compact for concise filter and utility panels. When a local Appearance scope owns the trigger, portal into that scope or apply the same Appearance to Content because ordinary portal ancestry does not preserve the local theme boundary."
|
|
91
|
+
],
|
|
92
|
+
"rules": [
|
|
93
|
+
{
|
|
94
|
+
"id": "popover-click-context",
|
|
95
|
+
"level": "must",
|
|
96
|
+
"statement": "Use Brick Popover for compact click-open interactive work; choose Menu, Select, or Combobox when the panel's job is command or option selection, and Dialog for a larger blocking workflow."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "popover-complete-anatomy",
|
|
100
|
+
"level": "must",
|
|
101
|
+
"statement": "Keep Trigger and portalled Content inside one Root, use Anchor only for a distinct positioning reference, and use the public structure parts instead of recreating panel spacing or hierarchy with private selectors."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"id": "popover-accessible-name",
|
|
105
|
+
"level": "must",
|
|
106
|
+
"statement": "Give Content an accessible name with one visible Title or an explicit native aria-label or aria-labelledby; add Description or native aria-describedby only when descriptive text is present."
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "popover-modal-choice",
|
|
110
|
+
"level": "must",
|
|
111
|
+
"statement": "Keep the default non-modal behavior for ordinary attached work; set modal only when the compact panel must trap focus, isolate the background, and lock document scrolling."
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"id": "popover-visible-close",
|
|
115
|
+
"level": "must",
|
|
116
|
+
"statement": "Provide a visible Close when modal is enabled or when outside interaction, Escape, and trigger toggling do not make the dismissal path obvious."
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"id": "popover-focus-dismissal",
|
|
120
|
+
"level": "must",
|
|
121
|
+
"statement": "Use the owned initial and final focus targets and onInteractOutside preventDefault contract when customization is required; do not replace Atom's focus-out, Escape, completed-interaction, restoration, and nested-layer handling."
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "popover-density",
|
|
125
|
+
"level": "must",
|
|
126
|
+
"statement": "Use the comfortable default for ordinary contextual work and density=compact for concise filter and utility panels; do not recreate compact rhythm with private selectors."
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"id": "popover-theme-scope",
|
|
130
|
+
"level": "must",
|
|
131
|
+
"statement": "When Content leaves a local Appearance scope through Portal, reproduce that scope on the portalled visual root or target a container inside it."
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"id": "popover-positioning-arrow",
|
|
135
|
+
"level": "must",
|
|
136
|
+
"statement": "Style from resolved data-side and available-size variables, keep Arrow as a direct Content child, and preserve its shared border and surface paint instead of assuming requested placement or independently recoloring it."
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"id": "popover-responsive",
|
|
140
|
+
"level": "should",
|
|
141
|
+
"statement": "Keep the panel compact and verify collision shifts and flips, constrained scrolling, action reachability, zoom, touch input, narrow viewports, and LTR and RTL placement."
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"id": "popover-css",
|
|
145
|
+
"level": "must",
|
|
146
|
+
"statement": "Load styles.css or core.css plus popover.css."
|
|
147
|
+
}
|
|
148
|
+
],
|
|
149
|
+
"commonMistakes": [
|
|
150
|
+
{
|
|
151
|
+
"mistake": "Hand-positioning a floating div, using Popover for a menu or tooltip, forcing it modal for every utility panel, or closing it with ad hoc document listeners.",
|
|
152
|
+
"correction": "Choose by interaction job, use complete Popover anatomy, keep ordinary popovers non-modal, and use the preventable outside-interaction contract."
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"mistake": "Assuming portalled Content inherits a nearby Appearance scope or placing Arrow inside an authored viewport wrapper.",
|
|
156
|
+
"correction": "Make the portal scope explicit and keep Arrow directly under Content so placement and finished surface paint remain intact."
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"validation": [
|
|
160
|
+
"Verify trigger and Content naming, controlled and disabled state, keyboard, pointer, and touch opening, initial focus, Tab behavior, Close, Escape, outside interaction, focus-out dismissal, outside focus destination, and trigger restoration.",
|
|
161
|
+
"Verify explicit Anchor positioning, collision shifts and flips at every supported side, LTR and RTL, available-size variables, direct Arrow geometry, constrained scrolling, nested portalled controlled layers, zoom, and narrow viewports.",
|
|
162
|
+
"When modal is enabled, verify a visible close path, focus containment, background isolation, scroll lock, and exit presence; check light and dark Appearance on actual portalled Content and required CSS."
|
|
163
|
+
],
|
|
164
|
+
"related": [
|
|
165
|
+
{
|
|
166
|
+
"kind": "package",
|
|
167
|
+
"package": "@flowstack-ui/atom",
|
|
168
|
+
"id": "popover",
|
|
169
|
+
"versionPolicy": "installed-exact"
|
|
170
|
+
},
|
|
171
|
+
"dialog",
|
|
172
|
+
"drawer",
|
|
173
|
+
"dropdown-menu",
|
|
174
|
+
"select",
|
|
175
|
+
"combobox",
|
|
176
|
+
"hover-card",
|
|
177
|
+
"tooltip",
|
|
178
|
+
"appearance"
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
```
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# ProgressCircle
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: progress-circle
|
|
6
|
+
|
|
7
|
+
# ProgressCircle agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Present compact circular read-only task progress with Brick-owned SVG ring geometry while Atom Progress owns progressbar semantics, normalized range state, and determinate or indeterminate behavior.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- Ongoing measurable or indeterminate work needs compact circular feedback in a card, toolbar, dialog, or other bounded region.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- Linear space communicates change more clearly, the value is a stable measurement or user input, stages matter, or the finished layout is loading. Use Progress, the native meter element, Slider, Steps, or Skeleton.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Give ProgressCircle.Root a concise Label or native accessible name, pass a measurable value or null/omit it for indeterminate work, then compose one Circle with Brick-owned Track before Indicator. Add optional Value and Label outside Circle.
|
|
24
|
+
- Choose size, thickness, cap, and tone on Root. Keep SVG geometry decorative, preserve clockwise motion independent of RTL, and keep application aria-busy state and announcements outside ProgressCircle.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- **MUST:** Give Root an accessible task name through Label or native ARIA; Circle, Track, Indicator, and visible Value are decorative or silent and do not replace that name.
|
|
29
|
+
- **MUST:** Use a numeric value only for measurable work, pass null or omit it for indeterminate work, and preserve Atom's truthful min/max normalization, clamping, state, and aria-valuenow behavior.
|
|
30
|
+
- **MUST:** Treat Circle, Track, and Indicator as Brick-owned fixed SVG presentation over Atom Progress context; keep one Circle, order Track before Indicator, and do not override viewBox, radius, circumference, dash array, or dash offset.
|
|
31
|
+
- **MUST:** Keep Root as the only progressbar and announcement path, keep SVG anatomy aria-hidden and unfocusable, and do not make circular progress keyboard adjustable or use it for static measurement.
|
|
32
|
+
- **SHOULD:** Localize optional visible Value and provide aria-valuetext when the numeric range needs domain wording; do not assume the decorative Value changes Root's accessible value text.
|
|
33
|
+
- **MUST:** Keep the ring square, contained within its surrounding region, clockwise in LTR and RTL, label wrapping intact, track visible, and reduced-motion indeterminate state understandable as a static arc.
|
|
34
|
+
- **MUST:** Load styles.css or core.css plus progress-circle.css.
|
|
35
|
+
|
|
36
|
+
## Common mistakes
|
|
37
|
+
|
|
38
|
+
- **Avoid:** Using an unlabeled decorative spinner, adding progressbar semantics to SVG, passing zero for unknown work, or reversing the ring in RTL. **Instead:** Name Atom-backed Root, use indeterminate null state, keep Brick SVG silent, and retain clockwise geometry.
|
|
39
|
+
- **Avoid:** Overriding component-owned SVG radius or dash geometry or using ProgressCircle for capacity or input. **Instead:** Use public size/thickness/cap/tone recipes and choose native meter or Slider for other semantic jobs.
|
|
40
|
+
|
|
41
|
+
## Validation checklist
|
|
42
|
+
|
|
43
|
+
- Verify Root naming, determinate loading/complete and indeterminate state, aria-valuenow presence/absence, clamping, invalid-range normalization, custom value text, localized visible Value, and Atom state propagation.
|
|
44
|
+
- Verify one Root progressbar, one decorative Circle, Track before Indicator, fixed component-owned geometry, silent/unfocusable SVG, no keyboard interaction, native props, refs, and supported composition.
|
|
45
|
+
- Verify five sizes, three thicknesses, both caps, all tones, square containment, long labels, zoom, clockwise LTR/RTL behavior, track contrast, light/dark appearance, forced colors, and reduced motion.
|
|
46
|
+
|
|
47
|
+
## Related guidance
|
|
48
|
+
|
|
49
|
+
- `@flowstack-ui/atom/agents/progress`
|
|
50
|
+
- `progress`
|
|
51
|
+
- `slider`
|
|
52
|
+
- `skeleton`
|
|
53
|
+
|
|
54
|
+
## Machine record
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
{
|
|
58
|
+
"schema": "flowstack.agent-component.v1",
|
|
59
|
+
"id": "progress-circle",
|
|
60
|
+
"name": "ProgressCircle",
|
|
61
|
+
"package": "@flowstack-ui/brick",
|
|
62
|
+
"layer": "brick",
|
|
63
|
+
"kind": "component",
|
|
64
|
+
"purpose": "Present compact circular read-only task progress with Brick-owned SVG ring geometry while Atom Progress owns progressbar semantics, normalized range state, and determinate or indeterminate behavior.",
|
|
65
|
+
"useWhen": [
|
|
66
|
+
"Ongoing measurable or indeterminate work needs compact circular feedback in a card, toolbar, dialog, or other bounded region."
|
|
67
|
+
],
|
|
68
|
+
"avoidWhen": [
|
|
69
|
+
{
|
|
70
|
+
"condition": "Linear space communicates change more clearly, the value is a stable measurement or user input, stages matter, or the finished layout is loading.",
|
|
71
|
+
"useInstead": "Progress, the native meter element, Slider, Steps, or Skeleton"
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"composition": [
|
|
75
|
+
"Give ProgressCircle.Root a concise Label or native accessible name, pass a measurable value or null/omit it for indeterminate work, then compose one Circle with Brick-owned Track before Indicator. Add optional Value and Label outside Circle.",
|
|
76
|
+
"Choose size, thickness, cap, and tone on Root. Keep SVG geometry decorative, preserve clockwise motion independent of RTL, and keep application aria-busy state and announcements outside ProgressCircle."
|
|
77
|
+
],
|
|
78
|
+
"rules": [
|
|
79
|
+
{
|
|
80
|
+
"id": "progress-circle-name",
|
|
81
|
+
"level": "must",
|
|
82
|
+
"statement": "Give Root an accessible task name through Label or native ARIA; Circle, Track, Indicator, and visible Value are decorative or silent and do not replace that name."
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": "progress-circle-state",
|
|
86
|
+
"level": "must",
|
|
87
|
+
"statement": "Use a numeric value only for measurable work, pass null or omit it for indeterminate work, and preserve Atom's truthful min/max normalization, clamping, state, and aria-valuenow behavior."
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "progress-circle-brick-anatomy",
|
|
91
|
+
"level": "must",
|
|
92
|
+
"statement": "Treat Circle, Track, and Indicator as Brick-owned fixed SVG presentation over Atom Progress context; keep one Circle, order Track before Indicator, and do not override viewBox, radius, circumference, dash array, or dash offset."
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "progress-circle-semantic-owner",
|
|
96
|
+
"level": "must",
|
|
97
|
+
"statement": "Keep Root as the only progressbar and announcement path, keep SVG anatomy aria-hidden and unfocusable, and do not make circular progress keyboard adjustable or use it for static measurement."
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "progress-circle-value",
|
|
101
|
+
"level": "should",
|
|
102
|
+
"statement": "Localize optional visible Value and provide aria-valuetext when the numeric range needs domain wording; do not assume the decorative Value changes Root's accessible value text."
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"id": "progress-circle-responsive",
|
|
106
|
+
"level": "must",
|
|
107
|
+
"statement": "Keep the ring square, contained within its surrounding region, clockwise in LTR and RTL, label wrapping intact, track visible, and reduced-motion indeterminate state understandable as a static arc."
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"id": "progress-circle-css",
|
|
111
|
+
"level": "must",
|
|
112
|
+
"statement": "Load styles.css or core.css plus progress-circle.css."
|
|
113
|
+
}
|
|
114
|
+
],
|
|
115
|
+
"commonMistakes": [
|
|
116
|
+
{
|
|
117
|
+
"mistake": "Using an unlabeled decorative spinner, adding progressbar semantics to SVG, passing zero for unknown work, or reversing the ring in RTL.",
|
|
118
|
+
"correction": "Name Atom-backed Root, use indeterminate null state, keep Brick SVG silent, and retain clockwise geometry."
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"mistake": "Overriding component-owned SVG radius or dash geometry or using ProgressCircle for capacity or input.",
|
|
122
|
+
"correction": "Use public size/thickness/cap/tone recipes and choose native meter or Slider for other semantic jobs."
|
|
123
|
+
}
|
|
124
|
+
],
|
|
125
|
+
"validation": [
|
|
126
|
+
"Verify Root naming, determinate loading/complete and indeterminate state, aria-valuenow presence/absence, clamping, invalid-range normalization, custom value text, localized visible Value, and Atom state propagation.",
|
|
127
|
+
"Verify one Root progressbar, one decorative Circle, Track before Indicator, fixed component-owned geometry, silent/unfocusable SVG, no keyboard interaction, native props, refs, and supported composition.",
|
|
128
|
+
"Verify five sizes, three thicknesses, both caps, all tones, square containment, long labels, zoom, clockwise LTR/RTL behavior, track contrast, light/dark appearance, forced colors, and reduced motion."
|
|
129
|
+
],
|
|
130
|
+
"related": [
|
|
131
|
+
{
|
|
132
|
+
"kind": "package",
|
|
133
|
+
"package": "@flowstack-ui/atom",
|
|
134
|
+
"id": "progress",
|
|
135
|
+
"versionPolicy": "installed-exact"
|
|
136
|
+
},
|
|
137
|
+
"progress",
|
|
138
|
+
"slider",
|
|
139
|
+
"skeleton"
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
```
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Progress
|
|
2
|
+
|
|
3
|
+
Source: @flowstack-ui/brick@0.1.11
|
|
4
|
+
Kind: component
|
|
5
|
+
ID: progress
|
|
6
|
+
|
|
7
|
+
# Progress agent guide
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
Present finished linear read-only task progress for known, unknown, or buffered work while Atom owns progressbar semantics, normalized range state, and the presentation-only Indicator.
|
|
12
|
+
|
|
13
|
+
## Use when
|
|
14
|
+
|
|
15
|
+
- Ongoing work such as upload, download, processing, or synchronization needs a linear indication of measurable completion or indeterminate activity.
|
|
16
|
+
|
|
17
|
+
## Choose something else when
|
|
18
|
+
|
|
19
|
+
- The value is a stable measurement, users manipulate it, stages rather than amount matter, the finished layout is loading, compact circular presentation fits better, or only a transient result is needed. Use the native meter element, Slider, Steps, Skeleton, ProgressCircle, or Toast.
|
|
20
|
+
|
|
21
|
+
## Required composition
|
|
22
|
+
|
|
23
|
+
- Give Progress.Root a concise Label or native accessible name, pass a measurable value or null/omit it for indeterminate work, set a truthful range, and compose optional Value then Track with optional Buffer before Indicator.
|
|
24
|
+
- Choose horizontal or vertical orientation, size, shape, and semantic tone. Keep application region aria-busy state and announcements outside Progress, and provide aria-valuetext or getValueLabel when the numeric range needs domain wording.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- **MUST:** Give Root an accessible name identifying the ongoing task through Progress.Label or native ARIA; visible Value does not name the task.
|
|
29
|
+
- **MUST:** Use a current numeric value only for measurable work and pass null or omit value for unknown work so aria-valuenow is absent rather than pretending unknown progress is zero.
|
|
30
|
+
- **MUST:** Supply truthful min and max, understand Atom clamping and invalid-range normalization, and keep optional bufferValue within the same task and range rather than treating it as a second progressbar.
|
|
31
|
+
- **SHOULD:** Provide concise human-readable aria-valuetext or getValueLabel output when the numeric range alone does not communicate meaningful completion; localize visible Value formatting separately.
|
|
32
|
+
- **MUST:** Keep Indicator and Buffer presentation-only, ordered Buffer before Indicator inside Track, and Root as the sole progressbar and announcement owner.
|
|
33
|
+
- **MUST:** Do not make Progress interactive or keyboard adjustable and do not use it for static capacity; choose Slider for input and native meter for stable measurement.
|
|
34
|
+
- **MUST:** Keep horizontal Progress shrinkable, vertical length explicit, label wrapping and value alignment intact, logical fill correct in RTL, and reduced-motion indeterminate state understandable as a static segment.
|
|
35
|
+
- **MUST:** Load styles.css or core.css plus progress.css.
|
|
36
|
+
|
|
37
|
+
## Common mistakes
|
|
38
|
+
|
|
39
|
+
- **Avoid:** Passing zero for unknown progress, using Progress for capacity, omitting its task name, or adding progressbar semantics to Indicator. **Instead:** Use indeterminate null state, native meter for stable quantity, name Root, and keep visual parts silent.
|
|
40
|
+
- **Avoid:** Announcing every percent change in another live region or treating tone as the sole status meaning. **Instead:** Keep one semantic progressbar, add independently justified announcements sparingly, and provide textual task or state context.
|
|
41
|
+
|
|
42
|
+
## Validation checklist
|
|
43
|
+
|
|
44
|
+
- Verify naming, determinate loading/complete and indeterminate states, aria-valuenow absence, clamping, invalid-range normalization, buffer percentage, data state, explicit aria-valuetext precedence, getValueLabel, and localized visible Value formatting.
|
|
45
|
+
- Verify Root is the only progressbar; Indicator and Buffer are silent; no keyboard interaction exists; all parts remain under Root with Buffer before Indicator; native props, refs, and composition are preserved.
|
|
46
|
+
- Verify both orientations, five sizes, all shapes and tones, narrow width, explicit vertical length, long labels, zoom, RTL logical fill, light/dark appearance, forced colors, reduced motion, and track/indicator contrast.
|
|
47
|
+
|
|
48
|
+
## Related guidance
|
|
49
|
+
|
|
50
|
+
- `@flowstack-ui/atom/agents/progress`
|
|
51
|
+
- `progress-circle`
|
|
52
|
+
- `slider`
|
|
53
|
+
- `toast`
|
|
54
|
+
- `skeleton`
|
|
55
|
+
|
|
56
|
+
## Machine record
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"schema": "flowstack.agent-component.v1",
|
|
61
|
+
"id": "progress",
|
|
62
|
+
"name": "Progress",
|
|
63
|
+
"package": "@flowstack-ui/brick",
|
|
64
|
+
"layer": "brick",
|
|
65
|
+
"kind": "component",
|
|
66
|
+
"purpose": "Present finished linear read-only task progress for known, unknown, or buffered work while Atom owns progressbar semantics, normalized range state, and the presentation-only Indicator.",
|
|
67
|
+
"useWhen": [
|
|
68
|
+
"Ongoing work such as upload, download, processing, or synchronization needs a linear indication of measurable completion or indeterminate activity."
|
|
69
|
+
],
|
|
70
|
+
"avoidWhen": [
|
|
71
|
+
{
|
|
72
|
+
"condition": "The value is a stable measurement, users manipulate it, stages rather than amount matter, the finished layout is loading, compact circular presentation fits better, or only a transient result is needed.",
|
|
73
|
+
"useInstead": "the native meter element, Slider, Steps, Skeleton, ProgressCircle, or Toast"
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
"composition": [
|
|
77
|
+
"Give Progress.Root a concise Label or native accessible name, pass a measurable value or null/omit it for indeterminate work, set a truthful range, and compose optional Value then Track with optional Buffer before Indicator.",
|
|
78
|
+
"Choose horizontal or vertical orientation, size, shape, and semantic tone. Keep application region aria-busy state and announcements outside Progress, and provide aria-valuetext or getValueLabel when the numeric range needs domain wording."
|
|
79
|
+
],
|
|
80
|
+
"rules": [
|
|
81
|
+
{
|
|
82
|
+
"id": "progress-name",
|
|
83
|
+
"level": "must",
|
|
84
|
+
"statement": "Give Root an accessible name identifying the ongoing task through Progress.Label or native ARIA; visible Value does not name the task."
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "progress-determinate",
|
|
88
|
+
"level": "must",
|
|
89
|
+
"statement": "Use a current numeric value only for measurable work and pass null or omit value for unknown work so aria-valuenow is absent rather than pretending unknown progress is zero."
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "progress-range",
|
|
93
|
+
"level": "must",
|
|
94
|
+
"statement": "Supply truthful min and max, understand Atom clamping and invalid-range normalization, and keep optional bufferValue within the same task and range rather than treating it as a second progressbar."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "progress-value-text",
|
|
98
|
+
"level": "should",
|
|
99
|
+
"statement": "Provide concise human-readable aria-valuetext or getValueLabel output when the numeric range alone does not communicate meaningful completion; localize visible Value formatting separately."
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"id": "progress-indicator",
|
|
103
|
+
"level": "must",
|
|
104
|
+
"statement": "Keep Indicator and Buffer presentation-only, ordered Buffer before Indicator inside Track, and Root as the sole progressbar and announcement owner."
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"id": "progress-readonly",
|
|
108
|
+
"level": "must",
|
|
109
|
+
"statement": "Do not make Progress interactive or keyboard adjustable and do not use it for static capacity; choose Slider for input and native meter for stable measurement."
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "progress-responsive",
|
|
113
|
+
"level": "must",
|
|
114
|
+
"statement": "Keep horizontal Progress shrinkable, vertical length explicit, label wrapping and value alignment intact, logical fill correct in RTL, and reduced-motion indeterminate state understandable as a static segment."
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"id": "progress-css",
|
|
118
|
+
"level": "must",
|
|
119
|
+
"statement": "Load styles.css or core.css plus progress.css."
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"commonMistakes": [
|
|
123
|
+
{
|
|
124
|
+
"mistake": "Passing zero for unknown progress, using Progress for capacity, omitting its task name, or adding progressbar semantics to Indicator.",
|
|
125
|
+
"correction": "Use indeterminate null state, native meter for stable quantity, name Root, and keep visual parts silent."
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"mistake": "Announcing every percent change in another live region or treating tone as the sole status meaning.",
|
|
129
|
+
"correction": "Keep one semantic progressbar, add independently justified announcements sparingly, and provide textual task or state context."
|
|
130
|
+
}
|
|
131
|
+
],
|
|
132
|
+
"validation": [
|
|
133
|
+
"Verify naming, determinate loading/complete and indeterminate states, aria-valuenow absence, clamping, invalid-range normalization, buffer percentage, data state, explicit aria-valuetext precedence, getValueLabel, and localized visible Value formatting.",
|
|
134
|
+
"Verify Root is the only progressbar; Indicator and Buffer are silent; no keyboard interaction exists; all parts remain under Root with Buffer before Indicator; native props, refs, and composition are preserved.",
|
|
135
|
+
"Verify both orientations, five sizes, all shapes and tones, narrow width, explicit vertical length, long labels, zoom, RTL logical fill, light/dark appearance, forced colors, reduced motion, and track/indicator contrast."
|
|
136
|
+
],
|
|
137
|
+
"related": [
|
|
138
|
+
{
|
|
139
|
+
"kind": "package",
|
|
140
|
+
"package": "@flowstack-ui/atom",
|
|
141
|
+
"id": "progress",
|
|
142
|
+
"versionPolicy": "installed-exact"
|
|
143
|
+
},
|
|
144
|
+
"progress-circle",
|
|
145
|
+
"slider",
|
|
146
|
+
"toast",
|
|
147
|
+
"skeleton"
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
```
|