@unofficialbox/box-open-elements 0.19.0 → 0.21.0

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 (126) hide show
  1. package/dist/components/actions/menu-item.d.ts +2 -0
  2. package/dist/components/actions/menu-item.js +4 -0
  3. package/dist/components/collections/card.js +6 -0
  4. package/dist/components/collections/check-list.d.ts +10 -0
  5. package/dist/components/collections/check-list.js +8 -0
  6. package/dist/components/collections/document-list.d.ts +10 -0
  7. package/dist/components/collections/document-list.js +8 -0
  8. package/dist/components/collections/fact-list.d.ts +10 -0
  9. package/dist/components/collections/fact-list.js +8 -0
  10. package/dist/components/collections/result-blocks.d.ts +54 -0
  11. package/dist/components/collections/result-blocks.js +74 -0
  12. package/dist/components/feedback/alert.d.ts +2 -0
  13. package/dist/components/feedback/alert.js +17 -13
  14. package/dist/components/feedback/progress-bar.d.ts +9 -0
  15. package/dist/components/feedback/progress-bar.js +29 -3
  16. package/dist/components/feedback/status-icon.d.ts +10 -0
  17. package/dist/components/feedback/status-icon.js +26 -0
  18. package/dist/components/feedback/toast.d.ts +10 -1
  19. package/dist/components/feedback/toast.js +69 -27
  20. package/dist/components/forms/number-input.d.ts +1 -0
  21. package/dist/components/forms/number-input.js +9 -6
  22. package/dist/components/forms/search-field.js +16 -0
  23. package/dist/components/overlays/context-menu.d.ts +2 -0
  24. package/dist/components/overlays/context-menu.js +7 -0
  25. package/dist/components/overlays/dialog.js +19 -3
  26. package/dist/components/overlays/popover.js +6 -1
  27. package/dist/element-maps.d.ts +49 -19
  28. package/dist/entries/agent-workspace.d.ts +1 -0
  29. package/dist/entries/agent-workspace.js +1 -0
  30. package/dist/entries/call-console.d.ts +1 -0
  31. package/dist/entries/call-console.js +1 -0
  32. package/dist/entries/check-list.d.ts +1 -0
  33. package/dist/entries/check-list.js +1 -0
  34. package/dist/entries/document-list.d.ts +1 -0
  35. package/dist/entries/document-list.js +1 -0
  36. package/dist/entries/fact-list.d.ts +1 -0
  37. package/dist/entries/fact-list.js +1 -0
  38. package/dist/entries/result-blocks.d.ts +1 -0
  39. package/dist/entries/result-blocks.js +1 -0
  40. package/dist/entries/run-summary.d.ts +1 -0
  41. package/dist/entries/run-summary.js +1 -0
  42. package/dist/entries/status-icon.d.ts +1 -0
  43. package/dist/entries/status-icon.js +1 -0
  44. package/dist/foundations/a11y/announcer.d.ts +12 -0
  45. package/dist/foundations/a11y/announcer.js +75 -0
  46. package/dist/foundations/a11y/focus.js +46 -25
  47. package/dist/foundations/a11y/index.d.ts +2 -0
  48. package/dist/foundations/a11y/index.js +1 -0
  49. package/dist/foundations/icons/box-iconography.d.ts +472 -472
  50. package/dist/foundations/icons/box-iconography.generated.d.ts +1151 -679
  51. package/dist/foundations/icons/box-iconography.generated.js +1006 -3588
  52. package/dist/foundations/icons/glyphs/index.d.ts +1 -0
  53. package/dist/foundations/icons/glyphs/index.js +2 -0
  54. package/dist/foundations/icons/glyphs/package.json +1 -0
  55. package/dist/foundations/motion/behaviors.d.ts +8 -0
  56. package/dist/foundations/motion/behaviors.js +24 -0
  57. package/dist/foundations/motion/index.d.ts +2 -0
  58. package/dist/foundations/motion/index.js +2 -0
  59. package/dist/foundations/motion/scroll-pin.d.ts +19 -0
  60. package/dist/foundations/motion/scroll-pin.js +60 -0
  61. package/dist/foundations/motion/tokens.d.ts +2 -0
  62. package/dist/foundations/motion/tokens.js +2 -0
  63. package/dist/foundations/overlay/positioning.js +7 -0
  64. package/dist/foundations/profiles/registry.d.ts +3 -0
  65. package/dist/foundations/profiles/registry.js +3 -0
  66. package/dist/foundations/profiles/types.d.ts +3 -0
  67. package/dist/foundations/status/index.d.ts +6 -0
  68. package/dist/foundations/status/index.js +35 -0
  69. package/dist/foundations/tokens/box-dark.js +4 -1
  70. package/dist/foundations/tokens/box-defaults.js +3 -0
  71. package/dist/foundations/tokens/registry.d.ts +3 -0
  72. package/dist/foundations/tokens/registry.js +3 -0
  73. package/dist/foundations/tokens/types.d.ts +3 -0
  74. package/dist/index.d.ts +12 -0
  75. package/dist/index.js +12 -0
  76. package/dist/patterns/agent-chat/agent-chat.d.ts +9 -0
  77. package/dist/patterns/agent-chat/agent-chat.js +146 -24
  78. package/dist/patterns/agent-chat/controller.d.ts +3 -1
  79. package/dist/patterns/agent-chat/controller.js +92 -16
  80. package/dist/patterns/agent-chat/index.d.ts +1 -0
  81. package/dist/patterns/agent-chat/index.js +1 -0
  82. package/dist/patterns/agent-chat/ndjson.d.ts +5 -0
  83. package/dist/patterns/agent-chat/ndjson.js +41 -0
  84. package/dist/patterns/agent-chat/types.d.ts +44 -1
  85. package/dist/patterns/agent-workspace/agent-workspace.d.ts +28 -0
  86. package/dist/patterns/agent-workspace/agent-workspace.js +215 -0
  87. package/dist/patterns/agent-workspace/controller.d.ts +38 -0
  88. package/dist/patterns/agent-workspace/controller.js +65 -0
  89. package/dist/patterns/agent-workspace/index.d.ts +2 -0
  90. package/dist/patterns/agent-workspace/index.js +2 -0
  91. package/dist/patterns/call-console/call-console.d.ts +20 -0
  92. package/dist/patterns/call-console/call-console.js +201 -0
  93. package/dist/patterns/call-console/controller.d.ts +23 -0
  94. package/dist/patterns/call-console/controller.js +50 -0
  95. package/dist/patterns/call-console/http-transport.d.ts +3 -0
  96. package/dist/patterns/call-console/http-transport.js +26 -0
  97. package/dist/patterns/call-console/index.d.ts +4 -0
  98. package/dist/patterns/call-console/index.js +4 -0
  99. package/dist/patterns/call-console/types.d.ts +32 -0
  100. package/dist/patterns/call-console/types.js +8 -0
  101. package/dist/patterns/content-explorer/adapters/action-menu.js +7 -5
  102. package/dist/patterns/content-explorer/adapters/toolbar.js +6 -2
  103. package/dist/patterns/content-uploader/content-uploader.js +2 -1
  104. package/dist/patterns/file-request/file-request-builder.js +3 -0
  105. package/dist/patterns/flow-builder/flow-builder.d.ts +48 -0
  106. package/dist/patterns/flow-builder/flow-builder.js +200 -0
  107. package/dist/patterns/flow-builder/index.d.ts +3 -0
  108. package/dist/patterns/flow-builder/index.js +3 -0
  109. package/dist/patterns/flow-builder/model.d.ts +33 -0
  110. package/dist/patterns/flow-builder/model.js +28 -0
  111. package/dist/patterns/flow-builder/primitives.d.ts +47 -0
  112. package/dist/patterns/flow-builder/primitives.js +192 -0
  113. package/dist/patterns/lineage/lineage-graph.js +26 -6
  114. package/dist/patterns/notifications/notification-inbox.js +19 -3
  115. package/dist/patterns/preview/annotation-inspector.js +2 -2
  116. package/dist/patterns/run/index.d.ts +2 -0
  117. package/dist/patterns/run/index.js +2 -0
  118. package/dist/patterns/run/progress.d.ts +24 -0
  119. package/dist/patterns/run/progress.js +32 -0
  120. package/dist/patterns/run/run-summary.d.ts +21 -0
  121. package/dist/patterns/run/run-summary.js +82 -0
  122. package/dist/patterns/run/run-trace.d.ts +1 -0
  123. package/dist/patterns/run/run-trace.js +14 -3
  124. package/dist/patterns/undo/index.d.ts +19 -0
  125. package/dist/patterns/undo/index.js +106 -0
  126. package/package.json +23 -2
