@frame-kit/ui-ng 0.0.1
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/COMPONENTS.md +683 -0
- package/DEVELOPMENT_GUIDE.md +1102 -0
- package/LICENSE +21 -0
- package/README.md +69 -0
- package/THEMING.md +130 -0
- package/core/headline/README.md +121 -0
- package/core/icon/README.md +173 -0
- package/core/image/README.md +210 -0
- package/core/link/README.md +297 -0
- package/core/separator/README.md +145 -0
- package/core/text/README.md +240 -0
- package/directives/infinite-scroll/README.md +102 -0
- package/directives/spotlight/README.md +154 -0
- package/directives/tooltip/README.md +147 -0
- package/docs/endpoint-link/README.md +142 -0
- package/docs/method-badge/README.md +154 -0
- package/fesm2022/frame-kit-ui-ng-core-headline.mjs +122 -0
- package/fesm2022/frame-kit-ui-ng-core-headline.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-core-icon.mjs +189 -0
- package/fesm2022/frame-kit-ui-ng-core-icon.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-core-image.mjs +123 -0
- package/fesm2022/frame-kit-ui-ng-core-image.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-core-link.mjs +369 -0
- package/fesm2022/frame-kit-ui-ng-core-link.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-core-separator.mjs +59 -0
- package/fesm2022/frame-kit-ui-ng-core-separator.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-core-text.mjs +204 -0
- package/fesm2022/frame-kit-ui-ng-core-text.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-directives-infinite-scroll.mjs +74 -0
- package/fesm2022/frame-kit-ui-ng-directives-infinite-scroll.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-directives-spotlight.mjs +76 -0
- package/fesm2022/frame-kit-ui-ng-directives-spotlight.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-directives-tooltip.mjs +425 -0
- package/fesm2022/frame-kit-ui-ng-directives-tooltip.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-docs-endpoint-link.mjs +63 -0
- package/fesm2022/frame-kit-ui-ng-docs-endpoint-link.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-docs-method-badge.mjs +43 -0
- package/fesm2022/frame-kit-ui-ng-docs-method-badge.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-forms.mjs +3632 -0
- package/fesm2022/frame-kit-ui-ng-forms.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-layouts-app-shell.mjs +239 -0
- package/fesm2022/frame-kit-ui-ng-layouts-app-shell.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-layouts-content-split.mjs +132 -0
- package/fesm2022/frame-kit-ui-ng-layouts-content-split.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-services-overlay-orchestrator.mjs +133 -0
- package/fesm2022/frame-kit-ui-ng-services-overlay-orchestrator.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-services-spotlight.mjs +60 -0
- package/fesm2022/frame-kit-ui-ng-services-spotlight.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-services-toast.mjs +166 -0
- package/fesm2022/frame-kit-ui-ng-services-toast.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-accordion.mjs +214 -0
- package/fesm2022/frame-kit-ui-ng-ui-accordion.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-alert.mjs +82 -0
- package/fesm2022/frame-kit-ui-ng-ui-alert.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-avatar-stack.mjs +76 -0
- package/fesm2022/frame-kit-ui-ng-ui-avatar-stack.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-avatar.mjs +81 -0
- package/fesm2022/frame-kit-ui-ng-ui-avatar.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-badge.mjs +81 -0
- package/fesm2022/frame-kit-ui-ng-ui-badge.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-breadcrumb.mjs +68 -0
- package/fesm2022/frame-kit-ui-ng-ui-breadcrumb.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-button.mjs +108 -0
- package/fesm2022/frame-kit-ui-ng-ui-button.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-callout.mjs +58 -0
- package/fesm2022/frame-kit-ui-ng-ui-callout.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-card.mjs +70 -0
- package/fesm2022/frame-kit-ui-ng-ui-card.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-copyable-field.mjs +113 -0
- package/fesm2022/frame-kit-ui-ng-ui-copyable-field.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-data-table.mjs +1288 -0
- package/fesm2022/frame-kit-ui-ng-ui-data-table.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-dialog.mjs +456 -0
- package/fesm2022/frame-kit-ui-ng-ui-dialog.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-drawer.mjs +398 -0
- package/fesm2022/frame-kit-ui-ng-ui-drawer.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-dropdown-menu.mjs +398 -0
- package/fesm2022/frame-kit-ui-ng-ui-dropdown-menu.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-editable-field.mjs +125 -0
- package/fesm2022/frame-kit-ui-ng-ui-editable-field.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-icon-badge.mjs +113 -0
- package/fesm2022/frame-kit-ui-ng-ui-icon-badge.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-icon-list.mjs +111 -0
- package/fesm2022/frame-kit-ui-ng-ui-icon-list.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-inline-edit.mjs +103 -0
- package/fesm2022/frame-kit-ui-ng-ui-inline-edit.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-list-editor.mjs +135 -0
- package/fesm2022/frame-kit-ui-ng-ui-list-editor.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-loader.mjs +81 -0
- package/fesm2022/frame-kit-ui-ng-ui-loader.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-menu-item.mjs +79 -0
- package/fesm2022/frame-kit-ui-ng-ui-menu-item.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-brand.mjs +40 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-brand.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-group.mjs +110 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-group.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-separator.mjs +91 -0
- package/fesm2022/frame-kit-ui-ng-ui-nav-separator.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-node-tree-breadcrumb.mjs +86 -0
- package/fesm2022/frame-kit-ui-ng-ui-node-tree-breadcrumb.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-node-tree.mjs +443 -0
- package/fesm2022/frame-kit-ui-ng-ui-node-tree.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-note.mjs +56 -0
- package/fesm2022/frame-kit-ui-ng-ui-note.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-numbered-list.mjs +105 -0
- package/fesm2022/frame-kit-ui-ng-ui-numbered-list.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-pagination.mjs +110 -0
- package/fesm2022/frame-kit-ui-ng-ui-pagination.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-progress-bar.mjs +129 -0
- package/fesm2022/frame-kit-ui-ng-ui-progress-bar.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-sidenav-link.mjs +42 -0
- package/fesm2022/frame-kit-ui-ng-ui-sidenav-link.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-tabs.mjs +894 -0
- package/fesm2022/frame-kit-ui-ng-ui-tabs.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-timeline.mjs +81 -0
- package/fesm2022/frame-kit-ui-ng-ui-timeline.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-toast.mjs +179 -0
- package/fesm2022/frame-kit-ui-ng-ui-toast.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-user-menu.mjs +143 -0
- package/fesm2022/frame-kit-ui-ng-ui-user-menu.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng-ui-wizard-dialog.mjs +191 -0
- package/fesm2022/frame-kit-ui-ng-ui-wizard-dialog.mjs.map +1 -0
- package/fesm2022/frame-kit-ui-ng.mjs +58 -0
- package/fesm2022/frame-kit-ui-ng.mjs.map +1 -0
- package/layouts/app-shell/README.md +357 -0
- package/layouts/content-split/README.md +180 -0
- package/package.json +253 -0
- package/services/overlay-orchestrator/README.md +184 -0
- package/services/spotlight/README.md +61 -0
- package/services/toast/README.md +118 -0
- package/types/frame-kit-ui-ng-core-headline.d.ts +38 -0
- package/types/frame-kit-ui-ng-core-icon.d.ts +74 -0
- package/types/frame-kit-ui-ng-core-image.d.ts +93 -0
- package/types/frame-kit-ui-ng-core-link.d.ts +251 -0
- package/types/frame-kit-ui-ng-core-separator.d.ts +28 -0
- package/types/frame-kit-ui-ng-core-text.d.ts +186 -0
- package/types/frame-kit-ui-ng-directives-infinite-scroll.d.ts +42 -0
- package/types/frame-kit-ui-ng-directives-spotlight.d.ts +51 -0
- package/types/frame-kit-ui-ng-directives-tooltip.d.ts +70 -0
- package/types/frame-kit-ui-ng-docs-endpoint-link.d.ts +43 -0
- package/types/frame-kit-ui-ng-docs-method-badge.d.ts +30 -0
- package/types/frame-kit-ui-ng-forms.d.ts +1674 -0
- package/types/frame-kit-ui-ng-layouts-app-shell.d.ts +75 -0
- package/types/frame-kit-ui-ng-layouts-content-split.d.ts +43 -0
- package/types/frame-kit-ui-ng-services-overlay-orchestrator.d.ts +96 -0
- package/types/frame-kit-ui-ng-services-spotlight.d.ts +32 -0
- package/types/frame-kit-ui-ng-services-toast.d.ts +100 -0
- package/types/frame-kit-ui-ng-ui-accordion.d.ts +86 -0
- package/types/frame-kit-ui-ng-ui-alert.d.ts +34 -0
- package/types/frame-kit-ui-ng-ui-avatar-stack.d.ts +38 -0
- package/types/frame-kit-ui-ng-ui-avatar.d.ts +36 -0
- package/types/frame-kit-ui-ng-ui-badge.d.ts +33 -0
- package/types/frame-kit-ui-ng-ui-breadcrumb.d.ts +45 -0
- package/types/frame-kit-ui-ng-ui-button.d.ts +48 -0
- package/types/frame-kit-ui-ng-ui-callout.d.ts +26 -0
- package/types/frame-kit-ui-ng-ui-card.d.ts +30 -0
- package/types/frame-kit-ui-ng-ui-copyable-field.d.ts +62 -0
- package/types/frame-kit-ui-ng-ui-data-table.d.ts +482 -0
- package/types/frame-kit-ui-ng-ui-dialog.d.ts +166 -0
- package/types/frame-kit-ui-ng-ui-drawer.d.ts +130 -0
- package/types/frame-kit-ui-ng-ui-dropdown-menu.d.ts +77 -0
- package/types/frame-kit-ui-ng-ui-editable-field.d.ts +65 -0
- package/types/frame-kit-ui-ng-ui-icon-badge.d.ts +45 -0
- package/types/frame-kit-ui-ng-ui-icon-list.d.ts +67 -0
- package/types/frame-kit-ui-ng-ui-inline-edit.d.ts +44 -0
- package/types/frame-kit-ui-ng-ui-list-editor.d.ts +56 -0
- package/types/frame-kit-ui-ng-ui-loader.d.ts +32 -0
- package/types/frame-kit-ui-ng-ui-menu-item.d.ts +27 -0
- package/types/frame-kit-ui-ng-ui-nav-brand.d.ts +25 -0
- package/types/frame-kit-ui-ng-ui-nav-group.d.ts +60 -0
- package/types/frame-kit-ui-ng-ui-nav-separator.d.ts +33 -0
- package/types/frame-kit-ui-ng-ui-node-tree-breadcrumb.d.ts +35 -0
- package/types/frame-kit-ui-ng-ui-node-tree.d.ts +135 -0
- package/types/frame-kit-ui-ng-ui-note.d.ts +22 -0
- package/types/frame-kit-ui-ng-ui-numbered-list.d.ts +52 -0
- package/types/frame-kit-ui-ng-ui-pagination.d.ts +49 -0
- package/types/frame-kit-ui-ng-ui-progress-bar.d.ts +50 -0
- package/types/frame-kit-ui-ng-ui-sidenav-link.d.ts +24 -0
- package/types/frame-kit-ui-ng-ui-tabs.d.ts +266 -0
- package/types/frame-kit-ui-ng-ui-timeline.d.ts +42 -0
- package/types/frame-kit-ui-ng-ui-toast.d.ts +56 -0
- package/types/frame-kit-ui-ng-ui-user-menu.d.ts +87 -0
- package/types/frame-kit-ui-ng-ui-wizard-dialog.d.ts +116 -0
- package/types/frame-kit-ui-ng.d.ts +53 -0
- package/ui/accordion/README.md +261 -0
- package/ui/alert/README.md +211 -0
- package/ui/avatar/README.md +167 -0
- package/ui/avatar-stack/README.md +164 -0
- package/ui/badge/README.md +162 -0
- package/ui/breadcrumb/README.md +240 -0
- package/ui/button/README.md +184 -0
- package/ui/callout/README.md +159 -0
- package/ui/card/README.md +174 -0
- package/ui/copyable-field/README.md +235 -0
- package/ui/data-table/README.md +408 -0
- package/ui/dialog/README.md +222 -0
- package/ui/drawer/README.md +274 -0
- package/ui/dropdown-menu/README.md +336 -0
- package/ui/editable-field/README.md +171 -0
- package/ui/icon-badge/README.md +131 -0
- package/ui/icon-list/README.md +205 -0
- package/ui/inline-edit/README.md +135 -0
- package/ui/list-editor/README.md +162 -0
- package/ui/loader/README.md +160 -0
- package/ui/menu-item/README.md +204 -0
- package/ui/nav-brand/README.md +111 -0
- package/ui/nav-group/README.md +145 -0
- package/ui/nav-separator/README.md +44 -0
- package/ui/node-tree/README.md +278 -0
- package/ui/node-tree-breadcrumb/README.md +164 -0
- package/ui/note/README.md +146 -0
- package/ui/numbered-list/README.md +187 -0
- package/ui/pagination/README.md +174 -0
- package/ui/progress-bar/README.md +223 -0
- package/ui/sidenav-link/README.md +214 -0
- package/ui/tabs/README.md +204 -0
- package/ui/timeline/README.md +285 -0
- package/ui/toast/README.md +243 -0
- package/ui/user-menu/README.md +260 -0
- package/ui/wizard-dialog/README.md +283 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# fk-numbered-list
|
|
2
|
+
|
|
3
|
+
A token-driven numbered list for ordered procedures and step-by-step instructions. Ships as a pair: `fk-numbered-list` is the container, `fk-numbered-list-item` is the renderable row — use either a data-driven `items` input or content projection with `<fk-numbered-list-item>` children. Numbering is automatic via CSS counters.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## API
|
|
8
|
+
|
|
9
|
+
### `fk-numbered-list`
|
|
10
|
+
|
|
11
|
+
#### Inputs
|
|
12
|
+
|
|
13
|
+
| Input | Type | Default | Description |
|
|
14
|
+
| ----------- | ------------------------------------- | ------- | ----------------------------------------------------------------------------------- |
|
|
15
|
+
| `items` | `readonly NumberedListItem[] \| null` | `null` | Data-driven rows. When `null`, the list projects `<fk-numbered-list-item>` children |
|
|
16
|
+
| `size` | `NumberedListSize` | `"md"` | Default size inherited by items: `"sm"`, `"md"`, `"lg"` |
|
|
17
|
+
| `className` | `string` | `''` | Additional CSS classes merged onto the host element |
|
|
18
|
+
| `id` | `string \| null` | `null` | Optional ID applied to the inner `role="list"` container |
|
|
19
|
+
| `ariaLabel` | `string \| null` | `null` | Accessible label on the inner `role="list"` container |
|
|
20
|
+
|
|
21
|
+
### `fk-numbered-list-item`
|
|
22
|
+
|
|
23
|
+
#### Inputs
|
|
24
|
+
|
|
25
|
+
| Input | Type | Default | Description |
|
|
26
|
+
| ----------- | -------------------------- | ------- | -------------------------------------------------------- |
|
|
27
|
+
| `size` | `NumberedListSize \| null` | `null` | Per-item size override. Falls through to the parent list |
|
|
28
|
+
| `className` | `string` | `''` | Additional CSS classes merged onto the host element |
|
|
29
|
+
| `id` | `string \| null` | `null` | Optional ID applied to the host element |
|
|
30
|
+
| `ariaLabel` | `string \| null` | `null` | Accessible label when the label alone is insufficient |
|
|
31
|
+
|
|
32
|
+
#### Content
|
|
33
|
+
|
|
34
|
+
`fk-numbered-list-item` projects its label content:
|
|
35
|
+
|
|
36
|
+
```html
|
|
37
|
+
<fk-numbered-list-item>Your step text here</fk-numbered-list-item>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Outputs
|
|
41
|
+
|
|
42
|
+
None on either component.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Features
|
|
47
|
+
|
|
48
|
+
- Two usage modes — data-driven (`items` input) or content-projection (`<fk-numbered-list-item>` children)
|
|
49
|
+
- Automatic numbering via CSS counters — no manual index tracking
|
|
50
|
+
- Items inherit the list's `size` via element-injector DI; the per-item `size` input overrides the parent
|
|
51
|
+
- Three size steps that scale label typography
|
|
52
|
+
- Semantic `role="list"` / `role="listitem"` pairing; item roles are only advertised when inside an `fk-numbered-list` container, so standalone items don't announce orphan list semantics
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Quick Start
|
|
57
|
+
|
|
58
|
+
Data-driven:
|
|
59
|
+
|
|
60
|
+
```html
|
|
61
|
+
<fk-numbered-list [items]="steps" />
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
readonly steps = [
|
|
66
|
+
{ label: "Open the page" },
|
|
67
|
+
{ label: "Click the button" },
|
|
68
|
+
{ label: "Confirm the change" },
|
|
69
|
+
];
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Content-projection:
|
|
73
|
+
|
|
74
|
+
```html
|
|
75
|
+
<fk-numbered-list>
|
|
76
|
+
<fk-numbered-list-item>Open the page</fk-numbered-list-item>
|
|
77
|
+
<fk-numbered-list-item>Click the button</fk-numbered-list-item>
|
|
78
|
+
<fk-numbered-list-item>Confirm the change</fk-numbered-list-item>
|
|
79
|
+
</fk-numbered-list>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Import
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
import { NumberedListComponent, NumberedListItemComponent } from '@frame-kit/ui-ng';
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
@Component({
|
|
92
|
+
selector: 'app-example',
|
|
93
|
+
imports: [NumberedListComponent, NumberedListItemComponent],
|
|
94
|
+
templateUrl: './example.component.html',
|
|
95
|
+
})
|
|
96
|
+
export class ExampleComponent {}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Selectors
|
|
102
|
+
|
|
103
|
+
```html
|
|
104
|
+
<fk-numbered-list></fk-numbered-list> <fk-numbered-list-item></fk-numbered-list-item>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Examples
|
|
110
|
+
|
|
111
|
+
### Procedure with data-driven items
|
|
112
|
+
|
|
113
|
+
```html
|
|
114
|
+
<fk-numbered-list [items]="steps" />
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Sizing
|
|
118
|
+
|
|
119
|
+
```html
|
|
120
|
+
<fk-numbered-list [items]="steps" size="sm" />
|
|
121
|
+
<fk-numbered-list [items]="steps" size="md" />
|
|
122
|
+
<fk-numbered-list [items]="steps" size="lg" />
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Mixed sizes per item
|
|
126
|
+
|
|
127
|
+
```html
|
|
128
|
+
<fk-numbered-list size="md">
|
|
129
|
+
<fk-numbered-list-item>Standard step</fk-numbered-list-item>
|
|
130
|
+
<fk-numbered-list-item size="lg">A larger emphasised step</fk-numbered-list-item>
|
|
131
|
+
<fk-numbered-list-item>Standard step</fk-numbered-list-item>
|
|
132
|
+
</fk-numbered-list>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## Accessibility
|
|
138
|
+
|
|
139
|
+
- `fk-numbered-list` renders `<div role="list">` so list semantics survive the `list-style: none` reset (Safari otherwise strips the implicit list role).
|
|
140
|
+
- `fk-numbered-list-item` sets `role="listitem"` only when nested inside an `fk-numbered-list` — this avoids announcing orphan list items when the component is used standalone.
|
|
141
|
+
- The number badge is generated by a CSS counter on a pseudo-element marked `aria-hidden="true"` — the projected label is the assistive-tech-readable content. Screen readers announce the list items in order via the parent's list role.
|
|
142
|
+
- Set `ariaLabel` on the list when the surrounding context doesn't already name the procedure.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Design Tokens
|
|
147
|
+
|
|
148
|
+
```scss
|
|
149
|
+
/* Container */
|
|
150
|
+
--fk-numbered-list-margin-top;
|
|
151
|
+
--fk-numbered-list-row-gap;
|
|
152
|
+
|
|
153
|
+
/* Item */
|
|
154
|
+
--fk-numbered-list-item-gap;
|
|
155
|
+
--fk-numbered-list-item-color;
|
|
156
|
+
--fk-numbered-list-item-line-height;
|
|
157
|
+
|
|
158
|
+
--fk-numbered-list-item-sm-font-size;
|
|
159
|
+
--fk-numbered-list-item-md-font-size;
|
|
160
|
+
--fk-numbered-list-item-lg-font-size;
|
|
161
|
+
|
|
162
|
+
/* Number badge */
|
|
163
|
+
--fk-numbered-list-badge-size;
|
|
164
|
+
--fk-numbered-list-badge-radius;
|
|
165
|
+
--fk-numbered-list-badge-bg;
|
|
166
|
+
--fk-numbered-list-badge-color;
|
|
167
|
+
--fk-numbered-list-badge-font-size;
|
|
168
|
+
--fk-numbered-list-badge-font-weight;
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Override in your app stylesheet:
|
|
172
|
+
|
|
173
|
+
```scss
|
|
174
|
+
:root {
|
|
175
|
+
--fk-numbered-list-row-gap: 1rem;
|
|
176
|
+
--fk-numbered-list-badge-bg: var(--fk-color-success-light);
|
|
177
|
+
--fk-numbered-list-badge-color: var(--fk-color-success);
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Behavior Notes
|
|
184
|
+
|
|
185
|
+
- Data-driven mode internally renders `fk-numbered-list-item` per row, so the DOM is identical whether you use `[items]` or content projection.
|
|
186
|
+
- Numbering is purely visual via CSS counters. Each new `fk-numbered-list` instance restarts the counter at 1, so multiple lists on the same page each number from one independently.
|
|
187
|
+
- The default top margin (`--fk-numbered-list-margin-top`) matches `fk-icon-list` so vertical rhythm is consistent when the two are used side by side in the same docs section.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# fk-pagination
|
|
2
|
+
|
|
3
|
+
A table/list pagination control with page navigation, page-size selector, and range summary.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## API
|
|
8
|
+
|
|
9
|
+
### Inputs
|
|
10
|
+
|
|
11
|
+
| Input | Type | Default | Description |
|
|
12
|
+
| ----------------- | ---------------- | ------------------- | ---------------------------------------------------- |
|
|
13
|
+
| `page` | `number` | **required** | Current page number (1-based) |
|
|
14
|
+
| `take` | `number` | **required** | Number of items per page |
|
|
15
|
+
| `itemCount` | `number` | **required** | Total number of items across all pages |
|
|
16
|
+
| `pageSizeOptions` | `number[]` | `[10, 20, 50, 100]` | Options shown in the "Rows per page" dropdown |
|
|
17
|
+
| `showFirstLast` | `boolean` | `false` | Show "First page" and "Last page" navigation buttons |
|
|
18
|
+
| `className` | `string` | `''` | Additional CSS classes for the host element |
|
|
19
|
+
| `id` | `string \| null` | `null` | ID bound to the host element |
|
|
20
|
+
| `ariaLabel` | `string \| null` | `null` | `aria-label` bound to the host element |
|
|
21
|
+
|
|
22
|
+
### Outputs
|
|
23
|
+
|
|
24
|
+
| Output | Type | Description |
|
|
25
|
+
| ------------ | ----------------- | ------------------------------------------------------ |
|
|
26
|
+
| `pageChange` | `PageChangeEvent` | Emitted on page or page-size change (`{ page, take }`) |
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Features
|
|
31
|
+
|
|
32
|
+
- Displays a human-readable range summary (e.g. "1 -- 20 of 100")
|
|
33
|
+
- Previous / Next navigation buttons with automatic disabled state
|
|
34
|
+
- Optional First / Last page buttons via `showFirstLast`
|
|
35
|
+
- Built-in "Rows per page" dropdown with configurable options
|
|
36
|
+
- Page resets to 1 when page size changes
|
|
37
|
+
- Unique auto-generated ID for the page-size select element
|
|
38
|
+
- Token-driven styling for full theme customization
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Quick Start
|
|
43
|
+
|
|
44
|
+
```html
|
|
45
|
+
<fk-pagination [page]="currentPage" [take]="pageSize" [itemCount]="totalItems" (pageChange)="onPageChange($event)"></fk-pagination>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
onPageChange(event: PageChangeEvent): void {
|
|
50
|
+
this.currentPage = event.page;
|
|
51
|
+
this.pageSize = event.take;
|
|
52
|
+
this.loadData();
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Import
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
import { PaginationComponent } from '@frame-kit/ui-ng';
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
```ts
|
|
65
|
+
@Component({
|
|
66
|
+
selector: 'app-example',
|
|
67
|
+
imports: [PaginationComponent],
|
|
68
|
+
templateUrl: './example.component.html',
|
|
69
|
+
})
|
|
70
|
+
export class ExampleComponent {}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Selector
|
|
76
|
+
|
|
77
|
+
```html
|
|
78
|
+
<fk-pagination></fk-pagination>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Examples
|
|
84
|
+
|
|
85
|
+
### Basic pagination
|
|
86
|
+
|
|
87
|
+
```html
|
|
88
|
+
<fk-pagination [page]="page" [take]="take" [itemCount]="totalItems" (pageChange)="onPageChange($event)"></fk-pagination>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### With first/last buttons
|
|
92
|
+
|
|
93
|
+
```html
|
|
94
|
+
<fk-pagination [page]="page" [take]="take" [itemCount]="totalItems" [showFirstLast]="true" (pageChange)="onPageChange($event)"></fk-pagination>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Custom page size options
|
|
98
|
+
|
|
99
|
+
```html
|
|
100
|
+
<fk-pagination [page]="page" [take]="take" [itemCount]="totalItems" [pageSizeOptions]="[5, 25, 50]" (pageChange)="onPageChange($event)"></fk-pagination>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## Accessibility
|
|
106
|
+
|
|
107
|
+
- Navigation buttons use `aria-label` attributes ("Previous page", "Next page", "First page", "Last page")
|
|
108
|
+
- The navigation wrapper has `role="navigation"` with `aria-label="Pagination"`
|
|
109
|
+
- Arrow SVGs are marked `aria-hidden="true"`
|
|
110
|
+
- The page-size `<select>` is associated with its label via a unique auto-generated `id`
|
|
111
|
+
- Disabled buttons use the native `disabled` attribute
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Design Tokens
|
|
116
|
+
|
|
117
|
+
```scss
|
|
118
|
+
/* Layout */
|
|
119
|
+
--fk-pagination-gap
|
|
120
|
+
--fk-pagination-padding
|
|
121
|
+
--fk-pagination-padding-inline
|
|
122
|
+
--fk-pagination-controls-gap
|
|
123
|
+
--fk-pagination-nav-gap
|
|
124
|
+
|
|
125
|
+
/* Typography */
|
|
126
|
+
--fk-pagination-font-family
|
|
127
|
+
--fk-pagination-font-size
|
|
128
|
+
--fk-pagination-color
|
|
129
|
+
--fk-pagination-label-color
|
|
130
|
+
--fk-pagination-page-info-color
|
|
131
|
+
--fk-pagination-page-info-min-width
|
|
132
|
+
|
|
133
|
+
/* Border */
|
|
134
|
+
--fk-pagination-border-width
|
|
135
|
+
--fk-pagination-border-color
|
|
136
|
+
|
|
137
|
+
/* Page-size select */
|
|
138
|
+
--fk-pagination-select-padding-block
|
|
139
|
+
--fk-pagination-select-padding-left
|
|
140
|
+
--fk-pagination-select-padding-right
|
|
141
|
+
--fk-pagination-select-chevron-offset
|
|
142
|
+
--fk-pagination-select-color
|
|
143
|
+
--fk-pagination-select-bg
|
|
144
|
+
--fk-pagination-select-border-color
|
|
145
|
+
--fk-pagination-select-border-radius
|
|
146
|
+
--fk-pagination-select-focus-border-color
|
|
147
|
+
--fk-pagination-select-focus-ring
|
|
148
|
+
|
|
149
|
+
/* Navigation buttons */
|
|
150
|
+
--fk-pagination-btn-size
|
|
151
|
+
--fk-pagination-btn-color
|
|
152
|
+
--fk-pagination-btn-bg
|
|
153
|
+
--fk-pagination-btn-bg-hover
|
|
154
|
+
--fk-pagination-btn-border-color
|
|
155
|
+
--fk-pagination-btn-border-color-hover
|
|
156
|
+
--fk-pagination-btn-border-radius
|
|
157
|
+
--fk-pagination-btn-disabled-opacity
|
|
158
|
+
--fk-pagination-btn-focus-border-color
|
|
159
|
+
--fk-pagination-btn-focus-ring
|
|
160
|
+
|
|
161
|
+
/* Arrow icon */
|
|
162
|
+
--fk-pagination-arrow-size
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Behavior Notes
|
|
168
|
+
|
|
169
|
+
- `pageCount` is always >= 1. When `itemCount` is 0, `pageCount` is 1 (not 0) so the UI shows "1 / 1" rather than "1 / 0". This matches the backend `PageMetaDto` contract
|
|
170
|
+
- `rangeStart` returns 0 when `itemCount` is 0, otherwise `(page - 1) * take + 1`
|
|
171
|
+
- `rangeEnd` is clamped to `itemCount` so the last page never overshoots the total
|
|
172
|
+
- Navigation methods (`goToNext`, `goToPrevious`, `goToFirst`, `goToLast`) are no-ops when the target page is out of bounds
|
|
173
|
+
- Changing the page size always resets `page` to 1 in the emitted event
|
|
174
|
+
- Each component instance receives a unique select ID (`fk-pagination-take-<n>`) via an incrementing module-level counter
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# fk-progress-bar
|
|
2
|
+
|
|
3
|
+
A token-driven progress bar component for indicating how far along a single task or process is, with determinate and indeterminate modes.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## API
|
|
8
|
+
|
|
9
|
+
### Inputs
|
|
10
|
+
|
|
11
|
+
| Input | Type | Default | Description |
|
|
12
|
+
| ----------------- | ------------------------------------------------- | --------------- | ---------------------------------------------- |
|
|
13
|
+
| `value` | `number` | `0` | Current value, clamped to 0–max |
|
|
14
|
+
| `max` | `number` | `100` | Maximum value |
|
|
15
|
+
| `mode` | `'determinate' \| 'indeterminate'` | `'determinate'` | Bar mode |
|
|
16
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Bar height preset |
|
|
17
|
+
| `variant` | `'default' \| 'success' \| 'warning' \| 'danger'` | `'default'` | Semantic color variant |
|
|
18
|
+
| `color` | `string \| null` | `null` | Custom fill color (overrides variant) |
|
|
19
|
+
| `trackColor` | `string \| null` | `null` | Custom track/background color |
|
|
20
|
+
| `height` | `string \| null` | `null` | Custom height (e.g. `'4px'`), overrides `size` |
|
|
21
|
+
| `showValue` | `boolean` | `false` | Show percentage label beside the bar |
|
|
22
|
+
| `striped` | `boolean` | `false` | Animated stripe pattern on the fill |
|
|
23
|
+
| `ariaLabel` | `string \| null` | `null` | Accessible label |
|
|
24
|
+
| `ariaDescribedBy` | `string \| null` | `null` | ARIA described-by ID |
|
|
25
|
+
| `id` | `string \| null` | `null` | Element ID |
|
|
26
|
+
| `className` | `string` | `''` | Additional CSS classes merged onto the host |
|
|
27
|
+
|
|
28
|
+
### Outputs
|
|
29
|
+
|
|
30
|
+
None.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Features
|
|
35
|
+
|
|
36
|
+
- Determinate and indeterminate modes
|
|
37
|
+
- Three size presets (sm, md, lg) plus custom height override
|
|
38
|
+
- Four semantic color variants plus custom color override
|
|
39
|
+
- Animated stripe pattern
|
|
40
|
+
- Optional percentage label
|
|
41
|
+
- Token-driven styling with two-tier fallbacks
|
|
42
|
+
- Full ARIA progressbar semantics
|
|
43
|
+
- Respects `prefers-reduced-motion`
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Quick Start
|
|
48
|
+
|
|
49
|
+
```html
|
|
50
|
+
<fk-progress-bar [value]="45"></fk-progress-bar>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Import
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
import { ProgressBarComponent } from '@frame-kit/ui-ng';
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
@Component({
|
|
63
|
+
selector: 'app-example',
|
|
64
|
+
imports: [ProgressBarComponent],
|
|
65
|
+
templateUrl: './example.component.html',
|
|
66
|
+
})
|
|
67
|
+
export class ExampleComponent {}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Selector
|
|
73
|
+
|
|
74
|
+
```html
|
|
75
|
+
<fk-progress-bar></fk-progress-bar>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Examples
|
|
81
|
+
|
|
82
|
+
### Default
|
|
83
|
+
|
|
84
|
+
```html
|
|
85
|
+
<fk-progress-bar [value]="60"></fk-progress-bar>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### With percentage label
|
|
89
|
+
|
|
90
|
+
```html
|
|
91
|
+
<fk-progress-bar [value]="72" [showValue]="true"></fk-progress-bar>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Sizes
|
|
95
|
+
|
|
96
|
+
```html
|
|
97
|
+
<fk-progress-bar [value]="60" size="sm"></fk-progress-bar>
|
|
98
|
+
<fk-progress-bar [value]="60" size="md"></fk-progress-bar>
|
|
99
|
+
<fk-progress-bar [value]="60" size="lg"></fk-progress-bar>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Semantic variants
|
|
103
|
+
|
|
104
|
+
```html
|
|
105
|
+
<fk-progress-bar [value]="80" variant="success"></fk-progress-bar>
|
|
106
|
+
<fk-progress-bar [value]="50" variant="warning"></fk-progress-bar>
|
|
107
|
+
<fk-progress-bar [value]="30" variant="danger"></fk-progress-bar>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Striped
|
|
111
|
+
|
|
112
|
+
```html
|
|
113
|
+
<fk-progress-bar [value]="65" [striped]="true"></fk-progress-bar>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Indeterminate
|
|
117
|
+
|
|
118
|
+
```html
|
|
119
|
+
<fk-progress-bar mode="indeterminate"></fk-progress-bar>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Custom colors
|
|
123
|
+
|
|
124
|
+
```html
|
|
125
|
+
<fk-progress-bar [value]="50" color="#8b5cf6" trackColor="#ede9fe"></fk-progress-bar>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Custom max
|
|
129
|
+
|
|
130
|
+
```html
|
|
131
|
+
<fk-progress-bar [value]="3" [max]="10" [showValue]="true"></fk-progress-bar>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Accessibility
|
|
137
|
+
|
|
138
|
+
`fk-progress-bar` applies `role="progressbar"` on the host element with full ARIA value attributes.
|
|
139
|
+
|
|
140
|
+
Accessibility behavior:
|
|
141
|
+
|
|
142
|
+
- `aria-valuemin`, `aria-valuemax`, and `aria-valuenow` reflect current state
|
|
143
|
+
- `aria-valuetext` provides a human-readable value (e.g. "45%" or "Loading...")
|
|
144
|
+
- In indeterminate mode, `aria-valuenow`, `aria-valuemax`, and `aria-valuemin` are removed
|
|
145
|
+
- Supports `ariaLabel` and `ariaDescribedBy` for additional context
|
|
146
|
+
|
|
147
|
+
### Recommended
|
|
148
|
+
|
|
149
|
+
```html
|
|
150
|
+
<fk-progress-bar [value]="progress" ariaLabel="Upload progress"></fk-progress-bar>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Design Tokens
|
|
156
|
+
|
|
157
|
+
`fk-progress-bar` is styled entirely through design tokens.
|
|
158
|
+
|
|
159
|
+
### Component-specific tokens
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
--fk-progress-bar-height-sm
|
|
163
|
+
--fk-progress-bar-height-md
|
|
164
|
+
--fk-progress-bar-height-lg
|
|
165
|
+
--fk-progress-bar-radius
|
|
166
|
+
--fk-progress-bar-bg
|
|
167
|
+
--fk-progress-bar-fill
|
|
168
|
+
--fk-progress-bar-fill-success
|
|
169
|
+
--fk-progress-bar-fill-warning
|
|
170
|
+
--fk-progress-bar-fill-danger
|
|
171
|
+
--fk-progress-bar-label-color
|
|
172
|
+
--fk-progress-bar-label-size
|
|
173
|
+
--fk-progress-bar-label-weight
|
|
174
|
+
--fk-progress-bar-label-gap
|
|
175
|
+
--fk-progress-bar-transition
|
|
176
|
+
--fk-progress-bar-animation-duration
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Shared tokens
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
--fk-color-primary
|
|
183
|
+
--fk-color-success
|
|
184
|
+
--fk-color-warning
|
|
185
|
+
--fk-color-danger
|
|
186
|
+
--fk-color-surface-muted
|
|
187
|
+
--fk-color-text
|
|
188
|
+
--fk-radius-full
|
|
189
|
+
--fk-rhythm-1
|
|
190
|
+
--fk-rhythm-2
|
|
191
|
+
--fk-rhythm-3
|
|
192
|
+
--fk-typography-caption-font-size
|
|
193
|
+
--fk-font-weight-medium
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Customizing Tokens
|
|
197
|
+
|
|
198
|
+
Override tokens in your application's stylesheet:
|
|
199
|
+
|
|
200
|
+
```scss
|
|
201
|
+
:root {
|
|
202
|
+
--fk-progress-bar-fill: #6366f1;
|
|
203
|
+
--fk-progress-bar-radius: 4px;
|
|
204
|
+
--fk-progress-bar-height-md: 0.75rem;
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Or scope overrides to a specific context:
|
|
209
|
+
|
|
210
|
+
```scss
|
|
211
|
+
.compact-layout fk-progress-bar {
|
|
212
|
+
--fk-progress-bar-height-md: 0.25rem;
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Behavior Notes
|
|
219
|
+
|
|
220
|
+
- Values are clamped to the range 0–max; negative values resolve to 0, values above max resolve to max
|
|
221
|
+
- When `max` is 0, percentage resolves to 0 to avoid division by zero
|
|
222
|
+
- `color` input overrides the variant fill color via inline style
|
|
223
|
+
- Stripe and indeterminate animations are disabled when `prefers-reduced-motion: reduce` is active
|