@bitforgehq/ui 0.4.0 → 0.5.0-next.4

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 (87) hide show
  1. package/CHANGELOG.md +350 -0
  2. package/README.md +12 -12
  3. package/ai/MANIFEST.index.json +74 -2
  4. package/ai/MANIFEST.json +3507 -1763
  5. package/ai/REFERENCE.index.json +189 -0
  6. package/ai/REFERENCE.json +1617 -139
  7. package/ai/UI_GUIDE.md +70 -20
  8. package/ai/components/app-frame.md +1 -1
  9. package/ai/components/badge.md +41 -1
  10. package/ai/components/chat-composer.md +357 -0
  11. package/ai/components/chat-message.md +251 -0
  12. package/ai/components/chat-thread.md +521 -0
  13. package/ai/components/checkbox.md +7 -0
  14. package/ai/components/combobox.md +12 -0
  15. package/ai/components/date-input.md +9 -0
  16. package/ai/components/datetime-input.md +2 -0
  17. package/ai/components/field.md +10 -0
  18. package/ai/components/file-input.md +498 -0
  19. package/ai/components/header.md +1 -1
  20. package/ai/components/image-input.md +368 -0
  21. package/ai/components/image-tile.md +452 -0
  22. package/ai/components/image-viewer.md +309 -0
  23. package/ai/components/media-card.md +478 -0
  24. package/ai/components/menu-button.md +67 -9
  25. package/ai/components/menu.md +10 -0
  26. package/ai/components/multi-combobox.md +7 -0
  27. package/ai/components/nav-group.md +10 -3
  28. package/ai/components/nav-item.md +11 -2
  29. package/ai/components/number-input.md +2 -7
  30. package/ai/components/pagination.md +59 -11
  31. package/ai/components/popover.md +13 -0
  32. package/ai/components/radio-group.md +6 -0
  33. package/ai/components/segmented.md +14 -2
  34. package/ai/components/select.md +100 -42
  35. package/ai/components/sidebar-toggle.md +16 -9
  36. package/ai/components/sidebar.md +41 -13
  37. package/ai/components/tab-group.md +18 -2
  38. package/ai/components/table.md +17 -2
  39. package/ai/components/theme-menu-button.md +1 -0
  40. package/ai/components/time-input.md +2 -0
  41. package/ai/components/toolbar.md +7 -18
  42. package/ai/reference/bf-chat-composer-harness.md +64 -0
  43. package/ai/reference/bf-chat-message-role.md +27 -0
  44. package/ai/reference/bf-chat-message-status.md +28 -0
  45. package/ai/reference/bf-fade-in-directive.md +18 -0
  46. package/ai/reference/bf-file-input-harness.md +67 -0
  47. package/ai/reference/bf-file-input-variant.md +27 -0
  48. package/ai/reference/bf-image-input-harness.md +67 -0
  49. package/ai/reference/bf-image-input-shape.md +27 -0
  50. package/ai/reference/bf-image-tile-aspect.md +28 -0
  51. package/ai/reference/bf-image-tile-caption-placement.md +27 -0
  52. package/ai/reference/bf-image-tile-harness.md +70 -0
  53. package/ai/reference/bf-image-viewer-actions-context.md +29 -0
  54. package/ai/reference/bf-image-viewer-harness.md +87 -0
  55. package/ai/reference/bf-image-viewer-image.md +25 -0
  56. package/ai/reference/bf-image-viewer-options.md +33 -0
  57. package/ai/reference/bf-image-viewer-origin.md +23 -0
  58. package/ai/reference/bf-image-viewer-ref.md +55 -0
  59. package/ai/reference/bf-image-viewer-service.md +32 -0
  60. package/ai/reference/bf-labels.md +107 -75
  61. package/ai/reference/bf-media-card-aspect.md +28 -0
  62. package/ai/reference/bf-media-card-harness.md +66 -0
  63. package/ai/reference/bf-motion-list-directive.md +22 -0
  64. package/ai/reference/bf-pagination-position-label.md +22 -0
  65. package/ai/reference/bf-prose-directive.md +16 -0
  66. package/ai/reference/bf-rejected-file-reason.md +28 -0
  67. package/ai/reference/bf-rejected-file.md +28 -0
  68. package/ai/reference/bf-select-harness.md +14 -5
  69. package/ai/reference/bf-select-option.md +2 -0
  70. package/ai/reference/bf-size.md +3 -0
  71. package/ai/reference/bf_table_sort_select.md +23 -0
  72. package/ai/reference/provide-bf-labels.md +11 -3
  73. package/ai/reference/provide-bf-select.md +20 -0
  74. package/bin/bf-ui.js +1 -0
  75. package/fesm2022/bitforgehq-ui-overlay.mjs +2660 -594
  76. package/fesm2022/bitforgehq-ui-overlay.mjs.map +1 -1
  77. package/fesm2022/bitforgehq-ui-testing.mjs +414 -10
  78. package/fesm2022/bitforgehq-ui-testing.mjs.map +1 -1
  79. package/fesm2022/bitforgehq-ui.mjs +8056 -3993
  80. package/fesm2022/bitforgehq-ui.mjs.map +1 -1
  81. package/llms-full.txt +4923 -132
  82. package/llms.txt +36 -1
  83. package/package.json +1 -1
  84. package/theme.css +60 -0
  85. package/types/bitforgehq-ui-overlay.d.ts +695 -7
  86. package/types/bitforgehq-ui-testing.d.ts +517 -6
  87. package/types/bitforgehq-ui.d.ts +1699 -181
