@unofficialbox/box-open-elements 0.4.0 → 0.6.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 (677) hide show
  1. package/README.md +39 -14
  2. package/dist/components/actions/button-group.d.ts +2 -2
  3. package/dist/components/actions/button-group.js +3 -9
  4. package/dist/components/actions/button.d.ts +2 -2
  5. package/dist/components/actions/button.js +3 -9
  6. package/dist/components/actions/icon-button.d.ts +2 -2
  7. package/dist/components/actions/icon-button.js +3 -9
  8. package/dist/components/actions/link-button.d.ts +2 -2
  9. package/dist/components/actions/link-button.js +3 -9
  10. package/dist/components/actions/menu-item.d.ts +2 -2
  11. package/dist/components/actions/menu-item.js +3 -9
  12. package/dist/components/actions/menu.d.ts +2 -2
  13. package/dist/components/actions/menu.js +3 -9
  14. package/dist/components/actions/segmented-control.d.ts +2 -2
  15. package/dist/components/actions/segmented-control.js +3 -9
  16. package/dist/components/collections/card.d.ts +2 -2
  17. package/dist/components/collections/card.js +3 -9
  18. package/dist/components/collections/carousel.d.ts +2 -2
  19. package/dist/components/collections/carousel.js +3 -9
  20. package/dist/components/collections/datalist-item.d.ts +2 -2
  21. package/dist/components/collections/datalist-item.js +3 -9
  22. package/dist/components/collections/draggable-list.d.ts +2 -2
  23. package/dist/components/collections/draggable-list.js +3 -9
  24. package/dist/components/collections/grid-view.d.ts +2 -2
  25. package/dist/components/collections/grid-view.js +3 -9
  26. package/dist/components/collections/pagination.d.ts +2 -2
  27. package/dist/components/collections/pagination.js +3 -9
  28. package/dist/components/collections/table.d.ts +59 -5
  29. package/dist/components/collections/table.js +342 -29
  30. package/dist/components/collections/thumbnail-card.d.ts +2 -2
  31. package/dist/components/collections/thumbnail-card.js +3 -9
  32. package/dist/components/collections/tree-grid.d.ts +2 -2
  33. package/dist/components/collections/tree-grid.js +3 -9
  34. package/dist/components/collections/tree.d.ts +2 -2
  35. package/dist/components/collections/tree.js +3 -9
  36. package/dist/components/feedback/alert.d.ts +2 -2
  37. package/dist/components/feedback/alert.js +3 -9
  38. package/dist/components/feedback/badge.d.ts +2 -2
  39. package/dist/components/feedback/badge.js +3 -9
  40. package/dist/components/feedback/badgeable.d.ts +2 -2
  41. package/dist/components/feedback/badgeable.js +3 -9
  42. package/dist/components/feedback/chip.d.ts +2 -2
  43. package/dist/components/feedback/chip.js +3 -9
  44. package/dist/components/feedback/due-badge.d.ts +38 -0
  45. package/dist/components/feedback/due-badge.js +168 -0
  46. package/dist/components/feedback/due-types.d.ts +32 -0
  47. package/dist/components/feedback/due-types.js +91 -0
  48. package/dist/components/feedback/empty-state.d.ts +2 -2
  49. package/dist/components/feedback/empty-state.js +3 -9
  50. package/dist/components/feedback/error-mask.d.ts +2 -2
  51. package/dist/components/feedback/error-mask.js +3 -9
  52. package/dist/components/feedback/help-text.d.ts +2 -2
  53. package/dist/components/feedback/help-text.js +3 -9
  54. package/dist/components/feedback/nudge.d.ts +2 -2
  55. package/dist/components/feedback/nudge.js +3 -9
  56. package/dist/components/feedback/progress-bar.d.ts +2 -2
  57. package/dist/components/feedback/progress-bar.js +3 -9
  58. package/dist/components/feedback/progress-ring.d.ts +2 -2
  59. package/dist/components/feedback/progress-ring.js +3 -9
  60. package/dist/components/feedback/progress-steps.d.ts +53 -7
  61. package/dist/components/feedback/progress-steps.js +203 -31
  62. package/dist/components/feedback/skeleton.d.ts +2 -2
  63. package/dist/components/feedback/skeleton.js +3 -9
  64. package/dist/components/feedback/spinner.d.ts +2 -2
  65. package/dist/components/feedback/spinner.js +3 -9
  66. package/dist/components/feedback/stage-path.d.ts +44 -0
  67. package/dist/components/feedback/stage-path.js +235 -0
  68. package/dist/components/feedback/toast.d.ts +2 -2
  69. package/dist/components/feedback/toast.js +3 -9
  70. package/dist/components/files/drop-zone.d.ts +2 -2
  71. package/dist/components/files/drop-zone.js +3 -9
  72. package/dist/components/forms/calendar.d.ts +2 -2
  73. package/dist/components/forms/calendar.js +3 -9
  74. package/dist/components/forms/category-selector.d.ts +2 -2
  75. package/dist/components/forms/category-selector.js +3 -9
  76. package/dist/components/forms/checkbox-group.d.ts +2 -2
  77. package/dist/components/forms/checkbox-group.js +3 -9
  78. package/dist/components/forms/checkbox.d.ts +2 -2
  79. package/dist/components/forms/checkbox.js +3 -9
  80. package/dist/components/forms/color-picker.d.ts +2 -2
  81. package/dist/components/forms/color-picker.js +3 -9
  82. package/dist/components/forms/combobox.d.ts +2 -2
  83. package/dist/components/forms/combobox.js +3 -9
  84. package/dist/components/forms/date-field.d.ts +2 -2
  85. package/dist/components/forms/date-field.js +3 -9
  86. package/dist/components/forms/dropdown.d.ts +2 -2
  87. package/dist/components/forms/dropdown.js +3 -9
  88. package/dist/components/forms/dual-listbox.d.ts +2 -2
  89. package/dist/components/forms/dual-listbox.js +3 -9
  90. package/dist/components/forms/fieldset.d.ts +2 -2
  91. package/dist/components/forms/fieldset.js +3 -9
  92. package/dist/components/forms/multi-select.d.ts +2 -2
  93. package/dist/components/forms/multi-select.js +3 -9
  94. package/dist/components/forms/number-input.d.ts +2 -2
  95. package/dist/components/forms/number-input.js +3 -9
  96. package/dist/components/forms/pill-cloud.d.ts +2 -2
  97. package/dist/components/forms/pill-cloud.js +3 -9
  98. package/dist/components/forms/pill-selector-dropdown.d.ts +2 -2
  99. package/dist/components/forms/pill-selector-dropdown.js +3 -9
  100. package/dist/components/forms/radio-group.d.ts +2 -2
  101. package/dist/components/forms/radio-group.js +3 -9
  102. package/dist/components/forms/range-slider.d.ts +2 -2
  103. package/dist/components/forms/range-slider.js +3 -9
  104. package/dist/components/forms/rating.d.ts +2 -2
  105. package/dist/components/forms/rating.js +3 -9
  106. package/dist/components/forms/rich-text-input.d.ts +2 -2
  107. package/dist/components/forms/rich-text-input.js +3 -9
  108. package/dist/components/forms/search-field.d.ts +2 -2
  109. package/dist/components/forms/search-field.js +3 -9
  110. package/dist/components/forms/select.d.ts +23 -2
  111. package/dist/components/forms/select.js +103 -12
  112. package/dist/components/forms/slider.d.ts +2 -2
  113. package/dist/components/forms/slider.js +3 -9
  114. package/dist/components/forms/spin-button.d.ts +2 -2
  115. package/dist/components/forms/spin-button.js +3 -9
  116. package/dist/components/forms/switch.d.ts +2 -2
  117. package/dist/components/forms/switch.js +3 -9
  118. package/dist/components/forms/tag-input.d.ts +2 -2
  119. package/dist/components/forms/tag-input.js +3 -9
  120. package/dist/components/forms/text-area.d.ts +2 -2
  121. package/dist/components/forms/text-area.js +3 -9
  122. package/dist/components/forms/text-field.d.ts +23 -2
  123. package/dist/components/forms/text-field.js +103 -10
  124. package/dist/components/forms/time-field.d.ts +2 -2
  125. package/dist/components/forms/time-field.js +4 -10
  126. package/dist/components/identity/avatar.d.ts +2 -2
  127. package/dist/components/identity/avatar.js +3 -9
  128. package/dist/components/identity/contact-datalist-item.d.ts +2 -2
  129. package/dist/components/identity/contact-datalist-item.js +3 -9
  130. package/dist/components/identity/persona.d.ts +2 -2
  131. package/dist/components/identity/persona.js +3 -9
  132. package/dist/components/layout/app-shell.d.ts +2 -2
  133. package/dist/components/layout/app-shell.js +3 -9
  134. package/dist/components/layout/divider.d.ts +2 -2
  135. package/dist/components/layout/divider.js +3 -9
  136. package/dist/components/layout/nav-sidebar.d.ts +16 -2
  137. package/dist/components/layout/nav-sidebar.js +52 -9
  138. package/dist/components/layout/section.d.ts +2 -2
  139. package/dist/components/layout/section.js +3 -9
  140. package/dist/components/layout/sidebar-toggle-button.d.ts +2 -2
  141. package/dist/components/layout/sidebar-toggle-button.js +3 -9
  142. package/dist/components/layout/split-view.d.ts +16 -2
  143. package/dist/components/layout/split-view.js +83 -10
  144. package/dist/components/navigation/accordion.d.ts +2 -2
  145. package/dist/components/navigation/accordion.js +3 -9
  146. package/dist/components/navigation/breadcrumb.d.ts +2 -2
  147. package/dist/components/navigation/breadcrumb.js +3 -9
  148. package/dist/components/navigation/tabs.d.ts +2 -2
  149. package/dist/components/navigation/tabs.js +3 -9
  150. package/dist/components/overlays/command-palette.d.ts +62 -0
  151. package/dist/components/overlays/command-palette.js +537 -0
  152. package/dist/components/overlays/command-types.d.ts +90 -0
  153. package/dist/components/overlays/command-types.js +259 -0
  154. package/dist/components/overlays/context-menu.d.ts +2 -2
  155. package/dist/components/overlays/context-menu.js +3 -9
  156. package/dist/components/overlays/dialog.d.ts +2 -2
  157. package/dist/components/overlays/dialog.js +3 -9
  158. package/dist/components/overlays/drawer.d.ts +20 -2
  159. package/dist/components/overlays/drawer.js +138 -18
  160. package/dist/components/overlays/guide-tooltip.d.ts +2 -2
  161. package/dist/components/overlays/guide-tooltip.js +3 -9
  162. package/dist/components/overlays/popover.d.ts +2 -2
  163. package/dist/components/overlays/popover.js +3 -9
  164. package/dist/components/overlays/shortcuts-overlay.d.ts +48 -0
  165. package/dist/components/overlays/shortcuts-overlay.js +385 -0
  166. package/dist/components/overlays/tooltip.d.ts +2 -2
  167. package/dist/components/overlays/tooltip.js +4 -10
  168. package/dist/components/visuals/illustration.d.ts +2 -2
  169. package/dist/components/visuals/illustration.js +3 -9
  170. package/dist/core/element.d.ts +5 -1
  171. package/dist/core/element.js +29 -1
  172. package/dist/element-maps.d.ts +292 -0
  173. package/dist/element-maps.js +1 -0
  174. package/dist/entries/access-stats.d.ts +1 -0
  175. package/dist/entries/access-stats.js +1 -0
  176. package/dist/entries/accordion.d.ts +1 -0
  177. package/dist/entries/accordion.js +1 -0
  178. package/dist/entries/activity-density.d.ts +1 -0
  179. package/dist/entries/activity-density.js +1 -0
  180. package/dist/entries/agent-chat.d.ts +1 -0
  181. package/dist/entries/agent-chat.js +1 -0
  182. package/dist/entries/alert.d.ts +1 -0
  183. package/dist/entries/alert.js +1 -0
  184. package/dist/entries/annotation-inspector.d.ts +1 -0
  185. package/dist/entries/annotation-inspector.js +1 -0
  186. package/dist/entries/annotation-thread.d.ts +1 -0
  187. package/dist/entries/annotation-thread.js +1 -0
  188. package/dist/entries/annotation-toolbar.d.ts +1 -0
  189. package/dist/entries/annotation-toolbar.js +1 -0
  190. package/dist/entries/app-shell.d.ts +1 -0
  191. package/dist/entries/app-shell.js +1 -0
  192. package/dist/entries/audit-log.d.ts +1 -0
  193. package/dist/entries/audit-log.js +1 -0
  194. package/dist/entries/avatar.d.ts +1 -0
  195. package/dist/entries/avatar.js +1 -0
  196. package/dist/entries/badge.d.ts +1 -0
  197. package/dist/entries/badge.js +1 -0
  198. package/dist/entries/badgeable.d.ts +1 -0
  199. package/dist/entries/badgeable.js +1 -0
  200. package/dist/entries/bar-chart.d.ts +1 -0
  201. package/dist/entries/bar-chart.js +1 -0
  202. package/dist/entries/breadcrumb.d.ts +1 -0
  203. package/dist/entries/breadcrumb.js +1 -0
  204. package/dist/entries/bulk-action-bar.d.ts +1 -0
  205. package/dist/entries/bulk-action-bar.js +1 -0
  206. package/dist/entries/button-group.d.ts +1 -0
  207. package/dist/entries/button-group.js +1 -0
  208. package/dist/entries/button.d.ts +1 -0
  209. package/dist/entries/button.js +1 -0
  210. package/dist/entries/calendar.d.ts +1 -0
  211. package/dist/entries/calendar.js +1 -0
  212. package/dist/entries/card.d.ts +1 -0
  213. package/dist/entries/card.js +1 -0
  214. package/dist/entries/carousel.d.ts +1 -0
  215. package/dist/entries/carousel.js +1 -0
  216. package/dist/entries/category-selector.d.ts +1 -0
  217. package/dist/entries/category-selector.js +1 -0
  218. package/dist/entries/chart-panel.d.ts +1 -0
  219. package/dist/entries/chart-panel.js +1 -0
  220. package/dist/entries/checkbox-group.d.ts +1 -0
  221. package/dist/entries/checkbox-group.js +1 -0
  222. package/dist/entries/checkbox.d.ts +1 -0
  223. package/dist/entries/checkbox.js +1 -0
  224. package/dist/entries/chip.d.ts +1 -0
  225. package/dist/entries/chip.js +1 -0
  226. package/dist/entries/collaborator-avatars.d.ts +1 -0
  227. package/dist/entries/collaborator-avatars.js +1 -0
  228. package/dist/entries/color-picker.d.ts +1 -0
  229. package/dist/entries/color-picker.js +1 -0
  230. package/dist/entries/combobox.d.ts +1 -0
  231. package/dist/entries/combobox.js +1 -0
  232. package/dist/entries/command-palette.d.ts +1 -0
  233. package/dist/entries/command-palette.js +1 -0
  234. package/dist/entries/compare-view.d.ts +1 -0
  235. package/dist/entries/compare-view.js +1 -0
  236. package/dist/entries/contact-datalist-item.d.ts +1 -0
  237. package/dist/entries/contact-datalist-item.js +1 -0
  238. package/dist/entries/content-explorer.d.ts +1 -0
  239. package/dist/entries/content-explorer.js +1 -0
  240. package/dist/entries/context-menu.d.ts +1 -0
  241. package/dist/entries/context-menu.js +1 -0
  242. package/dist/entries/datalist-item.d.ts +1 -0
  243. package/dist/entries/datalist-item.js +1 -0
  244. package/dist/entries/date-field.d.ts +1 -0
  245. package/dist/entries/date-field.js +1 -0
  246. package/dist/entries/dialog.d.ts +1 -0
  247. package/dist/entries/dialog.js +1 -0
  248. package/dist/entries/diff-viewer.d.ts +1 -0
  249. package/dist/entries/diff-viewer.js +1 -0
  250. package/dist/entries/divider.d.ts +1 -0
  251. package/dist/entries/divider.js +1 -0
  252. package/dist/entries/donut-chart.d.ts +1 -0
  253. package/dist/entries/donut-chart.js +1 -0
  254. package/dist/entries/draggable-list.d.ts +1 -0
  255. package/dist/entries/draggable-list.js +1 -0
  256. package/dist/entries/drawer.d.ts +1 -0
  257. package/dist/entries/drawer.js +1 -0
  258. package/dist/entries/drop-zone.d.ts +1 -0
  259. package/dist/entries/drop-zone.js +1 -0
  260. package/dist/entries/dropdown.d.ts +1 -0
  261. package/dist/entries/dropdown.js +1 -0
  262. package/dist/entries/dual-listbox.d.ts +1 -0
  263. package/dist/entries/dual-listbox.js +1 -0
  264. package/dist/entries/due-badge.d.ts +1 -0
  265. package/dist/entries/due-badge.js +1 -0
  266. package/dist/entries/empty-state.d.ts +1 -0
  267. package/dist/entries/empty-state.js +1 -0
  268. package/dist/entries/error-mask.d.ts +1 -0
  269. package/dist/entries/error-mask.js +1 -0
  270. package/dist/entries/explorer-action-menu.d.ts +1 -0
  271. package/dist/entries/explorer-action-menu.js +1 -0
  272. package/dist/entries/explorer-breadcrumbs.d.ts +1 -0
  273. package/dist/entries/explorer-breadcrumbs.js +1 -0
  274. package/dist/entries/explorer-items.d.ts +1 -0
  275. package/dist/entries/explorer-items.js +1 -0
  276. package/dist/entries/explorer-list.d.ts +1 -0
  277. package/dist/entries/explorer-list.js +1 -0
  278. package/dist/entries/explorer-table.d.ts +1 -0
  279. package/dist/entries/explorer-table.js +1 -0
  280. package/dist/entries/explorer-toolbar.d.ts +1 -0
  281. package/dist/entries/explorer-toolbar.js +1 -0
  282. package/dist/entries/fieldset.d.ts +1 -0
  283. package/dist/entries/fieldset.js +1 -0
  284. package/dist/entries/file-request-builder.d.ts +1 -0
  285. package/dist/entries/file-request-builder.js +1 -0
  286. package/dist/entries/filter-bar.d.ts +1 -0
  287. package/dist/entries/filter-bar.js +1 -0
  288. package/dist/entries/form-wizard.d.ts +1 -0
  289. package/dist/entries/form-wizard.js +1 -0
  290. package/dist/entries/governance-panel.d.ts +1 -0
  291. package/dist/entries/governance-panel.js +1 -0
  292. package/dist/entries/grid-view.d.ts +1 -0
  293. package/dist/entries/grid-view.js +1 -0
  294. package/dist/entries/guide-tooltip.d.ts +1 -0
  295. package/dist/entries/guide-tooltip.js +1 -0
  296. package/dist/entries/help-text.d.ts +1 -0
  297. package/dist/entries/help-text.js +1 -0
  298. package/dist/entries/icon-button.d.ts +1 -0
  299. package/dist/entries/icon-button.js +1 -0
  300. package/dist/entries/illustration.d.ts +1 -0
  301. package/dist/entries/illustration.js +1 -0
  302. package/dist/entries/invite-collaborators-modal.d.ts +1 -0
  303. package/dist/entries/invite-collaborators-modal.js +1 -0
  304. package/dist/entries/item-details-panel.d.ts +1 -0
  305. package/dist/entries/item-details-panel.js +1 -0
  306. package/dist/entries/item-form.d.ts +1 -0
  307. package/dist/entries/item-form.js +1 -0
  308. package/dist/entries/line-chart.d.ts +1 -0
  309. package/dist/entries/line-chart.js +1 -0
  310. package/dist/entries/lineage-graph.d.ts +1 -0
  311. package/dist/entries/lineage-graph.js +1 -0
  312. package/dist/entries/link-button.d.ts +1 -0
  313. package/dist/entries/link-button.js +1 -0
  314. package/dist/entries/menu-item.d.ts +1 -0
  315. package/dist/entries/menu-item.js +1 -0
  316. package/dist/entries/menu.d.ts +1 -0
  317. package/dist/entries/menu.js +1 -0
  318. package/dist/entries/metadata-filter-builder.d.ts +1 -0
  319. package/dist/entries/metadata-filter-builder.js +1 -0
  320. package/dist/entries/metadata-inspector.d.ts +1 -0
  321. package/dist/entries/metadata-inspector.js +1 -0
  322. package/dist/entries/metric-card.d.ts +1 -0
  323. package/dist/entries/metric-card.js +1 -0
  324. package/dist/entries/multi-select.d.ts +1 -0
  325. package/dist/entries/multi-select.js +1 -0
  326. package/dist/entries/nav-sidebar.d.ts +1 -0
  327. package/dist/entries/nav-sidebar.js +1 -0
  328. package/dist/entries/notification-bell.d.ts +1 -0
  329. package/dist/entries/notification-bell.js +1 -0
  330. package/dist/entries/notification-inbox.d.ts +1 -0
  331. package/dist/entries/notification-inbox.js +1 -0
  332. package/dist/entries/nudge.d.ts +1 -0
  333. package/dist/entries/nudge.js +1 -0
  334. package/dist/entries/number-input.d.ts +1 -0
  335. package/dist/entries/number-input.js +1 -0
  336. package/dist/entries/pagination.d.ts +1 -0
  337. package/dist/entries/pagination.js +1 -0
  338. package/dist/entries/permission-matrix.d.ts +1 -0
  339. package/dist/entries/permission-matrix.js +1 -0
  340. package/dist/entries/persona.d.ts +1 -0
  341. package/dist/entries/persona.js +1 -0
  342. package/dist/entries/pill-cloud.d.ts +1 -0
  343. package/dist/entries/pill-cloud.js +1 -0
  344. package/dist/entries/pill-selector-dropdown.d.ts +1 -0
  345. package/dist/entries/pill-selector-dropdown.js +1 -0
  346. package/dist/entries/popover.d.ts +1 -0
  347. package/dist/entries/popover.js +1 -0
  348. package/dist/entries/presence.d.ts +1 -0
  349. package/dist/entries/presence.js +1 -0
  350. package/dist/entries/preview-header.d.ts +1 -0
  351. package/dist/entries/preview-header.js +1 -0
  352. package/dist/entries/preview.d.ts +1 -0
  353. package/dist/entries/preview.js +1 -0
  354. package/dist/entries/progress-bar.d.ts +1 -0
  355. package/dist/entries/progress-bar.js +1 -0
  356. package/dist/entries/progress-ring.d.ts +1 -0
  357. package/dist/entries/progress-ring.js +1 -0
  358. package/dist/entries/progress-steps.d.ts +1 -0
  359. package/dist/entries/progress-steps.js +1 -0
  360. package/dist/entries/provenance-strip.d.ts +1 -0
  361. package/dist/entries/provenance-strip.js +1 -0
  362. package/dist/entries/radio-group.d.ts +1 -0
  363. package/dist/entries/radio-group.js +1 -0
  364. package/dist/entries/range-slider.d.ts +1 -0
  365. package/dist/entries/range-slider.js +1 -0
  366. package/dist/entries/rating.d.ts +1 -0
  367. package/dist/entries/rating.js +1 -0
  368. package/dist/entries/review-queue-item.d.ts +1 -0
  369. package/dist/entries/review-queue-item.js +1 -0
  370. package/dist/entries/rich-text-input.d.ts +1 -0
  371. package/dist/entries/rich-text-input.js +1 -0
  372. package/dist/entries/run-trace.d.ts +1 -0
  373. package/dist/entries/run-trace.js +1 -0
  374. package/dist/entries/saved-view-picker.d.ts +1 -0
  375. package/dist/entries/saved-view-picker.js +1 -0
  376. package/dist/entries/search-field.d.ts +1 -0
  377. package/dist/entries/search-field.js +1 -0
  378. package/dist/entries/search-results-header.d.ts +1 -0
  379. package/dist/entries/search-results-header.js +1 -0
  380. package/dist/entries/section.d.ts +1 -0
  381. package/dist/entries/section.js +1 -0
  382. package/dist/entries/segmented-control.d.ts +1 -0
  383. package/dist/entries/segmented-control.js +1 -0
  384. package/dist/entries/select.d.ts +1 -0
  385. package/dist/entries/select.js +1 -0
  386. package/dist/entries/share-panel.d.ts +1 -0
  387. package/dist/entries/share-panel.js +1 -0
  388. package/dist/entries/shortcuts-overlay.d.ts +1 -0
  389. package/dist/entries/shortcuts-overlay.js +1 -0
  390. package/dist/entries/sidebar-toggle-button.d.ts +1 -0
  391. package/dist/entries/sidebar-toggle-button.js +1 -0
  392. package/dist/entries/signature-ceremony.d.ts +1 -0
  393. package/dist/entries/signature-ceremony.js +1 -0
  394. package/dist/entries/skeleton.d.ts +1 -0
  395. package/dist/entries/skeleton.js +1 -0
  396. package/dist/entries/slider.d.ts +1 -0
  397. package/dist/entries/slider.js +1 -0
  398. package/dist/entries/spin-button.d.ts +1 -0
  399. package/dist/entries/spin-button.js +1 -0
  400. package/dist/entries/spinner.d.ts +1 -0
  401. package/dist/entries/spinner.js +1 -0
  402. package/dist/entries/split-view.d.ts +1 -0
  403. package/dist/entries/split-view.js +1 -0
  404. package/dist/entries/stage-path.d.ts +1 -0
  405. package/dist/entries/stage-path.js +1 -0
  406. package/dist/entries/switch.d.ts +1 -0
  407. package/dist/entries/switch.js +1 -0
  408. package/dist/entries/table.d.ts +1 -0
  409. package/dist/entries/table.js +1 -0
  410. package/dist/entries/tabs.d.ts +1 -0
  411. package/dist/entries/tabs.js +1 -0
  412. package/dist/entries/tag-input.d.ts +1 -0
  413. package/dist/entries/tag-input.js +1 -0
  414. package/dist/entries/task-assignment-panel.d.ts +1 -0
  415. package/dist/entries/task-assignment-panel.js +1 -0
  416. package/dist/entries/text-area.d.ts +1 -0
  417. package/dist/entries/text-area.js +1 -0
  418. package/dist/entries/text-field.d.ts +1 -0
  419. package/dist/entries/text-field.js +1 -0
  420. package/dist/entries/thumbnail-card.d.ts +1 -0
  421. package/dist/entries/thumbnail-card.js +1 -0
  422. package/dist/entries/time-field.d.ts +1 -0
  423. package/dist/entries/time-field.js +1 -0
  424. package/dist/entries/timeline.d.ts +1 -0
  425. package/dist/entries/timeline.js +1 -0
  426. package/dist/entries/toast.d.ts +1 -0
  427. package/dist/entries/toast.js +1 -0
  428. package/dist/entries/tooltip.d.ts +1 -0
  429. package/dist/entries/tooltip.js +1 -0
  430. package/dist/entries/tree-grid.d.ts +1 -0
  431. package/dist/entries/tree-grid.js +1 -0
  432. package/dist/entries/tree.d.ts +1 -0
  433. package/dist/entries/tree.js +1 -0
  434. package/dist/entries/unified-share-modal.d.ts +1 -0
  435. package/dist/entries/unified-share-modal.js +1 -0
  436. package/dist/entries/version-graph.d.ts +1 -0
  437. package/dist/entries/version-graph.js +1 -0
  438. package/dist/entries/version-list.d.ts +1 -0
  439. package/dist/entries/version-list.js +1 -0
  440. package/dist/entries/wizard-summary.d.ts +1 -0
  441. package/dist/entries/wizard-summary.js +1 -0
  442. package/dist/entries/work-queue.d.ts +1 -0
  443. package/dist/entries/work-queue.js +1 -0
  444. package/dist/entries/workload-board.d.ts +1 -0
  445. package/dist/entries/workload-board.js +1 -0
  446. package/dist/foundations/geometry/tokens.d.ts +46 -45
  447. package/dist/foundations/geometry/tokens.js +46 -45
  448. package/dist/foundations/motion/tokens.d.ts +10 -10
  449. package/dist/foundations/motion/tokens.js +10 -10
  450. package/dist/foundations/profiles/built-ins.d.ts +4 -0
  451. package/dist/foundations/profiles/built-ins.js +131 -0
  452. package/dist/foundations/profiles/controller.d.ts +4 -0
  453. package/dist/foundations/profiles/controller.js +107 -0
  454. package/dist/foundations/profiles/index.d.ts +4 -0
  455. package/dist/foundations/profiles/index.js +3 -0
  456. package/dist/foundations/profiles/registry.d.ts +72 -0
  457. package/dist/foundations/profiles/registry.js +119 -0
  458. package/dist/foundations/profiles/types.d.ts +94 -0
  459. package/dist/foundations/profiles/types.js +1 -0
  460. package/dist/foundations/theming/controller.d.ts +37 -0
  461. package/dist/foundations/theming/controller.js +176 -0
  462. package/dist/foundations/theming/index.d.ts +2 -0
  463. package/dist/foundations/theming/index.js +1 -0
  464. package/dist/foundations/tokens/box-dark.d.ts +3 -3
  465. package/dist/foundations/tokens/box-defaults.d.ts +3 -3
  466. package/dist/foundations/tokens/index.d.ts +2 -2
  467. package/dist/foundations/tokens/index.js +1 -1
  468. package/dist/foundations/tokens/registry.d.ts +37 -7
  469. package/dist/foundations/tokens/registry.js +55 -5
  470. package/dist/foundations/tokens/types.d.ts +38 -1
  471. package/dist/index.d.ts +27 -2
  472. package/dist/index.js +24 -1
  473. package/dist/patterns/agent-chat/agent-chat.d.ts +75 -0
  474. package/dist/patterns/agent-chat/agent-chat.js +820 -0
  475. package/dist/patterns/agent-chat/controller.d.ts +27 -0
  476. package/dist/patterns/agent-chat/controller.js +182 -0
  477. package/dist/patterns/agent-chat/index.d.ts +3 -0
  478. package/dist/patterns/agent-chat/index.js +6 -0
  479. package/dist/patterns/agent-chat/types.d.ts +109 -0
  480. package/dist/patterns/agent-chat/types.js +1 -0
  481. package/dist/patterns/audit/activity-density.d.ts +68 -0
  482. package/dist/patterns/audit/activity-density.js +428 -0
  483. package/dist/patterns/audit/audit-log.d.ts +81 -0
  484. package/dist/patterns/audit/audit-log.js +794 -0
  485. package/dist/patterns/audit/index.d.ts +3 -0
  486. package/dist/patterns/audit/index.js +7 -0
  487. package/dist/patterns/audit/shared.d.ts +10 -0
  488. package/dist/patterns/audit/shared.js +50 -0
  489. package/dist/patterns/audit/types.d.ts +143 -0
  490. package/dist/patterns/audit/types.js +327 -0
  491. package/dist/patterns/content-explorer/actions/controller.js +12 -2
  492. package/dist/patterns/content-explorer/adapters/action-menu.d.ts +2 -2
  493. package/dist/patterns/content-explorer/adapters/action-menu.js +3 -9
  494. package/dist/patterns/content-explorer/adapters/breadcrumbs.d.ts +2 -2
  495. package/dist/patterns/content-explorer/adapters/breadcrumbs.js +3 -9
  496. package/dist/patterns/content-explorer/adapters/items.d.ts +3 -3
  497. package/dist/patterns/content-explorer/adapters/items.js +4 -10
  498. package/dist/patterns/content-explorer/adapters/list.d.ts +2 -2
  499. package/dist/patterns/content-explorer/adapters/list.js +3 -9
  500. package/dist/patterns/content-explorer/adapters/table.d.ts +2 -2
  501. package/dist/patterns/content-explorer/adapters/table.js +3 -9
  502. package/dist/patterns/content-explorer/adapters/toolbar.d.ts +2 -2
  503. package/dist/patterns/content-explorer/adapters/toolbar.js +7 -13
  504. package/dist/patterns/content-explorer/box-transport.js +117 -25
  505. package/dist/patterns/content-explorer/content-explorer.d.ts +28 -16
  506. package/dist/patterns/content-explorer/content-explorer.js +41 -14
  507. package/dist/patterns/content-explorer/contracts.d.ts +24 -1
  508. package/dist/patterns/content-explorer/contracts.js +68 -11
  509. package/dist/patterns/content-explorer/controller.d.ts +16 -1
  510. package/dist/patterns/content-explorer/controller.js +130 -4
  511. package/dist/patterns/content-explorer/navigation/controller.js +11 -9
  512. package/dist/patterns/content-explorer/types.d.ts +58 -1
  513. package/dist/patterns/content-picker/content-picker.d.ts +71 -0
  514. package/dist/patterns/content-picker/content-picker.js +747 -0
  515. package/dist/patterns/content-picker/controller.d.ts +38 -0
  516. package/dist/patterns/content-picker/controller.js +141 -0
  517. package/dist/patterns/content-picker/index.d.ts +3 -0
  518. package/dist/patterns/content-picker/index.js +6 -0
  519. package/dist/patterns/content-picker/types.d.ts +52 -0
  520. package/dist/patterns/content-picker/types.js +26 -0
  521. package/dist/patterns/content-sidebar/content-sidebar.d.ts +43 -0
  522. package/dist/patterns/content-sidebar/content-sidebar.js +293 -0
  523. package/dist/patterns/content-sidebar/index.d.ts +2 -0
  524. package/dist/patterns/content-sidebar/index.js +4 -0
  525. package/dist/patterns/content-sidebar/types.d.ts +18 -0
  526. package/dist/patterns/content-sidebar/types.js +20 -0
  527. package/dist/patterns/content-uploader/box-transport.d.ts +14 -0
  528. package/dist/patterns/content-uploader/box-transport.js +54 -0
  529. package/dist/patterns/content-uploader/content-uploader.d.ts +62 -0
  530. package/dist/patterns/content-uploader/content-uploader.js +559 -0
  531. package/dist/patterns/content-uploader/controller.d.ts +39 -0
  532. package/dist/patterns/content-uploader/controller.js +227 -0
  533. package/dist/patterns/content-uploader/index.d.ts +4 -0
  534. package/dist/patterns/content-uploader/index.js +8 -0
  535. package/dist/patterns/content-uploader/types.d.ts +120 -0
  536. package/dist/patterns/content-uploader/types.js +38 -0
  537. package/dist/patterns/diff/compare-view.d.ts +47 -0
  538. package/dist/patterns/diff/compare-view.js +276 -0
  539. package/dist/patterns/diff/diff-viewer.d.ts +42 -0
  540. package/dist/patterns/diff/diff-viewer.js +434 -0
  541. package/dist/patterns/diff/engine.d.ts +22 -0
  542. package/dist/patterns/diff/engine.js +276 -0
  543. package/dist/patterns/diff/index.d.ts +4 -0
  544. package/dist/patterns/diff/index.js +8 -0
  545. package/dist/patterns/diff/types.d.ts +69 -0
  546. package/dist/patterns/diff/types.js +24 -0
  547. package/dist/patterns/file-request/file-request-builder.d.ts +2 -2
  548. package/dist/patterns/file-request/file-request-builder.js +3 -9
  549. package/dist/patterns/form-wizard/controller.d.ts +39 -0
  550. package/dist/patterns/form-wizard/controller.js +157 -0
  551. package/dist/patterns/form-wizard/form-wizard.d.ts +63 -0
  552. package/dist/patterns/form-wizard/form-wizard.js +468 -0
  553. package/dist/patterns/form-wizard/index.d.ts +4 -0
  554. package/dist/patterns/form-wizard/index.js +8 -0
  555. package/dist/patterns/form-wizard/types.d.ts +109 -0
  556. package/dist/patterns/form-wizard/types.js +83 -0
  557. package/dist/patterns/form-wizard/wizard-summary.d.ts +62 -0
  558. package/dist/patterns/form-wizard/wizard-summary.js +324 -0
  559. package/dist/patterns/governance/governance-panel.d.ts +2 -2
  560. package/dist/patterns/governance/governance-panel.js +3 -6
  561. package/dist/patterns/insights/bar-chart.d.ts +2 -2
  562. package/dist/patterns/insights/bar-chart.js +3 -6
  563. package/dist/patterns/insights/chart-panel.d.ts +2 -2
  564. package/dist/patterns/insights/chart-panel.js +3 -6
  565. package/dist/patterns/insights/donut-chart.d.ts +2 -2
  566. package/dist/patterns/insights/donut-chart.js +3 -6
  567. package/dist/patterns/insights/line-chart.d.ts +2 -2
  568. package/dist/patterns/insights/line-chart.js +3 -6
  569. package/dist/patterns/insights/metric-card.d.ts +2 -2
  570. package/dist/patterns/insights/metric-card.js +3 -6
  571. package/dist/patterns/internal/safe-href.d.ts +17 -0
  572. package/dist/patterns/internal/safe-href.js +17 -0
  573. package/dist/patterns/item/bulk-action-bar.d.ts +2 -2
  574. package/dist/patterns/item/bulk-action-bar.js +3 -6
  575. package/dist/patterns/item/item-details-panel.d.ts +2 -2
  576. package/dist/patterns/item/item-details-panel.js +3 -9
  577. package/dist/patterns/item/item-form.d.ts +2 -2
  578. package/dist/patterns/item/item-form.js +3 -9
  579. package/dist/patterns/item/preview-header.d.ts +2 -2
  580. package/dist/patterns/item/preview-header.js +3 -9
  581. package/dist/patterns/lineage/index.d.ts +3 -0
  582. package/dist/patterns/lineage/index.js +6 -0
  583. package/dist/patterns/lineage/lineage-graph.d.ts +30 -0
  584. package/dist/patterns/lineage/lineage-graph.js +434 -0
  585. package/dist/patterns/lineage/provenance-strip.d.ts +22 -0
  586. package/dist/patterns/lineage/provenance-strip.js +194 -0
  587. package/dist/patterns/lineage/types.d.ts +53 -0
  588. package/dist/patterns/lineage/types.js +49 -0
  589. package/dist/patterns/metadata/metadata-filter-builder.d.ts +2 -2
  590. package/dist/patterns/metadata/metadata-filter-builder.js +3 -9
  591. package/dist/patterns/metadata/metadata-inspector.d.ts +2 -2
  592. package/dist/patterns/metadata/metadata-inspector.js +3 -9
  593. package/dist/patterns/notifications/index.d.ts +3 -0
  594. package/dist/patterns/notifications/index.js +6 -0
  595. package/dist/patterns/notifications/notification-bell.d.ts +38 -0
  596. package/dist/patterns/notifications/notification-bell.js +198 -0
  597. package/dist/patterns/notifications/notification-inbox.d.ts +46 -0
  598. package/dist/patterns/notifications/notification-inbox.js +537 -0
  599. package/dist/patterns/notifications/types.d.ts +61 -0
  600. package/dist/patterns/notifications/types.js +108 -0
  601. package/dist/patterns/preview/annotation-inspector.d.ts +27 -8
  602. package/dist/patterns/preview/annotation-inspector.js +242 -103
  603. package/dist/patterns/preview/annotation-thread.d.ts +27 -7
  604. package/dist/patterns/preview/annotation-thread.js +236 -91
  605. package/dist/patterns/preview/annotation-toolbar.d.ts +22 -8
  606. package/dist/patterns/preview/annotation-toolbar.js +165 -105
  607. package/dist/patterns/preview/content-preview-adapter.d.ts +10 -1
  608. package/dist/patterns/preview/content-preview-adapter.js +26 -1
  609. package/dist/patterns/preview/preview-element.d.ts +17 -4
  610. package/dist/patterns/preview/preview-element.js +226 -61
  611. package/dist/patterns/preview/provider-adapter.d.ts +47 -0
  612. package/dist/patterns/preview/provider-adapter.js +17 -0
  613. package/dist/patterns/run/index.d.ts +2 -0
  614. package/dist/patterns/run/index.js +4 -0
  615. package/dist/patterns/run/run-trace.d.ts +40 -0
  616. package/dist/patterns/run/run-trace.js +441 -0
  617. package/dist/patterns/run/types.d.ts +66 -0
  618. package/dist/patterns/run/types.js +152 -0
  619. package/dist/patterns/search/filter-bar.d.ts +2 -2
  620. package/dist/patterns/search/filter-bar.js +3 -9
  621. package/dist/patterns/search/saved-view-picker.d.ts +2 -2
  622. package/dist/patterns/search/saved-view-picker.js +3 -9
  623. package/dist/patterns/search/search-results-header.d.ts +2 -2
  624. package/dist/patterns/search/search-results-header.js +3 -9
  625. package/dist/patterns/share/access-stats.d.ts +2 -2
  626. package/dist/patterns/share/access-stats.js +3 -9
  627. package/dist/patterns/share/collaborator-avatars.d.ts +2 -2
  628. package/dist/patterns/share/collaborator-avatars.js +3 -9
  629. package/dist/patterns/share/invite-collaborators-modal.d.ts +2 -2
  630. package/dist/patterns/share/invite-collaborators-modal.js +3 -9
  631. package/dist/patterns/share/permission-matrix.d.ts +2 -2
  632. package/dist/patterns/share/permission-matrix.js +3 -9
  633. package/dist/patterns/share/presence.d.ts +2 -2
  634. package/dist/patterns/share/presence.js +3 -9
  635. package/dist/patterns/share/share-panel.d.ts +2 -2
  636. package/dist/patterns/share/share-panel.js +3 -9
  637. package/dist/patterns/share/unified-share-modal.d.ts +2 -2
  638. package/dist/patterns/share/unified-share-modal.js +3 -9
  639. package/dist/patterns/signature/index.d.ts +2 -0
  640. package/dist/patterns/signature/index.js +4 -0
  641. package/dist/patterns/signature/signature-ceremony.d.ts +33 -0
  642. package/dist/patterns/signature/signature-ceremony.js +317 -0
  643. package/dist/patterns/signature/types.d.ts +68 -0
  644. package/dist/patterns/signature/types.js +89 -0
  645. package/dist/patterns/task/review-queue-item.d.ts +2 -2
  646. package/dist/patterns/task/review-queue-item.js +3 -6
  647. package/dist/patterns/task/task-assignment-panel.d.ts +2 -2
  648. package/dist/patterns/task/task-assignment-panel.js +3 -6
  649. package/dist/patterns/timeline/index.d.ts +2 -0
  650. package/dist/patterns/timeline/index.js +4 -0
  651. package/dist/patterns/timeline/timeline.d.ts +27 -0
  652. package/dist/patterns/timeline/timeline.js +430 -0
  653. package/dist/patterns/timeline/types.d.ts +36 -0
  654. package/dist/patterns/timeline/types.js +27 -0
  655. package/dist/patterns/versions/graph-layout.d.ts +43 -0
  656. package/dist/patterns/versions/graph-layout.js +159 -0
  657. package/dist/patterns/versions/index.d.ts +4 -0
  658. package/dist/patterns/versions/index.js +8 -0
  659. package/dist/patterns/versions/shared.d.ts +4 -0
  660. package/dist/patterns/versions/shared.js +13 -0
  661. package/dist/patterns/versions/types.d.ts +37 -0
  662. package/dist/patterns/versions/types.js +39 -0
  663. package/dist/patterns/versions/version-graph.d.ts +36 -0
  664. package/dist/patterns/versions/version-graph.js +438 -0
  665. package/dist/patterns/versions/version-list.d.ts +39 -0
  666. package/dist/patterns/versions/version-list.js +407 -0
  667. package/dist/patterns/work-queue/controller.d.ts +26 -0
  668. package/dist/patterns/work-queue/controller.js +150 -0
  669. package/dist/patterns/work-queue/index.d.ts +4 -0
  670. package/dist/patterns/work-queue/index.js +7 -0
  671. package/dist/patterns/work-queue/types.d.ts +128 -0
  672. package/dist/patterns/work-queue/types.js +45 -0
  673. package/dist/patterns/work-queue/work-queue.d.ts +48 -0
  674. package/dist/patterns/work-queue/work-queue.js +534 -0
  675. package/dist/patterns/work-queue/workload-board.d.ts +53 -0
  676. package/dist/patterns/work-queue/workload-board.js +608 -0
  677. package/package.json +93 -5
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Command model and the pure match/rank/group engine behind
3
+ * `box-command-palette`. DOM-free and deterministic, so ranking can be
4
+ * tested and reused (a host can drive its own launcher from the same
5
+ * functions).
6
+ */
7
+ export const COMMAND_UNGROUPED_KEY = "";
8
+ export const COMMAND_UNGROUPED_LABEL = "Other";
9
+ /** Scoring weights. Tuned so an exact prefix always beats a scattered subsequence. */
10
+ const SCORE_EXACT = 1000;
11
+ const SCORE_PREFIX = 500;
12
+ const SCORE_WORD_START = 250;
13
+ const SCORE_SUBSTRING = 120;
14
+ const SCORE_CONSECUTIVE = 8;
15
+ const SCORE_KEYWORD = 40;
16
+ const PENALTY_DISTANCE = 1;
17
+ const isWordBoundary = (text, index) => index === 0 || /[\s\-_/.]/.test(text[index - 1]);
18
+ /**
19
+ * Subsequence match: every query character must appear in order. Returns the
20
+ * matched indices, preferring word starts and consecutive runs — so "cl" hits
21
+ * "**Cl**ause" ahead of "Can**c**e**l**".
22
+ */
23
+ const subsequence = (haystack, needle) => {
24
+ const ranges = [];
25
+ let score = 0;
26
+ let cursor = 0;
27
+ let previous = -1;
28
+ for (const character of needle) {
29
+ let index = haystack.indexOf(character, cursor);
30
+ if (index === -1) {
31
+ return null;
32
+ }
33
+ // Prefer a later occurrence if it starts a word — matching initials reads
34
+ // far better than matching the middle of the first word.
35
+ let candidate = index;
36
+ while (candidate !== -1 && !isWordBoundary(haystack, candidate)) {
37
+ const next = haystack.indexOf(character, candidate + 1);
38
+ if (next === -1) {
39
+ break;
40
+ }
41
+ if (isWordBoundary(haystack, next)) {
42
+ candidate = next;
43
+ break;
44
+ }
45
+ candidate = next;
46
+ }
47
+ if (candidate !== -1 && isWordBoundary(haystack, candidate)) {
48
+ index = candidate;
49
+ }
50
+ ranges.push(index);
51
+ if (isWordBoundary(haystack, index)) {
52
+ score += SCORE_WORD_START;
53
+ }
54
+ if (previous !== -1 && index === previous + 1) {
55
+ score += SCORE_CONSECUTIVE;
56
+ }
57
+ score -= Math.min(index - cursor, 20) * PENALTY_DISTANCE;
58
+ previous = index;
59
+ cursor = index + 1;
60
+ }
61
+ return { score, ranges };
62
+ };
63
+ const scoreCommand = (command, query) => {
64
+ const label = command.label.toLowerCase();
65
+ if (label === query) {
66
+ return { score: SCORE_EXACT, ranges: [...label].map((_, index) => index) };
67
+ }
68
+ const substringIndex = label.indexOf(query);
69
+ if (substringIndex === 0) {
70
+ return {
71
+ score: SCORE_PREFIX,
72
+ ranges: Array.from({ length: query.length }, (_, index) => index),
73
+ };
74
+ }
75
+ if (substringIndex > 0) {
76
+ return {
77
+ score: SCORE_SUBSTRING + (isWordBoundary(label, substringIndex) ? SCORE_WORD_START : 0),
78
+ ranges: Array.from({ length: query.length }, (_, index) => substringIndex + index),
79
+ };
80
+ }
81
+ const bySubsequence = subsequence(label, query);
82
+ if (bySubsequence) {
83
+ return bySubsequence;
84
+ }
85
+ // Keywords match but never highlight — they are not on screen.
86
+ for (const keyword of command.keywords ?? []) {
87
+ if (keyword.toLowerCase().includes(query)) {
88
+ return { score: SCORE_KEYWORD, ranges: [] };
89
+ }
90
+ }
91
+ return null;
92
+ };
93
+ /**
94
+ * Rank commands against a query.
95
+ *
96
+ * An empty query returns everything in recent-first then input order, which
97
+ * is what a palette should show when it opens. Ties are broken by input order
98
+ * (the sort is stable), never by object identity, so the same catalogue always
99
+ * renders the same way.
100
+ */
101
+ export const matchCommands = (commands, query, options = {}) => {
102
+ const recent = options.recentIds ?? [];
103
+ const recentRank = new Map(recent.map((id, index) => [id, recent.length - index]));
104
+ const normalized = query.trim().toLowerCase();
105
+ const pool = options.hideDisabled ? commands.filter(command => !command.disabled) : commands;
106
+ if (!normalized) {
107
+ return [...pool]
108
+ .map(command => ({
109
+ command,
110
+ score: (recentRank.get(command.id) ?? 0) * 10,
111
+ ranges: [],
112
+ }))
113
+ .sort((left, right) => right.score - left.score);
114
+ }
115
+ const matches = [];
116
+ for (const command of pool) {
117
+ const scored = scoreCommand(command, normalized);
118
+ if (!scored) {
119
+ continue;
120
+ }
121
+ matches.push({
122
+ command,
123
+ // A disabled command still matches, but never outranks a usable one.
124
+ score: scored.score + (recentRank.get(command.id) ?? 0) - (command.disabled ? SCORE_EXACT : 0),
125
+ ranges: scored.ranges,
126
+ });
127
+ }
128
+ return matches.sort((left, right) => right.score - left.score);
129
+ };
130
+ /**
131
+ * Bucket ranked matches into sections, preserving rank order both between
132
+ * groups (a group leads where its best match ranks) and within them.
133
+ * Ungrouped commands trail.
134
+ */
135
+ export const groupCommandMatches = (matches) => {
136
+ const groups = new Map();
137
+ for (const match of matches) {
138
+ const key = match.command.group ?? COMMAND_UNGROUPED_KEY;
139
+ let group = groups.get(key);
140
+ if (!group) {
141
+ group = { key, label: key || COMMAND_UNGROUPED_LABEL, matches: [] };
142
+ groups.set(key, group);
143
+ }
144
+ group.matches.push(match);
145
+ }
146
+ const ordered = [...groups.values()];
147
+ const trailing = groups.get(COMMAND_UNGROUPED_KEY);
148
+ if (!trailing) {
149
+ return ordered;
150
+ }
151
+ return [...ordered.filter(group => group.key !== COMMAND_UNGROUPED_KEY), trailing];
152
+ };
153
+ /**
154
+ * The commands that declare a keyboard shortcut, grouped for a shortcuts
155
+ * sheet. Takes the same catalogue the palette does, so one list drives both
156
+ * surfaces and a shortcut can never be documented but unreachable — or
157
+ * reachable but undocumented.
158
+ *
159
+ * Groups keep catalogue order, with the ungrouped section trailing, matching
160
+ * how the palette sections its results.
161
+ */
162
+ export const groupShortcutCommands = (commands) => {
163
+ const groups = new Map();
164
+ for (const command of commands) {
165
+ if (!command.shortcut) {
166
+ continue;
167
+ }
168
+ const key = command.group ?? COMMAND_UNGROUPED_KEY;
169
+ let group = groups.get(key);
170
+ if (!group) {
171
+ group = { key, label: key || COMMAND_UNGROUPED_LABEL, commands: [] };
172
+ groups.set(key, group);
173
+ }
174
+ group.commands.push(command);
175
+ }
176
+ const ordered = [...groups.values()];
177
+ const trailing = groups.get(COMMAND_UNGROUPED_KEY);
178
+ if (!trailing) {
179
+ return ordered;
180
+ }
181
+ return [...ordered.filter(group => group.key !== COMMAND_UNGROUPED_KEY), trailing];
182
+ };
183
+ /**
184
+ * Split a shortcut string into its keys: `mod+shift+k` → `["mod","shift","k"]`.
185
+ * Rendering each key separately is what lets a sheet show them as `<kbd>`
186
+ * elements rather than one opaque run of text.
187
+ *
188
+ * `+` is both the separator and a real key — `mod++` is how you write the zoom
189
+ * shortcut. A `+` with no key pending in front of it is the key itself, so
190
+ * `mod++` and `ctrl + +` both give `["mod", "+"]` rather than dropping it.
191
+ */
192
+ export const splitShortcutKeys = (shortcut) => {
193
+ const keys = [];
194
+ let buffer = "";
195
+ const flush = () => {
196
+ const key = buffer.trim();
197
+ if (key) {
198
+ keys.push(key);
199
+ }
200
+ buffer = "";
201
+ };
202
+ for (const character of shortcut) {
203
+ if (character !== "+") {
204
+ buffer += character;
205
+ continue;
206
+ }
207
+ if (!buffer.trim()) {
208
+ buffer = "+";
209
+ }
210
+ flush();
211
+ }
212
+ flush();
213
+ return keys;
214
+ };
215
+ /** Split a label into highlighted and plain runs for rendering. */
216
+ export const splitCommandLabel = (label, ranges) => {
217
+ if (ranges.length === 0) {
218
+ return [{ text: label, match: false }];
219
+ }
220
+ const flags = new Set(ranges);
221
+ const parts = [];
222
+ let buffer = "";
223
+ let bufferMatch = flags.has(0);
224
+ for (let index = 0; index < label.length; index += 1) {
225
+ const isMatch = flags.has(index);
226
+ if (isMatch !== bufferMatch && buffer) {
227
+ parts.push({ text: buffer, match: bufferMatch });
228
+ buffer = "";
229
+ }
230
+ bufferMatch = isMatch;
231
+ buffer += label[index];
232
+ }
233
+ if (buffer) {
234
+ parts.push({ text: buffer, match: bufferMatch });
235
+ }
236
+ return parts;
237
+ };
238
+ /** Attribute payloads are author input — validate every record. */
239
+ export const isCommandDescriptorRecord = (value) => {
240
+ if (typeof value !== "object" || value === null) {
241
+ return false;
242
+ }
243
+ const command = value;
244
+ if (typeof command.id !== "string" || command.id.length === 0) {
245
+ return false;
246
+ }
247
+ if (typeof command.label !== "string" || command.label.length === 0) {
248
+ return false;
249
+ }
250
+ if (command.keywords !== undefined) {
251
+ if (!Array.isArray(command.keywords)) {
252
+ return false;
253
+ }
254
+ if (command.keywords.some(keyword => typeof keyword !== "string")) {
255
+ return false;
256
+ }
257
+ }
258
+ return true;
259
+ };
@@ -12,7 +12,8 @@ export interface ContextMenuItem {
12
12
  * menu at the pointer, positioned with `foundations/overlay` so it stays in the
13
13
  * viewport. Full keyboard menu: arrows, Home/End, Enter/Space, Escape.
14
14
  */
15
- export declare class BoxContextMenuElement extends BaseElement {
15
+ export declare class ContextMenu extends BaseElement {
16
+ static readonly tagName: string;
16
17
  static get observedAttributes(): string[];
17
18
  private openValue;
18
19
  private targetEl;
@@ -39,4 +40,3 @@ export declare class BoxContextMenuElement extends BaseElement {
39
40
  private unbindDocument;
40
41
  protected update(): void;
41
42
  }
42
- export declare const defineBoxContextMenuElement: (tagName?: string) => typeof BoxContextMenuElement;
@@ -82,7 +82,8 @@ const contextMenuStyles = `
82
82
  * menu at the pointer, positioned with `foundations/overlay` so it stays in the
83
83
  * viewport. Full keyboard menu: arrows, Home/End, Enter/Space, Escape.
84
84
  */
85
- export class BoxContextMenuElement extends BaseElement {
85
+ export class ContextMenu extends BaseElement {
86
+ static tagName = DEFAULT_TAG_NAME;
86
87
  static get observedAttributes() {
87
88
  return ["items", "disabled"];
88
89
  }
@@ -250,11 +251,4 @@ export class BoxContextMenuElement extends BaseElement {
250
251
  this.renderItems();
251
252
  }
252
253
  }
253
- export const defineBoxContextMenuElement = (tagName = DEFAULT_TAG_NAME) => {
254
- const existingElement = customElements.get(tagName);
255
- if (existingElement) {
256
- return existingElement;
257
- }
258
- customElements.define(tagName, BoxContextMenuElement);
259
- return BoxContextMenuElement;
260
- };
254
+ ContextMenu.register();
@@ -1,5 +1,6 @@
1
1
  import { BaseElement } from "../../core/index.js";
2
- export declare class BoxDialogElement extends BaseElement {
2
+ export declare class Dialog extends BaseElement {
3
+ static readonly tagName: string;
3
4
  static get observedAttributes(): string[];
4
5
  private openValue;
5
6
  private wasOpen;
@@ -31,4 +32,3 @@ export declare class BoxDialogElement extends BaseElement {
31
32
  protected setupListeners(): void;
32
33
  protected update(): void;
33
34
  }
34
- export declare const defineBoxDialogElement: (tagName?: string) => typeof BoxDialogElement;
@@ -104,7 +104,8 @@ const dialogStyles = `
104
104
  ${boeNeutralInteractiveStyles('[part="cancel"]')}
105
105
  ${boeBrandInteractiveStyles('[part="confirm"]')}
106
106
  `;
107
- export class BoxDialogElement extends BaseElement {
107
+ export class Dialog extends BaseElement {
108
+ static tagName = DEFAULT_TAG_NAME;
108
109
  static get observedAttributes() {
109
110
  return ["confirm-label", "description", "heading", "open", "size"];
110
111
  }
@@ -300,11 +301,4 @@ export class BoxDialogElement extends BaseElement {
300
301
  }
301
302
  }
302
303
  }
303
- export const defineBoxDialogElement = (tagName = DEFAULT_TAG_NAME) => {
304
- const existingElement = customElements.get(tagName);
305
- if (existingElement) {
306
- return existingElement;
307
- }
308
- customElements.define(tagName, BoxDialogElement);
309
- return BoxDialogElement;
310
- };
304
+ Dialog.register();
@@ -1,5 +1,10 @@
1
1
  import { BaseElement } from "../../core/index.js";
2
- export declare class BoxDrawerElement extends BaseElement {
2
+ /** Detail of the cancelable `dismiss` event: what asked the drawer to close. */
3
+ export interface DrawerDismissDetail {
4
+ source: "close-button" | "backdrop" | "escape";
5
+ }
6
+ export declare class Drawer extends BaseElement {
7
+ static readonly tagName: string;
3
8
  static get observedAttributes(): string[];
4
9
  private openValue;
5
10
  private wasOpen;
@@ -17,6 +22,12 @@ export declare class BoxDrawerElement extends BaseElement {
17
22
  set open(value: boolean);
18
23
  get position(): string;
19
24
  set position(value: string);
25
+ /** Width preset for side drawers, height for the bottom sheet. */
26
+ get size(): string;
27
+ set size(value: string);
28
+ /** Busy: a saving/loading veil over the body; Close stays reachable. */
29
+ get busy(): boolean;
30
+ set busy(value: boolean);
20
31
  get heading(): string;
21
32
  set heading(value: string);
22
33
  connectedCallback(): void;
@@ -26,7 +37,14 @@ export declare class BoxDrawerElement extends BaseElement {
26
37
  private portalToBody;
27
38
  private restoreFromPortal;
28
39
  protected renderTemplate(): void;
40
+ /**
41
+ * The unsaved-changes guard, host-owned: `dismiss` is cancelable, and a
42
+ * host that calls `preventDefault()` keeps the drawer open — the drawer
43
+ * learns nothing about forms. Programmatic `close()` is not guarded; the
44
+ * host asked for it.
45
+ */
46
+ private requestDismiss;
29
47
  protected setupListeners(): void;
30
48
  protected update(): void;
49
+ private syncFooter;
31
50
  }
32
- export declare const defineBoxDrawerElement: (tagName?: string) => typeof BoxDrawerElement;
@@ -18,16 +18,23 @@ const drawerStyles = `
18
18
  }
19
19
 
20
20
  [part="drawer"] {
21
- width: min(${boePanel.drawerWidth}, calc(100vw - 2rem));
21
+ width: min(var(--drawer-size, ${boePanel.drawerWidth}), calc(100vw - 2rem));
22
22
  height: 100%;
23
23
  display: grid;
24
- grid-template-rows: auto minmax(0, 1fr);
24
+ grid-template-rows: auto minmax(0, 1fr) auto;
25
25
  background: ${boePanel.background};
26
26
  color: var(--boe-token-text-text, #222222);
27
27
  border: ${boePanel.border};
28
28
  box-shadow: ${boeOverlay.modalShadow};
29
29
  }
30
30
 
31
+ /* Size presets scale the travel axis: width for side drawers, height for
32
+ the bottom sheet. */
33
+ [part="drawer"][data-size="small"] { --drawer-size: 320px; --drawer-block-size: 220px; }
34
+ [part="drawer"][data-size="medium"] { --drawer-size: ${boePanel.drawerWidth}; --drawer-block-size: 320px; }
35
+ [part="drawer"][data-size="large"] { --drawer-size: 640px; --drawer-block-size: 480px; }
36
+ [part="drawer"][data-size="full"] { --drawer-size: 100vw; --drawer-block-size: calc(100vh - 3rem); }
37
+
31
38
  [part="drawer"][data-position="left"] {
32
39
  border-left: 0;
33
40
  border-top-right-radius: ${boeOverlay.modalRadius};
@@ -43,7 +50,7 @@ const drawerStyles = `
43
50
  [part="drawer"][data-position="bottom"] {
44
51
  width: 100%;
45
52
  max-width: none;
46
- height: min(320px, calc(100vh - 3rem));
53
+ height: min(var(--drawer-block-size, 320px), calc(100vh - 3rem));
47
54
  border-left: 0;
48
55
  border-right: 0;
49
56
  border-bottom: 0;
@@ -51,6 +58,19 @@ const drawerStyles = `
51
58
  border-top-right-radius: ${boeOverlay.modalRadius};
52
59
  }
53
60
 
61
+ /* On a phone every drawer is the screen: partial overlays waste the one
62
+ dimension the device is short of. */
63
+ @media (max-width: 640px) {
64
+ [part="drawer"],
65
+ [part="drawer"][data-position="bottom"] {
66
+ width: 100vw;
67
+ max-width: none;
68
+ height: 100%;
69
+ border: 0;
70
+ border-radius: 0;
71
+ }
72
+ }
73
+
54
74
  [part="header"] {
55
75
  display: flex;
56
76
  align-items: start;
@@ -104,13 +124,56 @@ const drawerStyles = `
104
124
  ${boeNeutralInteractiveStyles('[part="close"]')}
105
125
 
106
126
  [part="body"] {
127
+ position: relative;
107
128
  padding: ${boeSpace[4]};
108
129
  overflow: auto;
109
130
  }
131
+
132
+ /* Footer is the third grid row: it stays put while the body scrolls. */
133
+ [part="footer"] {
134
+ padding: ${boeSpace[3]} ${boeSpace[4]};
135
+ border-top: 1px solid var(--boe-token-stroke-stroke, #e8e8e8);
136
+ background: ${boePanel.background};
137
+ }
138
+
139
+ [part="footer"][hidden] {
140
+ display: none;
141
+ }
142
+
143
+ [part="busy"] {
144
+ position: absolute;
145
+ inset: 0;
146
+ display: grid;
147
+ place-items: center;
148
+ background: color-mix(in srgb, var(--boe-token-surface-surface, #ffffff) 65%, transparent);
149
+ }
150
+
151
+ [part="busy"][hidden] {
152
+ display: none;
153
+ }
154
+
155
+ [part="busy-spinner"] {
156
+ inline-size: 1.6rem;
157
+ block-size: 1.6rem;
158
+ border-radius: 999px;
159
+ border: 3px solid color-mix(in srgb, var(--boe-token-surface-surface-brand, #0061d5) 20%, transparent);
160
+ border-top-color: var(--boe-token-surface-surface-brand, #0061d5);
161
+ animation: boe-drawer-spin 0.9s linear infinite;
162
+ }
163
+
164
+ @keyframes boe-drawer-spin {
165
+ to { transform: rotate(360deg); }
166
+ }
167
+
168
+ @media (prefers-reduced-motion: reduce) {
169
+ [part="busy-spinner"] { animation-duration: 1.6s; }
170
+ }
110
171
  `;
111
- export class BoxDrawerElement extends BaseElement {
172
+ const DRAWER_SIZES = new Set(["small", "medium", "large", "full"]);
173
+ export class Drawer extends BaseElement {
174
+ static tagName = DEFAULT_TAG_NAME;
112
175
  static get observedAttributes() {
113
- return ["description", "heading", "open", "position"];
176
+ return ["busy", "description", "heading", "open", "position", "size"];
114
177
  }
115
178
  openValue = false;
116
179
  wasOpen = false;
@@ -151,6 +214,21 @@ export class BoxDrawerElement extends BaseElement {
151
214
  set position(value) {
152
215
  this.setAttribute("position", value);
153
216
  }
217
+ /** Width preset for side drawers, height for the bottom sheet. */
218
+ get size() {
219
+ const value = this.getAttribute("size");
220
+ return value && DRAWER_SIZES.has(value) ? value : "medium";
221
+ }
222
+ set size(value) {
223
+ this.setAttribute("size", value);
224
+ }
225
+ /** Busy: a saving/loading veil over the body; Close stays reachable. */
226
+ get busy() {
227
+ return this.hasAttribute("busy");
228
+ }
229
+ set busy(value) {
230
+ this.toggleAttribute("busy", Boolean(value));
231
+ }
154
232
  get heading() {
155
233
  return this.getAttribute("heading") ?? "Drawer";
156
234
  }
@@ -212,6 +290,23 @@ export class BoxDrawerElement extends BaseElement {
212
290
  this.shadowRoot.innerHTML = `<div part="host"></div>`;
213
291
  this.hostEl = this.shadowRoot.querySelector('[part="host"]');
214
292
  }
293
+ /**
294
+ * The unsaved-changes guard, host-owned: `dismiss` is cancelable, and a
295
+ * host that calls `preventDefault()` keeps the drawer open — the drawer
296
+ * learns nothing about forms. Programmatic `close()` is not guarded; the
297
+ * host asked for it.
298
+ */
299
+ requestDismiss(source) {
300
+ const proceed = this.dispatchEvent(new CustomEvent("dismiss", {
301
+ bubbles: true,
302
+ composed: true,
303
+ cancelable: true,
304
+ detail: { source },
305
+ }));
306
+ if (proceed) {
307
+ this.close();
308
+ }
309
+ }
215
310
  setupListeners() {
216
311
  this.hostEl.addEventListener("click", event => {
217
312
  const target = event.target;
@@ -219,12 +314,11 @@ export class BoxDrawerElement extends BaseElement {
219
314
  return;
220
315
  }
221
316
  if (target.getAttribute("part") === "backdrop") {
222
- this.close();
317
+ this.requestDismiss("backdrop");
223
318
  return;
224
319
  }
225
320
  if (target.closest('[part="close"]')) {
226
- this.dispatchEvent(new CustomEvent("dismiss", { bubbles: true, composed: true }));
227
- this.close();
321
+ this.requestDismiss("close-button");
228
322
  }
229
323
  });
230
324
  this.hostEl.addEventListener("keydown", event => {
@@ -235,8 +329,7 @@ export class BoxDrawerElement extends BaseElement {
235
329
  }
236
330
  if (keyboardEvent.key === "Escape") {
237
331
  keyboardEvent.preventDefault();
238
- this.dispatchEvent(new CustomEvent("dismiss", { bubbles: true, composed: true }));
239
- this.close();
332
+ this.requestDismiss("escape");
240
333
  return;
241
334
  }
242
335
  if (keyboardEvent.key === "Tab") {
@@ -275,15 +368,26 @@ export class BoxDrawerElement extends BaseElement {
275
368
  <div part="meta">
276
369
  <h2 id="drawer-title"></h2>
277
370
  <p part="description" hidden></p>
371
+ <slot name="header"></slot>
278
372
  </div>
279
373
  <button type="button" part="close" aria-label="Close drawer">Close</button>
280
374
  </header>
281
375
  <div part="body">
282
376
  <slot></slot>
377
+ <div part="busy" hidden><span part="busy-spinner" aria-hidden="true"></span></div>
283
378
  </div>
379
+ <footer part="footer" hidden>
380
+ <slot name="footer"></slot>
381
+ </footer>
284
382
  </aside>
285
383
  </div>
286
384
  `;
385
+ // The footer row only exists when the host slots one: an empty sticky
386
+ // bar would just eat drawer height.
387
+ const footerSlot = this.hostEl.querySelector('slot[name="footer"]');
388
+ footerSlot?.addEventListener("slotchange", () => {
389
+ this.syncFooter();
390
+ });
287
391
  }
288
392
  this.backdropEl = this.hostEl.querySelector('[part="backdrop"]');
289
393
  this.drawerEl = this.hostEl.querySelector('[part="drawer"]');
@@ -297,7 +401,23 @@ export class BoxDrawerElement extends BaseElement {
297
401
  }
298
402
  if (this.drawerEl) {
299
403
  this.drawerEl.dataset.position = this.position;
404
+ this.drawerEl.dataset.size = this.size;
405
+ if (this.busy) {
406
+ this.drawerEl.setAttribute("aria-busy", "true");
407
+ }
408
+ else {
409
+ this.drawerEl.removeAttribute("aria-busy");
410
+ }
300
411
  }
412
+ const busyEl = this.hostEl.querySelector('[part="busy"]');
413
+ if (busyEl) {
414
+ busyEl.hidden = !this.busy;
415
+ }
416
+ // The veil blocks the pointer; inert blocks the keyboard. Both or the
417
+ // busy state is a suggestion. Close (header) and footer actions stay out.
418
+ const bodyEl = this.hostEl.querySelector('[part="body"]');
419
+ bodyEl?.toggleAttribute("inert", this.busy);
420
+ this.syncFooter();
301
421
  if (this.titleEl) {
302
422
  this.titleEl.textContent = this.heading;
303
423
  }
@@ -312,12 +432,12 @@ export class BoxDrawerElement extends BaseElement {
312
432
  });
313
433
  }
314
434
  }
315
- }
316
- export const defineBoxDrawerElement = (tagName = DEFAULT_TAG_NAME) => {
317
- const existingElement = customElements.get(tagName);
318
- if (existingElement) {
319
- return existingElement;
435
+ syncFooter() {
436
+ const footerEl = this.hostEl.querySelector('[part="footer"]');
437
+ const footerSlot = this.hostEl.querySelector('slot[name="footer"]');
438
+ if (footerEl && footerSlot) {
439
+ footerEl.hidden = footerSlot.assignedNodes({ flatten: true }).length === 0;
440
+ }
320
441
  }
321
- customElements.define(tagName, BoxDrawerElement);
322
- return BoxDrawerElement;
323
- };
442
+ }
443
+ Drawer.register();
@@ -8,7 +8,8 @@ import { BaseElement } from "../../core/index.js";
8
8
  * so the host can advance the tour (moving `for`/`step`). Positioned as a
9
9
  * viewport-fixed overlay via `foundations/overlay`.
10
10
  */
11
- export declare class BoxGuideTooltipElement extends BaseElement {
11
+ export declare class GuideTooltip extends BaseElement {
12
+ static readonly tagName: string;
12
13
  static get observedAttributes(): string[];
13
14
  private openValue;
14
15
  private positionCleanup;
@@ -48,4 +49,3 @@ export declare class BoxGuideTooltipElement extends BaseElement {
48
49
  protected setupListeners(): void;
49
50
  protected update(): void;
50
51
  }
51
- export declare const defineBoxGuideTooltipElement: (tagName?: string) => typeof BoxGuideTooltipElement;
@@ -155,7 +155,8 @@ const guideTooltipStyles = `
155
155
  * so the host can advance the tour (moving `for`/`step`). Positioned as a
156
156
  * viewport-fixed overlay via `foundations/overlay`.
157
157
  */
158
- export class BoxGuideTooltipElement extends BaseElement {
158
+ export class GuideTooltip extends BaseElement {
159
+ static tagName = DEFAULT_TAG_NAME;
159
160
  static get observedAttributes() {
160
161
  return [
161
162
  "open",
@@ -351,11 +352,4 @@ export class BoxGuideTooltipElement extends BaseElement {
351
352
  }
352
353
  }
353
354
  }
354
- export const defineBoxGuideTooltipElement = (tagName = DEFAULT_TAG_NAME) => {
355
- const existingElement = customElements.get(tagName);
356
- if (existingElement) {
357
- return existingElement;
358
- }
359
- customElements.define(tagName, BoxGuideTooltipElement);
360
- return BoxGuideTooltipElement;
361
- };
355
+ GuideTooltip.register();
@@ -4,7 +4,8 @@ import { BaseElement } from "../../core/index.js";
4
4
  * alignment, plus the legacy names (`start` = left, `end` = right).
5
5
  */
6
6
  export type PopoverPlacement = "top" | "bottom" | "left" | "right" | "start" | "end" | "top-start" | "top-center" | "top-end" | "bottom-start" | "bottom-center" | "bottom-end" | "left-start" | "left-center" | "left-end" | "right-start" | "right-center" | "right-end";
7
- export declare class BoxPopoverElement extends BaseElement {
7
+ export declare class Popover extends BaseElement {
8
+ static readonly tagName: string;
8
9
  static get observedAttributes(): string[];
9
10
  private openValue;
10
11
  private wasOpen;
@@ -40,4 +41,3 @@ export declare class BoxPopoverElement extends BaseElement {
40
41
  private startPositioning;
41
42
  private stopPositioning;
42
43
  }
43
- export declare const defineBoxPopoverElement: (tagName?: string) => typeof BoxPopoverElement;