@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,210 @@
|
|
|
1
|
+
# fk-image
|
|
2
|
+
|
|
3
|
+
A flexible image component for Angular with support for fill mode, aspect ratio, fallbacks, and token-driven styling.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## API
|
|
8
|
+
|
|
9
|
+
### Required inputs
|
|
10
|
+
|
|
11
|
+
| Input | Type | Description |
|
|
12
|
+
| ----- | -------- | --------------------------- |
|
|
13
|
+
| `src` | `string` | Image source URL |
|
|
14
|
+
| `alt` | `string` | Accessible alternative text |
|
|
15
|
+
|
|
16
|
+
### Dimension & layout
|
|
17
|
+
|
|
18
|
+
| Input | Type | Default | Description |
|
|
19
|
+
| ------------- | -------------------------- | ------- | ----------------------------------------------------------- |
|
|
20
|
+
| `fill` | `boolean` | `false` | Makes the image fill its container via absolute positioning |
|
|
21
|
+
| `width` | `number \| null` | `null` | Explicit width (required when `fill` is `false`) |
|
|
22
|
+
| `height` | `number \| null` | `null` | Explicit height (required when `fill` is `false`) |
|
|
23
|
+
| `aspectRatio` | `number \| string \| null` | `null` | Optional aspect ratio (e.g. `16 / 9` or `"16 / 9"`) |
|
|
24
|
+
|
|
25
|
+
In dev mode, `fk-image` will warn if `fill` is `false` and neither `width` nor `height` is provided, to help avoid layout shift.
|
|
26
|
+
|
|
27
|
+
### Image behavior
|
|
28
|
+
|
|
29
|
+
| Input | Type | Default | Description |
|
|
30
|
+
| ---------------- | -------------------------- | --------- | ------------------------------------------------ |
|
|
31
|
+
| `srcSet` | `string \| null` | `null` | Native `srcset` attribute for responsive images |
|
|
32
|
+
| `sizes` | `string \| null` | `null` | Native `sizes` attribute for responsive images |
|
|
33
|
+
| `loading` | `ImageLoading` | `"lazy"` | Native `loading` attribute (`"lazy" \| "eager"`) |
|
|
34
|
+
| `decoding` | `ImageDecoding` | `"async"` | Native `decoding` attribute |
|
|
35
|
+
| `fetchPriority` | `ImageFetchPriority` | `"auto"` | Native `fetchpriority` attribute |
|
|
36
|
+
| `crossOrigin` | `ImageCrossOrigin \| null` | `null` | Native `crossorigin` attribute |
|
|
37
|
+
| `referrerPolicy` | `string \| null` | `null` | Native `referrerpolicy` attribute |
|
|
38
|
+
|
|
39
|
+
### Presentation
|
|
40
|
+
|
|
41
|
+
| Input | Type | Default | Description |
|
|
42
|
+
| ---------- | ------------- | ---------- | ----------------------- |
|
|
43
|
+
| `fit` | `ImageFit` | `"cover"` | `object-fit` behavior |
|
|
44
|
+
| `position` | `string` | `"center"` | `object-position` value |
|
|
45
|
+
| `radius` | `ImageRadius` | `"none"` | Corner radius variant |
|
|
46
|
+
|
|
47
|
+
### Fallback
|
|
48
|
+
|
|
49
|
+
| Input | Type | Default | Description |
|
|
50
|
+
| ------------- | ---------------- | ------- | --------------------------------------------------------- |
|
|
51
|
+
| `fallbackSrc` | `string \| null` | `null` | Optional fallback image source if the primary `src` fails |
|
|
52
|
+
|
|
53
|
+
### Base props
|
|
54
|
+
|
|
55
|
+
| Input | Type | Default | Description |
|
|
56
|
+
| ----------- | ---------------- | ------- | ------------------------------------------- |
|
|
57
|
+
| `className` | `string` | `''` | Additional CSS classes merged onto the host |
|
|
58
|
+
| `id` | `string \| null` | `null` | Optional ID for the wrapper element |
|
|
59
|
+
|
|
60
|
+
### Outputs
|
|
61
|
+
|
|
62
|
+
| Output | Type | Description |
|
|
63
|
+
| ------------ | ------ | ----------------------------------------- |
|
|
64
|
+
| `imageLoad` | `void` | Emitted when the image successfully loads |
|
|
65
|
+
| `imageError` | `void` | Emitted when the image fails to load |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Features
|
|
70
|
+
|
|
71
|
+
- Required `alt` text for accessibility
|
|
72
|
+
- Fill mode (`fill=true`) for background-like behavior
|
|
73
|
+
- Optional width/height with dev-time warning to prevent layout shift
|
|
74
|
+
- Fallback image support via `fallbackSrc`
|
|
75
|
+
- Responsive images via `srcset` / `sizes`
|
|
76
|
+
- Aspect ratio and corner radius tokens
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## Quick Start
|
|
81
|
+
|
|
82
|
+
\`\`\`html
|
|
83
|
+
<fk-image
|
|
84
|
+
src="/assets/property-1.jpg"
|
|
85
|
+
alt="Front view of a two-story house"
|
|
86
|
+
[width]="400"
|
|
87
|
+
[height]="300"
|
|
88
|
+
fit="cover"
|
|
89
|
+
/>
|
|
90
|
+
\`\`\`
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Import
|
|
95
|
+
|
|
96
|
+
\`\`\`ts
|
|
97
|
+
import { ImageComponent } from "@frame-kit/ui-ng";
|
|
98
|
+
\`\`\`
|
|
99
|
+
|
|
100
|
+
\`\`\`ts
|
|
101
|
+
@Component({
|
|
102
|
+
selector: "app-example",
|
|
103
|
+
imports: [ImageComponent],
|
|
104
|
+
templateUrl: "./example.component.html",
|
|
105
|
+
})
|
|
106
|
+
export class ExampleComponent {}
|
|
107
|
+
\`\`\`
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Selector
|
|
112
|
+
|
|
113
|
+
\`\`\`html
|
|
114
|
+
<fk-image></fk-image>
|
|
115
|
+
\`\`\`
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Examples
|
|
120
|
+
|
|
121
|
+
### Responsive card image
|
|
122
|
+
|
|
123
|
+
\`\`\`html
|
|
124
|
+
|
|
125
|
+
<div class="property-card">
|
|
126
|
+
<fk-image
|
|
127
|
+
src="/assets/property-1.jpg"
|
|
128
|
+
alt="Modern condo in downtown"
|
|
129
|
+
[width]="480"
|
|
130
|
+
[height]="320"
|
|
131
|
+
fit="cover"
|
|
132
|
+
radius="md"
|
|
133
|
+
/>
|
|
134
|
+
</div>
|
|
135
|
+
\`\`\`
|
|
136
|
+
|
|
137
|
+
### Fill mode hero image
|
|
138
|
+
|
|
139
|
+
\`\`\`html
|
|
140
|
+
|
|
141
|
+
<div class="hero-image-wrapper">
|
|
142
|
+
<fk-image
|
|
143
|
+
src="/assets/city-skyline.jpg"
|
|
144
|
+
alt="City skyline at sunset"
|
|
145
|
+
[fill]="true"
|
|
146
|
+
fit="cover"
|
|
147
|
+
position="center"
|
|
148
|
+
/>
|
|
149
|
+
</div>
|
|
150
|
+
\`\`\`
|
|
151
|
+
|
|
152
|
+
\`\`\`scss
|
|
153
|
+
.hero-image-wrapper {
|
|
154
|
+
position: relative;
|
|
155
|
+
width: 100%;
|
|
156
|
+
height: 320px;
|
|
157
|
+
}
|
|
158
|
+
\`\`\`
|
|
159
|
+
|
|
160
|
+
### With fallback
|
|
161
|
+
|
|
162
|
+
\`\`\`html
|
|
163
|
+
<fk-image
|
|
164
|
+
src="https://example.com/main-image.jpg"
|
|
165
|
+
fallbackSrc="/assets/fallback.jpg"
|
|
166
|
+
alt="Agent headshot"
|
|
167
|
+
[width]="128"
|
|
168
|
+
[height]="128"
|
|
169
|
+
radius="full"
|
|
170
|
+
/>
|
|
171
|
+
\`\`\`
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Accessibility
|
|
176
|
+
|
|
177
|
+
- Always requires `alt` text; use descriptive language for important content
|
|
178
|
+
- Use `alt=""` only for decorative images where the surrounding context is enough
|
|
179
|
+
- Emits `imageError` so you can log or recover when the image fails
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## Design Tokens
|
|
184
|
+
|
|
185
|
+
`fk-image` relies on shared image/shape tokens:
|
|
186
|
+
|
|
187
|
+
\`\`\`scss
|
|
188
|
+
--fk-image-radius-none;
|
|
189
|
+
--fk-image-radius-sm;
|
|
190
|
+
--fk-image-radius-md;
|
|
191
|
+
--fk-image-radius-lg;
|
|
192
|
+
--fk-image-radius-full;
|
|
193
|
+
\`\`\`
|
|
194
|
+
|
|
195
|
+
You can also rely on global layout tokens for spacing around the image.
|
|
196
|
+
|
|
197
|
+
Override tokens in your stylesheet:
|
|
198
|
+
|
|
199
|
+
\`\`\`scss
|
|
200
|
+
:root {
|
|
201
|
+
--fk-image-radius-md: 0.75rem;
|
|
202
|
+
}
|
|
203
|
+
\`\`\`
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Behavior Notes
|
|
208
|
+
|
|
209
|
+
- When `fallbackSrc` is set, a failed load will automatically switch to the fallback once
|
|
210
|
+
- Dev-mode logs a warning when neither `fill` nor explicit `width`/`height` is provided, to help you avoid CLS issues
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# Link Component
|
|
2
|
+
|
|
3
|
+
A flexible, accessible link component for the FrameKit UI library.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- ✅ **Angular Router Integration** — Seamless routing with `routerLink`
|
|
8
|
+
- ✅ **External Link Support** — Automatic detection, icons, and security (`target="_blank"`, `rel="noopener noreferrer"`)
|
|
9
|
+
- ✅ **Design Token System** — CSS custom properties for theming
|
|
10
|
+
- ✅ **Variants** — Default, primary, muted, danger
|
|
11
|
+
- ✅ **Sizes** — Small, medium, large
|
|
12
|
+
- ✅ **Underline Styles** — None, hover (default), always
|
|
13
|
+
- ✅ **Accessibility** — ARIA labels, keyboard navigation, screen reader support
|
|
14
|
+
- ✅ **Analytics Tracking** — Data attributes for tracking (trackingId, trackingCategory, trackingLabel)
|
|
15
|
+
- ✅ **States** — Disabled, loading
|
|
16
|
+
- ✅ **Download Links** — Support for file downloads
|
|
17
|
+
- ✅ **Custom Data Attributes** — Flexible metadata support
|
|
18
|
+
|
|
19
|
+
## Quick Start
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<fk-link href="https://example.com">Visit Example</fk-link>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```html
|
|
26
|
+
<fk-link routerLink="/dashboard" variant="primary">Open dashboard</fk-link>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Import
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { LinkComponent } from '@frame-kit/ui-ng';
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
@Component({
|
|
37
|
+
selector: 'app-example',
|
|
38
|
+
imports: [LinkComponent],
|
|
39
|
+
templateUrl: './example.component.html',
|
|
40
|
+
})
|
|
41
|
+
export class ExampleComponent {}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Usage
|
|
45
|
+
|
|
46
|
+
### Basic Link
|
|
47
|
+
|
|
48
|
+
```html
|
|
49
|
+
<fk-link href="https://example.com">Visit Example</fk-link>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Internal Navigation (Angular Router)
|
|
53
|
+
|
|
54
|
+
```html
|
|
55
|
+
<fk-link routerLink="/dashboard">Go to Dashboard</fk-link>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### External Link with Icon
|
|
59
|
+
|
|
60
|
+
```html
|
|
61
|
+
<fk-link href="https://example.com" [external]="true"> External Site </fk-link>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Variants
|
|
65
|
+
|
|
66
|
+
```html
|
|
67
|
+
<fk-link href="#" variant="default">Default Link</fk-link>
|
|
68
|
+
<fk-link href="#" variant="primary">Primary Link</fk-link>
|
|
69
|
+
<fk-link href="#" variant="muted">Muted Link</fk-link>
|
|
70
|
+
<fk-link href="#" variant="danger">Delete Account</fk-link>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Sizes
|
|
74
|
+
|
|
75
|
+
```html
|
|
76
|
+
<fk-link href="#" size="small">Small Link</fk-link>
|
|
77
|
+
<fk-link href="#" size="medium">Medium Link</fk-link>
|
|
78
|
+
<fk-link href="#" size="large">Large Link</fk-link>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Underline Styles
|
|
82
|
+
|
|
83
|
+
```html
|
|
84
|
+
<fk-link href="#" underline="none">No Underline</fk-link>
|
|
85
|
+
<fk-link href="#" underline="hover">Hover Underline</fk-link>
|
|
86
|
+
<fk-link href="#" underline="always">Always Underlined</fk-link>
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Disabled State
|
|
90
|
+
|
|
91
|
+
```html
|
|
92
|
+
<fk-link href="#" [disabled]="true">Disabled Link</fk-link>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Loading State
|
|
96
|
+
|
|
97
|
+
```html
|
|
98
|
+
<fk-link href="#" [loading]="isLoading">Loading...</fk-link>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Analytics Tracking
|
|
102
|
+
|
|
103
|
+
```html
|
|
104
|
+
<fk-link href="/products" trackingId="nav-products" trackingCategory="navigation" trackingLabel="header-menu"> Products </fk-link>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Custom Data Attributes
|
|
108
|
+
|
|
109
|
+
```html
|
|
110
|
+
<fk-link href="/signup" [dataAttributes]="{ 'data-test-id': 'signup-cta', 'data-priority': 'high' }"> Sign Up </fk-link>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Download Link
|
|
114
|
+
|
|
115
|
+
```html
|
|
116
|
+
<fk-link href="/files/report.pdf" [download]="'monthly-report.pdf'"> Download Report </fk-link>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Accessibility
|
|
120
|
+
|
|
121
|
+
```html
|
|
122
|
+
<fk-link href="/settings" ariaLabel="Go to account settings page" ariaCurrent="page"> Settings </fk-link>
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## API
|
|
126
|
+
|
|
127
|
+
### Inputs
|
|
128
|
+
|
|
129
|
+
| Input | Type | Default | Description |
|
|
130
|
+
| ------------------ | --------------------------------------------------------------------------------- | ----------- | ---------------------------------------------------------- |
|
|
131
|
+
| `href` | `string \| null` | `null` | External href (for standard `<a>` tags) |
|
|
132
|
+
| `routerLink` | `string \| string[] \| null` | `null` | Angular Router link (for internal navigation) |
|
|
133
|
+
| `variant` | `'default' \| 'primary' \| 'muted' \| 'danger'` | `'default'` | Visual variant |
|
|
134
|
+
| `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Link size |
|
|
135
|
+
| `underline` | `'none' \| 'hover' \| 'always'` | `'hover'` | Underline behavior |
|
|
136
|
+
| `target` | `string \| null` | `null` | Target attribute (auto `_blank` for external) |
|
|
137
|
+
| `rel` | `string \| null` | `null` | Rel attribute (auto `noopener noreferrer` for external) |
|
|
138
|
+
| `external` | `boolean` | `false` | Mark as external link (shows icon, sets `target="_blank"`) |
|
|
139
|
+
| `disabled` | `boolean` | `false` | Disable the link |
|
|
140
|
+
| `loading` | `boolean` | `false` | Show loading state |
|
|
141
|
+
| `download` | `string \| boolean \| null` | `null` | Download attribute (for file downloads) |
|
|
142
|
+
| `className` | `string` | `''` | Additional CSS classes |
|
|
143
|
+
| `id` | `string \| null` | `null` | ID attribute |
|
|
144
|
+
| `ariaLabel` | `string \| null` | `null` | ARIA label |
|
|
145
|
+
| `ariaDescribedBy` | `string \| null` | `null` | ARIA described-by |
|
|
146
|
+
| `ariaCurrent` | `'page' \| 'step' \| 'location' \| 'date' \| 'time' \| 'true' \| 'false' \| null` | `null` | ARIA current (for indicating current page/location) |
|
|
147
|
+
| `role` | `string \| null` | `null` | Role attribute |
|
|
148
|
+
| `tabIndex` | `number \| null` | `null` | Tab index (auto `-1` when disabled) |
|
|
149
|
+
| `trackingId` | `string \| null` | `null` | Analytics tracking ID |
|
|
150
|
+
| `trackingCategory` | `string \| null` | `null` | Analytics tracking category |
|
|
151
|
+
| `trackingLabel` | `string \| null` | `null` | Analytics tracking label |
|
|
152
|
+
| `dataAttributes` | `Record<string, string>` | `{}` | Custom data attributes |
|
|
153
|
+
|
|
154
|
+
### Outputs
|
|
155
|
+
|
|
156
|
+
| Output | Type | Description |
|
|
157
|
+
| --------- | -------------------------- | ----------------------------------------------------------------- |
|
|
158
|
+
| `clicked` | `EventEmitter<MouseEvent>` | Emitted when link is clicked (not emitted if disabled or loading) |
|
|
159
|
+
|
|
160
|
+
## Design Tokens
|
|
161
|
+
|
|
162
|
+
The Link component uses CSS custom properties for theming:
|
|
163
|
+
|
|
164
|
+
All tokens are defined in `theme/tokens.base.scss`. See `theme/TOKENS.md` for the full contract.
|
|
165
|
+
|
|
166
|
+
```scss
|
|
167
|
+
// Key link tokens (all --fk-* namespaced):
|
|
168
|
+
--fk-link-color-default
|
|
169
|
+
--fk-link-color-default-hover
|
|
170
|
+
--fk-link-color-primary
|
|
171
|
+
--fk-link-color-primary-hover
|
|
172
|
+
--fk-link-color-primary-active
|
|
173
|
+
--fk-link-color-muted
|
|
174
|
+
--fk-link-color-muted-hover
|
|
175
|
+
--fk-link-color-danger
|
|
176
|
+
--fk-link-color-danger-hover
|
|
177
|
+
--fk-link-color-disabled
|
|
178
|
+
--fk-link-font-size-small
|
|
179
|
+
--fk-link-font-size-medium
|
|
180
|
+
--fk-link-font-size-large
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Accessibility Features
|
|
184
|
+
|
|
185
|
+
- ✅ **Semantic HTML** — Uses `<a>` for links, `<button>` for button-style links
|
|
186
|
+
- ✅ **Keyboard Navigation** — Full keyboard support (Enter, Space for buttons)
|
|
187
|
+
- ✅ **Focus Indicators** — Visible focus ring (respects `:focus-visible`)
|
|
188
|
+
- ✅ **ARIA Attributes** — Support for `aria-label`, `aria-describedby`, `aria-current`
|
|
189
|
+
- ✅ **Disabled State** — Sets `tabindex="-1"` and prevents navigation
|
|
190
|
+
- ✅ **External Link Indication** — Visual icon (hidden from screen readers with `aria-hidden="true"`)
|
|
191
|
+
- ✅ **Loading State** — Prevents navigation and shows visual feedback
|
|
192
|
+
|
|
193
|
+
## Best Practices
|
|
194
|
+
|
|
195
|
+
### When to Use routerLink vs href
|
|
196
|
+
|
|
197
|
+
```html
|
|
198
|
+
<!-- Use routerLink for internal app navigation -->
|
|
199
|
+
<fk-link routerLink="/dashboard">Dashboard</fk-link>
|
|
200
|
+
|
|
201
|
+
<!-- Use href for external links -->
|
|
202
|
+
<fk-link href="https://example.com" [external]="true">External</fk-link>
|
|
203
|
+
|
|
204
|
+
<!-- Use href for anchor links -->
|
|
205
|
+
<fk-link href="#section">Jump to Section</fk-link>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### External Links
|
|
209
|
+
|
|
210
|
+
Always mark external links explicitly or let the component auto-detect:
|
|
211
|
+
|
|
212
|
+
```html
|
|
213
|
+
<!-- Auto-detection (recommended) -->
|
|
214
|
+
<fk-link href="https://example.com">External</fk-link>
|
|
215
|
+
|
|
216
|
+
<!-- Explicit (for internal URLs that should open in new tab) -->
|
|
217
|
+
<fk-link href="/internal" [external]="true">New Tab</fk-link>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Accessibility
|
|
221
|
+
|
|
222
|
+
```html
|
|
223
|
+
<!-- Provide aria-label for icon-only links -->
|
|
224
|
+
<fk-link href="https://github.com" ariaLabel="Visit our GitHub repository">
|
|
225
|
+
<svg>...</svg>
|
|
226
|
+
</fk-link>
|
|
227
|
+
|
|
228
|
+
<!-- Use aria-current for current page -->
|
|
229
|
+
<fk-link routerLink="/home" ariaCurrent="page">Home</fk-link>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Analytics Tracking
|
|
233
|
+
|
|
234
|
+
```html
|
|
235
|
+
<!-- Structured tracking data -->
|
|
236
|
+
<fk-link href="/signup" trackingId="cta-signup-header" trackingCategory="cta" trackingLabel="header"> Sign Up </fk-link>
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Examples
|
|
240
|
+
|
|
241
|
+
### Navigation Menu
|
|
242
|
+
|
|
243
|
+
```html
|
|
244
|
+
<nav>
|
|
245
|
+
<fk-link routerLink="/" ariaCurrent="page" underline="none">Home</fk-link>
|
|
246
|
+
<fk-link routerLink="/products" underline="none">Products</fk-link>
|
|
247
|
+
<fk-link routerLink="/pricing" underline="none">Pricing</fk-link>
|
|
248
|
+
<fk-link href="https://blog.example.com" [external]="true" underline="none"> Blog </fk-link>
|
|
249
|
+
</nav>
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Footer Links
|
|
253
|
+
|
|
254
|
+
```html
|
|
255
|
+
<footer>
|
|
256
|
+
<div>
|
|
257
|
+
<h4>Company</h4>
|
|
258
|
+
<fk-link routerLink="/about" variant="muted" size="small">About</fk-link>
|
|
259
|
+
<fk-link routerLink="/careers" variant="muted" size="small">Careers</fk-link>
|
|
260
|
+
<fk-link href="https://blog.example.com" [external]="true" variant="muted" size="small"> Blog </fk-link>
|
|
261
|
+
</div>
|
|
262
|
+
</footer>
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Call-to-Action
|
|
266
|
+
|
|
267
|
+
```html
|
|
268
|
+
<fk-link href="/signup" variant="primary" size="large" underline="none"> Get Started Free → </fk-link>
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Testing
|
|
272
|
+
|
|
273
|
+
The component includes comprehensive unit tests covering:
|
|
274
|
+
|
|
275
|
+
- External link detection
|
|
276
|
+
- Target and rel attributes
|
|
277
|
+
- Tab index behavior
|
|
278
|
+
- Click handling (disabled, loading states)
|
|
279
|
+
- Analytics data attributes
|
|
280
|
+
- CSS class merging
|
|
281
|
+
- All variants, sizes, and underline styles
|
|
282
|
+
|
|
283
|
+
Run tests:
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
npm run test:ui
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## Storybook
|
|
290
|
+
|
|
291
|
+
View all component variations in Storybook:
|
|
292
|
+
|
|
293
|
+
```bash
|
|
294
|
+
npm run storybook
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
Navigate to **Atoms → Link** to see interactive examples.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# fk-separator
|
|
2
|
+
|
|
3
|
+
A horizontal rule component for visually dividing content sections, styled entirely through design tokens.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## API
|
|
8
|
+
|
|
9
|
+
### Inputs
|
|
10
|
+
|
|
11
|
+
| Input | Type | Default | Description |
|
|
12
|
+
| -------------- | ---------------- | ------- | ---------------------------------------------------------- |
|
|
13
|
+
| `marginTop` | `string \| null` | `null` | Custom top margin (sets `--fk-separator-margin-top`) |
|
|
14
|
+
| `marginBottom` | `string \| null` | `null` | Custom bottom margin (sets `--fk-separator-margin-bottom`) |
|
|
15
|
+
| `color` | `string \| null` | `null` | Custom line color (sets `--fk-separator-color`) |
|
|
16
|
+
| `className` | `string` | `''` | Additional CSS classes merged onto the host element |
|
|
17
|
+
|
|
18
|
+
### Outputs
|
|
19
|
+
|
|
20
|
+
None.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Features
|
|
25
|
+
|
|
26
|
+
- Token-driven styling for color and spacing
|
|
27
|
+
- Per-instance overrides via inputs
|
|
28
|
+
- Renders a semantic `<hr>` element
|
|
29
|
+
- `role="separator"` on the host for accessibility
|
|
30
|
+
- Self-sufficient rendering without any theme file loaded
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Quick Start
|
|
35
|
+
|
|
36
|
+
```html
|
|
37
|
+
<fk-separator />
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Import
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { SeparatorComponent } from '@frame-kit/ui-ng';
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
@Component({
|
|
50
|
+
selector: 'app-example',
|
|
51
|
+
imports: [SeparatorComponent],
|
|
52
|
+
templateUrl: './example.component.html',
|
|
53
|
+
})
|
|
54
|
+
export class ExampleComponent {}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Selector
|
|
60
|
+
|
|
61
|
+
```html
|
|
62
|
+
<fk-separator></fk-separator>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Examples
|
|
68
|
+
|
|
69
|
+
### Default separator
|
|
70
|
+
|
|
71
|
+
```html
|
|
72
|
+
<fk-separator />
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Custom spacing
|
|
76
|
+
|
|
77
|
+
```html
|
|
78
|
+
<fk-separator marginTop="2rem" marginBottom="1rem" />
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Custom color
|
|
82
|
+
|
|
83
|
+
```html
|
|
84
|
+
<fk-separator color="#e02424" />
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Accessibility
|
|
90
|
+
|
|
91
|
+
`fk-separator` renders a native `<hr>` element with `role="separator"` on the host.
|
|
92
|
+
|
|
93
|
+
Accessibility behavior:
|
|
94
|
+
|
|
95
|
+
- Semantic separator role for screen readers
|
|
96
|
+
- Visual divider between content sections
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Design Tokens
|
|
101
|
+
|
|
102
|
+
`fk-separator` is styled entirely through design tokens.
|
|
103
|
+
|
|
104
|
+
### Component-specific tokens
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
--fk-separator-color
|
|
108
|
+
--fk-separator-margin-top
|
|
109
|
+
--fk-separator-margin-bottom
|
|
110
|
+
--fk-separator-border-width
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Shared tokens
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
--fk-color-border
|
|
117
|
+
--fk-rhythm-6
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Customizing Tokens
|
|
121
|
+
|
|
122
|
+
Override tokens in your application's stylesheet:
|
|
123
|
+
|
|
124
|
+
```scss
|
|
125
|
+
:root {
|
|
126
|
+
--fk-separator-color: #e5e7eb;
|
|
127
|
+
--fk-separator-margin-top: 2rem;
|
|
128
|
+
--fk-separator-margin-bottom: 1rem;
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Or scope overrides to a specific context:
|
|
133
|
+
|
|
134
|
+
```scss
|
|
135
|
+
.compact-layout fk-separator {
|
|
136
|
+
--fk-separator-margin-top: 0.5rem;
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Behavior Notes
|
|
143
|
+
|
|
144
|
+
- Default margin is applied via `--fk-separator-margin-top` (top only); bottom margin defaults to `0`
|
|
145
|
+
- Per-instance `marginTop`, `marginBottom`, and `color` inputs override the corresponding tokens inline
|