package/llms.txt CHANGED
@@ -35,6 +35,7 @@
35
35
  ### Forms
36
36
 
37
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))
38
+ - [bf-chat-composer](https://bitforge-ui.web.app/ai/components/chat-composer.md): Chat input that grows with the text and sends on Enter, or stops a reply ([docs](https://bitforge-ui.web.app/components/chat-composer))
38
39
  - [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))
39
40
  - [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))
40
41
  - [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))
@@ -42,12 +43,14 @@
42
43
  - [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
44
  - [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))
44
45
  - [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))
46
+ - [bf-file-input](https://bitforge-ui.web.app/ai/components/file-input.md): File picker field that lists picked or dropped files and checks type, size and count ([docs](https://bitforge-ui.web.app/components/file-input))
47
+ - [bf-image-input](https://bitforge-ui.web.app/ai/components/image-input.md): Single-image picker with a round or square preview tile and replace or remove ([docs](https://bitforge-ui.web.app/components/image-input))
45
48
  - [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
49
  - [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))
47
50
  - [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))
48
51
  - [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))
49
52
  - [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))
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))
53
+ - [bf-select](https://bitforge-ui.web.app/ai/components/select.md): Single-choice dropdown with a styled list, native under touch, with Signal Forms binding ([docs](https://bitforge-ui.web.app/components/select))
51
54
  - [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
55
  - [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
56
  - [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))
@@ -60,12 +63,16 @@
60
63
  - [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))
61
64
  - [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
65
  - [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))
66
+ - [bf-chat-message](https://bitforge-ui.web.app/ai/components/chat-message.md): One chat message, a user bubble or a full-width assistant reply that can stream ([docs](https://bitforge-ui.web.app/components/chat-message))
67
+ - [bf-chat-thread](https://bitforge-ui.web.app/ai/components/chat-thread.md): Scrolling chat message log that follows new text and offers a jump to latest ([docs](https://bitforge-ui.web.app/components/chat-thread))
63
68
  - [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
69
  - [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
70
  - [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))
71
+ - [bf-image-tile](https://bitforge-ui.web.app/ai/components/image-tile.md): Small card for thumbnail grids: a picture and title that act as one target ([docs](https://bitforge-ui.web.app/components/image-tile))
66
72
  - [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))
67
73
  - [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))
68
74
  - [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))
75
+ - [bf-media-card](https://bitforge-ui.web.app/ai/components/media-card.md): Card with an image that loads, fades in or fails, plus a body and actions ([docs](https://bitforge-ui.web.app/components/media-card))
69
76
  - [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
77
  - [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
78
  - [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))
@@ -112,6 +119,7 @@
112
119
  - [bf-alert-dialog](https://bitforge-ui.web.app/ai/components/alert-dialog.md): Centred confirmation dialog with a title, message and a row of role-styled buttons ([docs](https://bitforge-ui.web.app/components/alert-dialog))
113
120
  - [bf-desktop-toast](https://bitforge-ui.web.app/ai/components/desktop-toast.md): Desktop notification card in a bottom corner stack of up to three ([docs](https://bitforge-ui.web.app/components/desktop-toast))
114
121
  - [bf-dialog](https://bitforge-ui.web.app/ai/components/dialog.md): Desktop modal dialog with a title, scrolling body, footer actions and focus trap ([docs](https://bitforge-ui.web.app/components/dialog))
122
+ - [bf-image-viewer](https://bitforge-ui.web.app/ai/components/image-viewer.md): Full-screen image viewer that zooms from a thumbnail and steps through a set ([docs](https://bitforge-ui.web.app/components/image-viewer))
115
123
  - [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))
116
124
  - [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))
117
125
  - [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))
@@ -147,6 +155,7 @@
147
155
  - [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))
148
156
  - [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))
149
157
  - [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))
158
+ - [BF_TABLE_SORT_SELECT](https://bitforge-ui.web.app/ai/reference/bf_table_sort_select.md): The component a stacked table renders as its Sort by select ([docs](https://bitforge-ui.web.app/api/bf_table_sort_select))
150
159
  - [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))
151
160
  - [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))
152
161
  - [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))
