@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,184 @@
|
|
|
1
|
+
# fk-button
|
|
2
|
+
|
|
3
|
+
A token-driven button component for Angular that supports visual variants, sizes, loading state, icons, and accessible interaction patterns.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## API
|
|
8
|
+
|
|
9
|
+
### Inputs
|
|
10
|
+
|
|
11
|
+
| Input | Type | Default | Description |
|
|
12
|
+
| ----------------- | ---------------- | ----------- | ------------------------------------------------------------------------ |
|
|
13
|
+
| `variant` | `ButtonVariant` | `"primary"` | Visual style of the button (for example `primary`, `secondary`, `ghost`) |
|
|
14
|
+
| `size` | `ButtonSize` | `"md"` | Size of the button (`sm`, `md`, `lg`) |
|
|
15
|
+
| `loading` | `boolean` | `false` | Shows a loader and disables interaction |
|
|
16
|
+
| `disabled` | `boolean` | `false` | Disables the button |
|
|
17
|
+
| `fullWidth` | `boolean` | `false` | Stretches the button host to fill its parent's inline size |
|
|
18
|
+
| `type` | `ButtonType` | `"button"` | Native button type (`"button"`, `"submit"`, `"reset"`) |
|
|
19
|
+
| `id` | `string \| null` | `null` | Optional ID for the button element |
|
|
20
|
+
| `className` | `string` | `''` | Additional CSS classes merged onto the host element |
|
|
21
|
+
| `ariaLabel` | `string \| null` | `null` | ARIA label for icon-only or ambiguous buttons |
|
|
22
|
+
| `ariaDescribedBy` | `string \| null` | `null` | IDs of additional descriptive elements |
|
|
23
|
+
|
|
24
|
+
The button label and icons are provided via content projection:
|
|
25
|
+
|
|
26
|
+
```html
|
|
27
|
+
<fk-button>Save</fk-button>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Icon directives
|
|
31
|
+
|
|
32
|
+
Icons are projected into the button using structural directives rather than inputs. Import `FkButtonIconStartDirective` and/or `FkButtonIconEndDirective` alongside `IconComponent`:
|
|
33
|
+
|
|
34
|
+
| Directive | Selector | Description |
|
|
35
|
+
| ------------------- | --------------------- | ---------------------------------------- |
|
|
36
|
+
| `fkButtonIconStart` | `[fkButtonIconStart]` | Projects an icon before the button label |
|
|
37
|
+
| `fkButtonIconEnd` | `[fkButtonIconEnd]` | Projects an icon after the button label |
|
|
38
|
+
|
|
39
|
+
Both directives apply `aria-hidden="true"` automatically.
|
|
40
|
+
|
|
41
|
+
### Outputs
|
|
42
|
+
|
|
43
|
+
`fk-button` relies on the native `click` event and does not expose custom Angular outputs. Listen via `(click)`:
|
|
44
|
+
|
|
45
|
+
```html
|
|
46
|
+
<fk-button (click)="onSave()">Save</fk-button>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Features
|
|
52
|
+
|
|
53
|
+
- Multiple visual variants and sizes
|
|
54
|
+
- Loading state with spinner integration
|
|
55
|
+
- Icon support via `fkButtonIconStart` and `fkButtonIconEnd` content projection directives
|
|
56
|
+
- Disabled and loading states prevent interaction
|
|
57
|
+
- Token-driven styling for color, radius, spacing, and typography
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Quick Start
|
|
62
|
+
|
|
63
|
+
```html
|
|
64
|
+
<fk-button variant="primary" (click)="onSave()"> Save changes </fk-button>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Import
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
import { ButtonComponent, FkButtonIconStartDirective, FkButtonIconEndDirective, IconComponent } from '@frame-kit/ui-ng';
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
@Component({
|
|
77
|
+
selector: 'app-example',
|
|
78
|
+
imports: [ButtonComponent, FkButtonIconStartDirective, FkButtonIconEndDirective, IconComponent],
|
|
79
|
+
templateUrl: './example.component.html',
|
|
80
|
+
})
|
|
81
|
+
export class ExampleComponent {}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## Selector
|
|
87
|
+
|
|
88
|
+
```html
|
|
89
|
+
<fk-button></fk-button>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Examples
|
|
95
|
+
|
|
96
|
+
### Variants
|
|
97
|
+
|
|
98
|
+
```html
|
|
99
|
+
<fk-button variant="primary">Primary</fk-button>
|
|
100
|
+
<fk-button variant="secondary">Secondary</fk-button>
|
|
101
|
+
<fk-button variant="ghost">Ghost</fk-button>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Sizes
|
|
105
|
+
|
|
106
|
+
```html
|
|
107
|
+
<fk-button size="sm">Small</fk-button>
|
|
108
|
+
<fk-button size="md">Medium</fk-button>
|
|
109
|
+
<fk-button size="lg">Large</fk-button>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### With icon (start)
|
|
113
|
+
|
|
114
|
+
```html
|
|
115
|
+
<fk-button variant="primary">
|
|
116
|
+
<fk-icon fkButtonIconStart name="plus" size="sm"></fk-icon>
|
|
117
|
+
New record
|
|
118
|
+
</fk-button>
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### With icon (end)
|
|
122
|
+
|
|
123
|
+
```html
|
|
124
|
+
<fk-button variant="secondary">
|
|
125
|
+
Next step
|
|
126
|
+
<fk-icon fkButtonIconEnd name="arrow-right" size="sm"></fk-icon>
|
|
127
|
+
</fk-button>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Loading state
|
|
131
|
+
|
|
132
|
+
```html
|
|
133
|
+
<fk-button variant="primary" [loading]="isSaving" (click)="save()"> Save changes </fk-button>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Accessibility
|
|
139
|
+
|
|
140
|
+
- Renders a native `<button>` element with proper keyboard interaction.
|
|
141
|
+
- Uses `aria-disabled="true"` when `loading` or `disabled` to signal non-interactive state.
|
|
142
|
+
- For icon-only buttons, always provide an `ariaLabel`:
|
|
143
|
+
|
|
144
|
+
```html
|
|
145
|
+
<fk-button ariaLabel="Delete record">
|
|
146
|
+
<fk-icon fkButtonIconStart name="trash" size="sm"></fk-icon>
|
|
147
|
+
</fk-button>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Design Tokens
|
|
153
|
+
|
|
154
|
+
`fk-button` is styled entirely through design tokens, typically including:
|
|
155
|
+
|
|
156
|
+
```scss
|
|
157
|
+
--fk-button-radius;
|
|
158
|
+
--fk-button-font-weight;
|
|
159
|
+
--fk-button-padding-inline;
|
|
160
|
+
--fk-button-gap;
|
|
161
|
+
|
|
162
|
+
--fk-button-primary-bg;
|
|
163
|
+
--fk-button-primary-color;
|
|
164
|
+
--fk-button-primary-border-color;
|
|
165
|
+
|
|
166
|
+
--fk-button-secondary-bg;
|
|
167
|
+
--fk-button-secondary-color;
|
|
168
|
+
--fk-button-secondary-border-color;
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Override tokens in your stylesheet:
|
|
172
|
+
|
|
173
|
+
```scss
|
|
174
|
+
:root {
|
|
175
|
+
--fk-button-radius: 9999px;
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Behavior Notes
|
|
182
|
+
|
|
183
|
+
- `loading` implies a disabled state for interaction, but you still control `disabled` independently.
|
|
184
|
+
- `type` defaults to `"button"` to avoid accidental form submissions inside `<form>` elements.
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# fk-callout
|
|
2
|
+
|
|
3
|
+
A token-driven callout component for highlighting supplementary information such as tips, notices, or contextual messages.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## API
|
|
8
|
+
|
|
9
|
+
### Inputs
|
|
10
|
+
|
|
11
|
+
| Input | Type | Default | Description |
|
|
12
|
+
| ----------------- | --------------------- | --------- | -------------------------------------------- |
|
|
13
|
+
| `title` | `string \| null` | `null` | Optional headline rendered via `fk-headline` |
|
|
14
|
+
| `align` | `'start' \| 'center'` | `'start'` | Text alignment of the description |
|
|
15
|
+
| `backgroundColor` | `string \| null` | `null` | Custom background color (overrides token) |
|
|
16
|
+
| `borderColor` | `string \| null` | `null` | Custom border color (overrides token) |
|
|
17
|
+
| `className` | `string` | `''` | Additional CSS classes for the host element |
|
|
18
|
+
|
|
19
|
+
### Content projection
|
|
20
|
+
|
|
21
|
+
The callout body is the projected content (default `<ng-content />`). Pass plain text or template fragments — the component never renders untrusted HTML through `[innerHTML]`.
|
|
22
|
+
|
|
23
|
+
### Outputs
|
|
24
|
+
|
|
25
|
+
`fk-callout` is presentational and does not emit outputs.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Features
|
|
30
|
+
|
|
31
|
+
- Optional title with a projected description body
|
|
32
|
+
- Text alignment control
|
|
33
|
+
- Custom background and border colors via inputs
|
|
34
|
+
- Token-driven styling
|
|
35
|
+
- Description accepts arbitrary template content via projection (no `innerHTML`)
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Quick Start
|
|
40
|
+
|
|
41
|
+
```html
|
|
42
|
+
<fk-callout title="Heads up">Your session will expire in 5 minutes.</fk-callout>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Import
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import { CalloutComponent } from '@frame-kit/ui-ng';
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
@Component({
|
|
55
|
+
selector: 'app-example',
|
|
56
|
+
imports: [CalloutComponent],
|
|
57
|
+
templateUrl: './example.component.html',
|
|
58
|
+
})
|
|
59
|
+
export class ExampleComponent {}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Selector
|
|
65
|
+
|
|
66
|
+
```html
|
|
67
|
+
<fk-callout></fk-callout>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Examples
|
|
73
|
+
|
|
74
|
+
### Title and description
|
|
75
|
+
|
|
76
|
+
```html
|
|
77
|
+
<fk-callout title="Important">Please review the details before submitting.</fk-callout>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Description only
|
|
81
|
+
|
|
82
|
+
```html
|
|
83
|
+
<fk-callout>A verification email has been sent to your inbox.</fk-callout>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Title only
|
|
87
|
+
|
|
88
|
+
```html
|
|
89
|
+
<fk-callout title="No new notifications" />
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Centered text
|
|
93
|
+
|
|
94
|
+
```html
|
|
95
|
+
<fk-callout title="Welcome" align="center">Your account has been created.</fk-callout>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Rich content via projection
|
|
99
|
+
|
|
100
|
+
```html
|
|
101
|
+
<fk-callout title="Idempotency"> Send an <code>Idempotency-Key</code> header to make retries safe. </fk-callout>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Custom colors
|
|
105
|
+
|
|
106
|
+
```html
|
|
107
|
+
<fk-callout title="Info" backgroundColor="#f0f9ff" borderColor="#0ea5e9"> This uses custom colors. </fk-callout>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Accessibility
|
|
113
|
+
|
|
114
|
+
- The title renders as an `fk-headline` (`h6`), providing a semantic heading for assistive technologies.
|
|
115
|
+
- Body content is projected as live template nodes, so links and interactive children participate in the normal accessibility tree.
|
|
116
|
+
- The component is presentational; wrap it in a landmark or live region if it conveys time-sensitive information.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Design Tokens
|
|
121
|
+
|
|
122
|
+
`fk-callout` is styled entirely through design tokens.
|
|
123
|
+
|
|
124
|
+
```scss
|
|
125
|
+
--fk-callout-bg
|
|
126
|
+
--fk-callout-border-color
|
|
127
|
+
--fk-callout-padding
|
|
128
|
+
--fk-callout-border-radius
|
|
129
|
+
--fk-callout-font-size
|
|
130
|
+
--fk-callout-title-font-size
|
|
131
|
+
--fk-callout-title-gap
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Override tokens in your theme stylesheet:
|
|
135
|
+
|
|
136
|
+
```scss
|
|
137
|
+
:root {
|
|
138
|
+
--fk-callout-bg: #fffbeb;
|
|
139
|
+
--fk-callout-border-color: #f59e0b;
|
|
140
|
+
--fk-callout-padding: 1.5rem;
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Or scope overrides to a specific context:
|
|
145
|
+
|
|
146
|
+
```scss
|
|
147
|
+
.dark-theme fk-callout {
|
|
148
|
+
--fk-callout-bg: #1e1e2e;
|
|
149
|
+
--fk-callout-border-color: #334155;
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Behavior Notes
|
|
156
|
+
|
|
157
|
+
- `backgroundColor` and `borderColor` inputs override the corresponding token values via `@HostBinding` inline styles.
|
|
158
|
+
- When `title` is `null` and no content is projected, the component renders an empty container — avoid this in practice.
|
|
159
|
+
- The body is projected (`<ng-content />`) — there is no `[innerHTML]` sink, so no caller can inject HTML strings through the API.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# fk-card
|
|
2
|
+
|
|
3
|
+
A token-driven container component for grouping related content with consistent padding, background, border, and alignment.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## API
|
|
8
|
+
|
|
9
|
+
### Inputs
|
|
10
|
+
|
|
11
|
+
| Input | Type | Default | Description |
|
|
12
|
+
| ----------- | ------------------------------------------- | ----------- | -------------------------------------------------------------- |
|
|
13
|
+
| `size` | `'sm' \| 'md' \| 'lg' \| string` | `'md'` | Padding preset or custom CSS value (e.g. `'3rem'`) |
|
|
14
|
+
| `align` | `'start' \| 'center' \| 'end' \| 'stretch'` | `'stretch'` | Cross-axis alignment of projected content |
|
|
15
|
+
| `className` | `string` | `''` | Additional CSS classes for the host element |
|
|
16
|
+
| `id` | `string \| null` | `null` | Sets the `id` attribute on the host element |
|
|
17
|
+
| `ariaLabel` | `string \| null` | `null` | Sets `aria-label` on the host element for assistive technology |
|
|
18
|
+
|
|
19
|
+
### Outputs
|
|
20
|
+
|
|
21
|
+
`fk-card` is presentational and does not emit outputs.
|
|
22
|
+
|
|
23
|
+
### Content
|
|
24
|
+
|
|
25
|
+
Card content is provided through content projection.
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<fk-card>
|
|
29
|
+
<h2>Title</h2>
|
|
30
|
+
<p>Card body content goes here.</p>
|
|
31
|
+
</fk-card>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Features
|
|
37
|
+
|
|
38
|
+
- Preset and custom padding sizes
|
|
39
|
+
- Cross-axis content alignment
|
|
40
|
+
- Token-driven styling
|
|
41
|
+
- Self-sufficient rendering without any theme file loaded
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Quick Start
|
|
46
|
+
|
|
47
|
+
```html
|
|
48
|
+
<fk-card size="md">
|
|
49
|
+
<p>Hello from inside a card.</p>
|
|
50
|
+
</fk-card>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Import
|
|
56
|
+
|
|
57
|
+
```ts
|
|
58
|
+
import { CardComponent } from '@frame-kit/ui-ng';
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
@Component({
|
|
63
|
+
selector: 'app-example',
|
|
64
|
+
imports: [CardComponent],
|
|
65
|
+
templateUrl: './example.component.html',
|
|
66
|
+
})
|
|
67
|
+
export class ExampleComponent {}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Selector
|
|
73
|
+
|
|
74
|
+
```html
|
|
75
|
+
<fk-card></fk-card>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Examples
|
|
81
|
+
|
|
82
|
+
### Small
|
|
83
|
+
|
|
84
|
+
```html
|
|
85
|
+
<fk-card size="sm">
|
|
86
|
+
<p>Compact content area.</p>
|
|
87
|
+
</fk-card>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Medium (default)
|
|
91
|
+
|
|
92
|
+
```html
|
|
93
|
+
<fk-card>
|
|
94
|
+
<p>Standard content area.</p>
|
|
95
|
+
</fk-card>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Large
|
|
99
|
+
|
|
100
|
+
```html
|
|
101
|
+
<fk-card size="lg">
|
|
102
|
+
<p>Spacious content area.</p>
|
|
103
|
+
</fk-card>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Custom padding
|
|
107
|
+
|
|
108
|
+
```html
|
|
109
|
+
<fk-card size="3rem">
|
|
110
|
+
<p>Custom padding applied directly.</p>
|
|
111
|
+
</fk-card>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Centered content
|
|
115
|
+
|
|
116
|
+
```html
|
|
117
|
+
<fk-card align="center">
|
|
118
|
+
<fk-icon-badge name="check" />
|
|
119
|
+
<fk-headline [level]="3">Success</fk-headline>
|
|
120
|
+
<p>Your changes have been saved.</p>
|
|
121
|
+
</fk-card>
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Accessibility
|
|
127
|
+
|
|
128
|
+
- `fk-card` is a presentational container and does not imply a landmark role.
|
|
129
|
+
- Use `ariaLabel` when the card represents a distinct, labeled region.
|
|
130
|
+
- For interactive cards, wrap the content in an appropriate interactive element rather than making the card itself clickable.
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Design Tokens
|
|
135
|
+
|
|
136
|
+
`fk-card` is styled entirely through design tokens.
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
--fk-card-bg
|
|
140
|
+
--fk-card-border-color
|
|
141
|
+
--fk-card-border-radius
|
|
142
|
+
--fk-card-padding-sm
|
|
143
|
+
--fk-card-padding-md
|
|
144
|
+
--fk-card-padding-lg
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Customizing Tokens
|
|
148
|
+
|
|
149
|
+
Override tokens in your application's global stylesheet or a scoped selector:
|
|
150
|
+
|
|
151
|
+
```scss
|
|
152
|
+
:root {
|
|
153
|
+
--fk-card-bg: #fafafa;
|
|
154
|
+
--fk-card-border-color: #e5e7eb;
|
|
155
|
+
--fk-card-border-radius: 1rem;
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Or scope overrides to a specific context:
|
|
160
|
+
|
|
161
|
+
```scss
|
|
162
|
+
.dark-theme fk-card {
|
|
163
|
+
--fk-card-bg: #1e1e2e;
|
|
164
|
+
--fk-card-border-color: #334155;
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Behavior Notes
|
|
171
|
+
|
|
172
|
+
- When `size` is a preset (`sm`, `md`, `lg`), padding is controlled via the corresponding token. When `size` is a custom string, it is applied directly as inline `padding`.
|
|
173
|
+
- The card renders as a flex column container, so projected content flows vertically by default.
|
|
174
|
+
- `align` controls `align-items` on the flex container, affecting horizontal alignment of children.
|