@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.
Files changed (220) hide show
  1. package/COMPONENTS.md +683 -0
  2. package/DEVELOPMENT_GUIDE.md +1102 -0
  3. package/LICENSE +21 -0
  4. package/README.md +69 -0
  5. package/THEMING.md +130 -0
  6. package/core/headline/README.md +121 -0
  7. package/core/icon/README.md +173 -0
  8. package/core/image/README.md +210 -0
  9. package/core/link/README.md +297 -0
  10. package/core/separator/README.md +145 -0
  11. package/core/text/README.md +240 -0
  12. package/directives/infinite-scroll/README.md +102 -0
  13. package/directives/spotlight/README.md +154 -0
  14. package/directives/tooltip/README.md +147 -0
  15. package/docs/endpoint-link/README.md +142 -0
  16. package/docs/method-badge/README.md +154 -0
  17. package/fesm2022/frame-kit-ui-ng-core-headline.mjs +122 -0
  18. package/fesm2022/frame-kit-ui-ng-core-headline.mjs.map +1 -0
  19. package/fesm2022/frame-kit-ui-ng-core-icon.mjs +189 -0
  20. package/fesm2022/frame-kit-ui-ng-core-icon.mjs.map +1 -0
  21. package/fesm2022/frame-kit-ui-ng-core-image.mjs +123 -0
  22. package/fesm2022/frame-kit-ui-ng-core-image.mjs.map +1 -0
  23. package/fesm2022/frame-kit-ui-ng-core-link.mjs +369 -0
  24. package/fesm2022/frame-kit-ui-ng-core-link.mjs.map +1 -0
  25. package/fesm2022/frame-kit-ui-ng-core-separator.mjs +59 -0
  26. package/fesm2022/frame-kit-ui-ng-core-separator.mjs.map +1 -0
  27. package/fesm2022/frame-kit-ui-ng-core-text.mjs +204 -0
  28. package/fesm2022/frame-kit-ui-ng-core-text.mjs.map +1 -0
  29. package/fesm2022/frame-kit-ui-ng-directives-infinite-scroll.mjs +74 -0
  30. package/fesm2022/frame-kit-ui-ng-directives-infinite-scroll.mjs.map +1 -0
  31. package/fesm2022/frame-kit-ui-ng-directives-spotlight.mjs +76 -0
  32. package/fesm2022/frame-kit-ui-ng-directives-spotlight.mjs.map +1 -0
  33. package/fesm2022/frame-kit-ui-ng-directives-tooltip.mjs +425 -0
  34. package/fesm2022/frame-kit-ui-ng-directives-tooltip.mjs.map +1 -0
  35. package/fesm2022/frame-kit-ui-ng-docs-endpoint-link.mjs +63 -0
  36. package/fesm2022/frame-kit-ui-ng-docs-endpoint-link.mjs.map +1 -0
  37. package/fesm2022/frame-kit-ui-ng-docs-method-badge.mjs +43 -0
  38. package/fesm2022/frame-kit-ui-ng-docs-method-badge.mjs.map +1 -0
  39. package/fesm2022/frame-kit-ui-ng-forms.mjs +3632 -0
  40. package/fesm2022/frame-kit-ui-ng-forms.mjs.map +1 -0
  41. package/fesm2022/frame-kit-ui-ng-layouts-app-shell.mjs +239 -0
  42. package/fesm2022/frame-kit-ui-ng-layouts-app-shell.mjs.map +1 -0
  43. package/fesm2022/frame-kit-ui-ng-layouts-content-split.mjs +132 -0
  44. package/fesm2022/frame-kit-ui-ng-layouts-content-split.mjs.map +1 -0
  45. package/fesm2022/frame-kit-ui-ng-services-overlay-orchestrator.mjs +133 -0
  46. package/fesm2022/frame-kit-ui-ng-services-overlay-orchestrator.mjs.map +1 -0
  47. package/fesm2022/frame-kit-ui-ng-services-spotlight.mjs +60 -0
  48. package/fesm2022/frame-kit-ui-ng-services-spotlight.mjs.map +1 -0
  49. package/fesm2022/frame-kit-ui-ng-services-toast.mjs +166 -0
  50. package/fesm2022/frame-kit-ui-ng-services-toast.mjs.map +1 -0
  51. package/fesm2022/frame-kit-ui-ng-ui-accordion.mjs +214 -0
  52. package/fesm2022/frame-kit-ui-ng-ui-accordion.mjs.map +1 -0
  53. package/fesm2022/frame-kit-ui-ng-ui-alert.mjs +82 -0
  54. package/fesm2022/frame-kit-ui-ng-ui-alert.mjs.map +1 -0
  55. package/fesm2022/frame-kit-ui-ng-ui-avatar-stack.mjs +76 -0
  56. package/fesm2022/frame-kit-ui-ng-ui-avatar-stack.mjs.map +1 -0
  57. package/fesm2022/frame-kit-ui-ng-ui-avatar.mjs +81 -0
  58. package/fesm2022/frame-kit-ui-ng-ui-avatar.mjs.map +1 -0
  59. package/fesm2022/frame-kit-ui-ng-ui-badge.mjs +81 -0
  60. package/fesm2022/frame-kit-ui-ng-ui-badge.mjs.map +1 -0
  61. package/fesm2022/frame-kit-ui-ng-ui-breadcrumb.mjs +68 -0
  62. package/fesm2022/frame-kit-ui-ng-ui-breadcrumb.mjs.map +1 -0
  63. package/fesm2022/frame-kit-ui-ng-ui-button.mjs +108 -0
  64. package/fesm2022/frame-kit-ui-ng-ui-button.mjs.map +1 -0
  65. package/fesm2022/frame-kit-ui-ng-ui-callout.mjs +58 -0
  66. package/fesm2022/frame-kit-ui-ng-ui-callout.mjs.map +1 -0
  67. package/fesm2022/frame-kit-ui-ng-ui-card.mjs +70 -0
  68. package/fesm2022/frame-kit-ui-ng-ui-card.mjs.map +1 -0
  69. package/fesm2022/frame-kit-ui-ng-ui-copyable-field.mjs +113 -0
  70. package/fesm2022/frame-kit-ui-ng-ui-copyable-field.mjs.map +1 -0
  71. package/fesm2022/frame-kit-ui-ng-ui-data-table.mjs +1288 -0
  72. package/fesm2022/frame-kit-ui-ng-ui-data-table.mjs.map +1 -0
  73. package/fesm2022/frame-kit-ui-ng-ui-dialog.mjs +456 -0
  74. package/fesm2022/frame-kit-ui-ng-ui-dialog.mjs.map +1 -0
  75. package/fesm2022/frame-kit-ui-ng-ui-drawer.mjs +398 -0
  76. package/fesm2022/frame-kit-ui-ng-ui-drawer.mjs.map +1 -0
  77. package/fesm2022/frame-kit-ui-ng-ui-dropdown-menu.mjs +398 -0
  78. package/fesm2022/frame-kit-ui-ng-ui-dropdown-menu.mjs.map +1 -0
  79. package/fesm2022/frame-kit-ui-ng-ui-editable-field.mjs +125 -0
  80. package/fesm2022/frame-kit-ui-ng-ui-editable-field.mjs.map +1 -0
  81. package/fesm2022/frame-kit-ui-ng-ui-icon-badge.mjs +113 -0
  82. package/fesm2022/frame-kit-ui-ng-ui-icon-badge.mjs.map +1 -0
  83. package/fesm2022/frame-kit-ui-ng-ui-icon-list.mjs +111 -0
  84. package/fesm2022/frame-kit-ui-ng-ui-icon-list.mjs.map +1 -0
  85. package/fesm2022/frame-kit-ui-ng-ui-inline-edit.mjs +103 -0
  86. package/fesm2022/frame-kit-ui-ng-ui-inline-edit.mjs.map +1 -0
  87. package/fesm2022/frame-kit-ui-ng-ui-list-editor.mjs +135 -0
  88. package/fesm2022/frame-kit-ui-ng-ui-list-editor.mjs.map +1 -0
  89. package/fesm2022/frame-kit-ui-ng-ui-loader.mjs +81 -0
  90. package/fesm2022/frame-kit-ui-ng-ui-loader.mjs.map +1 -0
  91. package/fesm2022/frame-kit-ui-ng-ui-menu-item.mjs +79 -0
  92. package/fesm2022/frame-kit-ui-ng-ui-menu-item.mjs.map +1 -0
  93. package/fesm2022/frame-kit-ui-ng-ui-nav-brand.mjs +40 -0
  94. package/fesm2022/frame-kit-ui-ng-ui-nav-brand.mjs.map +1 -0
  95. package/fesm2022/frame-kit-ui-ng-ui-nav-group.mjs +110 -0
  96. package/fesm2022/frame-kit-ui-ng-ui-nav-group.mjs.map +1 -0
  97. package/fesm2022/frame-kit-ui-ng-ui-nav-separator.mjs +91 -0
  98. package/fesm2022/frame-kit-ui-ng-ui-nav-separator.mjs.map +1 -0
  99. package/fesm2022/frame-kit-ui-ng-ui-node-tree-breadcrumb.mjs +86 -0
  100. package/fesm2022/frame-kit-ui-ng-ui-node-tree-breadcrumb.mjs.map +1 -0
  101. package/fesm2022/frame-kit-ui-ng-ui-node-tree.mjs +443 -0
  102. package/fesm2022/frame-kit-ui-ng-ui-node-tree.mjs.map +1 -0
  103. package/fesm2022/frame-kit-ui-ng-ui-note.mjs +56 -0
  104. package/fesm2022/frame-kit-ui-ng-ui-note.mjs.map +1 -0
  105. package/fesm2022/frame-kit-ui-ng-ui-numbered-list.mjs +105 -0
  106. package/fesm2022/frame-kit-ui-ng-ui-numbered-list.mjs.map +1 -0
  107. package/fesm2022/frame-kit-ui-ng-ui-pagination.mjs +110 -0
  108. package/fesm2022/frame-kit-ui-ng-ui-pagination.mjs.map +1 -0
  109. package/fesm2022/frame-kit-ui-ng-ui-progress-bar.mjs +129 -0
  110. package/fesm2022/frame-kit-ui-ng-ui-progress-bar.mjs.map +1 -0
  111. package/fesm2022/frame-kit-ui-ng-ui-sidenav-link.mjs +42 -0
  112. package/fesm2022/frame-kit-ui-ng-ui-sidenav-link.mjs.map +1 -0
  113. package/fesm2022/frame-kit-ui-ng-ui-tabs.mjs +894 -0
  114. package/fesm2022/frame-kit-ui-ng-ui-tabs.mjs.map +1 -0
  115. package/fesm2022/frame-kit-ui-ng-ui-timeline.mjs +81 -0
  116. package/fesm2022/frame-kit-ui-ng-ui-timeline.mjs.map +1 -0
  117. package/fesm2022/frame-kit-ui-ng-ui-toast.mjs +179 -0
  118. package/fesm2022/frame-kit-ui-ng-ui-toast.mjs.map +1 -0
  119. package/fesm2022/frame-kit-ui-ng-ui-user-menu.mjs +143 -0
  120. package/fesm2022/frame-kit-ui-ng-ui-user-menu.mjs.map +1 -0
  121. package/fesm2022/frame-kit-ui-ng-ui-wizard-dialog.mjs +191 -0
  122. package/fesm2022/frame-kit-ui-ng-ui-wizard-dialog.mjs.map +1 -0
  123. package/fesm2022/frame-kit-ui-ng.mjs +58 -0
  124. package/fesm2022/frame-kit-ui-ng.mjs.map +1 -0
  125. package/layouts/app-shell/README.md +357 -0
  126. package/layouts/content-split/README.md +180 -0
  127. package/package.json +253 -0
  128. package/services/overlay-orchestrator/README.md +184 -0
  129. package/services/spotlight/README.md +61 -0
  130. package/services/toast/README.md +118 -0
  131. package/types/frame-kit-ui-ng-core-headline.d.ts +38 -0
  132. package/types/frame-kit-ui-ng-core-icon.d.ts +74 -0
  133. package/types/frame-kit-ui-ng-core-image.d.ts +93 -0
  134. package/types/frame-kit-ui-ng-core-link.d.ts +251 -0
  135. package/types/frame-kit-ui-ng-core-separator.d.ts +28 -0
  136. package/types/frame-kit-ui-ng-core-text.d.ts +186 -0
  137. package/types/frame-kit-ui-ng-directives-infinite-scroll.d.ts +42 -0
  138. package/types/frame-kit-ui-ng-directives-spotlight.d.ts +51 -0
  139. package/types/frame-kit-ui-ng-directives-tooltip.d.ts +70 -0
  140. package/types/frame-kit-ui-ng-docs-endpoint-link.d.ts +43 -0
  141. package/types/frame-kit-ui-ng-docs-method-badge.d.ts +30 -0
  142. package/types/frame-kit-ui-ng-forms.d.ts +1674 -0
  143. package/types/frame-kit-ui-ng-layouts-app-shell.d.ts +75 -0
  144. package/types/frame-kit-ui-ng-layouts-content-split.d.ts +43 -0
  145. package/types/frame-kit-ui-ng-services-overlay-orchestrator.d.ts +96 -0
  146. package/types/frame-kit-ui-ng-services-spotlight.d.ts +32 -0
  147. package/types/frame-kit-ui-ng-services-toast.d.ts +100 -0
  148. package/types/frame-kit-ui-ng-ui-accordion.d.ts +86 -0
  149. package/types/frame-kit-ui-ng-ui-alert.d.ts +34 -0
  150. package/types/frame-kit-ui-ng-ui-avatar-stack.d.ts +38 -0
  151. package/types/frame-kit-ui-ng-ui-avatar.d.ts +36 -0
  152. package/types/frame-kit-ui-ng-ui-badge.d.ts +33 -0
  153. package/types/frame-kit-ui-ng-ui-breadcrumb.d.ts +45 -0
  154. package/types/frame-kit-ui-ng-ui-button.d.ts +48 -0
  155. package/types/frame-kit-ui-ng-ui-callout.d.ts +26 -0
  156. package/types/frame-kit-ui-ng-ui-card.d.ts +30 -0
  157. package/types/frame-kit-ui-ng-ui-copyable-field.d.ts +62 -0
  158. package/types/frame-kit-ui-ng-ui-data-table.d.ts +482 -0
  159. package/types/frame-kit-ui-ng-ui-dialog.d.ts +166 -0
  160. package/types/frame-kit-ui-ng-ui-drawer.d.ts +130 -0
  161. package/types/frame-kit-ui-ng-ui-dropdown-menu.d.ts +77 -0
  162. package/types/frame-kit-ui-ng-ui-editable-field.d.ts +65 -0
  163. package/types/frame-kit-ui-ng-ui-icon-badge.d.ts +45 -0
  164. package/types/frame-kit-ui-ng-ui-icon-list.d.ts +67 -0
  165. package/types/frame-kit-ui-ng-ui-inline-edit.d.ts +44 -0
  166. package/types/frame-kit-ui-ng-ui-list-editor.d.ts +56 -0
  167. package/types/frame-kit-ui-ng-ui-loader.d.ts +32 -0
  168. package/types/frame-kit-ui-ng-ui-menu-item.d.ts +27 -0
  169. package/types/frame-kit-ui-ng-ui-nav-brand.d.ts +25 -0
  170. package/types/frame-kit-ui-ng-ui-nav-group.d.ts +60 -0
  171. package/types/frame-kit-ui-ng-ui-nav-separator.d.ts +33 -0
  172. package/types/frame-kit-ui-ng-ui-node-tree-breadcrumb.d.ts +35 -0
  173. package/types/frame-kit-ui-ng-ui-node-tree.d.ts +135 -0
  174. package/types/frame-kit-ui-ng-ui-note.d.ts +22 -0
  175. package/types/frame-kit-ui-ng-ui-numbered-list.d.ts +52 -0
  176. package/types/frame-kit-ui-ng-ui-pagination.d.ts +49 -0
  177. package/types/frame-kit-ui-ng-ui-progress-bar.d.ts +50 -0
  178. package/types/frame-kit-ui-ng-ui-sidenav-link.d.ts +24 -0
  179. package/types/frame-kit-ui-ng-ui-tabs.d.ts +266 -0
  180. package/types/frame-kit-ui-ng-ui-timeline.d.ts +42 -0
  181. package/types/frame-kit-ui-ng-ui-toast.d.ts +56 -0
  182. package/types/frame-kit-ui-ng-ui-user-menu.d.ts +87 -0
  183. package/types/frame-kit-ui-ng-ui-wizard-dialog.d.ts +116 -0
  184. package/types/frame-kit-ui-ng.d.ts +53 -0
  185. package/ui/accordion/README.md +261 -0
  186. package/ui/alert/README.md +211 -0
  187. package/ui/avatar/README.md +167 -0
  188. package/ui/avatar-stack/README.md +164 -0
  189. package/ui/badge/README.md +162 -0
  190. package/ui/breadcrumb/README.md +240 -0
  191. package/ui/button/README.md +184 -0
  192. package/ui/callout/README.md +159 -0
  193. package/ui/card/README.md +174 -0
  194. package/ui/copyable-field/README.md +235 -0
  195. package/ui/data-table/README.md +408 -0
  196. package/ui/dialog/README.md +222 -0
  197. package/ui/drawer/README.md +274 -0
  198. package/ui/dropdown-menu/README.md +336 -0
  199. package/ui/editable-field/README.md +171 -0
  200. package/ui/icon-badge/README.md +131 -0
  201. package/ui/icon-list/README.md +205 -0
  202. package/ui/inline-edit/README.md +135 -0
  203. package/ui/list-editor/README.md +162 -0
  204. package/ui/loader/README.md +160 -0
  205. package/ui/menu-item/README.md +204 -0
  206. package/ui/nav-brand/README.md +111 -0
  207. package/ui/nav-group/README.md +145 -0
  208. package/ui/nav-separator/README.md +44 -0
  209. package/ui/node-tree/README.md +278 -0
  210. package/ui/node-tree-breadcrumb/README.md +164 -0
  211. package/ui/note/README.md +146 -0
  212. package/ui/numbered-list/README.md +187 -0
  213. package/ui/pagination/README.md +174 -0
  214. package/ui/progress-bar/README.md +223 -0
  215. package/ui/sidenav-link/README.md +214 -0
  216. package/ui/tabs/README.md +204 -0
  217. package/ui/timeline/README.md +285 -0
  218. package/ui/toast/README.md +243 -0
  219. package/ui/user-menu/README.md +260 -0
  220. package/ui/wizard-dialog/README.md +283 -0