@@ -165,6 +174,8 @@
165
174
  - [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))
166
175
  - [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))
167
176
  - [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))
177
+ - [BfChatMessageRole](https://bitforge-ui.web.app/ai/reference/bf-chat-message-role.md): Who wrote a chat message, the user or the assistant ([docs](https://bitforge-ui.web.app/api/bf-chat-message-role))
178
+ - [BfChatMessageStatus](https://bitforge-ui.web.app/ai/reference/bf-chat-message-status.md): How a chat message ended: done, stopped by the user, or failed ([docs](https://bitforge-ui.web.app/api/bf-chat-message-status))
168
179
  - [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))
169
180
  - [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))
170
181
  - [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))
@@ -176,10 +187,15 @@
176
187
  - [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))
177
188
  - [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))
178
189
  - [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))
190
+ - [BfFadeInDirective](https://bitforge-ui.web.app/ai/reference/bf-fade-in-directive.md): Fades an image in once it has loaded instead of popping in ([docs](https://bitforge-ui.web.app/api/bf-fade-in-directive))
179
191
  - [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))
180
192
  - [BfFieldControlState](https://bitforge-ui.web.app/ai/reference/bf-field-control-state.md): The size and state a custom field control is styled for by bfFieldControlClass ([docs](https://bitforge-ui.web.app/api/bf-field-control-state))
181
193
  - [BfFieldSize](https://bitforge-ui.web.app/ai/reference/bf-field-size.md): Former name of the shared size scale for text fields, kept until 1.0.0 ([docs](https://bitforge-ui.web.app/api/bf-field-size))
194
+ - [BfFileInputVariant](https://bitforge-ui.web.app/ai/reference/bf-file-input-variant.md): The two looks of a file picker, a compact field or a drop zone ([docs](https://bitforge-ui.web.app/api/bf-file-input-variant))
182
195
  - [BfIconButtonVariant](https://bitforge-ui.web.app/ai/reference/bf-icon-button-variant.md): The four visual styles of an icon button, from tonal to plain text ([docs](https://bitforge-ui.web.app/api/bf-icon-button-variant))
196
+ - [BfImageInputShape](https://bitforge-ui.web.app/ai/reference/bf-image-input-shape.md): The two tile shapes of an image picker, a circle or a rounded square ([docs](https://bitforge-ui.web.app/api/bf-image-input-shape))
197
+ - [BfImageTileAspect](https://bitforge-ui.web.app/ai/reference/bf-image-tile-aspect.md): The four aspect ratios of an image tile's picture, square by default ([docs](https://bitforge-ui.web.app/api/bf-image-tile-aspect))
198
+ - [BfImageTileCaptionPlacement](https://bitforge-ui.web.app/ai/reference/bf-image-tile-caption-placement.md): Where an image tile's caption sits, below the picture or over it ([docs](https://bitforge-ui.web.app/api/bf-image-tile-caption-placement))
183
199
  - [BfInputAutocapitalize](https://bitforge-ui.web.app/ai/reference/bf-input-autocapitalize.md): A text field's capitalisation setting, a mode or empty to leave it off ([docs](https://bitforge-ui.web.app/api/bf-input-autocapitalize))
184
200
  - [BfInputEnterKeyHint](https://bitforge-ui.web.app/ai/reference/bf-input-enter-key-hint.md): A field's Enter key label setting, a label or empty to leave it off ([docs](https://bitforge-ui.web.app/api/bf-input-enter-key-hint))
185
201
  - [BfInputInputMode](https://bitforge-ui.web.app/ai/reference/bf-input-input-mode.md): A text field's virtual keyboard setting, a keyboard or empty to leave it off ([docs](https://bitforge-ui.web.app/api/bf-input-input-mode))
@@ -187,11 +203,17 @@
187
203
  - [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))
188
204
  - [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))
189
205
  - [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))
206
+ - [BfMediaCardAspect](https://bitforge-ui.web.app/ai/reference/bf-media-card-aspect.md): The four aspect ratios of a media card's image area, wide to portrait ([docs](https://bitforge-ui.web.app/api/bf-media-card-aspect))
207
+ - [BfMotionListDirective](https://bitforge-ui.web.app/ai/reference/bf-motion-list-directive.md): Glides the items of a list or grid to their new place when it changes ([docs](https://bitforge-ui.web.app/api/bf-motion-list-directive))
190
208
  - [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))
209
+ - [BfPaginationPositionLabel](https://bitforge-ui.web.app/ai/reference/bf-pagination-position-label.md): Function that writes a compact pager's position text, such as "v3 of 7" ([docs](https://bitforge-ui.web.app/api/bf-pagination-position-label))
191
210
  - [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))
192
211
  - [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))
212
+ - [BfProseDirective](https://bitforge-ui.web.app/ai/reference/bf-prose-directive.md): Styles rendered markdown with the library tokens: headings, lists, code and quotes ([docs](https://bitforge-ui.web.app/api/bf-prose-directive))
193
213
  - [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))
194
214
  - [BfRadioOption](https://bitforge-ui.web.app/ai/reference/bf-radio-option.md): One choice of a radio group with its value, label and optional description ([docs](https://bitforge-ui.web.app/api/bf-radio-option))
215
+ - [BfRejectedFile](https://bitforge-ui.web.app/ai/reference/bf-rejected-file.md): A picked or dropped file that broke a rule, with the rule and its message ([docs](https://bitforge-ui.web.app/api/bf-rejected-file))
216
+ - [BfRejectedFileReason](https://bitforge-ui.web.app/ai/reference/bf-rejected-file-reason.md): The rule a refused file broke, its type, its size or the file count ([docs](https://bitforge-ui.web.app/api/bf-rejected-file-reason))
195
217
  - [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))
196
218
  - [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))
197
219
  - [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))
@@ -251,6 +273,12 @@
251
273
  - [BfDialogService](https://bitforge-ui.web.app/ai/reference/bf-dialog-service.md): Opens modal dialogs and confirm prompts, centred over the page with focus trapped ([docs](https://bitforge-ui.web.app/api/bf-dialog-service))
252
274
  - [BfDialogSize](https://bitforge-ui.web.app/ai/reference/bf-dialog-size.md): The dialog width scale from a 24 rem confirm to an edge-to-edge fullscreen dialog ([docs](https://bitforge-ui.web.app/api/bf-dialog-size))
253
275
  - [BfDialogTemplateContext](https://bitforge-ui.web.app/ai/reference/bf-dialog-template-context.md): The context a template opened as a dialog receives: its ref and its data ([docs](https://bitforge-ui.web.app/api/bf-dialog-template-context))
276
+ - [BfImageViewerActionsContext](https://bitforge-ui.web.app/ai/reference/bf-image-viewer-actions-context.md): What the viewer's actions template receives: the shown image, its index and the ref ([docs](https://bitforge-ui.web.app/api/bf-image-viewer-actions-context))
277
+ - [BfImageViewerImage](https://bitforge-ui.web.app/ai/reference/bf-image-viewer-image.md): One image the viewer shows: its URL, its name as alternative text and a caption ([docs](https://bitforge-ui.web.app/api/bf-image-viewer-image))
278
+ - [BfImageViewerOptions](https://bitforge-ui.web.app/ai/reference/bf-image-viewer-options.md): Options of an image viewer: its images, the first one, its thumbnail and actions ([docs](https://bitforge-ui.web.app/api/bf-image-viewer-options))
279
+ - [BfImageViewerOrigin](https://bitforge-ui.web.app/ai/reference/bf-image-viewer-origin.md): The thumbnail an image viewer zooms from and back into, or a lookup per image ([docs](https://bitforge-ui.web.app/api/bf-image-viewer-origin))
280
+ - [BfImageViewerRef](https://bitforge-ui.web.app/ai/reference/bf-image-viewer-ref.md): Handle on an open image viewer that steps through its images and closes it ([docs](https://bitforge-ui.web.app/api/bf-image-viewer-ref))
281
+ - [BfImageViewerService](https://bitforge-ui.web.app/ai/reference/bf-image-viewer-service.md): Opens a full-screen image viewer that zooms from a thumbnail and steps through a set ([docs](https://bitforge-ui.web.app/api/bf-image-viewer-service))
254
282
  - [BfMenuButtonVariant](https://bitforge-ui.web.app/ai/reference/bf-menu-button-variant.md): The three visual styles of a menu button, matching the button styles ([docs](https://bitforge-ui.web.app/api/bf-menu-button-variant))
255
283
  - [BfMenuDividerDirective](https://bitforge-ui.web.app/ai/reference/bf-menu-divider-directive.md): A line between groups of menu items that keyboard focus never lands on ([docs](https://bitforge-ui.web.app/api/bf-menu-divider-directive))
256
284
  - [BfMenuGroupDirective](https://bitforge-ui.web.app/ai/reference/bf-menu-group-directive.md): Groups related menu items; radio items in one group exclude each other ([docs](https://bitforge-ui.web.app/api/bf-menu-group-directive))
@@ -296,6 +324,7 @@
296
324
  - [OVERLAY_REDUCED_DURATION](https://bitforge-ui.web.app/ai/reference/overlay_reduced_duration.md): The duration of the fade that replaces overlay motion under reduced motion ([docs](https://bitforge-ui.web.app/api/overlay_reduced_duration))
297
325
  - [prefersReducedMotion](https://bitforge-ui.web.app/ai/reference/prefers-reduced-motion.md): Tells whether the user asked the system to minimise motion ([docs](https://bitforge-ui.web.app/api/prefers-reduced-motion))
298
326
  - [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))
327
+ - [provideBfSelect](https://bitforge-ui.web.app/ai/reference/provide-bf-select.md): Makes a stacked table's Sort by select the styled bf-select, app-wide ([docs](https://bitforge-ui.web.app/api/provide-bf-select))
299
328
  - [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))
300
329
  - [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))
301
330
  - [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))
@@ -412,13 +441,19 @@
412
441
 
413
442
  - [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))
414
443
  - [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))
444
+ - [BfChatComposerHarness](https://bitforge-ui.web.app/ai/reference/bf-chat-composer-harness.md): Test harness for the chat composer: types, sends, stops and reads its state ([docs](https://bitforge-ui.web.app/api/bf-chat-composer-harness))
415
445
  - [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))
416
446
  - [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))
417
447
  - [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))
418
448
  - [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))
419
449
  - [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))
450
+ - [BfFileInputHarness](https://bitforge-ui.web.app/ai/reference/bf-file-input-harness.md): Test harness for the file input: drops files and reads the list and rejections ([docs](https://bitforge-ui.web.app/api/bf-file-input-harness))
420
451
  - [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))
452
+ - [BfImageInputHarness](https://bitforge-ui.web.app/ai/reference/bf-image-input-harness.md): Test harness for the image input: drops an image on it and reads the preview ([docs](https://bitforge-ui.web.app/api/bf-image-input-harness))
453
+ - [BfImageTileHarness](https://bitforge-ui.web.app/ai/reference/bf-image-tile-harness.md): Test harness for an image tile: its picture state, title, meta, selection and action ([docs](https://bitforge-ui.web.app/api/bf-image-tile-harness))
454
+ - [BfImageViewerHarness](https://bitforge-ui.web.app/ai/reference/bf-image-viewer-harness.md): Test harness for an image viewer: its image, index, caption, steps and close ([docs](https://bitforge-ui.web.app/api/bf-image-viewer-harness))
421
455
  - [BfJsdomShimOptions](https://bitforge-ui.web.app/ai/reference/bf-jsdom-shim-options.md): Options of the jsdom shims: the matchMedia stub and its reduced-motion answer ([docs](https://bitforge-ui.web.app/api/bf-jsdom-shim-options))
456
+ - [BfMediaCardHarness](https://bitforge-ui.web.app/ai/reference/bf-media-card-harness.md): Test harness for a media card: its image state, its messages and its selection ([docs](https://bitforge-ui.web.app/api/bf-media-card-harness))
422
457
  - [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))
423
458
  - [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))
424
459
  - [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))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitforgehq/ui",
3
- "version": "0.4.0",
3
+ "version": "0.5.0-next.4",
4
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": {
package/theme.css CHANGED
@@ -178,6 +178,14 @@
178
178
  --ease-ios: cubic-bezier(0.32, 0.72, 0, 1);
179
179
  --ease-md: cubic-bezier(0.2, 0, 0, 1);
180
180
  --ease-settle: cubic-bezier(0.2, 0.8, 0.3, 1);
181
+ /* Durations as utilities (duration-fast, duration-base, duration-slow), the same timings the
182
+ widgets use, so an app's own motion matches the library: fast 150 ms (colours, small
183
+ state changes, the reduced-motion fade), base 200 ms (size and position: the sidebar,
184
+ selection indicators, list items), slow 260 ms (overlays enter and leave). They read the
185
+ :root --bf-duration-* properties below, so redefining those retimes both. */
186
+ --transition-duration-fast: var(--bf-duration-fast);
187
+ --transition-duration-base: var(--bf-duration-layout);
188
+ --transition-duration-slow: var(--bf-duration-overlay);
181
189
 
182
190
  /* bf-progress indeterminate: a 40 % stripe runs across the track from the inline start (static
183
191
  under reduced motion); the -rtl pair runs it the other way under dir="rtl". */
@@ -221,6 +229,57 @@
221
229
  }
222
230
  }
223
231
 
232
+ /* App lists and grids, with Angular's animate.enter / animate.leave: an item fades and rises in
233
+ (`animate.enter="motion-safe:animate-item-enter"`) and fades out while it shrinks a little
234
+ (`animate.leave="motion-safe:animate-item-leave"`); `bfMotionList` on the container glides
235
+ the others into place. motion-safe: leaves both out under reduced motion. */
236
+ --animate-item-enter: bf-item-enter var(--bf-duration-layout) var(--ease-settle) both;
237
+ --animate-item-leave: bf-item-leave var(--bf-duration-fast) var(--ease-md) both;
238
+ @keyframes bf-item-enter {
239
+ from {
240
+ opacity: 0;
241
+ transform: translateY(8px) scale(0.98);
242
+ }
243
+ }
244
+ @keyframes bf-item-leave {
245
+ to {
246
+ opacity: 0;
247
+ transform: scale(0.96);
248
+ }
249
+ }
250
+
251
+ /* A field's error message fades in when it appears (and when a held message is revealed after
252
+ the press ends: `not-[.sr-only]:animate-message-in`). An opacity fade only, so it stays under
253
+ reduced motion, like the overlays' reduced fade. */
254
+ --animate-message-in: bf-message-in 150ms var(--ease-md) both;
255
+ /* bf-tab-panel: the panel a user switches to fades in over the old one's place (behind
256
+ motion-safe:, so not under reduced motion); never the first panel on load. */
257
+ --animate-panel-in: bf-message-in 200ms var(--ease-md) both;
258
+ @keyframes bf-message-in {
259
+ from {
260
+ opacity: 0;
261
+ }
262
+ to {
263
+ opacity: 1;
264
+ }
265
+ }
266
+
267
+ /* bf-chat-message: a message added after the thread's first render rises 4 px and fades in
268
+ (motion-safe: only), and a streaming reply's caret pulses (static under reduced motion). */
269
+ --animate-chat-message-in: bf-chat-message-in var(--bf-duration-layout) var(--ease-settle) both;
270
+ --animate-chat-caret: bf-chat-caret 1s ease-in-out infinite alternate;
271
+ @keyframes bf-chat-message-in {
272
+ from {
273
+ opacity: 0;
274
+ transform: translateY(4px);
275
+ }
276
+ }
277
+ @keyframes bf-chat-caret {
278
+ to {
279
+ opacity: 0.2;
280
+ }
281
+ }
282
+
224
283
  /* @bitforgehq/ui/charts enter motion, on the first render and on every data change (the marks
225
284
  are re-created): a line draws along its path (pathLength 1, so the dash is the whole line),
226
285
  bars grow from the baseline (scale on the fill box, origin at the baseline), areas and
@@ -274,6 +333,7 @@
274
333
  :root {
275
334
  color-scheme: light; /* native scrollbars and form controls match the light palette */
276
335
  --bf-duration-fast: 150ms; /* colour transitions, reduced-motion fade */
336
+ --bf-duration-layout: 200ms; /* size and position: sidebar width, selection indicators */
277
337
  --bf-duration-overlay: 260ms; /* overlays, modal depth */
278
338
  --bf-duration-push: 500ms; /* iOS push/pop */
279
339
  --bf-z-sticky: 10; /* translucent header */