@@ -10,6 +10,7 @@ import type { AccessStats } from "./patterns/share/access-stats.js";
10
10
  import type { Accordion } from "./components/navigation/accordion.js";
11
11
  import type { ActivityDensityStrip } from "./patterns/audit/activity-density.js";
12
12
  import type { AgentChat } from "./patterns/agent-chat/agent-chat.js";
13
+ import type { AgentWorkspace } from "./patterns/agent-workspace/agent-workspace.js";
13
14
  import type { Alert } from "./components/feedback/alert.js";
14
15
  import type { AnnotationInspector } from "./patterns/preview/annotation-inspector.js";
15
16
  import type { AnnotationThread } from "./patterns/preview/annotation-thread.js";
@@ -25,25 +26,21 @@ import type { BulkActionBar } from "./patterns/item/bulk-action-bar.js";
25
26
  import type { Button } from "./components/actions/button.js";
26
27
  import type { ButtonGroup } from "./components/actions/button-group.js";
27
28
  import type { Calendar } from "./components/forms/calendar.js";
29
+ import type { CallConsole } from "./patterns/call-console/call-console.js";
28
30
  import type { Card } from "./components/collections/card.js";
29
31
  import type { Carousel } from "./components/collections/carousel.js";
30
32
  import type { CategorySelector } from "./components/forms/category-selector.js";
31
33
  import type { ChartPanel } from "./patterns/insights/chart-panel.js";
34
+ import type { CheckList } from "./components/collections/check-list.js";
32
35
  import type { Checkbox } from "./components/forms/checkbox.js";
33
36
  import type { CheckboxGroup } from "./components/forms/checkbox-group.js";
34
37
  import type { Chip } from "./components/feedback/chip.js";
38
+ import type { CodeBlock } from "./components/output/code-block.js";
35
39
  import type { CollaboratorAvatars } from "./patterns/share/collaborator-avatars.js";
36
40
  import type { ColorPicker } from "./components/forms/color-picker.js";