@@ -0,0 +1,261 @@
1
+ # fk-accordion
2
+
3
+ A token-driven accordion/disclosure component for collapsible sections. A single-header trigger toggles a projected panel body.
4
+
5
+ ## API
6
+
7
+ ### Inputs
8
+
9
+ | Input | Type | Default | Description |
10
+ | ----------------- | ---------------- | ------- | ----------------------------------------------------------------------- |
11
+ | `title` | `string` | `""` | First line of the header — vertically centered with the leading icon. |
12
+ | `description` | `string \| null` | `null` | Optional second line rendered below the title. |
13
+ | `leadingText` | `string \| null` | `null` | Optional label rendered immediately before the chevron (e.g. "Scopes"). |
14
+ | `size` | `AccordionSize` | `"md"` | `"sm"` or `"md"` — controls header padding and title font size. |
15
+ | `disabled` | `boolean` | `false` | Disables interaction and dims the entry. |
16
+ | `defaultExpanded` | `boolean` | `false` | When `true`, the accordion starts in the expanded state. |
17
+ | `className` | `string` | `""` | Additional CSS classes merged onto the host. |
18
+ | `id` | `string \| null` | `null` | Optional host id. |
19
+ | `ariaLabel` | `string \| null` | `null` | Accessible label applied to the header button. |
20
+
21
+ ### Outputs
22
+
23
+ | Output | Type | Description |
24
+ | ---------------- | ----------------------- | --------------------------------------------------- |
25
+ | `expandedChange` | `EventEmitter<boolean>` | Emits the new expanded state when the user toggles. |
26
+
27
+ ### Content
28
+
29
+ Three projection targets:
30
+
31
+ - **Default slot** — panel body (rendered only while expanded).
32
+ - **`[fkAccordionLeadingIcon]`** — icon slot before the title/description stack.
33
+ - **`[fkAccordionChevron]`** — replaces the default chevron SVG.
34
+
35
+ ```html
36
+ <fk-accordion title="API key" description="Management API key" leadingText="Scopes">
37
+ <fk-icon fkAccordionLeadingIcon name="law-shield" size="md" />
38
+ <p>read:users, write:users</p>
39
+ </fk-accordion>
40
+ ```
41
+
42
+ ## Features
43
+
44
+ - Title + optional description, both vertically centered with the leading icon.
45
+ - Optional leading-text label immediately before the chevron.
46
+ - Built-in inline chevron SVG — no icon-library dependency.
47
+ - Chevron rotates 180° (down → up) on expand.
48
+ - Consumer may override the chevron via the `[fkAccordionChevron]` slot.
49
+ - Panel body is content-projected and only mounted while expanded.
50
+ - Fully token-driven — no brand styling in the component.
51
+
52
+ ## Quick Start
53
+
54
+ ```html
55
+ <fk-accordion title="API key" description="Management API key">
56
+ <p>Panel content goes here.</p>
57
+ </fk-accordion>
58
+ ```
59
+
60
+ ## Import
61
+
62
+ ```ts
63
+ import { AccordionComponent, FkAccordionChevronDirective, FkAccordionLeadingIconDirective } from '@frame-kit/ui-ng';
64
+ ```
65
+
66
+ ```ts
67
+ @Component({
68
+ selector: 'app-example',
69
+ imports: [AccordionComponent, FkAccordionChevronDirective, FkAccordionLeadingIconDirective],
70
+ templateUrl: './example.component.html',
71
+ })
72
+ export class ExampleComponent {}
73
+ ```
74
+
75
+ ## Selector
76
+
77
+ `fk-accordion`
78
+
79
+ ## Examples
80
+
81
+ ### Title only
82
+
83
+ ```html
84
+ <fk-accordion title="API key"></fk-accordion>
85
+ ```
86
+
87
+ ### Title + description
88
+
89
+ ```html
90
+ <fk-accordion title="API key" description="Management API key"></fk-accordion>
91
+ ```
92
+
93
+ ### With a leading icon
94
+
95
+ ```html
96
+ <fk-accordion title="API key" description="Management API key">
97
+ <fk-icon fkAccordionLeadingIcon name="law-shield" size="md" />
98
+ </fk-accordion>
99
+ ```
100
+
101
+ ### With a leading-text label (auth-summary "Scopes" pattern)
102
+
103
+ ```html
104
+ <fk-accordion title="API key" description="Management API key" leadingText="Scopes">
105
+ <fk-icon fkAccordionLeadingIcon name="law-shield" size="md" />
106
+ <p>read:users, write:users</p>
107
+ </fk-accordion>
108
+ ```
109
+
110
+ ### Custom chevron
111
+
112
+ ```html
113
+ <fk-accordion title="API key">
114
+ <fk-icon fkAccordionChevron name="lock-password" size="sm" />
115
+ </fk-accordion>
116
+ ```
117
+
118
+ > Rotation of a custom chevron is the consumer's responsibility — style against the host class `fk-accordion--expanded` if needed.
119
+
120
+ ## Accessibility
121
+
122
+ - The header is a native `<button type="button">`, keyboard-reachable and operable with `Enter` / `Space`.
123
+ - `aria-expanded` tracks the current state.
124
+ - `aria-controls` links the trigger to the panel; `aria-labelledby` on the panel links back to the trigger.
125
+ - The panel uses `role="region"` only when expanded.
126
+ - Leading icon and default chevron are marked `aria-hidden="true"` (decorative).
127
+ - Disabled state sets the native `disabled` attribute on the trigger.
128
+
129
+ ## Design Tokens
130
+
131
+ ```scss
132
+ --fk-accordion-color
133
+ --fk-accordion-border-color
134
+ --fk-accordion-border-width
135
+ --fk-accordion-radius
136
+ --fk-accordion-header-bg
137
+ --fk-accordion-header-bg-hover
138
+ --fk-accordion-header-bg-expanded
139
+ --fk-accordion-header-padding-block
140
+ --fk-accordion-header-padding-inline
141
+ --fk-accordion-leading-icon-gap
142
+ --fk-accordion-trailing-gap
143
+ --fk-accordion-title-color
144
+ --fk-accordion-title-font-size
145
+ --fk-accordion-title-font-weight
146
+ --fk-accordion-description-color
147
+ --fk-accordion-description-font-size
148
+ --fk-accordion-description-gap
149
+ --fk-accordion-leading-text-color
150
+ --fk-accordion-leading-text-font-size
151
+ --fk-accordion-leading-text-font-weight
152
+ --fk-accordion-leading-text-gap
153
+ --fk-accordion-chevron-color
154
+ --fk-accordion-panel-color
155
+ --fk-accordion-panel-gap
156
+ --fk-accordion-panel-padding-block
157
+ --fk-accordion-panel-padding-inline
158
+ --fk-accordion-focus-ring
159
+ --fk-accordion-sm-header-padding-block
160
+ --fk-accordion-sm-header-padding-inline
161
+ --fk-accordion-sm-title-font-size
162
+ --fk-accordion-sm-description-font-size
163
+ ```
164
+
165
+ Override in your app stylesheet:
166
+
167
+ ```scss
168
+ :root {
169
+ --fk-accordion-header-padding-inline: 1.25rem;
170
+ --fk-accordion-chevron-color: var(--fk-color-primary);
171
+ }
172
+ ```
173
+
174
+ ## Behavior Notes
175
+
176
+ - Internal `expanded` state — pass `defaultExpanded` for initial value; listen to `expandedChange` to observe user toggles.
177
+ - The panel is **only mounted when expanded** — queries, event listeners, and child lifecycle hooks inside the panel fire on open.
178
+ - Disabled accordions cannot toggle (neither via click nor keyboard) and are rendered at reduced opacity.
179
+
180
+ ---
181
+
182
+ # fk-accordion-group
183
+
184
+ A wrapper that enforces single-open behavior across a set of `<fk-accordion>` children. Opening one accordion auto-collapses the previously active one.
185
+
186
+ ## API
187
+
188
+ ### Inputs
189
+
190
+ | Input | Type | Default | Description |
191
+ | ----------- | -------- | ------- | ----------------------------------- |
192
+ | `className` | `string` | `""` | Additional CSS classes on the host. |
193
+
194
+ ### Outputs
195
+
196
+ None.
197
+
198
+ ### Content
199
+
200
+ Project any number of `<fk-accordion>` elements. Non-accordion content is allowed but only `<fk-accordion>` children participate in the single-open enforcement.
201
+
202
+ ## Features
203
+
204
+ - Opening any accordion collapses whichever sibling was previously open.
205
+ - Zero API change on the child: existing `<fk-accordion>` elements opt in just by being projected.
206
+ - `defaultExpanded` still honored — if more than one child sets it, only the first wins; the rest are force-collapsed on mount.
207
+ - Closing the active accordion leaves the group with nothing open.
208
+ - Standard top-margin rhythm between children via `--fk-accordion-group-gap`.
209
+
210
+ ## Quick Start
211
+
212
+ ```html
213
+ <fk-accordion-group>
214
+ <fk-accordion title="API key" description="Management API key">…</fk-accordion>
215
+ <fk-accordion title="Bearer token" description="Authorization header">…</fk-accordion>
216
+ </fk-accordion-group>
217
+ ```
218
+
219
+ ## Import
220
+
221
+ ```ts
222
+ import { AccordionComponent, AccordionGroupComponent } from '@frame-kit/ui-ng';
223
+ ```
224
+
225
+ ```ts
226
+ @Component({
227
+ selector: 'app-example',
228
+ imports: [AccordionGroupComponent, AccordionComponent],
229
+ templateUrl: './example.component.html',
230
+ })
231
+ export class ExampleComponent {}
232
+ ```
233
+
234
+ ## Selector
235
+
236
+ `fk-accordion-group`
237
+
238
+ ## Accessibility
239
+
240
+ - The group adds no extra landmark role — each child accordion retains its native `<button>` trigger, `aria-expanded`, and `aria-controls` wiring.
241
+ - Single-open is enforced imperatively; assistive tech announces each accordion's individual state change.
242
+
243
+ ## Design Tokens
244
+
245
+ ```scss
246
+ --fk-accordion-group-gap
247
+ ```
248
+
249
+ Override:
250
+
251
+ ```scss
252
+ :root {
253
+ --fk-accordion-group-gap: 0.5rem;
254
+ }
255
+ ```
256
+
257
+ ## Behavior Notes
258
+
259
+ - **Single-open**: exactly one (or zero) child accordion is expanded at any time.
260
+ - **Groups are independent**: nesting groups is supported — each group has its own scoped coordinator.
261
+ - **Accordions outside a group** behave normally — no coordination, any number may be open simultaneously.
@@ -0,0 +1,211 @@
1
+ # fk-alert
2
+
3
+ A token-driven alert component for displaying contextual messages such as info notices, success confirmations, warnings, and errors.
4
+
5
+ ---
6
+
7
+ ## API
8
+
9
+ ### Inputs
10
+
11
+ | Input | Type | Default | Description |
12
+ | ----------------- | ---------------- | -------- | ----------------------------------------------------------- |
13
+ | `variant` | `AlertVariant` | `'info'` | Visual style: `'info'`, `'success'`, `'warning'`, `'error'` |
14
+ | `color` | `string \| null` | `null` | Custom text color (inline override) |
15
+ | `backgroundColor` | `string \| null` | `null` | Custom background color (inline override) |
16
+ | `borderColor` | `string \| null` | `null` | Custom border color (inline override) |
17
+ | `className` | `string` | `''` | Additional CSS classes merged onto the host element |
18
+
19
+ ### Outputs
20
+
21
+ None.
22
+
23
+ ### Content
24
+
25
+ Alert text is provided through content projection. An optional leading icon can be projected using the `fkAlertIconStart` directive:
26
+
27
+ ```html
28
+ <!-- Simple -->
29
+ <fk-alert variant="info">Your changes have been saved.</fk-alert>
30
+
31
+ <!-- With icon -->
32
+ <fk-alert variant="warning">
33
+ <fk-icon fkAlertIconStart name="alert-triangle" />
34
+ Please review before continuing.
35
+ </fk-alert>
36
+ ```
37
+
38
+ ---
39
+
40
+ ## Features
41
+
42
+ - Four semantic variants: info, success, warning, error
43
+ - Optional leading icon slot via `fkAlertIconStart` directive
44
+ - Per-instance color, background, and border overrides
45
+ - Token-driven styling
46
+ - Self-sufficient rendering without any theme file loaded
47
+
48
+ ---
49
+
50
+ ## Quick Start
51
+
52
+ ```html
53
+ <fk-alert variant="success">Operation completed successfully.</fk-alert>
54
+ ```
55
+
56
+ ---
57
+
58
+ ## Import
59
+
60
+ ```ts
61
+ import { AlertComponent } from '@frame-kit/ui-ng';
62
+ ```
63
+
64
+ ```ts
65
+ @Component({
66
+ selector: 'app-example',
67
+ imports: [AlertComponent],
68
+ templateUrl: './example.component.html',
69
+ })
70
+ export class ExampleComponent {}
71
+ ```
72
+
73
+ To use the icon directive:
74
+
75
+ ```ts
76
+ import { AlertComponent, FkAlertIconStartDirective } from '@frame-kit/ui-ng';
77
+ ```
78
+
79
+ ---
80
+
81
+ ## Selector
82
+
83
+ ```html
84
+ <fk-alert></fk-alert>
85
+ ```
86
+
87
+ ---
88
+
89
+ ## Examples
90
+
91
+ ### Info (default)
92
+
93
+ ```html
94
+ <fk-alert>This is an informational message.</fk-alert>
95
+ ```
96
+
97
+ ### Success
98
+
99
+ ```html
100
+ <fk-alert variant="success">Your changes have been saved.</fk-alert>
101
+ ```
102
+
103
+ ### Warning
104
+
105
+ ```html
106
+ <fk-alert variant="warning">Please review before submitting.</fk-alert>
107
+ ```
108
+
109
+ ### Error
110
+
111
+ ```html
112
+ <fk-alert variant="error">Something went wrong. Please try again.</fk-alert>
113
+ ```
114
+
115
+ ### With icon
116
+
117
+ ```html
118
+ <fk-alert variant="error">
119
+ <fk-icon fkAlertIconStart name="x-circle" />
120
+ Failed to save changes.
121
+ </fk-alert>
122
+ ```
123
+
124
+ ### Custom colors
125
+
126
+ ```html
127
+ <fk-alert color="#1e3a5f" backgroundColor="#e8f4fd" borderColor="#b6e0fe"> Custom styled alert. </fk-alert>
128
+ ```
129
+
130
+ ---
131
+
132
+ ## Accessibility
133
+
134
+ `fk-alert` renders an inline alert container.
135
+
136
+ Accessibility behavior:
137
+
138
+ - Icons projected via `fkAlertIconStart` are automatically marked `aria-hidden="true"`
139
+ - Content is readable by screen readers
140
+ - Semantic color contrast is maintained through token defaults
141
+
142
+ ---
143
+
144
+ ## Design Tokens
145
+
146
+ `fk-alert` is styled entirely through design tokens.
147
+
148
+ ### Component-specific tokens
149
+
150
+ ```
151
+ --fk-alert-padding
152
+ --fk-alert-border-radius
153
+ --fk-alert-font-size
154
+ --fk-alert-icon-gap
155
+ ```
156
+
157
+ ### Variant tokens
158
+
159
+ ```
160
+ --fk-alert-info-bg
161
+ --fk-alert-info-border-color
162
+ --fk-alert-info-color
163
+
164
+ --fk-alert-success-bg
165
+ --fk-alert-success-border-color
166
+ --fk-alert-success-color
167
+
168
+ --fk-alert-warning-bg
169
+ --fk-alert-warning-border-color
170
+ --fk-alert-warning-color
171
+
172
+ --fk-alert-error-bg
173
+ --fk-alert-error-border-color
174
+ --fk-alert-error-color
175
+ ```
176
+
177
+ ### Shared tokens
178
+
179
+ ```
180
+ --fk-rhythm-4
181
+ --fk-radius-md
182
+ --fk-typography-small-font-size
183
+ ```
184
+
185
+ ### Customizing Tokens
186
+
187
+ Override tokens in your application's stylesheet:
188
+
189
+ ```scss
190
+ :root {
191
+ --fk-alert-padding: 1.25rem;
192
+ --fk-alert-border-radius: 0.5rem;
193
+ --fk-alert-info-bg: #dbeafe;
194
+ }
195
+ ```
196
+
197
+ Or scope overrides to a specific context:
198
+
199
+ ```scss
200
+ .dark-theme fk-alert {
201
+ --fk-alert-info-bg: #1e3a5f;
202
+ --fk-alert-info-color: #93c5fd;
203
+ }
204
+ ```
205
+
206
+ ---
207
+
208
+ ## Behavior Notes
209
+
210
+ - The `color`, `backgroundColor`, and `borderColor` inputs apply inline styles, overriding token values for that instance
211
+ - The `fkAlertIconStart` directive automatically sets `aria-hidden="true"` on the projected element
@@ -0,0 +1,167 @@
1
+ # fk-avatar
2
+
3
+ A token-driven avatar atom that displays a user image with an initials fallback and an optional presence status indicator.
4
+
5
+ ---
6
+
7
+ ## API
8
+
9
+ ### Inputs
10
+
11
+ | Input | Type | Default | Description |
12
+ | ---------- | ----------------------------------------------------------- | ------- | ----------------------------------------------------- |
13
+ | name | `string` | — | **Required.** User's display name |
14
+ | avatarUrl | `string` \| `null` | `null` | URL to the user's avatar image |
15
+ | initials | `string` \| `null` | `null` | Custom initials — auto-derived from `name` if absent |
16
+ | size | `"sm"` \| `"md"` \| `"lg"` | `"md"` | Avatar diameter |
17
+ | status | `"online"` \| `"offline"` \| `"away"` \| `"busy"` \| `null` | `null` | Presence status |
18
+ | showStatus | `boolean` | `false` | Show the status indicator dot |
19
+ | className | `string` | `""` | Additional CSS classes merged with hook classes |
20
+ | id | `string` \| `null` | `null` | Sets the host `id` attribute |
21
+ | ariaLabel | `string` \| `null` | `null` | Custom `aria-label` (defaults to "Avatar for {name}") |
22
+
23
+ ---
24
+
25
+ ## Features
26
+
27
+ - Displays an image when `avatarUrl` is provided, gracefully falling back to initials on load error
28
+ - Auto-derives initials from `name` (first + last initial for multi-word names, first two characters for single names)
29
+ - Status indicator dot positioned at the bottom-right corner, color-coded by status
30
+ - Three size presets (`sm`, `md`, `lg`) controlled via tokens
31
+ - Fully token-driven — all colors, sizes, typography, and radii are overridable
32
+
33
+ ---
34
+
35
+ ## Quick Start
36
+
37
+ ```html
38
+ <fk-avatar name="Jane Doe" avatarUrl="/assets/jane.jpg" />
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Import
44
+
45
+ ```ts
46
+ import { AvatarComponent } from '@frame-kit/ui-ng';
47
+ ```
48
+
49
+ ```ts
50
+ @Component({
51
+ selector: 'app-header',
52
+ imports: [AvatarComponent],
53
+ templateUrl: './header.component.html',
54
+ })
55
+ export class HeaderComponent {}
56
+ ```
57
+
58
+ ---
59
+
60
+ ## Selector
61
+
62
+ ```html
63
+ <fk-avatar />
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Examples
69
+
70
+ ### Initials Fallback
71
+
72
+ ```html
73
+ <fk-avatar name="Jane Doe" />
74
+ ```
75
+
76
+ Renders a circle with "JD" inside.
77
+
78
+ ### With Image
79
+
80
+ ```html
81
+ <fk-avatar name="Jane Doe" avatarUrl="/assets/jane.jpg" />
82
+ ```
83
+
84
+ ### With Status Indicator
85
+
86
+ ```html
87
+ <fk-avatar name="Jane Doe" [showStatus]="true" status="online" />
88
+ ```
89
+
90
+ ### Sizes
91
+
92
+ ```html
93
+ <fk-avatar name="JD" size="sm" />
94
+ <fk-avatar name="JD" size="md" />
95
+ <fk-avatar name="JD" size="lg" />
96
+ ```
97
+
98
+ ### Custom Initials
99
+
100
+ ```html
101
+ <fk-avatar name="Jane Doe" initials="J" />
102
+ ```
103
+
104
+ ---
105
+
106
+ ## Accessibility
107
+
108
+ - Circle element has `role="img"` with an `aria-label` (defaults to "Avatar for {name}")
109
+ - Status indicator has `role="status"` with an `aria-label` describing the status
110
+ - Initials span is `aria-hidden="true"` since the circle's label already describes the user
111
+
112
+ ---
113
+
114
+ ## Design Tokens
115
+
116
+ ### Component Tokens
117
+
118
+ ```
119
+ --fk-avatar-radius
120
+ --fk-avatar-bg
121
+ --fk-avatar-color
122
+ --fk-avatar-font-family
123
+ --fk-avatar-font-weight
124
+ --fk-avatar-size-sm
125
+ --fk-avatar-size-md
126
+ --fk-avatar-size-lg
127
+ --fk-avatar-font-size-sm
128
+ --fk-avatar-font-size-md
129
+ --fk-avatar-font-size-lg
130
+ --fk-avatar-status-border
131
+ --fk-avatar-status-online
132
+ --fk-avatar-status-offline
133
+ --fk-avatar-status-away
134
+ --fk-avatar-status-busy
135
+ ```
136
+
137
+ Each component token falls back to a semantic token, then a raw value. For example:
138
+
139
+ ```
140
+ --fk-avatar-bg → --fk-color-surface-muted → #f7f9fb
141
+ --fk-avatar-color → --fk-color-muted → #8a98a8
142
+ --fk-avatar-radius → --fk-radius-full → 9999px
143
+ --fk-avatar-status-online → --fk-color-success → #10b981
144
+ --fk-avatar-status-busy → --fk-color-danger → #e02424
145
+ ```
146
+
147
+ ### Customizing Tokens
148
+
149
+ Override tokens at any scope:
150
+
151
+ ```css
152
+ :root {
153
+ --fk-avatar-bg: #e0e7ff;
154
+ --fk-avatar-color: #4338ca;
155
+ --fk-avatar-radius: 0.5rem;
156
+ --fk-avatar-size-md: 2.5rem;
157
+ }
158
+ ```
159
+
160
+ Or scope to a specific context:
161
+
162
+ ```css
163
+ .compact-header fk-avatar {
164
+ --fk-avatar-size-md: 1.75rem;
165
+ --fk-avatar-font-size-md: 0.625rem;
166
+ }
167
+ ```