@bitforgehq/ui 0.3.0 → 0.3.2

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 (158) hide show
  1. package/CHANGELOG.md +598 -0
  2. package/README.md +18 -11
  3. package/ai/MANIFEST.index.json +306 -0
  4. package/ai/MANIFEST.json +8915 -3788
  5. package/ai/REFERENCE.index.json +476 -0
  6. package/ai/REFERENCE.json +5810 -2905
  7. package/ai/UI_GUIDE.md +212 -58
  8. package/ai/components/app-frame.md +328 -0
  9. package/ai/components/back-button.md +42 -2
  10. package/ai/components/badge.md +17 -7
  11. package/ai/components/bar-chart.md +188 -0
  12. package/ai/components/breadcrumb-item.md +121 -0
  13. package/ai/components/breadcrumb.md +277 -0
  14. package/ai/components/button.md +82 -15
  15. package/ai/components/calendar.md +300 -0
  16. package/ai/components/card.md +119 -4
  17. package/ai/components/chart-card.md +283 -0
  18. package/ai/components/combobox.md +411 -0
  19. package/ai/components/date-input.md +396 -0
  20. package/ai/components/datetime-input.md +215 -0
  21. package/ai/components/description-item.md +111 -0
  22. package/ai/components/description-list.md +160 -0
  23. package/ai/components/donut-chart.md +169 -0
  24. package/ai/components/empty-state.md +99 -6
  25. package/ai/components/header.md +71 -2
  26. package/ai/components/icon-button.md +74 -16
  27. package/ai/components/icon.md +63 -7
  28. package/ai/components/line-chart.md +234 -0
  29. package/ai/components/list.md +70 -6
  30. package/ai/components/menu.md +5 -0
  31. package/ai/components/multi-combobox.md +257 -0
  32. package/ai/components/nav-group.md +178 -0
  33. package/ai/components/nav-item.md +210 -0
  34. package/ai/components/page-header.md +237 -0
  35. package/ai/components/pagination.md +173 -0
  36. package/ai/components/popover.md +250 -0
  37. package/ai/components/side-panel.md +391 -0
  38. package/ai/components/sidebar-toggle.md +287 -0
  39. package/ai/components/sidebar.md +541 -0
  40. package/ai/components/skeleton.md +215 -0
  41. package/ai/components/sparkline.md +188 -0
  42. package/ai/components/stat.md +297 -0
  43. package/ai/components/tab-group.md +226 -0
  44. package/ai/components/tab-panel.md +163 -0
  45. package/ai/components/table.md +697 -0
  46. package/ai/components/tabs.md +46 -2
  47. package/ai/components/theme-menu-button.md +182 -0
  48. package/ai/components/theme-switch.md +170 -0
  49. package/ai/components/time-input.md +240 -0
  50. package/ai/components/toolbar.md +354 -0
  51. package/ai/components/tooltip.md +230 -0
  52. package/ai/components/top-nav.md +159 -0
  53. package/ai/reference/bf-app-frame-breakpoint.md +27 -0
  54. package/ai/reference/bf-app-frame-content-width.md +29 -0
  55. package/ai/reference/bf-badge-appearance.md +36 -0
  56. package/ai/reference/bf-badge-variant.md +1 -1
  57. package/ai/reference/bf-bar-chart-orientation.md +27 -0
  58. package/ai/reference/bf-button-appearance.md +36 -0
  59. package/ai/reference/bf-button-variant.md +1 -1
  60. package/ai/reference/bf-calendar-disabled-date.md +23 -0
  61. package/ai/reference/bf-calendar-harness.md +51 -0
  62. package/ai/reference/bf-calendar-weekday.md +31 -0
  63. package/ai/reference/bf-chart-card-heading-level.md +26 -0
  64. package/ai/reference/bf-chart-curve.md +28 -0
  65. package/ai/reference/bf-chart-harness.md +51 -0
  66. package/ai/reference/bf-chart-legend-position.md +30 -0
  67. package/ai/reference/bf-chart-series.md +23 -0
  68. package/ai/reference/bf-chart-value-format.md +23 -0
  69. package/ai/reference/bf-color-scheme-service.md +30 -0
  70. package/ai/reference/bf-color-scheme.md +31 -0
  71. package/ai/reference/bf-combobox-filter.md +27 -0
  72. package/ai/reference/bf-combobox-harness.md +89 -0
  73. package/ai/reference/bf-combobox-option.md +33 -0
  74. package/ai/reference/bf-compare-with.md +2 -0
  75. package/ai/reference/bf-date-input-harness.md +67 -0
  76. package/ai/reference/bf-date-input-picker.md +27 -0
  77. package/ai/reference/bf-date-time-input-harness.md +76 -0
  78. package/ai/reference/bf-date-time-input-picker.md +27 -0
  79. package/ai/reference/bf-description-list-layout.md +26 -0
  80. package/ai/reference/bf-donut-slice.md +22 -0
  81. package/ai/reference/bf-empty-state-heading-level.md +1 -1
  82. package/ai/reference/bf-empty-state-heading.md +33 -0
  83. package/ai/reference/bf-labels.md +73 -20
  84. package/ai/reference/bf-menu-button-variant.md +1 -0
  85. package/ai/reference/bf-menu-placement.md +1 -0
  86. package/ai/reference/bf-overlay-options.md +28 -27
  87. package/ai/reference/bf-overlay-placement.md +34 -0
  88. package/ai/reference/bf-overlay-position.md +1 -1
  89. package/ai/reference/bf-overlay-service.md +5 -3
  90. package/ai/reference/bf-page-header-heading-level.md +26 -0
  91. package/ai/reference/bf-pagination-harness.md +61 -0
  92. package/ai/reference/bf-platform-service.md +17 -15
  93. package/ai/reference/bf-popover-harness.md +42 -0
  94. package/ai/reference/bf-popover-placement.md +28 -0
  95. package/ai/reference/bf-popover-trigger-directive.md +56 -0
  96. package/ai/reference/bf-side-panel-config.md +35 -0
  97. package/ai/reference/bf-side-panel-harness.md +34 -0
  98. package/ai/reference/bf-side-panel-ref.md +44 -0
  99. package/ai/reference/bf-side-panel-service.md +43 -0
  100. package/ai/reference/bf-side-panel-template-context.md +32 -0
  101. package/ai/reference/bf-side-panel-width.md +28 -0
  102. package/ai/reference/bf-sidebar-state-service.md +21 -0
  103. package/ai/reference/bf-sidebar-toggle-harness.md +32 -0
  104. package/ai/reference/bf-size.md +13 -0
  105. package/ai/reference/bf-skeleton-shape.md +28 -0
  106. package/ai/reference/bf-stat-appearance.md +33 -0
  107. package/ai/reference/bf-stat-trend-intent.md +27 -0
  108. package/ai/reference/bf-stat-trend.md +27 -0
  109. package/ai/reference/bf-stat-variant.md +26 -0
  110. package/ai/reference/bf-tab-group-harness.md +44 -0
  111. package/ai/reference/bf-table-align.md +26 -0
  112. package/ai/reference/bf-table-cell-context.md +24 -0
  113. package/ai/reference/bf-table-cell-directive.md +22 -0
  114. package/ai/reference/bf-table-column.md +28 -0
  115. package/ai/reference/bf-table-harness.md +77 -0
  116. package/ai/reference/bf-table-row-key.md +21 -0
  117. package/ai/reference/bf-table-sort-direction.md +26 -0
  118. package/ai/reference/bf-table-sort.md +27 -0
  119. package/ai/reference/bf-table-stack.md +29 -0
  120. package/ai/reference/bf-theme.md +5 -4
  121. package/ai/reference/bf-time-input-harness.md +67 -0
  122. package/ai/reference/bf-time-input-hour-cycle.md +27 -0
  123. package/ai/reference/bf-time-input-picker.md +27 -0
  124. package/ai/reference/bf-tooltip-directive.md +43 -0
  125. package/ai/reference/bf-tooltip-harness.md +43 -0
  126. package/ai/reference/bf-tooltip-placement.md +28 -0
  127. package/ai/reference/bf_color_scheme_storage.md +20 -0
  128. package/ai/reference/bf_side_panel_data.md +17 -0
  129. package/ai/reference/bf_sidebar_state_storage.md +20 -0
  130. package/ai/reference/bf_theme_storage.md +3 -1
  131. package/ai/reference/provide-bf-color-scheme.md +20 -0
  132. package/ai/reference/provide-bf-labels.md +13 -4
  133. package/ai/reference/provide-bf-sidebar-state.md +20 -0
  134. package/ai/reference/slide-in-from-end.md +24 -0
  135. package/ai/reference/slide-out-to-end.md +24 -0
  136. package/bin/bf-ui.js +433 -3
  137. package/fesm2022/bitforgehq-ui-charts.mjs +3045 -0
  138. package/fesm2022/bitforgehq-ui-charts.mjs.map +1 -0
  139. package/fesm2022/bitforgehq-ui-icons.mjs +107 -3
  140. package/fesm2022/bitforgehq-ui-icons.mjs.map +1 -1
  141. package/fesm2022/bitforgehq-ui-mobile.mjs +14 -59
  142. package/fesm2022/bitforgehq-ui-mobile.mjs.map +1 -1
  143. package/fesm2022/bitforgehq-ui-overlay.mjs +6566 -38
  144. package/fesm2022/bitforgehq-ui-overlay.mjs.map +1 -1
  145. package/fesm2022/bitforgehq-ui-testing.mjs +634 -1
  146. package/fesm2022/bitforgehq-ui-testing.mjs.map +1 -1
  147. package/fesm2022/bitforgehq-ui.mjs +5708 -137
  148. package/fesm2022/bitforgehq-ui.mjs.map +1 -1
  149. package/llms-full.txt +26766 -14470
  150. package/llms.txt +106 -1
  151. package/package.json +7 -3
  152. package/theme.css +101 -0
  153. package/types/bitforgehq-ui-charts.d.ts +967 -0
  154. package/types/bitforgehq-ui-icons.d.ts +13 -1
  155. package/types/bitforgehq-ui-mobile.d.ts +25 -18
  156. package/types/bitforgehq-ui-overlay.d.ts +1895 -7
  157. package/types/bitforgehq-ui-testing.d.ts +782 -1
  158. package/types/bitforgehq-ui.d.ts +2393 -45