37
41
  import type { Combobox } from "./components/forms/combobox.js";
38
42
  import type { CommandPalette } from "./components/overlays/command-palette.js";
39
43
  import type { CommentThread } from "./patterns/comments/comment-thread.js";
40
- import type { CodeBlock } from "./components/output/code-block.js";
41
- import type { FormattedDate } from "./components/output/formatted-date.js";
42
- import type { Indicator } from "./components/feedback/indicator.js";
43
- import type { TileGroup } from "./components/forms/tile-group.js";
44
- import type { FormattedFileSize } from "./components/output/formatted-file-size.js";
45
- import type { FormattedNumber } from "./components/output/formatted-number.js";
46
- import type { RelativeTime } from "./components/output/relative-time.js";
47
44
  import type { CompareView } from "./patterns/diff/compare-view.js";
48
45
  import type { ContactDatalistItem } from "./components/identity/contact-datalist-item.js";
49
46
  import type { ContentExplorer } from "./patterns/content-explorer/content-explorer.js";
@@ -56,7 +53,7 @@ import type { DateField } from "./components/forms/date-field.js";
56
53
  import type { Dialog } from "./components/overlays/dialog.js";
57
54
  import type { DiffViewer } from "./patterns/diff/diff-viewer.js";
58
55
  import type { Divider } from "./components/layout/divider.js";
59
- import type { Grid } from "./components/layout/grid.js";
56
+ import type { DocumentList } from "./components/collections/document-list.js";
60
57
  import type { DonutChart } from "./patterns/insights/donut-chart.js";
61
58
  import type { DraggableList } from "./components/collections/draggable-list.js";
62
59
  import type { Drawer } from "./components/overlays/drawer.js";
@@ -72,19 +69,31 @@ import type { ExplorerItems } from "./patterns/content-explorer/adapters/items.j
72
69
  import type { ExplorerList } from "./patterns/content-explorer/adapters/list.js";
73
70
  import type { ExplorerTable } from "./patterns/content-explorer/adapters/table.js";
74
71
  import type { ExplorerToolbar } from "./patterns/content-explorer/adapters/toolbar.js";
72
+ import type { FactList } from "./components/collections/fact-list.js";
75
73
  import type { Fieldset } from "./components/forms/fieldset.js";
76
74
  import type { FileRequestBuilder } from "./patterns/file-request/file-request-builder.js";
77
75
  import type { FilterBar } from "./patterns/search/filter-bar.js";
76
+ import type { FlowBuilder } from "./patterns/flow-builder/flow-builder.js";
77
+ import type { FlowCard } from "./patterns/flow-builder/primitives.js";
78
+ import type { FlowSpine } from "./patterns/flow-builder/primitives.js";
78
79
  import type { FormWizard } from "./patterns/form-wizard/form-wizard.js";
80
+ import type { FormattedDate } from "./components/output/formatted-date.js";
81
+ import type { FormattedDuration } from "./components/output/formatted-duration.js";
82
+ import type { FormattedFileSize } from "./components/output/formatted-file-size.js";
83
+ import type { FormattedNumber } from "./components/output/formatted-number.js";
79
84
  import type { GovernancePanel } from "./patterns/governance/governance-panel.js";
85
+ import type { Grid } from "./components/layout/grid.js";
80
86
  import type { GridView } from "./components/collections/grid-view.js";
81
87
  import type { GuideTooltip } from "./components/overlays/guide-tooltip.js";
82
88
  import type { HelpText } from "./components/feedback/help-text.js";
83
89
  import type { IconButton } from "./components/actions/icon-button.js";
84
90
  import type { Illustration } from "./components/visuals/illustration.js";
91
+ import type { Indicator } from "./components/feedback/indicator.js";
92
+ import type { InsertPoint } from "./patterns/flow-builder/primitives.js";
85
93
  import type { InviteCollaboratorsModal } from "./patterns/share/invite-collaborators-modal.js";
86
94
  import type { ItemDetailsPanel } from "./patterns/item/item-details-panel.js";
87
95
  import type { ItemForm } from "./patterns/item/item-form.js";
96
+ import type { KindPicker } from "./patterns/flow-builder/primitives.js";
88
97
  import type { LineChart } from "./patterns/insights/line-chart.js";
89
98
  import type { LineageGraph } from "./patterns/lineage/lineage-graph.js";
90
99
  import type { LinkButton } from "./components/actions/link-button.js";
@@ -100,6 +109,7 @@ import type { NotificationInbox } from "./patterns/notifications/notification-in
100
109
  import type { Nudge } from "./components/feedback/nudge.js";
101
110
  import type { NumberInput } from "./components/forms/number-input.js";
102
111
  import type { Pagination } from "./components/collections/pagination.js";
112
+ import type { Path } from "./components/feedback/path.js";
103
113
  import type { PermissionMatrix } from "./patterns/share/permission-matrix.js";
104
114
  import type { Persona } from "./components/identity/persona.js";
105
115
  import type { PillCloud } from "./components/forms/pill-cloud.js";
@@ -115,8 +125,11 @@ import type { ProvenanceStrip } from "./patterns/lineage/provenance-strip.js";
115
125
  import type { RadioGroup } from "./components/forms/radio-group.js";
116
126
  import type { RangeSlider } from "./components/forms/range-slider.js";
117
127
  import type { Rating } from "./components/forms/rating.js";
128
+ import type { RelativeTime } from "./components/output/relative-time.js";
129
+ import type { ResultBlocks } from "./components/collections/result-blocks.js";
118
130
  import type { ReviewQueueItem } from "./patterns/task/review-queue-item.js";
119
131
  import type { RichTextInput } from "./components/forms/rich-text-input.js";
132
+ import type { RunSummary } from "./patterns/run/run-summary.js";
120
133
  import type { RunTrace } from "./patterns/run/run-trace.js";
121
134
  import type { SavedViewPicker } from "./patterns/search/saved-view-picker.js";
122
135
  import type { SearchField } from "./components/forms/search-field.js";
@@ -133,7 +146,7 @@ import type { Slider } from "./components/forms/slider.js";
133
146
  import type { SpinButton } from "./components/forms/spin-button.js";
134
147
  import type { Spinner } from "./components/feedback/spinner.js";
135
148
  import type { SplitView } from "./components/layout/split-view.js";
136
- import type { Path } from "./components/feedback/path.js";
149
+ import type { StatusIcon } from "./components/feedback/status-icon.js";
137
150
  import type { Switch } from "./components/forms/switch.js";
138
151
  import type { Table } from "./components/collections/table.js";
139
152
  import type { Tabs } from "./components/navigation/tabs.js";
@@ -142,9 +155,11 @@ import type { TaskAssignmentPanel } from "./patterns/task/task-assignment-panel.
142
155
  import type { TextArea } from "./components/forms/text-area.js";
143
156
  import type { TextField } from "./components/forms/text-field.js";
144
157
  import type { ThumbnailCard } from "./components/collections/thumbnail-card.js";
158
+ import type { TileGroup } from "./components/forms/tile-group.js";
145
159
  import type { TimeField } from "./components/forms/time-field.js";
146
160
  import type { Timeline } from "./patterns/timeline/timeline.js";
147
161
  import type { Toast } from "./components/feedback/toast.js";
162
+ import type { Toolbar } from "./components/actions/toolbar.js";
148
163
  import type { Tooltip } from "./components/overlays/tooltip.js";
149
164
  import type { Tree } from "./components/collections/tree.js";
150
165
  import type { TreeGrid } from "./components/collections/tree-grid.js";