package/llms.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  # @bitforgehq/ui
2
2
 
3
- > Bitforge's Angular 22 component library (Meadow Sage design, Tailwind v4, signals-first) and Capacitor app shell.
3
+ > Bitforge's Angular 22 component library (Meadow Sage palette with an indigo default primary to override, Tailwind v4, signals-first) and Capacitor app shell.
4
4
 
5
5
  - [Guide for agents](https://bitforge-ui.web.app/ai/UI_GUIDE.md)
6
6
 
@@ -30,47 +30,77 @@
30
30
  - [bf-action-bar](https://bitforge-ui.web.app/ai/components/action-bar.md): Floating pill of contextual actions that appears while items are selected ([docs](https://bitforge-ui.web.app/components/action-bar))
31
31
  - [bf-button](https://bitforge-ui.web.app/ai/components/button.md): Pill-shaped action button with five variants, three sizes and a loading state ([docs](https://bitforge-ui.web.app/components/button))
32
32
  - [bf-icon-button](https://bitforge-ui.web.app/ai/components/icon-button.md): Round icon-only button for toolbars and rows, with a required accessible label ([docs](https://bitforge-ui.web.app/components/icon-button))
33
+ - [bf-toolbar](https://bitforge-ui.web.app/ai/components/toolbar.md): Dense row of search, filters, view switch, result count and actions ([docs](https://bitforge-ui.web.app/components/toolbar))
33
34
 
34
35
  ### Forms
35
36
 
37
+ - [bf-calendar](https://bitforge-ui.web.app/ai/components/calendar.md): Inline month calendar for picking one date, with month and year jumps ([docs](https://bitforge-ui.web.app/components/calendar))
36
38
  - [bf-checkbox](https://bitforge-ui.web.app/ai/components/checkbox.md): Rounded checkbox with an optional label that binds to Signal Forms ([docs](https://bitforge-ui.web.app/components/checkbox))
37
39
  - [bf-chip](https://bitforge-ui.web.app/ai/components/chip.md): Toggleable filter chip with a check mark when selected, in tonal or ink style ([docs](https://bitforge-ui.web.app/components/chip))
38
40
  - [bf-chip-group](https://bitforge-ui.web.app/ai/components/chip-group.md): Named row of chips that picks one like radios, or groups independent toggles ([docs](https://bitforge-ui.web.app/components/chip-group))
41
+ - [bf-combobox](https://bitforge-ui.web.app/ai/components/combobox.md): Text field that filters a list of options as you type and picks one ([docs](https://bitforge-ui.web.app/components/combobox))
42
+ - [bf-date-input](https://bitforge-ui.web.app/ai/components/date-input.md): Typed date field with a calendar popover, valued as an ISO date string ([docs](https://bitforge-ui.web.app/components/date-input))
43
+ - [bf-datetime-input](https://bitforge-ui.web.app/ai/components/datetime-input.md): Typed date and time field with a calendar and time list in one popover ([docs](https://bitforge-ui.web.app/components/datetime-input))
39
44
  - [bf-field](https://bitforge-ui.web.app/ai/components/field.md): Label, help text and error text wrapper that wires ids for assistive tech ([docs](https://bitforge-ui.web.app/components/field))
40
45
  - [bf-input](https://bitforge-ui.web.app/ai/components/input.md): Single-line text field with label, help and error text, icon slots and Signal Forms binding ([docs](https://bitforge-ui.web.app/components/input))
46
+ - [bf-multi-combobox](https://bitforge-ui.web.app/ai/components/multi-combobox.md): Text field that filters options as you type and picks several as tags ([docs](https://bitforge-ui.web.app/components/multi-combobox))
41
47
  - [bf-number-input](https://bitforge-ui.web.app/ai/components/number-input.md): Number field that binds number or null, with native min, max and step ([docs](https://bitforge-ui.web.app/components/number-input))
42
48
  - [bf-radio-group](https://bitforge-ui.web.app/ai/components/radio-group.md): Group of radio buttons for choosing one option, with optional per-option descriptions ([docs](https://bitforge-ui.web.app/components/radio-group))
43
49
  - [bf-segmented](https://bitforge-ui.web.app/ai/components/segmented.md): Segmented control for switching between two to four views, keyboard-navigable like radios ([docs](https://bitforge-ui.web.app/components/segmented))
44
50
  - [bf-select](https://bitforge-ui.web.app/ai/components/select.md): Native single-choice dropdown styled like the text field, with Signal Forms binding ([docs](https://bitforge-ui.web.app/components/select))
45
51
  - [bf-textarea](https://bitforge-ui.web.app/ai/components/textarea.md): Multi-line text field with label, help and error text, and Signal Forms binding ([docs](https://bitforge-ui.web.app/components/textarea))
52
+ - [bf-theme-switch](https://bitforge-ui.web.app/ai/components/theme-switch.md): Segmented System, Light and Dark switch bound two-way to the app colour scheme ([docs](https://bitforge-ui.web.app/components/theme-switch))
53
+ - [bf-time-input](https://bitforge-ui.web.app/ai/components/time-input.md): Typed time-of-day field with a popover list of times, valued as an ISO string ([docs](https://bitforge-ui.web.app/components/time-input))
46
54
  - [bf-toggle](https://bitforge-ui.web.app/ai/components/toggle.md): On/off switch for settings that apply immediately, with Signal Forms binding ([docs](https://bitforge-ui.web.app/components/toggle))
47
55
 
48
56
  ### Data display
49
57
 
50
58
  - [bf-avatar](https://bitforge-ui.web.app/ai/components/avatar.md): Round avatar showing a photo or initials, in three sizes and four color variants ([docs](https://bitforge-ui.web.app/components/avatar))
51
59
  - [bf-badge](https://bitforge-ui.web.app/ai/components/badge.md): Small status label in semantic tones, or a compact numeric pill for counts ([docs](https://bitforge-ui.web.app/components/badge))
60
+ - [bf-bar-chart](https://bitforge-ui.web.app/ai/components/bar-chart.md): Bar chart of series over categories, grouped or stacked, vertical or horizontal ([docs](https://bitforge-ui.web.app/components/bar-chart))
52
61
  - [bf-card](https://bitforge-ui.web.app/ai/components/card.md): Content surface with an optional header slot, in four visual styles from raised to flat ([docs](https://bitforge-ui.web.app/components/card))
62
+ - [bf-chart-card](https://bitforge-ui.web.app/ai/components/chart-card.md): Card around one chart with a title, period control and loading, empty and error states ([docs](https://bitforge-ui.web.app/components/chart-card))
63
+ - [div[bfDescriptionItem]](https://bitforge-ui.web.app/ai/components/description-item.md): One label and value pair of a description list, label as term, content as value ([docs](https://bitforge-ui.web.app/components/description-item))
64
+ - [bf-description-list](https://bitforge-ui.web.app/ai/components/description-list.md): Native description list of label-value pairs, as divided rows or a tile grid ([docs](https://bitforge-ui.web.app/components/description-list))
65
+ - [bf-donut-chart](https://bitforge-ui.web.app/ai/components/donut-chart.md): Donut chart of the parts of a whole, with a legend, tooltip and centre slot ([docs](https://bitforge-ui.web.app/components/donut-chart))
66
+ - [bf-line-chart](https://bitforge-ui.web.app/ai/components/line-chart.md): Line chart of series over categories, with tooltip, legend and data table ([docs](https://bitforge-ui.web.app/components/line-chart))
53
67
  - [bf-list](https://bitforge-ui.web.app/ai/components/list.md): Container for list rows, inset by default with rounded corners on a warm background ([docs](https://bitforge-ui.web.app/components/list))
54
68
  - [bf-list-item](https://bitforge-ui.web.app/ai/components/list-item.md): List row with leading slot, title, subtitle, trailing slot and an optional chevron ([docs](https://bitforge-ui.web.app/components/list-item))
55
69
  - [bf-progress](https://bitforge-ui.web.app/ai/components/progress.md): Progress bar in two sizes and four tones for completion, quotas and unknown waits ([docs](https://bitforge-ui.web.app/components/progress))
70
+ - [bf-sparkline](https://bitforge-ui.web.app/ai/components/sparkline.md): Tiny trend line with no axes or legend, for stats and table cells ([docs](https://bitforge-ui.web.app/components/sparkline))
71
+ - [bf-stat](https://bitforge-ui.web.app/ai/components/stat.md): One labelled figure with an optional icon tile and a supporting line ([docs](https://bitforge-ui.web.app/components/stat))
72
+ - [bf-table](https://bitforge-ui.web.app/ai/components/table.md): Desktop data table with sortable headers, row selection, custom cells and an empty slot ([docs](https://bitforge-ui.web.app/components/table))
56
73
 
57
74
  ### Feedback
58
75
 
59
76
  - [bf-alert](https://bitforge-ui.web.app/ai/components/alert.md): Inline status message in four tones with a title and an optional dismiss button ([docs](https://bitforge-ui.web.app/components/alert))
60
77
  - [bf-empty-state](https://bitforge-ui.web.app/ai/components/empty-state.md): Placeholder for an empty screen or list with icon, title, message and action ([docs](https://bitforge-ui.web.app/components/empty-state))
78
+ - [bf-skeleton](https://bitforge-ui.web.app/ai/components/skeleton.md): Loading placeholder shaped as text lines, a rectangle or a circle, with a shimmer ([docs](https://bitforge-ui.web.app/components/skeleton))
61
79
  - [bf-spinner](https://bitforge-ui.web.app/ai/components/spinner.md): Indeterminate loading spinner in three sizes that inherits its parent's text color ([docs](https://bitforge-ui.web.app/components/spinner))
62
80
 
63
81
  ### Navigation
64
82
 
83
+ - [bf-app-frame](https://bitforge-ui.web.app/ai/components/app-frame.md): Desktop app frame with skip link, sticky sidebar, narrow header and main content ([docs](https://bitforge-ui.web.app/components/app-frame))
65
84
  - [bf-back-button](https://bitforge-ui.web.app/ai/components/back-button.md): Header back button that pops the page stack or falls back to a default route ([docs](https://bitforge-ui.web.app/components/back-button))
85
+ - [bf-breadcrumb](https://bitforge-ui.web.app/ai/components/breadcrumb.md): Desktop breadcrumb trail of links to the current page, with optional collapsing ([docs](https://bitforge-ui.web.app/components/breadcrumb))
86
+ - [li[bfBreadcrumbItem]](https://bitforge-ui.web.app/ai/components/breadcrumb-item.md): One level of a breadcrumb trail: a link, or the current page as text ([docs](https://bitforge-ui.web.app/components/breadcrumb-item))
66
87
  - [bf-content](https://bitforge-ui.web.app/ai/components/content.md): Page's single scroll container that keeps focused fields clear of the soft keyboard ([docs](https://bitforge-ui.web.app/components/content))
67
88
  - [bf-header](https://bitforge-ui.web.app/ai/components/header.md): Page header toolbar with a large title that collapses into the toolbar on scroll ([docs](https://bitforge-ui.web.app/components/header))
89
+ - [bf-nav-group](https://bitforge-ui.web.app/ai/components/nav-group.md): A titled group of sidebar links with a small heading that names it ([docs](https://bitforge-ui.web.app/components/nav-group))
90
+ - [a[bfNavItem]](https://bitforge-ui.web.app/ai/components/nav-item.md): Navigation link for a sidebar or top nav, with icon, label and count ([docs](https://bitforge-ui.web.app/components/nav-item))
68
91
  - [bf-page](https://bitforge-ui.web.app/ai/components/page.md): Frame for one stacked mobile screen that supplies lifecycle events and shared page state ([docs](https://bitforge-ui.web.app/components/page))
92
+ - [bf-page-header](https://bitforge-ui.web.app/ai/components/page-header.md): Desktop page header with breadcrumb, title, subtitle, badges and a row of actions ([docs](https://bitforge-ui.web.app/components/page-header))
93
+ - [bf-pagination](https://bitforge-ui.web.app/ai/components/pagination.md): Previous, next and numbered page buttons for a long list or table ([docs](https://bitforge-ui.web.app/components/pagination))
69
94
  - [bf-refresher](https://bitforge-ui.web.app/ai/components/refresher.md): Pull-to-refresh indicator with haptic feedback, native iOS bounce and an Android-style pull ([docs](https://bitforge-ui.web.app/components/refresher))
95
+ - [bf-sidebar](https://bitforge-ui.web.app/ai/components/sidebar.md): Vertical app navigation with brand, grouped links, footer and an icon rail mode ([docs](https://bitforge-ui.web.app/components/sidebar))
96
+ - [bf-sidebar-toggle](https://bitforge-ui.web.app/ai/components/sidebar-toggle.md): Icon button inside a sidebar that collapses it to an icon rail and back ([docs](https://bitforge-ui.web.app/components/sidebar-toggle))
70
97
  - [bf-stack-outlet](https://bitforge-ui.web.app/ai/components/stack-outlet.md): Router outlet keeping a live page stack with slide transitions and iOS swipe back ([docs](https://bitforge-ui.web.app/components/stack-outlet))
71
98
  - [bf-tab](https://bitforge-ui.web.app/ai/components/tab.md): One tab bar destination with an icon, a label and an optional count badge ([docs](https://bitforge-ui.web.app/components/tab))
72
99
  - [bf-tab-bar](https://bitforge-ui.web.app/ai/components/tab-bar.md): Floating pill tab bar for mobile apps with arrow-key selection and count badges ([docs](https://bitforge-ui.web.app/components/tab-bar))
100
+ - [bf-tab-group](https://bitforge-ui.web.app/ai/components/tab-group.md): In-page tabs that switch between content panels, with keyboard navigation and badges ([docs](https://bitforge-ui.web.app/components/tab-group))
101
+ - [bf-tab-panel](https://bitforge-ui.web.app/ai/components/tab-panel.md): One tab of a tab group with its label, badge, icon and lazy content ([docs](https://bitforge-ui.web.app/components/tab-panel))
73
102
  - [bf-tabs](https://bitforge-ui.web.app/ai/components/tabs.md): Tabs page with one navigation stack per tab, wiring the tab bar to the router ([docs](https://bitforge-ui.web.app/components/tabs))
103
+ - [bf-top-nav](https://bitforge-ui.web.app/ai/components/top-nav.md): Horizontal app navigation, a wrapping row of links for apps with few sections ([docs](https://bitforge-ui.web.app/components/top-nav))
74
104
 
75
105
  ### Overlays
76
106
 
@@ -81,8 +111,12 @@
81
111
  - [bf-menu](https://bitforge-ui.web.app/ai/components/menu.md): Keyboard-operable menu panel with items, checkbox and radio items, groups and submenus ([docs](https://bitforge-ui.web.app/components/menu))
82
112
  - [bf-menu-button](https://bitforge-ui.web.app/ai/components/menu-button.md): Styled button that opens a menu, with outline, text, tonal and icon-only looks ([docs](https://bitforge-ui.web.app/components/menu-button))
83
113
  - [bf-modal](https://bitforge-ui.web.app/ai/components/modal.md): Modal overlay shown as an inset card over the scaled-down page, or full screen ([docs](https://bitforge-ui.web.app/components/modal))
114
+ - [bf-popover](https://bitforge-ui.web.app/ai/components/popover.md): Anchored, non-modal panel for filters, details or a small form ([docs](https://bitforge-ui.web.app/components/popover))
84
115
  - [bf-sheet](https://bitforge-ui.web.app/ai/components/sheet.md): Bottom sheet with snap points, drag to dismiss and a backdrop ([docs](https://bitforge-ui.web.app/components/sheet))
116
+ - [bf-side-panel](https://bitforge-ui.web.app/ai/components/side-panel.md): Desktop panel sliding in from the end edge, with a title, body and footer actions ([docs](https://bitforge-ui.web.app/components/side-panel))
117
+ - [bf-theme-menu-button](https://bitforge-ui.web.app/ai/components/theme-menu-button.md): Menu button with System, Light and Dark radio items bound to the colour scheme ([docs](https://bitforge-ui.web.app/components/theme-menu-button))
85
118
  - [bf-toast](https://bitforge-ui.web.app/ai/components/toast.md): Passive status pill with an optional action that never steals focus ([docs](https://bitforge-ui.web.app/components/toast))
119
+ - [bf-tooltip](https://bitforge-ui.web.app/ai/components/tooltip.md): Short hint beside a control on hover or keyboard focus, for desktop ([docs](https://bitforge-ui.web.app/components/tooltip))
86
120
 
87
121
  ### Icons
88
122
 
@@ -100,29 +134,41 @@
100
134
 
101
135
  ### @bitforgehq/ui
102
136
 
137
+ - [BF_COLOR_SCHEME_STORAGE](https://bitforge-ui.web.app/ai/reference/bf_color_scheme_storage.md): Injection token for the store that keeps the colour scheme choice between visits ([docs](https://bitforge-ui.web.app/api/bf_color_scheme_storage))
103
138
  - [BF_DEFAULT_LABELS](https://bitforge-ui.web.app/ai/reference/bf_default_labels.md): The library's built-in English strings, the labels every widget starts from ([docs](https://bitforge-ui.web.app/api/bf_default_labels))
104
139
  - [BF_DEFAULT_VALUES](https://bitforge-ui.web.app/ai/reference/bf_default_values.md): The library's built-in widget defaults, the compact md step everywhere ([docs](https://bitforge-ui.web.app/api/bf_default_values))
105
140
  - [BF_DEFAULTS](https://bitforge-ui.web.app/ai/reference/bf_defaults.md): Injection token holding the widget defaults in effect for an injector ([docs](https://bitforge-ui.web.app/api/bf_defaults))
106
141
  - [BF_LABELS](https://bitforge-ui.web.app/ai/reference/bf_labels.md): Injection token holding the user-facing strings in effect for an injector ([docs](https://bitforge-ui.web.app/api/bf_labels))
142
+ - [BF_SIDEBAR_STATE_STORAGE](https://bitforge-ui.web.app/ai/reference/bf_sidebar_state_storage.md): Injection token for the store that keeps the collapsed sidebar between visits ([docs](https://bitforge-ui.web.app/api/bf_sidebar_state_storage))
107
143
  - [BF_TAB_BAR](https://bitforge-ui.web.app/ai/reference/bf_tab_bar.md): Injection token through which each tab reaches its enclosing tab bar ([docs](https://bitforge-ui.web.app/api/bf_tab_bar))
108
144
  - [BF_TAB_BAR_CONTROLLER](https://bitforge-ui.web.app/ai/reference/bf_tab_bar_controller.md): Injection token through which a parent drives the selection and hiding of its tab bar ([docs](https://bitforge-ui.web.app/api/bf_tab_bar_controller))
109
145
  - [BF_TAB_LINKS](https://bitforge-ui.web.app/ai/reference/bf_tab_links.md): Injection token that turns a projected tab bar into a navigation of links ([docs](https://bitforge-ui.web.app/api/bf_tab_links))
110
146
  - [BfActionDirective](https://bitforge-ui.web.app/ai/reference/bf-action-directive.md): Makes one link or button the click target of a whole card or list row ([docs](https://bitforge-ui.web.app/api/bf-action-directive))
111
147
  - [BfAlertVariant](https://bitforge-ui.web.app/ai/reference/bf-alert-variant.md): The four tones of an alert, from neutral information to a danger message ([docs](https://bitforge-ui.web.app/api/bf-alert-variant))
148
+ - [BfAppFrameBreakpoint](https://bitforge-ui.web.app/ai/reference/bf-app-frame-breakpoint.md): The breakpoint where an app frame switches from its header bar to the sidebar ([docs](https://bitforge-ui.web.app/api/bf-app-frame-breakpoint))
149
+ - [BfAppFrameContentWidth](https://bitforge-ui.web.app/ai/reference/bf-app-frame-content-width.md): The maximum width of an app frame's content column, from medium to full ([docs](https://bitforge-ui.web.app/api/bf-app-frame-content-width))
112
150
  - [BfAutocapitalize](https://bitforge-ui.web.app/ai/reference/bf-autocapitalize.md): How a phone keyboard capitalises the text typed into a field ([docs](https://bitforge-ui.web.app/api/bf-autocapitalize))
113
151
  - [BfAvatarSize](https://bitforge-ui.web.app/ai/reference/bf-avatar-size.md): The three sizes of an avatar, from a list row to a profile header ([docs](https://bitforge-ui.web.app/api/bf-avatar-size))
114
152
  - [BfAvatarVariant](https://bitforge-ui.web.app/ai/reference/bf-avatar-variant.md): The four colour schemes of an avatar behind its initials or icon ([docs](https://bitforge-ui.web.app/api/bf-avatar-variant))
153
+ - [BfBadgeAppearance](https://bitforge-ui.web.app/ai/reference/bf-badge-appearance.md): Every badge tone, the five variants plus the informational info tone ([docs](https://bitforge-ui.web.app/api/bf-badge-appearance))
115
154
  - [BfBadgeVariant](https://bitforge-ui.web.app/ai/reference/bf-badge-variant.md): The five tones of a badge, from neutral counts to danger states ([docs](https://bitforge-ui.web.app/api/bf-badge-variant))
155
+ - [BfButtonAppearance](https://bitforge-ui.web.app/ai/reference/bf-button-appearance.md): Every button style, the five variants plus the quiet neutral ghost ([docs](https://bitforge-ui.web.app/api/bf-button-appearance))
116
156
  - [BfButtonSize](https://bitforge-ui.web.app/ai/reference/bf-button-size.md): Former name of the shared size scale for buttons, kept until 1.0.0 ([docs](https://bitforge-ui.web.app/api/bf-button-size))
117
157
  - [BfButtonType](https://bitforge-ui.web.app/ai/reference/bf-button-type.md): The native button types, for a plain action, a form submit or reset ([docs](https://bitforge-ui.web.app/api/bf-button-type))
118
158
  - [BfButtonVariant](https://bitforge-ui.web.app/ai/reference/bf-button-variant.md): The five visual styles of a button, from filled primary to plain text ([docs](https://bitforge-ui.web.app/api/bf-button-variant))
159
+ - [BfCalendarDisabledDate](https://bitforge-ui.web.app/ai/reference/bf-calendar-disabled-date.md): A function that marks an ISO date as not pickable in a calendar ([docs](https://bitforge-ui.web.app/api/bf-calendar-disabled-date))
160
+ - [BfCalendarWeekday](https://bitforge-ui.web.app/ai/reference/bf-calendar-weekday.md): A weekday number from 0 for Sunday to 6 for Saturday, as Date counts ([docs](https://bitforge-ui.web.app/api/bf-calendar-weekday))
119
161
  - [BfCardPadding](https://bitforge-ui.web.app/ai/reference/bf-card-padding.md): The two inner paddings of a card, regular and roomy ([docs](https://bitforge-ui.web.app/api/bf-card-padding))
120
162
  - [BfCardVariant](https://bitforge-ui.web.app/ai/reference/bf-card-variant.md): The four card surfaces, from a raised panel to a flat outline ([docs](https://bitforge-ui.web.app/api/bf-card-variant))
121
163
  - [BfChipGroupMode](https://bitforge-ui.web.app/ai/reference/bf-chip-group-mode.md): Whether a chip group picks exactly one chip or lets each chip toggle alone ([docs](https://bitforge-ui.web.app/api/bf-chip-group-mode))
122
164
  - [BfChipVariant](https://bitforge-ui.web.app/ai/reference/bf-chip-variant.md): The two chip colours, a soft tonal tint or a dark ink fill ([docs](https://bitforge-ui.web.app/api/bf-chip-variant))
165
+ - [BfColorScheme](https://bitforge-ui.web.app/ai/reference/bf-color-scheme.md): The colour scheme choice, following the system or forcing light or dark ([docs](https://bitforge-ui.web.app/api/bf-color-scheme))
166
+ - [BfColorSchemeService](https://bitforge-ui.web.app/ai/reference/bf-color-scheme-service.md): The app colour scheme choice and dark state, applied to html and stored ([docs](https://bitforge-ui.web.app/api/bf-color-scheme-service))
123
167
  - [BfCompareWith](https://bitforge-ui.web.app/ai/reference/bf-compare-with.md): Equality of choice values, for options that are objects rather than primitives ([docs](https://bitforge-ui.web.app/api/bf-compare-with))
124
168
  - [BfDefaults](https://bitforge-ui.web.app/ai/reference/bf-defaults.md): The default height steps of text fields and of actions and choice controls ([docs](https://bitforge-ui.web.app/api/bf-defaults))
125
169
  - [BfDefaultsOptions](https://bitforge-ui.web.app/ai/reference/bf-defaults-options.md): The size steps provideBfDefaults sets, each one falling back to the parent ([docs](https://bitforge-ui.web.app/api/bf-defaults-options))
170
+ - [BfDescriptionListLayout](https://bitforge-ui.web.app/ai/reference/bf-description-list-layout.md): The two description list layouts, divided label-value rows or a grid of tiles ([docs](https://bitforge-ui.web.app/api/bf-description-list-layout))
171
+ - [BfEmptyStateHeading](https://bitforge-ui.web.app/ai/reference/bf-empty-state-heading.md): The heading level of an empty state title, one for a whole page ([docs](https://bitforge-ui.web.app/api/bf-empty-state-heading))
126
172
  - [BfEmptyStateHeadingLevel](https://bitforge-ui.web.app/ai/reference/bf-empty-state-heading-level.md): The heading level of an empty state title, two for a screen or three ([docs](https://bitforge-ui.web.app/api/bf-empty-state-heading-level))
127
173
  - [BfEnterKeyHint](https://bitforge-ui.web.app/ai/reference/bf-enter-key-hint.md): The labels a phone keyboard can put on its Enter key ([docs](https://bitforge-ui.web.app/api/bf-enter-key-hint))
128
174
  - [bfFieldControlClass](https://bitforge-ui.web.app/ai/reference/bf-field-control-class.md): The class list that makes a custom control look like a library text field ([docs](https://bitforge-ui.web.app/api/bf-field-control-class))
@@ -136,6 +182,7 @@
136
182
  - [BfInputType](https://bitforge-ui.web.app/ai/reference/bf-input-type.md): The native input types a text field supports, all bound as strings ([docs](https://bitforge-ui.web.app/api/bf-input-type))
137
183
  - [BfLabels](https://bitforge-ui.web.app/ai/reference/bf-labels.md): Every built-in user-facing string of the library, one key per string ([docs](https://bitforge-ui.web.app/api/bf-labels))
138
184
  - [BfLabelsOverrides](https://bitforge-ui.web.app/ai/reference/bf-labels-overrides.md): The strings provideBfLabels replaces, each one falling back to the parent ([docs](https://bitforge-ui.web.app/api/bf-labels-overrides))
185
+ - [BfPageHeaderHeadingLevel](https://bitforge-ui.web.app/ai/reference/bf-page-header-heading-level.md): The heading level of a page header title, one for a page or two ([docs](https://bitforge-ui.web.app/api/bf-page-header-heading-level))
139
186
  - [BfProgressSize](https://bitforge-ui.web.app/ai/reference/bf-progress-size.md): The two track heights of a progress bar, thin and regular ([docs](https://bitforge-ui.web.app/api/bf-progress-size))
140
187
  - [BfProgressTone](https://bitforge-ui.web.app/ai/reference/bf-progress-tone.md): The four fill colours of a progress bar, from primary to danger ([docs](https://bitforge-ui.web.app/api/bf-progress-tone))
141
188
  - [BfRadioGroupOrientation](https://bitforge-ui.web.app/ai/reference/bf-radio-group-orientation.md): Whether a radio group stacks its options or sets them in a row ([docs](https://bitforge-ui.web.app/api/bf-radio-group-orientation))
@@ -143,16 +190,32 @@
143
190
  - [BfSegmentedSize](https://bitforge-ui.web.app/ai/reference/bf-segmented-size.md): Former name of the shared size scale for segmented controls, kept until 1.0.0 ([docs](https://bitforge-ui.web.app/api/bf-segmented-size))
144
191
  - [BfSegmentOption](https://bitforge-ui.web.app/ai/reference/bf-segment-option.md): One segment of a segmented control with its value, its label and a disabled flag ([docs](https://bitforge-ui.web.app/api/bf-segment-option))
145
192
  - [BfSelectOption](https://bitforge-ui.web.app/ai/reference/bf-select-option.md): One choice of a select with its value, its label and a disabled flag ([docs](https://bitforge-ui.web.app/api/bf-select-option))
193
+ - [BfSidebarStateService](https://bitforge-ui.web.app/ai/reference/bf-sidebar-state-service.md): The sidebar's collapsed state, kept in storage between visits of the app ([docs](https://bitforge-ui.web.app/api/bf-sidebar-state-service))
146
194
  - [BfSize](https://bitforge-ui.web.app/ai/reference/bf-size.md): The three height steps every sized field and control shares ([docs](https://bitforge-ui.web.app/api/bf-size))
195
+ - [BfSkeletonShape](https://bitforge-ui.web.app/ai/reference/bf-skeleton-shape.md): The three skeleton shapes, text lines, a rectangle or a circle ([docs](https://bitforge-ui.web.app/api/bf-skeleton-shape))
147
196
  - [BfSpinnerSize](https://bitforge-ui.web.app/ai/reference/bf-spinner-size.md): The three spinner diameters, from inline text to a page loading state ([docs](https://bitforge-ui.web.app/api/bf-spinner-size))
197
+ - [BfStatAppearance](https://bitforge-ui.web.app/ai/reference/bf-stat-appearance.md): The three stat surfaces, plain, an outlined card or a sunken tile ([docs](https://bitforge-ui.web.app/api/bf-stat-appearance))
198
+ - [BfStatTrend](https://bitforge-ui.web.app/ai/reference/bf-stat-trend.md): The three directions of a stat's delta pill, up, down or no change ([docs](https://bitforge-ui.web.app/api/bf-stat-trend))
199
+ - [BfStatTrendIntent](https://bitforge-ui.web.app/ai/reference/bf-stat-trend-intent.md): Whether a rising or a falling figure is the good news for a stat ([docs](https://bitforge-ui.web.app/api/bf-stat-trend-intent))
200
+ - [BfStatVariant](https://bitforge-ui.web.app/ai/reference/bf-stat-variant.md): The two stat surfaces, plain on its container or an outlined card tile ([docs](https://bitforge-ui.web.app/api/bf-stat-variant))
148
201
  - [BfTabBarController](https://bitforge-ui.web.app/ai/reference/bf-tab-bar-controller.md): The state a parent that drives a projected tab bar gives it to derive from ([docs](https://bitforge-ui.web.app/api/bf-tab-bar-controller))
149
202
  - [BfTabBarHost](https://bitforge-ui.web.app/ai/reference/bf-tab-bar-host.md): What each tab reads from its tab bar: the selection, tab stop and link mode ([docs](https://bitforge-ui.web.app/api/bf-tab-bar-host))
203
+ - [BfTableAlign](https://bitforge-ui.web.app/ai/reference/bf-table-align.md): The inline alignment of a table column, start for text or end for numbers ([docs](https://bitforge-ui.web.app/api/bf-table-align))
204
+ - [BfTableCellContext](https://bitforge-ui.web.app/ai/reference/bf-table-cell-context.md): The row and its index that a custom table cell template receives ([docs](https://bitforge-ui.web.app/api/bf-table-cell-context))
205
+ - [BfTableCellDirective](https://bitforge-ui.web.app/ai/reference/bf-table-cell-directive.md): Custom template for the cells of one table column, with the row typed ([docs](https://bitforge-ui.web.app/api/bf-table-cell-directive))
206
+ - [BfTableColumn](https://bitforge-ui.web.app/ai/reference/bf-table-column.md): One table column with its row key, header label, sorting and alignment ([docs](https://bitforge-ui.web.app/api/bf-table-column))
207
+ - [BfTableRowKey](https://bitforge-ui.web.app/ai/reference/bf-table-row-key.md): Function that returns the unique string key of one table row ([docs](https://bitforge-ui.web.app/api/bf-table-row-key))
208
+ - [BfTableSort](https://bitforge-ui.web.app/ai/reference/bf-table-sort.md): The column key and direction a table is sorted by, set by its headers ([docs](https://bitforge-ui.web.app/api/bf-table-sort))
209
+ - [BfTableSortDirection](https://bitforge-ui.web.app/ai/reference/bf-table-sort-direction.md): The direction a sorted table column is in, ascending or descending ([docs](https://bitforge-ui.web.app/api/bf-table-sort-direction))
210
+ - [BfTableStack](https://bitforge-ui.web.app/ai/reference/bf-table-stack.md): When a table stacks its rows into cards: never, when narrow, or under touch ([docs](https://bitforge-ui.web.app/api/bf-table-stack))
150
211
  - [BfTabLinks](https://bitforge-ui.web.app/ai/reference/bf-tab-links.md): The URLs a router-aware parent gives a tab bar to render its tabs as links ([docs](https://bitforge-ui.web.app/api/bf-tab-links))
151
212
  - [BfToggleLabelPosition](https://bitforge-ui.web.app/ai/reference/bf-toggle-label-position.md): Whether a toggle's label sits after or before its switch ([docs](https://bitforge-ui.web.app/api/bf-toggle-label-position))
152
213
  - [bfValidationMessage](https://bitforge-ui.web.app/ai/reference/bf-validation-message.md): Turns one validation error into the text a form field shows under it ([docs](https://bitforge-ui.web.app/api/bf-validation-message))
153
214
  - [BfValidationMessages](https://bitforge-ui.web.app/ai/reference/bf-validation-messages.md): The default error text of each validator kind, shown under a form field ([docs](https://bitforge-ui.web.app/api/bf-validation-messages))
215
+ - [provideBfColorScheme](https://bitforge-ui.web.app/ai/reference/provide-bf-color-scheme.md): Applies the stored colour scheme choice to html, for desktop web apps ([docs](https://bitforge-ui.web.app/api/provide-bf-color-scheme))
154
216
  - [provideBfDefaults](https://bitforge-ui.web.app/ai/reference/provide-bf-defaults.md): Sets the default field and control sizes for an app or a sub-tree ([docs](https://bitforge-ui.web.app/api/provide-bf-defaults))
155
217
  - [provideBfLabels](https://bitforge-ui.web.app/ai/reference/provide-bf-labels.md): Replaces built-in strings for an app or a sub-tree, such as a translation ([docs](https://bitforge-ui.web.app/api/provide-bf-labels))
218
+ - [provideBfSidebarState](https://bitforge-ui.web.app/ai/reference/provide-bf-sidebar-state.md): Remembers the collapsed sidebar between visits, for desktop web apps ([docs](https://bitforge-ui.web.app/api/provide-bf-sidebar-state))
156
219
 
157
220
  ### @bitforgehq/ui/overlay
158
221
 
@@ -160,11 +223,16 @@
160
223
  - [BF_DIALOG_DATA](https://bitforge-ui.web.app/ai/reference/bf_dialog_data.md): Injection token carrying the data a dialog was opened with, for its content ([docs](https://bitforge-ui.web.app/api/bf_dialog_data))
161
224
  - [BF_OVERLAY_DATA](https://bitforge-ui.web.app/ai/reference/bf_overlay_data.md): Injection token carrying the data an overlay was opened with, for its content ([docs](https://bitforge-ui.web.app/api/bf_overlay_data))
162
225
  - [BF_OVERLAY_HOST](https://bitforge-ui.web.app/ai/reference/bf_overlay_host.md): Optional injection token through which a host shell plugs into the overlay core ([docs](https://bitforge-ui.web.app/api/bf_overlay_host))
226
+ - [BF_SIDE_PANEL_DATA](https://bitforge-ui.web.app/ai/reference/bf_side_panel_data.md): Injection token carrying the data a side panel was opened with, for its content ([docs](https://bitforge-ui.web.app/api/bf_side_panel_data))
227
+ - [BfComboboxFilter](https://bitforge-ui.web.app/ai/reference/bf-combobox-filter.md): Decides whether a combobox option matches the text typed into the field ([docs](https://bitforge-ui.web.app/api/bf-combobox-filter))
228
+ - [BfComboboxOption](https://bitforge-ui.web.app/ai/reference/bf-combobox-option.md): One combobox choice with its value, label, description, group and disabled flag ([docs](https://bitforge-ui.web.app/api/bf-combobox-option))
163
229
  - [BfComponentOverlayRef](https://bitforge-ui.web.app/ai/reference/bf-component-overlay-ref.md): Overlay handle whose content is a component, with access to its ComponentRef ([docs](https://bitforge-ui.web.app/api/bf-component-overlay-ref))
164
230
  - [BfConfirmButton](https://bitforge-ui.web.app/ai/reference/bf-confirm-button.md): One button of a confirm dialog: its answer, its label and its role ([docs](https://bitforge-ui.web.app/api/bf-confirm-button))
165
231
  - [BfConfirmButtonRole](https://bitforge-ui.web.app/ai/reference/bf-confirm-button-role.md): The role of a confirm dialog button, the cancel answer or a destructive action ([docs](https://bitforge-ui.web.app/api/bf-confirm-button-role))
166
232
  - [BfConfirmOptions](https://bitforge-ui.web.app/ai/reference/bf-confirm-options.md): Options of a confirm dialog: its title, message, buttons and width ([docs](https://bitforge-ui.web.app/api/bf-confirm-options))
167
233
  - [BfConfirmSize](https://bitforge-ui.web.app/ai/reference/bf-confirm-size.md): The two widths a confirm dialog comes in, small or medium ([docs](https://bitforge-ui.web.app/api/bf-confirm-size))
234
+ - [BfDateInputPicker](https://bitforge-ui.web.app/ai/reference/bf-date-input-picker.md): Whether a date input offers a calendar popover besides typing ([docs](https://bitforge-ui.web.app/api/bf-date-input-picker))
235
+ - [BfDateTimeInputPicker](https://bitforge-ui.web.app/ai/reference/bf-date-time-input-picker.md): Whether a date and time input offers a calendar and time list popover ([docs](https://bitforge-ui.web.app/api/bf-date-time-input-picker))
168
236
  - [BfDesktopToastConfig](https://bitforge-ui.web.app/ai/reference/bf-desktop-toast-config.md): App-wide settings of desktop toasts: where they sit and how many show at once ([docs](https://bitforge-ui.web.app/api/bf-desktop-toast-config))
169
237
  - [BfDesktopToastOptions](https://bitforge-ui.web.app/ai/reference/bf-desktop-toast-options.md): Options of one desktop toast: its message, an action and its duration ([docs](https://bitforge-ui.web.app/api/bf-desktop-toast-options))
170
238
  - [BfDesktopToastPosition](https://bitforge-ui.web.app/ai/reference/bf-desktop-toast-position.md): The viewport corners and edges a desktop toast stack can anchor to ([docs](https://bitforge-ui.web.app/api/bf-desktop-toast-position))
@@ -187,6 +255,7 @@
187
255
  - [BfOverlayController](https://bitforge-ui.web.app/ai/reference/bf-overlay-controller.md): What the overlay service does for a ref: close it and re-apply its position ([docs](https://bitforge-ui.web.app/api/bf-overlay-controller))
188
256
  - [BfOverlayHost](https://bitforge-ui.web.app/ai/reference/bf-overlay-host.md): What a host shell tells the overlay core: back handling and document scroll ([docs](https://bitforge-ui.web.app/api/bf-overlay-host))
189
257
  - [BfOverlayOptions](https://bitforge-ui.web.app/ai/reference/bf-overlay-options.md): Options of an overlay: its data, backdrop, focus, dismissal, position and motion ([docs](https://bitforge-ui.web.app/api/bf-overlay-options))
258
+ - [BfOverlayPlacement](https://bitforge-ui.web.app/ai/reference/bf-overlay-placement.md): Where an overlay panel sits: a viewport position or full height at the end ([docs](https://bitforge-ui.web.app/api/bf-overlay-placement))
190
259
  - [BfOverlayPosition](https://bitforge-ui.web.app/ai/reference/bf-overlay-position.md): Where an overlay panel sits in the viewport: bottom, centre, top or fullscreen ([docs](https://bitforge-ui.web.app/api/bf-overlay-position))
191
260
  - [BfOverlayRef](https://bitforge-ui.web.app/ai/reference/bf-overlay-ref.md): Handle on an open overlay that closes it and resolves with its result ([docs](https://bitforge-ui.web.app/api/bf-overlay-ref))
192
261
  - [BfOverlayRole](https://bitforge-ui.web.app/ai/reference/bf-overlay-role.md): The role an overlay panel carries: a dialog, an alert dialog or a status ([docs](https://bitforge-ui.web.app/api/bf-overlay-role))
@@ -194,11 +263,22 @@
194
263
  - [BfOverlayStack](https://bitforge-ui.web.app/ai/reference/bf-overlay-stack.md): Keeps the open overlays in order and makes the page behind them inert ([docs](https://bitforge-ui.web.app/api/bf-overlay-stack))
195
264
  - [BfOverlayStackOptions](https://bitforge-ui.web.app/ai/reference/bf-overlay-stack-options.md): How an overlay takes part in the stack: its back priority and modal depth ([docs](https://bitforge-ui.web.app/api/bf-overlay-stack-options))
196
265
  - [BfOverlayTemplateContext](https://bitforge-ui.web.app/ai/reference/bf-overlay-template-context.md): The context a template opened as an overlay receives: its ref and data ([docs](https://bitforge-ui.web.app/api/bf-overlay-template-context))
266
+ - [BfPopoverPlacement](https://bitforge-ui.web.app/ai/reference/bf-popover-placement.md): Where a popover opens against its trigger, above or below, at either end ([docs](https://bitforge-ui.web.app/api/bf-popover-placement))
267
+ - [BfPopoverTriggerDirective](https://bitforge-ui.web.app/ai/reference/bf-popover-trigger-directive.md): Opens an anchored, non-modal popover panel from any element or button ([docs](https://bitforge-ui.web.app/api/bf-popover-trigger-directive))
268
+ - [BfSidePanelConfig](https://bitforge-ui.web.app/ai/reference/bf-side-panel-config.md): Options of a side panel: its data, width, modality, name and injector ([docs](https://bitforge-ui.web.app/api/bf-side-panel-config))
269
+ - [BfSidePanelRef](https://bitforge-ui.web.app/ai/reference/bf-side-panel-ref.md): Handle on an open side panel that closes it and resolves with its result ([docs](https://bitforge-ui.web.app/api/bf-side-panel-ref))
270
+ - [BfSidePanelService](https://bitforge-ui.web.app/ai/reference/bf-side-panel-service.md): Opens a full-height panel from the end edge, modal or beside the page ([docs](https://bitforge-ui.web.app/api/bf-side-panel-service))
271
+ - [BfSidePanelTemplateContext](https://bitforge-ui.web.app/ai/reference/bf-side-panel-template-context.md): The context a template opened as a side panel receives: its ref and its data ([docs](https://bitforge-ui.web.app/api/bf-side-panel-template-context))
272
+ - [BfSidePanelWidth](https://bitforge-ui.web.app/ai/reference/bf-side-panel-width.md): The side panel widths, from a 360 px detail list to a 640 px form ([docs](https://bitforge-ui.web.app/api/bf-side-panel-width))
197
273
  - [BfStackedOverlay](https://bitforge-ui.web.app/ai/reference/bf-stacked-overlay.md): What the overlay stack needs of an overlay: a way to close it ([docs](https://bitforge-ui.web.app/api/bf-stacked-overlay))
274
+ - [BfTimeInputHourCycle](https://bitforge-ui.web.app/ai/reference/bf-time-input-hour-cycle.md): A twelve-hour clock with AM and PM, or a twenty-four-hour clock ([docs](https://bitforge-ui.web.app/api/bf-time-input-hour-cycle))
275
+ - [BfTimeInputPicker](https://bitforge-ui.web.app/ai/reference/bf-time-input-picker.md): Whether a time input offers a popover list of times besides typing ([docs](https://bitforge-ui.web.app/api/bf-time-input-picker))
198
276
  - [BfToastAction](https://bitforge-ui.web.app/ai/reference/bf-toast-action.md): The action button of a toast: its label and what it runs when clicked ([docs](https://bitforge-ui.web.app/api/bf-toast-action))
199
277
  - [BfToastController](https://bitforge-ui.web.app/ai/reference/bf-toast-controller.md): What the toast queue does for a toast ref: dismiss the toast now ([docs](https://bitforge-ui.web.app/api/bf-toast-controller))
200
278
  - [BfToastDismissReason](https://bitforge-ui.web.app/ai/reference/bf-toast-dismiss-reason.md): Why a toast ended: its time ran out, its action fired or it was dismissed ([docs](https://bitforge-ui.web.app/api/bf-toast-dismiss-reason))
201
279
  - [BfToastRef](https://bitforge-ui.web.app/ai/reference/bf-toast-ref.md): Handle on a shown or queued toast that dismisses it and reports why it ended ([docs](https://bitforge-ui.web.app/api/bf-toast-ref))
280
+ - [BfTooltipDirective](https://bitforge-ui.web.app/ai/reference/bf-tooltip-directive.md): Adds a hover and keyboard-focus tooltip to any control on desktop ([docs](https://bitforge-ui.web.app/api/bf-tooltip-directive))
281
+ - [BfTooltipPlacement](https://bitforge-ui.web.app/ai/reference/bf-tooltip-placement.md): Which side of its element a tooltip sits on: top, bottom, start or end ([docs](https://bitforge-ui.web.app/api/bf-tooltip-placement))
202
282
  - [fadeDown](https://bitforge-ui.web.app/ai/reference/fade-down.md): Fades an element out while it sinks, the reverse of the fadeUp animation ([docs](https://bitforge-ui.web.app/api/fade-down))
203
283
  - [fadeIn](https://bitforge-ui.web.app/ai/reference/fade-in.md): Fades an element in, the default enter animation of an overlay ([docs](https://bitforge-ui.web.app/api/fade-in))
204
284
  - [fadeOut](https://bitforge-ui.web.app/ai/reference/fade-out.md): Fades an element out, the default exit animation of an overlay ([docs](https://bitforge-ui.web.app/api/fade-out))
@@ -210,6 +290,8 @@
210
290
  - [provideBfDesktopToast](https://bitforge-ui.web.app/ai/reference/provide-bf-desktop-toast.md): Sets where desktop toasts appear and how many show at once, app-wide ([docs](https://bitforge-ui.web.app/api/provide-bf-desktop-toast))
211
291
  - [scaleIn](https://bitforge-ui.web.app/ai/reference/scale-in.md): Scales an element up while fading it in, the enter animation of centred dialogs ([docs](https://bitforge-ui.web.app/api/scale-in))
212
292
  - [slideDown](https://bitforge-ui.web.app/ai/reference/slide-down.md): Slides an element down out of place, the exit animation of a bottom sheet ([docs](https://bitforge-ui.web.app/api/slide-down))
293
+ - [slideInFromEnd](https://bitforge-ui.web.app/ai/reference/slide-in-from-end.md): Slides an element in from the inline end, the enter animation of a side panel ([docs](https://bitforge-ui.web.app/api/slide-in-from-end))
294
+ - [slideOutToEnd](https://bitforge-ui.web.app/ai/reference/slide-out-to-end.md): Slides an element out past the inline end, the exit animation of a side panel ([docs](https://bitforge-ui.web.app/api/slide-out-to-end))
213
295
  - [slideUp](https://bitforge-ui.web.app/ai/reference/slide-up.md): Slides an element up into place, the enter animation of a bottom sheet ([docs](https://bitforge-ui.web.app/api/slide-up))
214
296
 
215
297
  ### @bitforgehq/ui/icons
@@ -308,8 +390,23 @@
308
390
  - [shouldCompletePop](https://bitforge-ui.web.app/ai/reference/should-complete-pop.md): Decides whether a released swipe-back completes the pop or settles back ([docs](https://bitforge-ui.web.app/api/should-complete-pop))
309
391
  - [withBfShellRouting](https://bitforge-ui.web.app/ai/reference/with-bf-shell-routing.md): The router setting the mobile shell's stack needs, passed to provideRouter ([docs](https://bitforge-ui.web.app/api/with-bf-shell-routing))
310
392
 
393
+ ### @bitforgehq/ui/charts
394
+
395
+ - [BfBarChartOrientation](https://bitforge-ui.web.app/ai/reference/bf-bar-chart-orientation.md): The two bar directions, vertical columns or horizontal bars ([docs](https://bitforge-ui.web.app/api/bf-bar-chart-orientation))
396
+ - [BfChartCardHeadingLevel](https://bitforge-ui.web.app/ai/reference/bf-chart-card-heading-level.md): Heading level of a chart card title, two on a page or three inside ([docs](https://bitforge-ui.web.app/api/bf-chart-card-heading-level))
397
+ - [BfChartCurve](https://bitforge-ui.web.app/ai/reference/bf-chart-curve.md): The two line shapes, straight segments or a smooth monotone curve ([docs](https://bitforge-ui.web.app/api/bf-chart-curve))
398
+ - [BfChartLegendPosition](https://bitforge-ui.web.app/ai/reference/bf-chart-legend-position.md): The legend positions of a chart, above or below the plot, or none ([docs](https://bitforge-ui.web.app/api/bf-chart-legend-position))
399
+ - [BfChartSeries](https://bitforge-ui.web.app/ai/reference/bf-chart-series.md): One named series of chart values, one per category, null for a gap ([docs](https://bitforge-ui.web.app/api/bf-chart-series))
400
+ - [BfChartValueFormat](https://bitforge-ui.web.app/ai/reference/bf-chart-value-format.md): Function that formats one chart value for axes, tooltips and the table ([docs](https://bitforge-ui.web.app/api/bf-chart-value-format))
401
+ - [BfDonutSlice](https://bitforge-ui.web.app/ai/reference/bf-donut-slice.md): One labelled slice of a donut chart with its value ([docs](https://bitforge-ui.web.app/api/bf-donut-slice))
402
+
311
403
  ### @bitforgehq/ui/testing
312
404
 
405
+ - [BfCalendarHarness](https://bitforge-ui.web.app/ai/reference/bf-calendar-harness.md): Test harness for the calendar: reads the month and picks a date by ISO string ([docs](https://bitforge-ui.web.app/api/bf-calendar-harness))
406
+ - [BfChartHarness](https://bitforge-ui.web.app/ai/reference/bf-chart-harness.md): Test harness for the charts: reads the series, toggles one and reads the data table ([docs](https://bitforge-ui.web.app/api/bf-chart-harness))
407
+ - [BfComboboxHarness](https://bitforge-ui.web.app/ai/reference/bf-combobox-harness.md): Test harness for the comboboxes: types, reads and picks options and tags ([docs](https://bitforge-ui.web.app/api/bf-combobox-harness))
408
+ - [BfDateInputHarness](https://bitforge-ui.web.app/ai/reference/bf-date-input-harness.md): Test harness for the date input: types a date or picks one in its calendar ([docs](https://bitforge-ui.web.app/api/bf-date-input-harness))
409
+ - [BfDateTimeInputHarness](https://bitforge-ui.web.app/ai/reference/bf-date-time-input-harness.md): Test harness for the date and time input: types or picks a date and time ([docs](https://bitforge-ui.web.app/api/bf-date-time-input-harness))
313
410
  - [BfDesktopToastHarness](https://bitforge-ui.web.app/ai/reference/bf-desktop-toast-harness.md): Test harness for a desktop toast: its message, its action and Escape ([docs](https://bitforge-ui.web.app/api/bf-desktop-toast-harness))
314
411
  - [BfDialogHarness](https://bitforge-ui.web.app/ai/reference/bf-dialog-harness.md): Test harness for a dialog: its title, text and role, its buttons and Escape ([docs](https://bitforge-ui.web.app/api/bf-dialog-harness))
315
412
  - [BfHarnessFilters](https://bitforge-ui.web.app/ai/reference/bf-harness-filters.md): Filters a library harness query by selector, ancestor and the widget label ([docs](https://bitforge-ui.web.app/api/bf-harness-filters))
@@ -317,10 +414,18 @@
317
414
  - [BfMenuButtonHarness](https://bitforge-ui.web.app/ai/reference/bf-menu-button-harness.md): Test harness for a menu button: opens it and hands out the menu it opened ([docs](https://bitforge-ui.web.app/api/bf-menu-button-harness))
318
415
  - [BfMenuHarness](https://bitforge-ui.web.app/ai/reference/bf-menu-harness.md): Test harness for a menu: lists its items and clicks one, through submenus ([docs](https://bitforge-ui.web.app/api/bf-menu-harness))
319
416
  - [BfMenuItemHarness](https://bitforge-ui.web.app/ai/reference/bf-menu-item-harness.md): Test harness for a menu row: its text, disabled, checked and submenu state ([docs](https://bitforge-ui.web.app/api/bf-menu-item-harness))
417
+ - [BfPaginationHarness](https://bitforge-ui.web.app/ai/reference/bf-pagination-harness.md): Test harness for pagination: reads the current page and moves between pages ([docs](https://bitforge-ui.web.app/api/bf-pagination-harness))
418
+ - [BfPopoverHarness](https://bitforge-ui.web.app/ai/reference/bf-popover-harness.md): Test harness for a popover: opens and closes it and reads its panel ([docs](https://bitforge-ui.web.app/api/bf-popover-harness))
320
419
  - [BfRadioGroupHarness](https://bitforge-ui.web.app/ai/reference/bf-radio-group-harness.md): Test harness for the radio group: reads its options and selects one by label ([docs](https://bitforge-ui.web.app/api/bf-radio-group-harness))
321
420
  - [BfSegmentedHarness](https://bitforge-ui.web.app/ai/reference/bf-segmented-harness.md): Test harness for the segmented control: reads its segments and selects one ([docs](https://bitforge-ui.web.app/api/bf-segmented-harness))
322
421
  - [BfSelectHarness](https://bitforge-ui.web.app/ai/reference/bf-select-harness.md): Test harness for the select: reads its label and options and picks one ([docs](https://bitforge-ui.web.app/api/bf-select-harness))
422
+ - [BfSidebarToggleHarness](https://bitforge-ui.web.app/ai/reference/bf-sidebar-toggle-harness.md): Test harness for a sidebar toggle: reads and flips the collapsed sidebar ([docs](https://bitforge-ui.web.app/api/bf-sidebar-toggle-harness))
423
+ - [BfSidePanelHarness](https://bitforge-ui.web.app/ai/reference/bf-side-panel-harness.md): Test harness for a side panel: its title, its close button and its state ([docs](https://bitforge-ui.web.app/api/bf-side-panel-harness))
424
+ - [BfTabGroupHarness](https://bitforge-ui.web.app/ai/reference/bf-tab-group-harness.md): Test harness for the tab group: reads its tabs and panel and selects a tab ([docs](https://bitforge-ui.web.app/api/bf-tab-group-harness))
425
+ - [BfTableHarness](https://bitforge-ui.web.app/ai/reference/bf-table-harness.md): Test harness for the data table: reads rows and cells, sorts and selects rows ([docs](https://bitforge-ui.web.app/api/bf-table-harness))
323
426
  - [BfTestingOptions](https://bitforge-ui.web.app/ai/reference/bf-testing-options.md): Options of the test providers: the size defaults and labels a spec runs with ([docs](https://bitforge-ui.web.app/api/bf-testing-options))
427
+ - [BfTimeInputHarness](https://bitforge-ui.web.app/ai/reference/bf-time-input-harness.md): Test harness for the time input: types a time or picks one from its list ([docs](https://bitforge-ui.web.app/api/bf-time-input-harness))
428
+ - [BfTooltipHarness](https://bitforge-ui.web.app/ai/reference/bf-tooltip-harness.md): Test harness for a tooltip: shows it, reads its text and whether it shows ([docs](https://bitforge-ui.web.app/api/bf-tooltip-harness))
324
429
  - [installBfJsdomShims](https://bitforge-ui.web.app/ai/reference/install-bf-jsdom-shims.md): Installs the browser APIs jsdom lacks and the library needs, only where missing ([docs](https://bitforge-ui.web.app/api/install-bf-jsdom-shims))
325
430
  - [provideBfTesting](https://bitforge-ui.web.app/ai/reference/provide-bf-testing.md): Test providers for the widgets and overlays, with document cleanup after each test ([docs](https://bitforge-ui.web.app/api/provide-bf-testing))
326
431
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bitforgehq/ui",
3
- "version": "0.3.0",
4
- "description": "Bitforge UI: Angular 22 widgets (Meadow Sage design, Tailwind v4, signals-first) and, from v0.2, a Capacitor app shell.",
3
+ "version": "0.3.2",
4
+ "description": "Bitforge UI: Angular 22 widgets (Meadow Sage palette with an indigo default primary to override, Tailwind v4, signals-first) and, from v0.2, a Capacitor app shell.",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -12,7 +12,7 @@
12
12
  "provenance": false
13
13
  },
14
14
  "bin": {
15
- "bf-ui": "./bin/bf-ui.js"
15
+ "bf-ui": "bin/bf-ui.js"
16
16
  },
17
17
  "peerDependencies": {
18
18
  "@angular/cdk": "^22.0.0",
@@ -67,6 +67,10 @@
67
67
  "types": "./types/bitforgehq-ui.d.ts",
68
68
  "default": "./fesm2022/bitforgehq-ui.mjs"
69
69
  },
70
+ "./charts": {
71
+ "types": "./types/bitforgehq-ui-charts.d.ts",
72
+ "default": "./fesm2022/bitforgehq-ui-charts.mjs"
73
+ },
70
74
  "./icons": {
71
75
  "types": "./types/bitforgehq-ui-icons.d.ts",
72
76
  "default": "./fesm2022/bitforgehq-ui-icons.mjs"
package/theme.css CHANGED
@@ -2,6 +2,10 @@
2
2
  * @bitforgehq/ui — Meadow Sage design tokens.
3
3
  * Source: docs/design/foundations.md (extracted from docs/design/meadow-sage.dc.html).
4
4
  *
5
+ * The palette is Meadow Sage; the default primary is a neutral indigo (#2b26ba), not the design's
6
+ * sage green, because it is meant to be overridden with the app's brand colour (below). An indigo
7
+ * primary after install is expected.
8
+ *
5
9
  * Usage (web and mobile apps alike):
6
10
  * @import 'tailwindcss';
7
11
  * @import '@bitforgehq/ui/theme.css';
@@ -92,6 +96,26 @@
92
96
  --color-danger-border: #c8452f;
93
97
  --color-neutral: #4a5347;
94
98
  --color-neutral-soft: #efece3;
99
+ --color-info: #0f4c6b; /* informational badge: 7.7:1 on info-soft */
100
+ --color-info-soft: #dcecf5;
101
+
102
+ /* Tooltip: a dark pill in light mode, inverted (light) in dark mode */
103
+ --color-tooltip: #1f2a22;
104
+ --color-on-tooltip: #ffffff; /* 14.9:1 on tooltip */
105
+
106
+ /* Charts (@bitforgehq/ui/charts): a categorical palette in a fixed order (series 1 takes chart-1,
107
+ never cycled by rank), each >= 3:1 on surface and bg, adjacent pairs distinct under colour
108
+ vision deficiency; recessive grid lines and a >= 3:1 axis line. */
109
+ --color-chart-1: #2f7d4f; /* sage green */
110
+ --color-chart-2: #4a55d0; /* indigo */
111
+ --color-chart-3: #c4561f; /* terracotta */
112
+ --color-chart-4: #00809a; /* teal */
113
+ --color-chart-5: #8a6a00; /* ochre */
114
+ --color-chart-6: #c2387a; /* berry */
115
+ --color-chart-7: #8045c4; /* violet */
116
+ --color-chart-8: #5f7d10; /* olive */
117
+ --color-chart-grid: #ebe8df; /* grid lines: decorative */
118
+ --color-chart-axis: #8e8e82; /* axis baseline: >= 3:1 on surface */
95
119
 
96
120
  /* Lines */
97
121
  --color-border: #e4e0d4; /* decorative lines only (dividers, card edges) */
@@ -164,6 +188,68 @@
164
188
  }
165
189
  }
166
190
 
191
+ /* bf-skeleton shimmer: a soft highlight sweeps across the placeholder from the inline start
192
+ (hidden under reduced motion); the -rtl pair sweeps it the other way under dir="rtl". */
193
+ --animate-skeleton-shimmer: bf-skeleton-shimmer 1.6s ease-in-out infinite;
194
+ --animate-skeleton-shimmer-rtl: bf-skeleton-shimmer-rtl 1.6s ease-in-out infinite;
195
+ @keyframes bf-skeleton-shimmer {
196
+ from {
197
+ transform: translateX(-100%);
198
+ }
199
+ to {
200
+ transform: translateX(100%);
201
+ }
202
+ }
203
+ @keyframes bf-skeleton-shimmer-rtl {
204
+ from {
205
+ transform: translateX(100%);
206
+ }
207
+ to {
208
+ transform: translateX(-100%);
209
+ }
210
+ }
211
+
212
+ /* @bitforgehq/ui/charts enter motion, on the first render and on every data change (the marks
213
+ are re-created): a line draws along its path (pathLength 1, so the dash is the whole line),
214
+ bars grow from the baseline (scale on the fill box, origin at the baseline), areas and
215
+ markers fade in. Charts drop every one under reduced motion (motion-reduce:animate-none). */
216
+ --animate-chart-draw: bf-chart-draw 700ms var(--ease-md) both;
217
+ --animate-chart-grow-y: bf-chart-grow-y 600ms var(--ease-md) both;
218
+ --animate-chart-grow-x: bf-chart-grow-x 600ms var(--ease-md) both;
219
+ --animate-chart-fade: bf-chart-fade 700ms var(--ease-md) both;
220
+ @keyframes bf-chart-draw {
221
+ from {
222
+ stroke-dashoffset: 1;
223
+ }
224
+ to {
225
+ stroke-dashoffset: 0;
226
+ }
227
+ }
228
+ @keyframes bf-chart-grow-y {
229
+ from {
230
+ transform: scaleY(0);
231
+ }
232
+ to {
233
+ transform: scaleY(1);
234
+ }
235
+ }
236
+ @keyframes bf-chart-grow-x {
237
+ from {
238
+ transform: scaleX(0);
239
+ }
240
+ to {
241
+ transform: scaleX(1);
242
+ }
243
+ }
244
+ @keyframes bf-chart-fade {
245
+ from {
246
+ opacity: 0;
247
+ }
248
+ to {
249
+ opacity: 1;
250
+ }
251
+ }
252
+
167
253
  /* Safe areas: Capacitor 8.3+ injects --safe-area-inset-* on Android; env() covers iOS and web. */
168
254
  --spacing-safe-top: var(--safe-area-inset-top, env(safe-area-inset-top, 0px));
169
255
  --spacing-safe-bottom: var(--safe-area-inset-bottom, env(safe-area-inset-bottom, 0px));
@@ -213,6 +299,21 @@
213
299
  --color-danger-soft: #3d1f1a;
214
300
  --color-danger-pressed: #f4a497;
215
301
  --color-danger-border: #d3563f;
302
+ --color-info: #7cc4ea; /* 7.2:1 on info-soft */
303
+ --color-info-soft: #14303e;
304
+ --color-tooltip: #ececee;
305
+ --color-on-tooltip: #1e2024; /* 13.8:1 on tooltip */
306
+
307
+ --color-chart-1: #3e9e66;
308
+ --color-chart-2: #7479ee;
309
+ --color-chart-3: #d8692f;
310
+ --color-chart-4: #1f9cb8;
311
+ --color-chart-5: #b08a1c;
312
+ --color-chart-6: #dc5893;
313
+ --color-chart-7: #a072e6;
314
+ --color-chart-8: #7f9c2c;
315
+ --color-chart-grid: #2a2c31;
316
+ --color-chart-axis: #75777e;
216
317
  --color-neutral: #b8bbc2;
217
318
  --color-neutral-soft: #24262b;
218
319