@@ -160,6 +175,7 @@ declare global {
160
175
  "box-accordion": Accordion;
161
176
  "box-activity-density": ActivityDensityStrip;
162
177
  "box-agent-chat": AgentChat;
178
+ "box-agent-workspace": AgentWorkspace;
163
179
  "box-alert": Alert;
164
180
  "box-annotation-inspector": AnnotationInspector;
165
181
  "box-annotation-thread": AnnotationThread;
@@ -175,25 +191,21 @@ declare global {
175
191
  "box-button": Button;
176
192
  "box-button-group": ButtonGroup;
177
193
  "box-calendar": Calendar;
194
+ "box-call-console": CallConsole;
178
195
  "box-card": Card;
179
196
  "box-carousel": Carousel;
180
197
  "box-category-selector": CategorySelector;
181
198
  "box-chart-panel": ChartPanel;
199
+ "box-check-list": CheckList;
182
200
  "box-checkbox": Checkbox;
183
201
  "box-checkbox-group": CheckboxGroup;
184
202
  "box-chip": Chip;
203
+ "box-code-block": CodeBlock;
185
204
  "box-collaborator-avatars": CollaboratorAvatars;
186
205
  "box-color-picker": ColorPicker;
187
206
  "box-combobox": Combobox;
188
207
  "box-command-palette": CommandPalette;
189
208
  "box-comment-thread": CommentThread;
190
- "box-code-block": CodeBlock;
191
- "box-formatted-date": FormattedDate;
192
- "box-indicator": Indicator;
193
- "box-tile-group": TileGroup;
194
- "box-formatted-file-size": FormattedFileSize;
195
- "box-formatted-number": FormattedNumber;
196
- "box-relative-time": RelativeTime;
197
209
  "box-compare-view": CompareView;
198
210
  "box-contact-datalist-item": ContactDatalistItem;
199
211
  "box-content-explorer": ContentExplorer;
@@ -206,7 +218,7 @@ declare global {
206
218
  "box-dialog": Dialog;
207
219
  "box-diff-viewer": DiffViewer;
208
220
  "box-divider": Divider;
209
- "box-grid": Grid;
221
+ "box-document-list": DocumentList;
210
222
  "box-donut-chart": DonutChart;
211
223
  "box-draggable-list": DraggableList;
212
224
  "box-drawer": Drawer;
@@ -222,19 +234,31 @@ declare global {
222
234
  "box-explorer-list": ExplorerList;
223
235
  "box-explorer-table": ExplorerTable;
224
236
  "box-explorer-toolbar": ExplorerToolbar;
237
+ "box-fact-list": FactList;
225
238
  "box-fieldset": Fieldset;
226
239
  "box-file-request-builder": FileRequestBuilder;
227
240
  "box-filter-bar": FilterBar;
241
+ "box-flow-builder": FlowBuilder;
242
+ "box-flow-card": FlowCard;
243
+ "box-flow-spine": FlowSpine;
228
244
  "box-form-wizard": FormWizard;
245
+ "box-formatted-date": FormattedDate;
246
+ "box-formatted-duration": FormattedDuration;
247
+ "box-formatted-file-size": FormattedFileSize;
248
+ "box-formatted-number": FormattedNumber;
229
249
  "box-governance-panel": GovernancePanel;
250
+ "box-grid": Grid;
230
251
  "box-grid-view": GridView;
231
252
  "box-guide-tooltip": GuideTooltip;
232
253
  "box-help-text": HelpText;
233
254
  "box-icon-button": IconButton;
234
255
  "box-illustration": Illustration;
256
+ "box-indicator": Indicator;
257
+ "box-insert-point": InsertPoint;
235
258
  "box-invite-collaborators-modal": InviteCollaboratorsModal;
236
259
  "box-item-details-panel": ItemDetailsPanel;
237
260
  "box-item-form": ItemForm;
261
+ "box-kind-picker": KindPicker;
238
262
  "box-line-chart": LineChart;
239
263
  "box-lineage-graph": LineageGraph;
240
264
  "box-link-button": LinkButton;
@@ -250,6 +274,7 @@ declare global {
250
274
  "box-nudge": Nudge;
251
275
  "box-number-input": NumberInput;
252
276
  "box-pagination": Pagination;
277
+ "box-path": Path;
253
278
  "box-permission-matrix": PermissionMatrix;
254
279
  "box-persona": Persona;
255
280
  "box-pill-cloud": PillCloud;
@@ -265,8 +290,11 @@ declare global {
265
290
  "box-radio-group": RadioGroup;
266
291
  "box-range-slider": RangeSlider;
267
292
  "box-rating": Rating;
293
+ "box-relative-time": RelativeTime;
294
+ "box-result-blocks": ResultBlocks;
268
295
  "box-review-queue-item": ReviewQueueItem;
269
296
  "box-rich-text-input": RichTextInput;
297
+ "box-run-summary": RunSummary;
270
298
  "box-run-trace": RunTrace;
271
299
  "box-saved-view-picker": SavedViewPicker;
272
300
  "box-search-field": SearchField;
@@ -283,7 +311,7 @@ declare global {
283
311
  "box-spin-button": SpinButton;
284
312
  "box-spinner": Spinner;
285
313
  "box-split-view": SplitView;
286
- "box-path": Path;
314
+ "box-status-icon": StatusIcon;
287
315
  "box-switch": Switch;
288
316
  "box-table": Table;
289
317
  "box-tabs": Tabs;
@@ -292,9 +320,11 @@ declare global {
292
320
  "box-text-area": TextArea;
293
321
  "box-text-field": TextField;
294
322
  "box-thumbnail-card": ThumbnailCard;
323
+ "box-tile-group": TileGroup;
295
324
  "box-time-field": TimeField;
296
325
  "box-timeline": Timeline;
297
326
  "box-toast": Toast;
327
+ "box-toolbar": Toolbar;
298
328
  "box-tooltip": Tooltip;
299
329
  "box-tree": Tree;
300
330
  "box-tree-grid": TreeGrid;
@@ -307,4 +337,4 @@ declare global {
307
337
  }
308
338
  }
309
339
  /** Every element tag the library registers, for host-side narrowing. */
310
- export type BoxElementTagName = "box-access-stats" | "box-accordion" | "box-activity-density" | "box-agent-chat" | "box-alert" | "box-annotation-inspector" | "box-annotation-thread" | "box-annotation-toolbar" | "box-app-shell" | "box-audit-log" | "box-avatar" | "box-badge" | "box-badgeable" | "box-bar-chart" | "box-breadcrumb" | "box-bulk-action-bar" | "box-button" | "box-button-group" | "box-calendar" | "box-card" | "box-carousel" | "box-category-selector" | "box-chart-panel" | "box-checkbox" | "box-checkbox-group" | "box-chip" | "box-collaborator-avatars" | "box-color-picker" | "box-combobox" | "box-command-palette" | "box-comment-thread" | "box-code-block" | "box-formatted-date" | "box-indicator" | "box-tile-group" | "box-formatted-file-size" | "box-formatted-number" | "box-relative-time" | "box-compare-view" | "box-contact-datalist-item" | "box-content-explorer" | "box-content-picker" | "box-content-sidebar" | "box-content-uploader" | "box-context-menu" | "box-datalist-item" | "box-date-field" | "box-dialog" | "box-diff-viewer" | "box-divider" | "box-grid" | "box-donut-chart" | "box-draggable-list" | "box-drawer" | "box-drop-zone" | "box-dropdown" | "box-dual-listbox" | "box-due-badge" | "box-empty-state" | "box-error-mask" | "box-explorer-action-menu" | "box-explorer-breadcrumbs" | "box-explorer-items" | "box-explorer-list" | "box-explorer-table" | "box-explorer-toolbar" | "box-fieldset" | "box-file-request-builder" | "box-filter-bar" | "box-form-wizard" | "box-governance-panel" | "box-grid-view" | "box-guide-tooltip" | "box-help-text" | "box-icon-button" | "box-illustration" | "box-invite-collaborators-modal" | "box-item-details-panel" | "box-item-form" | "box-line-chart" | "box-lineage-graph" | "box-link-button" | "box-menu" | "box-menu-item" | "box-metadata-filter-builder" | "box-metadata-inspector" | "box-metric-card" | "box-multi-select" | "box-nav-sidebar" | "box-notification-bell" | "box-notification-inbox" | "box-nudge" | "box-number-input" | "box-pagination" | "box-permission-matrix" | "box-persona" | "box-pill-cloud" | "box-pill-selector-dropdown" | "box-popover" | "box-presence" | "box-preview-element" | "box-preview-header" | "box-progress-bar" | "box-progress-ring" | "box-progress-steps" | "box-provenance-strip" | "box-radio-group" | "box-range-slider" | "box-rating" | "box-review-queue-item" | "box-rich-text-input" | "box-run-trace" | "box-saved-view-picker" | "box-search-field" | "box-search-results-header" | "box-section" | "box-segmented-control" | "box-select" | "box-share-panel" | "box-shortcuts-overlay" | "box-sidebar-toggle-button" | "box-signature-ceremony" | "box-skeleton" | "box-slider" | "box-spin-button" | "box-spinner" | "box-split-view" | "box-path" | "box-switch" | "box-table" | "box-tabs" | "box-tag-input" | "box-task-assignment-panel" | "box-text-area" | "box-text-field" | "box-thumbnail-card" | "box-time-field" | "box-timeline" | "box-toast" | "box-tooltip" | "box-tree" | "box-tree-grid" | "box-unified-share-modal" | "box-version-graph" | "box-version-list" | "box-wizard-summary" | "box-work-queue" | "box-workload-board";
340
+ export type BoxElementTagName = "box-access-stats" | "box-accordion" | "box-activity-density" | "box-agent-chat" | "box-agent-workspace" | "box-alert" | "box-annotation-inspector" | "box-annotation-thread" | "box-annotation-toolbar" | "box-app-shell" | "box-audit-log" | "box-avatar" | "box-badge" | "box-badgeable" | "box-bar-chart" | "box-breadcrumb" | "box-bulk-action-bar" | "box-button" | "box-button-group" | "box-calendar" | "box-call-console" | "box-card" | "box-carousel" | "box-category-selector" | "box-chart-panel" | "box-check-list" | "box-checkbox" | "box-checkbox-group" | "box-chip" | "box-code-block" | "box-collaborator-avatars" | "box-color-picker" | "box-combobox" | "box-command-palette" | "box-comment-thread" | "box-compare-view" | "box-contact-datalist-item" | "box-content-explorer" | "box-content-picker" | "box-content-sidebar" | "box-content-uploader" | "box-context-menu" | "box-datalist-item" | "box-date-field" | "box-dialog" | "box-diff-viewer" | "box-divider" | "box-document-list" | "box-donut-chart" | "box-draggable-list" | "box-drawer" | "box-drop-zone" | "box-dropdown" | "box-dual-listbox" | "box-due-badge" | "box-empty-state" | "box-error-mask" | "box-explorer-action-menu" | "box-explorer-breadcrumbs" | "box-explorer-items" | "box-explorer-list" | "box-explorer-table" | "box-explorer-toolbar" | "box-fact-list" | "box-fieldset" | "box-file-request-builder" | "box-filter-bar" | "box-flow-builder" | "box-flow-card" | "box-flow-spine" | "box-form-wizard" | "box-formatted-date" | "box-formatted-duration" | "box-formatted-file-size" | "box-formatted-number" | "box-governance-panel" | "box-grid" | "box-grid-view" | "box-guide-tooltip" | "box-help-text" | "box-icon-button" | "box-illustration" | "box-indicator" | "box-insert-point" | "box-invite-collaborators-modal" | "box-item-details-panel" | "box-item-form" | "box-kind-picker" | "box-line-chart" | "box-lineage-graph" | "box-link-button" | "box-menu" | "box-menu-item" | "box-metadata-filter-builder" | "box-metadata-inspector" | "box-metric-card" | "box-multi-select" | "box-nav-sidebar" | "box-notification-bell" | "box-notification-inbox" | "box-nudge" | "box-number-input" | "box-pagination" | "box-path" | "box-permission-matrix" | "box-persona" | "box-pill-cloud" | "box-pill-selector-dropdown" | "box-popover" | "box-presence" | "box-preview-element" | "box-preview-header" | "box-progress-bar" | "box-progress-ring" | "box-progress-steps" | "box-provenance-strip" | "box-radio-group" | "box-range-slider" | "box-rating" | "box-relative-time" | "box-result-blocks" | "box-review-queue-item" | "box-rich-text-input" | "box-run-summary" | "box-run-trace" | "box-saved-view-picker" | "box-search-field" | "box-search-results-header" | "box-section" | "box-segmented-control" | "box-select" | "box-share-panel" | "box-shortcuts-overlay" | "box-sidebar-toggle-button" | "box-signature-ceremony" | "box-skeleton" | "box-slider" | "box-spin-button" | "box-spinner" | "box-split-view" | "box-status-icon" | "box-switch" | "box-table" | "box-tabs" | "box-tag-input" | "box-task-assignment-panel" | "box-text-area" | "box-text-field" | "box-thumbnail-card" | "box-tile-group" | "box-time-field" | "box-timeline" | "box-toast" | "box-toolbar" | "box-tooltip" | "box-tree" | "box-tree-grid" | "box-unified-share-modal" | "box-version-graph" | "box-version-list" | "box-wizard-summary" | "box-work-queue" | "box-workload-board";
@@ -0,0 +1 @@
1
+ export * from "../patterns/agent-workspace/index.js";
@@ -0,0 +1 @@
1
+ export * from "../patterns/agent-workspace/index.js";
@@ -0,0 +1 @@
1
+ export * from "../patterns/call-console/index.js";
@@ -0,0 +1 @@
1
+ export * from "../patterns/call-console/index.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/check-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/check-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/document-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/document-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/fact-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/fact-list.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/result-blocks.js";
@@ -0,0 +1 @@
1
+ export * from "../components/collections/result-blocks.js";
@@ -0,0 +1 @@
1
+ export * from "../patterns/run/run-summary.js";
@@ -0,0 +1 @@
1
+ export * from "../patterns/run/run-summary.js";
@@ -0,0 +1 @@
1
+ export * from "../components/feedback/status-icon.js";
@@ -0,0 +1 @@
1
+ export * from "../components/feedback/status-icon.js";
@@ -0,0 +1,12 @@
1
+ export type Politeness = "polite" | "assertive";
2
+ /** Install once near application startup. The returned cleanup removes both regions. SSR-safe. */
3
+ export declare function installAnnouncer(doc?: Document | undefined): () => void;
4
+ /** Queue text, including repeated messages, into an already-mounted live region. */
5
+ export declare function announce(message: string, politeness?: Politeness, doc?: Document | undefined): void;
6
+ /** Coalesce synchronous property updates and avoid duplicate component announcements. */
7
+ export declare class FeedbackAnnouncement {
8
+ private previous;
9
+ private revision;
10
+ update(host: HTMLElement, message: string, politeness: Politeness): void;
11
+ reset(): void;
12
+ }
@@ -0,0 +1,75 @@
1
+ const instances = new WeakMap();
2
+ /** Install once near application startup. The returned cleanup removes both regions. SSR-safe. */
3
+ export function installAnnouncer(doc = globalThis.document) {
4
+ if (!doc?.body)
5
+ return () => { };
6
+ const existing = instances.get(doc);
7
+ if (existing?.host.isConnected)
8
+ return existing.dispose;
9
+ existing?.dispose();
10
+ const host = doc.createElement("div");
11
+ host.dataset.boeAnnouncer = "";
12
+ host.style.cssText = "position:fixed;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0;pointer-events:none";
13
+ const makeChannel = (politeness) => {
14
+ const region = doc.createElement("div");
15
+ region.setAttribute("role", politeness === "assertive" ? "alert" : "status");
16
+ region.setAttribute("aria-live", politeness);
17
+ region.setAttribute("aria-atomic", "true");
18
+ host.append(region);
19
+ return { region, queue: [] };
20
+ };
21
+ const channels = { polite: makeChannel("polite"), assertive: makeChannel("assertive") };
22
+ const dispose = () => {
23
+ for (const channel of Object.values(channels))
24
+ clearTimeout(channel.timer);
25
+ host.remove();
26
+ if (instances.get(doc)?.host === host)
27
+ instances.delete(doc);
28
+ };
29
+ doc.body.append(host);
30
+ instances.set(doc, { host, channels, dispose });
31
+ return dispose;
32
+ }
33
+ /** Queue text, including repeated messages, into an already-mounted live region. */
34
+ export function announce(message, politeness = "polite", doc = globalThis.document) {
35
+ if (!doc?.body || !message.trim())
36
+ return;
37
+ installAnnouncer(doc);
38
+ const channel = instances.get(doc).channels[politeness];
39
+ channel.queue.push(message);
40
+ if (channel.timer !== undefined)
41
+ return;
42
+ const next = () => {
43
+ channel.region.textContent = "";
44
+ // A separate rendering opportunity ensures an empty region exists first.
45
+ channel.timer = setTimeout(() => {
46
+ channel.region.textContent = channel.queue.shift() ?? "";
47
+ channel.timer = setTimeout(() => {
48
+ channel.timer = undefined;
49
+ if (channel.queue.length)
50
+ next();
51
+ }, 100);
52
+ }, 20);
53
+ };
54
+ next();
55
+ }
56
+ /** Coalesce synchronous property updates and avoid duplicate component announcements. */
57
+ export class FeedbackAnnouncement {
58
+ previous = "";
59
+ revision = 0;
60
+ update(host, message, politeness) {
61
+ const revision = ++this.revision;
62
+ if (!message) {
63
+ this.previous = "";
64
+ return;
65
+ }
66
+ queueMicrotask(() => {
67
+ const key = `${politeness}:${message}`;
68
+ if (revision !== this.revision || !host.isConnected || key === this.previous)
69
+ return;
70
+ this.previous = key;
71
+ announce(message, politeness, host.ownerDocument);
72
+ });
73
+ }
74
+ reset() { ++this.revision; this.previous = ""; }
75
+ }
@@ -9,37 +9,56 @@ const TABBABLE_SELECTOR = [
9
9
  "textarea:not([disabled])",
10
10
  "[tabindex]:not([tabindex='-1'])",
11
11
  ].join(", ");
12
- const isDisabled = (element) => element.hasAttribute("disabled") ||
12
+ const isDisabled = (element) => element.matches(":disabled") ||
13
+ element.hasAttribute("disabled") ||
13
14
  element.disabled === true ||
14
15
  element.getAttribute("aria-disabled") === "true";
15
16
  const isVisible = (element) => {
16
- if (element.hidden || element.getAttribute("aria-hidden") === "true") {
17
- return false;
18
- }
19
- // Closest [hidden] ancestor (common pattern for closed panels).
20
- if (element.closest("[hidden]")) {
21
- return false;
22
- }
23
- const style = element.ownerDocument.defaultView?.getComputedStyle(element);
24
- if (!style) {
25
- return true;
26
- }
27
- if (style.display === "none" || style.visibility === "hidden") {
28
- return false;
17
+ for (let current = element; current;) {
18
+ if (current.hasAttribute("hidden") || current.hasAttribute("inert") || current.getAttribute("aria-hidden") === "true")
19
+ return false;
20
+ const style = current.ownerDocument.defaultView?.getComputedStyle(current);
21
+ if (style?.display === "none" || style?.visibility === "hidden")
22
+ return false;
23
+ const root = current.getRootNode();
24
+ current = current.assignedSlot ?? current.parentElement ?? (root instanceof ShadowRoot ? root.host : null);
29
25
  }
30
26
  return true;
31
27
  };
28
+ const deepActiveElement = (root) => {
29
+ let active = root.activeElement;
30
+ while (active?.shadowRoot?.activeElement)
31
+ active = active.shadowRoot.activeElement;
32
+ return active;
33
+ };
32
34
  /** Visible, enabled tabbable controls inside `container` (light or shadow). */
33
35
  export const getTabbableElements = (container) => {
34
- return Array.from(container.querySelectorAll(TABBABLE_SELECTOR)).filter(element => {
35
- if (isDisabled(element)) {
36
- return false;
37
- }
38
- if (element.tabIndex < 0) {
39
- return false;
36
+ const result = [];
37
+ const visit = (node) => {
38
+ const children = node instanceof HTMLSlotElement
39
+ ? (node.assignedElements().length ? node.assignedElements() : Array.from(node.children))
40
+ : Array.from(node.children);
41
+ for (const child of children) {
42
+ if (!(child instanceof HTMLElement) || !isVisible(child))
43
+ continue;
44
+ const disabled = isDisabled(child);
45
+ // A disabled fieldset still permits controls in its first legend and
46
+ // non-form controls such as links. Let native :disabled filter each
47
+ // descendant instead of pruning the entire fieldset subtree.
48
+ if (disabled && (!(child instanceof HTMLFieldSetElement) || child.getAttribute("aria-disabled") === "true"))
49
+ continue;
50
+ if (!disabled && child.matches(TABBABLE_SELECTOR) && child.tabIndex >= 0)
51
+ result.push(child);
52
+ // An explicit negative tabindex removes a shadow host's entire focus
53
+ // scope from sequential navigation. Ordinary light-DOM containers with
54
+ // tabindex=-1 do not have that behavior.
55
+ if (child.shadowRoot && child.hasAttribute("tabindex") && child.tabIndex < 0)
56
+ continue;
57
+ visit(child.shadowRoot ?? child);
40
58
  }
41
- return isVisible(element);
42
- });
59
+ };
60
+ visit(container);
61
+ return result;
43
62
  };
44
63
  /**
45
64
  * Keep Tab / Shift+Tab cycling inside `container` while a modal is open.
@@ -57,7 +76,7 @@ export const trapTabKey = (event, container) => {
57
76
  const first = focusables[0];
58
77
  const last = focusables[focusables.length - 1];
59
78
  const root = container.getRootNode?.();
60
- const active = root?.activeElement ?? document.activeElement;
79
+ const active = deepActiveElement(root ?? document) ?? deepActiveElement(document);
61
80
  if (event.shiftKey) {
62
81
  if (active === first || !focusables.includes(active)) {
63
82
  event.preventDefault();
@@ -74,6 +93,8 @@ export const trapTabKey = (event, container) => {
74
93
  export class FocusRestore {
75
94
  previous = null;
76
95
  capture(from = document.activeElement) {
96
+ while (from?.shadowRoot?.activeElement)
97
+ from = from.shadowRoot.activeElement;
77
98
  this.previous = from instanceof HTMLElement ? from : null;
78
99
  }
79
100
  restore() {
@@ -83,8 +104,8 @@ export class FocusRestore {
83
104
  return;
84
105
  }
85
106
  queueMicrotask(() => {
86
- if (typeof target.focus === "function") {
87
- target.focus();
107
+ if (target.isConnected && isVisible(target) && !isDisabled(target)) {
108
+ target.focus({ preventScroll: true });
88
109
  }
89
110
  });
90
111
  }
@@ -1,3 +1,5 @@
1
+ export { announce, installAnnouncer } from "./announcer.js";
2
+ export type { Politeness } from "./announcer.js";
1
3
  export { applyRovingTabindex, focusRovingItem, handleRovingKeydown, nextRovingIndex, } from "./keyboard.js";
2
4
  export type { RovingKeyOptions, RovingOrientation } from "./keyboard.js";
3
5
  export { FocusRestore, getTabbableElements, trapTabKey } from "./focus.js";
@@ -1,3 +1,4 @@
1
+ export { announce, installAnnouncer } from "./announcer.js";
1
2
  export { applyRovingTabindex, focusRovingItem, handleRovingKeydown, nextRovingIndex, } from "./keyboard.js";
2
3
  export { FocusRestore, getTabbableElements, trapTabKey } from "./focus.js";
3
4
  export { boeHeadingResetStyles, headingCloseTag, headingOpenTag, renderHeadingHtml, } from "./heading.js";