@unofficialbox/box-open-elements 0.3.0 → 0.5.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 (488) hide show
  1. package/README.md +37 -12
  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 +11 -2
  9. package/dist/components/actions/link-button.js +58 -13
  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 +9 -2
  19. package/dist/components/collections/carousel.js +74 -13
  20. package/dist/components/collections/datalist-item.d.ts +8 -2
  21. package/dist/components/collections/datalist-item.js +42 -10
  22. package/dist/components/collections/draggable-list.d.ts +2 -2
  23. package/dist/components/collections/draggable-list.js +4 -10
  24. package/dist/components/collections/grid-view.d.ts +2 -2
  25. package/dist/components/collections/grid-view.js +10 -12
  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 +2 -2
  29. package/dist/components/collections/table.js +3 -9
  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 +4 -2
  37. package/dist/components/feedback/alert.js +33 -10
  38. package/dist/components/feedback/badge.d.ts +12 -2
  39. package/dist/components/feedback/badge.js +73 -13
  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 +7 -2
  43. package/dist/components/feedback/chip.js +77 -11
  44. package/dist/components/feedback/empty-state.d.ts +2 -2
  45. package/dist/components/feedback/empty-state.js +3 -9
  46. package/dist/components/feedback/error-mask.d.ts +4 -2
  47. package/dist/components/feedback/error-mask.js +26 -9
  48. package/dist/components/feedback/help-text.d.ts +2 -2
  49. package/dist/components/feedback/help-text.js +10 -9
  50. package/dist/components/feedback/nudge.d.ts +2 -2
  51. package/dist/components/feedback/nudge.js +3 -9
  52. package/dist/components/feedback/progress-bar.d.ts +2 -2
  53. package/dist/components/feedback/progress-bar.js +3 -9
  54. package/dist/components/feedback/progress-ring.d.ts +2 -2
  55. package/dist/components/feedback/progress-ring.js +3 -9
  56. package/dist/components/feedback/progress-steps.d.ts +2 -2
  57. package/dist/components/feedback/progress-steps.js +3 -9
  58. package/dist/components/feedback/skeleton.d.ts +2 -2
  59. package/dist/components/feedback/skeleton.js +3 -9
  60. package/dist/components/feedback/spinner.d.ts +6 -2
  61. package/dist/components/feedback/spinner.js +33 -11
  62. package/dist/components/feedback/toast.d.ts +7 -2
  63. package/dist/components/feedback/toast.js +62 -20
  64. package/dist/components/files/drop-zone.d.ts +2 -2
  65. package/dist/components/files/drop-zone.js +3 -9
  66. package/dist/components/forms/calendar.d.ts +2 -2
  67. package/dist/components/forms/calendar.js +3 -9
  68. package/dist/components/forms/category-selector.d.ts +13 -2
  69. package/dist/components/forms/category-selector.js +214 -26
  70. package/dist/components/forms/checkbox-group.d.ts +2 -2
  71. package/dist/components/forms/checkbox-group.js +3 -9
  72. package/dist/components/forms/checkbox.d.ts +8 -2
  73. package/dist/components/forms/checkbox.js +61 -10
  74. package/dist/components/forms/color-picker.d.ts +2 -2
  75. package/dist/components/forms/color-picker.js +3 -9
  76. package/dist/components/forms/combobox.d.ts +32 -3
  77. package/dist/components/forms/combobox.js +351 -53
  78. package/dist/components/forms/date-field.d.ts +9 -2
  79. package/dist/components/forms/date-field.js +76 -10
  80. package/dist/components/forms/dropdown.d.ts +7 -2
  81. package/dist/components/forms/dropdown.js +35 -12
  82. package/dist/components/forms/dual-listbox.d.ts +2 -2
  83. package/dist/components/forms/dual-listbox.js +3 -9
  84. package/dist/components/forms/fieldset.d.ts +2 -2
  85. package/dist/components/forms/fieldset.js +3 -9
  86. package/dist/components/forms/multi-select.d.ts +2 -2
  87. package/dist/components/forms/multi-select.js +3 -9
  88. package/dist/components/forms/number-input.d.ts +2 -2
  89. package/dist/components/forms/number-input.js +3 -9
  90. package/dist/components/forms/pill-cloud.d.ts +2 -2
  91. package/dist/components/forms/pill-cloud.js +3 -9
  92. package/dist/components/forms/pill-selector-dropdown.d.ts +2 -2
  93. package/dist/components/forms/pill-selector-dropdown.js +3 -9
  94. package/dist/components/forms/radio-group.d.ts +11 -10
  95. package/dist/components/forms/radio-group.js +46 -15
  96. package/dist/components/forms/range-slider.d.ts +2 -2
  97. package/dist/components/forms/range-slider.js +3 -9
  98. package/dist/components/forms/rating.d.ts +2 -2
  99. package/dist/components/forms/rating.js +3 -9
  100. package/dist/components/forms/rich-text-input.d.ts +2 -2
  101. package/dist/components/forms/rich-text-input.js +3 -9
  102. package/dist/components/forms/search-field.d.ts +10 -2
  103. package/dist/components/forms/search-field.js +58 -22
  104. package/dist/components/forms/select.d.ts +20 -10
  105. package/dist/components/forms/select.js +107 -23
  106. package/dist/components/forms/slider.d.ts +2 -2
  107. package/dist/components/forms/slider.js +3 -9
  108. package/dist/components/forms/spin-button.d.ts +2 -2
  109. package/dist/components/forms/spin-button.js +3 -9
  110. package/dist/components/forms/switch.d.ts +2 -2
  111. package/dist/components/forms/switch.js +3 -9
  112. package/dist/components/forms/tag-input.d.ts +2 -2
  113. package/dist/components/forms/tag-input.js +3 -9
  114. package/dist/components/forms/text-area.d.ts +2 -2
  115. package/dist/components/forms/text-area.js +3 -9
  116. package/dist/components/forms/text-field.d.ts +15 -2
  117. package/dist/components/forms/text-field.js +139 -10
  118. package/dist/components/forms/time-field.d.ts +13 -2
  119. package/dist/components/forms/time-field.js +54 -9
  120. package/dist/components/identity/avatar.d.ts +6 -2
  121. package/dist/components/identity/avatar.js +68 -10
  122. package/dist/components/identity/contact-datalist-item.d.ts +10 -2
  123. package/dist/components/identity/contact-datalist-item.js +74 -11
  124. package/dist/components/identity/persona.d.ts +2 -2
  125. package/dist/components/identity/persona.js +3 -9
  126. package/dist/components/layout/app-shell.d.ts +2 -2
  127. package/dist/components/layout/app-shell.js +3 -9
  128. package/dist/components/layout/divider.d.ts +2 -2
  129. package/dist/components/layout/divider.js +3 -9
  130. package/dist/components/layout/nav-sidebar.d.ts +2 -2
  131. package/dist/components/layout/nav-sidebar.js +26 -9
  132. package/dist/components/layout/section.d.ts +2 -2
  133. package/dist/components/layout/section.js +3 -9
  134. package/dist/components/layout/sidebar-toggle-button.d.ts +5 -2
  135. package/dist/components/layout/sidebar-toggle-button.js +24 -11
  136. package/dist/components/layout/split-view.d.ts +2 -2
  137. package/dist/components/layout/split-view.js +3 -9
  138. package/dist/components/navigation/accordion.d.ts +5 -2
  139. package/dist/components/navigation/accordion.js +20 -11
  140. package/dist/components/navigation/breadcrumb.d.ts +2 -2
  141. package/dist/components/navigation/breadcrumb.js +3 -9
  142. package/dist/components/navigation/tabs.d.ts +2 -2
  143. package/dist/components/navigation/tabs.js +3 -9
  144. package/dist/components/overlays/context-menu.d.ts +2 -2
  145. package/dist/components/overlays/context-menu.js +3 -9
  146. package/dist/components/overlays/dialog.d.ts +2 -2
  147. package/dist/components/overlays/dialog.js +3 -9
  148. package/dist/components/overlays/drawer.d.ts +2 -2
  149. package/dist/components/overlays/drawer.js +3 -9
  150. package/dist/components/overlays/guide-tooltip.d.ts +51 -0
  151. package/dist/components/overlays/guide-tooltip.js +355 -0
  152. package/dist/components/overlays/popover.d.ts +2 -2
  153. package/dist/components/overlays/popover.js +3 -9
  154. package/dist/components/overlays/tooltip.d.ts +12 -2
  155. package/dist/components/overlays/tooltip.js +77 -20
  156. package/dist/components/visuals/illustration.d.ts +2 -2
  157. package/dist/components/visuals/illustration.js +3 -9
  158. package/dist/core/element.d.ts +5 -1
  159. package/dist/core/element.js +29 -1
  160. package/dist/entries/access-stats.d.ts +1 -0
  161. package/dist/entries/access-stats.js +1 -0
  162. package/dist/entries/accordion.d.ts +1 -0
  163. package/dist/entries/accordion.js +1 -0
  164. package/dist/entries/alert.d.ts +1 -0
  165. package/dist/entries/alert.js +1 -0
  166. package/dist/entries/annotation-inspector.d.ts +1 -0
  167. package/dist/entries/annotation-inspector.js +1 -0
  168. package/dist/entries/annotation-thread.d.ts +1 -0
  169. package/dist/entries/annotation-thread.js +1 -0
  170. package/dist/entries/annotation-toolbar.d.ts +1 -0
  171. package/dist/entries/annotation-toolbar.js +1 -0
  172. package/dist/entries/app-shell.d.ts +1 -0
  173. package/dist/entries/app-shell.js +1 -0
  174. package/dist/entries/avatar.d.ts +1 -0
  175. package/dist/entries/avatar.js +1 -0
  176. package/dist/entries/badge.d.ts +1 -0
  177. package/dist/entries/badge.js +1 -0
  178. package/dist/entries/badgeable.d.ts +1 -0
  179. package/dist/entries/badgeable.js +1 -0
  180. package/dist/entries/bar-chart.d.ts +1 -0
  181. package/dist/entries/bar-chart.js +1 -0
  182. package/dist/entries/breadcrumb.d.ts +1 -0
  183. package/dist/entries/breadcrumb.js +1 -0
  184. package/dist/entries/bulk-action-bar.d.ts +1 -0
  185. package/dist/entries/bulk-action-bar.js +1 -0
  186. package/dist/entries/button-group.d.ts +1 -0
  187. package/dist/entries/button-group.js +1 -0
  188. package/dist/entries/button.d.ts +1 -0
  189. package/dist/entries/button.js +1 -0
  190. package/dist/entries/calendar.d.ts +1 -0
  191. package/dist/entries/calendar.js +1 -0
  192. package/dist/entries/card.d.ts +1 -0
  193. package/dist/entries/card.js +1 -0
  194. package/dist/entries/carousel.d.ts +1 -0
  195. package/dist/entries/carousel.js +1 -0
  196. package/dist/entries/category-selector.d.ts +1 -0
  197. package/dist/entries/category-selector.js +1 -0
  198. package/dist/entries/chart-panel.d.ts +1 -0
  199. package/dist/entries/chart-panel.js +1 -0
  200. package/dist/entries/checkbox-group.d.ts +1 -0
  201. package/dist/entries/checkbox-group.js +1 -0
  202. package/dist/entries/checkbox.d.ts +1 -0
  203. package/dist/entries/checkbox.js +1 -0
  204. package/dist/entries/chip.d.ts +1 -0
  205. package/dist/entries/chip.js +1 -0
  206. package/dist/entries/collaborator-avatars.d.ts +1 -0
  207. package/dist/entries/collaborator-avatars.js +1 -0
  208. package/dist/entries/color-picker.d.ts +1 -0
  209. package/dist/entries/color-picker.js +1 -0
  210. package/dist/entries/combobox.d.ts +1 -0
  211. package/dist/entries/combobox.js +1 -0
  212. package/dist/entries/contact-datalist-item.d.ts +1 -0
  213. package/dist/entries/contact-datalist-item.js +1 -0
  214. package/dist/entries/content-explorer.d.ts +1 -0
  215. package/dist/entries/content-explorer.js +1 -0
  216. package/dist/entries/context-menu.d.ts +1 -0
  217. package/dist/entries/context-menu.js +1 -0
  218. package/dist/entries/datalist-item.d.ts +1 -0
  219. package/dist/entries/datalist-item.js +1 -0
  220. package/dist/entries/date-field.d.ts +1 -0
  221. package/dist/entries/date-field.js +1 -0
  222. package/dist/entries/dialog.d.ts +1 -0
  223. package/dist/entries/dialog.js +1 -0
  224. package/dist/entries/divider.d.ts +1 -0
  225. package/dist/entries/divider.js +1 -0
  226. package/dist/entries/donut-chart.d.ts +1 -0
  227. package/dist/entries/donut-chart.js +1 -0
  228. package/dist/entries/draggable-list.d.ts +1 -0
  229. package/dist/entries/draggable-list.js +1 -0
  230. package/dist/entries/drawer.d.ts +1 -0
  231. package/dist/entries/drawer.js +1 -0
  232. package/dist/entries/drop-zone.d.ts +1 -0
  233. package/dist/entries/drop-zone.js +1 -0
  234. package/dist/entries/dropdown.d.ts +1 -0
  235. package/dist/entries/dropdown.js +1 -0
  236. package/dist/entries/dual-listbox.d.ts +1 -0
  237. package/dist/entries/dual-listbox.js +1 -0
  238. package/dist/entries/empty-state.d.ts +1 -0
  239. package/dist/entries/empty-state.js +1 -0
  240. package/dist/entries/error-mask.d.ts +1 -0
  241. package/dist/entries/error-mask.js +1 -0
  242. package/dist/entries/explorer-action-menu.d.ts +1 -0
  243. package/dist/entries/explorer-action-menu.js +1 -0
  244. package/dist/entries/explorer-breadcrumbs.d.ts +1 -0
  245. package/dist/entries/explorer-breadcrumbs.js +1 -0
  246. package/dist/entries/explorer-items.d.ts +1 -0
  247. package/dist/entries/explorer-items.js +1 -0
  248. package/dist/entries/explorer-list.d.ts +1 -0
  249. package/dist/entries/explorer-list.js +1 -0
  250. package/dist/entries/explorer-table.d.ts +1 -0
  251. package/dist/entries/explorer-table.js +1 -0
  252. package/dist/entries/explorer-toolbar.d.ts +1 -0
  253. package/dist/entries/explorer-toolbar.js +1 -0
  254. package/dist/entries/fieldset.d.ts +1 -0
  255. package/dist/entries/fieldset.js +1 -0
  256. package/dist/entries/file-request-builder.d.ts +1 -0
  257. package/dist/entries/file-request-builder.js +1 -0
  258. package/dist/entries/filter-bar.d.ts +1 -0
  259. package/dist/entries/filter-bar.js +1 -0
  260. package/dist/entries/governance-panel.d.ts +1 -0
  261. package/dist/entries/governance-panel.js +1 -0
  262. package/dist/entries/grid-view.d.ts +1 -0
  263. package/dist/entries/grid-view.js +1 -0
  264. package/dist/entries/guide-tooltip.d.ts +1 -0
  265. package/dist/entries/guide-tooltip.js +1 -0
  266. package/dist/entries/help-text.d.ts +1 -0
  267. package/dist/entries/help-text.js +1 -0
  268. package/dist/entries/icon-button.d.ts +1 -0
  269. package/dist/entries/icon-button.js +1 -0
  270. package/dist/entries/illustration.d.ts +1 -0
  271. package/dist/entries/illustration.js +1 -0
  272. package/dist/entries/invite-collaborators-modal.d.ts +1 -0
  273. package/dist/entries/invite-collaborators-modal.js +1 -0
  274. package/dist/entries/item-details-panel.d.ts +1 -0
  275. package/dist/entries/item-details-panel.js +1 -0
  276. package/dist/entries/item-form.d.ts +1 -0
  277. package/dist/entries/item-form.js +1 -0
  278. package/dist/entries/line-chart.d.ts +1 -0
  279. package/dist/entries/line-chart.js +1 -0
  280. package/dist/entries/link-button.d.ts +1 -0
  281. package/dist/entries/link-button.js +1 -0
  282. package/dist/entries/menu-item.d.ts +1 -0
  283. package/dist/entries/menu-item.js +1 -0
  284. package/dist/entries/menu.d.ts +1 -0
  285. package/dist/entries/menu.js +1 -0
  286. package/dist/entries/metadata-filter-builder.d.ts +1 -0
  287. package/dist/entries/metadata-filter-builder.js +1 -0
  288. package/dist/entries/metadata-inspector.d.ts +1 -0
  289. package/dist/entries/metadata-inspector.js +1 -0
  290. package/dist/entries/metric-card.d.ts +1 -0
  291. package/dist/entries/metric-card.js +1 -0
  292. package/dist/entries/multi-select.d.ts +1 -0
  293. package/dist/entries/multi-select.js +1 -0
  294. package/dist/entries/nav-sidebar.d.ts +1 -0
  295. package/dist/entries/nav-sidebar.js +1 -0
  296. package/dist/entries/nudge.d.ts +1 -0
  297. package/dist/entries/nudge.js +1 -0
  298. package/dist/entries/number-input.d.ts +1 -0
  299. package/dist/entries/number-input.js +1 -0
  300. package/dist/entries/pagination.d.ts +1 -0
  301. package/dist/entries/pagination.js +1 -0
  302. package/dist/entries/permission-matrix.d.ts +1 -0
  303. package/dist/entries/permission-matrix.js +1 -0
  304. package/dist/entries/persona.d.ts +1 -0
  305. package/dist/entries/persona.js +1 -0
  306. package/dist/entries/pill-cloud.d.ts +1 -0
  307. package/dist/entries/pill-cloud.js +1 -0
  308. package/dist/entries/pill-selector-dropdown.d.ts +1 -0
  309. package/dist/entries/pill-selector-dropdown.js +1 -0
  310. package/dist/entries/popover.d.ts +1 -0
  311. package/dist/entries/popover.js +1 -0
  312. package/dist/entries/presence.d.ts +1 -0
  313. package/dist/entries/presence.js +1 -0
  314. package/dist/entries/preview-header.d.ts +1 -0
  315. package/dist/entries/preview-header.js +1 -0
  316. package/dist/entries/preview.d.ts +1 -0
  317. package/dist/entries/preview.js +1 -0
  318. package/dist/entries/progress-bar.d.ts +1 -0
  319. package/dist/entries/progress-bar.js +1 -0
  320. package/dist/entries/progress-ring.d.ts +1 -0
  321. package/dist/entries/progress-ring.js +1 -0
  322. package/dist/entries/progress-steps.d.ts +1 -0
  323. package/dist/entries/progress-steps.js +1 -0
  324. package/dist/entries/radio-group.d.ts +1 -0
  325. package/dist/entries/radio-group.js +1 -0
  326. package/dist/entries/range-slider.d.ts +1 -0
  327. package/dist/entries/range-slider.js +1 -0
  328. package/dist/entries/rating.d.ts +1 -0
  329. package/dist/entries/rating.js +1 -0
  330. package/dist/entries/review-queue-item.d.ts +1 -0
  331. package/dist/entries/review-queue-item.js +1 -0
  332. package/dist/entries/rich-text-input.d.ts +1 -0
  333. package/dist/entries/rich-text-input.js +1 -0
  334. package/dist/entries/saved-view-picker.d.ts +1 -0
  335. package/dist/entries/saved-view-picker.js +1 -0
  336. package/dist/entries/search-field.d.ts +1 -0
  337. package/dist/entries/search-field.js +1 -0
  338. package/dist/entries/search-results-header.d.ts +1 -0
  339. package/dist/entries/search-results-header.js +1 -0
  340. package/dist/entries/section.d.ts +1 -0
  341. package/dist/entries/section.js +1 -0
  342. package/dist/entries/segmented-control.d.ts +1 -0
  343. package/dist/entries/segmented-control.js +1 -0
  344. package/dist/entries/select.d.ts +1 -0
  345. package/dist/entries/select.js +1 -0
  346. package/dist/entries/share-panel.d.ts +1 -0
  347. package/dist/entries/share-panel.js +1 -0
  348. package/dist/entries/sidebar-toggle-button.d.ts +1 -0
  349. package/dist/entries/sidebar-toggle-button.js +1 -0
  350. package/dist/entries/skeleton.d.ts +1 -0
  351. package/dist/entries/skeleton.js +1 -0
  352. package/dist/entries/slider.d.ts +1 -0
  353. package/dist/entries/slider.js +1 -0
  354. package/dist/entries/spin-button.d.ts +1 -0
  355. package/dist/entries/spin-button.js +1 -0
  356. package/dist/entries/spinner.d.ts +1 -0
  357. package/dist/entries/spinner.js +1 -0
  358. package/dist/entries/split-view.d.ts +1 -0
  359. package/dist/entries/split-view.js +1 -0
  360. package/dist/entries/switch.d.ts +1 -0
  361. package/dist/entries/switch.js +1 -0
  362. package/dist/entries/table.d.ts +1 -0
  363. package/dist/entries/table.js +1 -0
  364. package/dist/entries/tabs.d.ts +1 -0
  365. package/dist/entries/tabs.js +1 -0
  366. package/dist/entries/tag-input.d.ts +1 -0
  367. package/dist/entries/tag-input.js +1 -0
  368. package/dist/entries/task-assignment-panel.d.ts +1 -0
  369. package/dist/entries/task-assignment-panel.js +1 -0
  370. package/dist/entries/text-area.d.ts +1 -0
  371. package/dist/entries/text-area.js +1 -0
  372. package/dist/entries/text-field.d.ts +1 -0
  373. package/dist/entries/text-field.js +1 -0
  374. package/dist/entries/thumbnail-card.d.ts +1 -0
  375. package/dist/entries/thumbnail-card.js +1 -0
  376. package/dist/entries/time-field.d.ts +1 -0
  377. package/dist/entries/time-field.js +1 -0
  378. package/dist/entries/toast.d.ts +1 -0
  379. package/dist/entries/toast.js +1 -0
  380. package/dist/entries/tooltip.d.ts +1 -0
  381. package/dist/entries/tooltip.js +1 -0
  382. package/dist/entries/tree-grid.d.ts +1 -0
  383. package/dist/entries/tree-grid.js +1 -0
  384. package/dist/entries/tree.d.ts +1 -0
  385. package/dist/entries/tree.js +1 -0
  386. package/dist/entries/unified-share-modal.d.ts +1 -0
  387. package/dist/entries/unified-share-modal.js +1 -0
  388. package/dist/foundations/geometry/tokens.d.ts +46 -45
  389. package/dist/foundations/geometry/tokens.js +46 -45
  390. package/dist/foundations/motion/tokens.d.ts +10 -10
  391. package/dist/foundations/motion/tokens.js +10 -10
  392. package/dist/foundations/overlay/positioning.js +5 -1
  393. package/dist/foundations/profiles/built-ins.d.ts +4 -0
  394. package/dist/foundations/profiles/built-ins.js +131 -0
  395. package/dist/foundations/profiles/controller.d.ts +4 -0
  396. package/dist/foundations/profiles/controller.js +107 -0
  397. package/dist/foundations/profiles/index.d.ts +4 -0
  398. package/dist/foundations/profiles/index.js +3 -0
  399. package/dist/foundations/profiles/registry.d.ts +72 -0
  400. package/dist/foundations/profiles/registry.js +119 -0
  401. package/dist/foundations/profiles/types.d.ts +94 -0
  402. package/dist/foundations/profiles/types.js +1 -0
  403. package/dist/foundations/theming/controller.d.ts +37 -0
  404. package/dist/foundations/theming/controller.js +176 -0
  405. package/dist/foundations/theming/index.d.ts +2 -0
  406. package/dist/foundations/theming/index.js +1 -0
  407. package/dist/foundations/tokens/box-dark.d.ts +3 -3
  408. package/dist/foundations/tokens/box-defaults.d.ts +3 -3
  409. package/dist/foundations/tokens/index.d.ts +2 -2
  410. package/dist/foundations/tokens/index.js +1 -1
  411. package/dist/foundations/tokens/registry.d.ts +37 -7
  412. package/dist/foundations/tokens/registry.js +55 -5
  413. package/dist/foundations/tokens/types.d.ts +38 -1
  414. package/dist/index.d.ts +7 -2
  415. package/dist/index.js +4 -1
  416. package/dist/patterns/content-explorer/adapters/action-menu.d.ts +2 -2
  417. package/dist/patterns/content-explorer/adapters/action-menu.js +3 -9
  418. package/dist/patterns/content-explorer/adapters/breadcrumbs.d.ts +2 -2
  419. package/dist/patterns/content-explorer/adapters/breadcrumbs.js +3 -9
  420. package/dist/patterns/content-explorer/adapters/items.d.ts +3 -3
  421. package/dist/patterns/content-explorer/adapters/items.js +4 -10
  422. package/dist/patterns/content-explorer/adapters/list.d.ts +2 -2
  423. package/dist/patterns/content-explorer/adapters/list.js +3 -9
  424. package/dist/patterns/content-explorer/adapters/table.d.ts +2 -2
  425. package/dist/patterns/content-explorer/adapters/table.js +3 -9
  426. package/dist/patterns/content-explorer/adapters/toolbar.d.ts +2 -2
  427. package/dist/patterns/content-explorer/adapters/toolbar.js +7 -13
  428. package/dist/patterns/content-explorer/content-explorer.d.ts +15 -15
  429. package/dist/patterns/content-explorer/content-explorer.js +5 -11
  430. package/dist/patterns/file-request/file-request-builder.d.ts +2 -2
  431. package/dist/patterns/file-request/file-request-builder.js +3 -9
  432. package/dist/patterns/governance/governance-panel.d.ts +2 -2
  433. package/dist/patterns/governance/governance-panel.js +3 -6
  434. package/dist/patterns/insights/bar-chart.d.ts +2 -2
  435. package/dist/patterns/insights/bar-chart.js +3 -6
  436. package/dist/patterns/insights/chart-panel.d.ts +2 -2
  437. package/dist/patterns/insights/chart-panel.js +3 -6
  438. package/dist/patterns/insights/donut-chart.d.ts +2 -2
  439. package/dist/patterns/insights/donut-chart.js +3 -6
  440. package/dist/patterns/insights/line-chart.d.ts +2 -2
  441. package/dist/patterns/insights/line-chart.js +3 -6
  442. package/dist/patterns/insights/metric-card.d.ts +2 -2
  443. package/dist/patterns/insights/metric-card.js +3 -6
  444. package/dist/patterns/item/bulk-action-bar.d.ts +2 -2
  445. package/dist/patterns/item/bulk-action-bar.js +3 -6
  446. package/dist/patterns/item/item-details-panel.d.ts +2 -2
  447. package/dist/patterns/item/item-details-panel.js +3 -9
  448. package/dist/patterns/item/item-form.d.ts +2 -2
  449. package/dist/patterns/item/item-form.js +3 -9
  450. package/dist/patterns/item/preview-header.d.ts +2 -2
  451. package/dist/patterns/item/preview-header.js +3 -9
  452. package/dist/patterns/metadata/metadata-filter-builder.d.ts +2 -2
  453. package/dist/patterns/metadata/metadata-filter-builder.js +3 -9
  454. package/dist/patterns/metadata/metadata-inspector.d.ts +2 -2
  455. package/dist/patterns/metadata/metadata-inspector.js +3 -9
  456. package/dist/patterns/preview/annotation-inspector.d.ts +2 -2
  457. package/dist/patterns/preview/annotation-inspector.js +3 -9
  458. package/dist/patterns/preview/annotation-thread.d.ts +2 -2
  459. package/dist/patterns/preview/annotation-thread.js +3 -9
  460. package/dist/patterns/preview/annotation-toolbar.d.ts +2 -2
  461. package/dist/patterns/preview/annotation-toolbar.js +3 -9
  462. package/dist/patterns/preview/preview-element.d.ts +2 -2
  463. package/dist/patterns/preview/preview-element.js +3 -9
  464. package/dist/patterns/search/filter-bar.d.ts +2 -2
  465. package/dist/patterns/search/filter-bar.js +3 -9
  466. package/dist/patterns/search/saved-view-picker.d.ts +2 -2
  467. package/dist/patterns/search/saved-view-picker.js +3 -9
  468. package/dist/patterns/search/search-results-header.d.ts +2 -2
  469. package/dist/patterns/search/search-results-header.js +3 -9
  470. package/dist/patterns/share/access-stats.d.ts +2 -2
  471. package/dist/patterns/share/access-stats.js +3 -9
  472. package/dist/patterns/share/collaborator-avatars.d.ts +2 -2
  473. package/dist/patterns/share/collaborator-avatars.js +3 -9
  474. package/dist/patterns/share/invite-collaborators-modal.d.ts +2 -2
  475. package/dist/patterns/share/invite-collaborators-modal.js +3 -9
  476. package/dist/patterns/share/permission-matrix.d.ts +2 -2
  477. package/dist/patterns/share/permission-matrix.js +3 -9
  478. package/dist/patterns/share/presence.d.ts +2 -2
  479. package/dist/patterns/share/presence.js +3 -9
  480. package/dist/patterns/share/share-panel.d.ts +2 -2
  481. package/dist/patterns/share/share-panel.js +3 -9
  482. package/dist/patterns/share/unified-share-modal.d.ts +2 -2
  483. package/dist/patterns/share/unified-share-modal.js +3 -9
  484. package/dist/patterns/task/review-queue-item.d.ts +2 -2
  485. package/dist/patterns/task/review-queue-item.js +3 -6
  486. package/dist/patterns/task/task-assignment-panel.d.ts +2 -2
  487. package/dist/patterns/task/task-assignment-panel.js +3 -6
  488. package/package.json +5 -1
@@ -1,6 +1,10 @@
1
1
  import { FormAssociatedElement, boeFormFieldErrorStyles, boeFormFieldSupportStyles, formDescriptionMarkup, formErrorMessageMarkup, } from "../../core/index.js";
2
2
  import { boeControl, boeInputControlStyles, boeSpace } from "../../foundations/geometry/index.js";
3
+ import { boeMotionDuration, boeMotionEasing, boeReducedMotionStyles, } from "../../foundations/motion/index.js";
3
4
  const DEFAULT_TAG_NAME = "box-text-field";
5
+ const VALID_INPUT_TYPES = new Set(["text", "email", "tel", "url", "password", "search", "number"]);
6
+ const spinnerMarkup = '<span part="spinner" aria-hidden="true"></span>';
7
+ const validMarkup = '<svg part="valid-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M6.5 11L3 7.5l1-1 2.5 2.5L12 3.5l1 1z" fill="currentColor"/></svg>';
4
8
  /** Input chrome tracks BUE `@mixin box-inputs` (`src/styles/_inputs.scss`). */
5
9
  const textFieldStyles = `
6
10
  :host {
@@ -33,16 +37,92 @@ const textFieldStyles = `
33
37
  color: var(--boe-token-text-text-placeholder, #909090);
34
38
  }
35
39
 
40
+ /* Control wrapper holds the input plus optional leading icon and trailing
41
+ status. With no adornments it is layout-neutral (default renders unchanged). */
42
+ [part="control"] {
43
+ position: relative;
44
+ display: block;
45
+ }
46
+
47
+ [part="icon"] {
48
+ position: absolute;
49
+ inset-block-start: 50%;
50
+ inset-inline-start: 0.6rem;
51
+ transform: translateY(-50%);
52
+ display: inline-flex;
53
+ align-items: center;
54
+ color: var(--boe-token-text-text-secondary, #6f6f6f);
55
+ pointer-events: none;
56
+ }
57
+
58
+ [part="icon"]:not(.has-content) {
59
+ display: none;
60
+ }
61
+
62
+ [part="icon"]::slotted(*) {
63
+ inline-size: 1rem;
64
+ block-size: 1rem;
65
+ display: block;
66
+ }
67
+
68
+ [part="control"][data-has-icon="true"] [part="input"] {
69
+ padding-inline-start: 2.1rem;
70
+ }
71
+
72
+ [part="status"] {
73
+ position: absolute;
74
+ inset-block-start: 50%;
75
+ inset-inline-end: 0.65rem;
76
+ transform: translateY(-50%);
77
+ display: none;
78
+ align-items: center;
79
+ }
80
+
81
+ [part="control"][data-status="loading"] [part="status"],
82
+ [part="control"][data-status="valid"] [part="status"] {
83
+ display: inline-flex;
84
+ }
85
+
86
+ [part="control"][data-status="loading"] [part="input"],
87
+ [part="control"][data-status="valid"] [part="input"] {
88
+ padding-inline-end: 2.2rem;
89
+ }
90
+
91
+ [part="spinner"] {
92
+ inline-size: 1rem;
93
+ block-size: 1rem;
94
+ border-radius: 999px;
95
+ border: 2px solid color-mix(in srgb, var(--boe-token-surface-surface-brand, #0061d5) 20%, transparent);
96
+ border-top-color: var(--boe-token-surface-surface-brand, #0061d5);
97
+ animation: boe-text-field-spin ${boeMotionDuration.spin} ${boeMotionEasing.linear} infinite;
98
+ }
99
+
100
+ @keyframes boe-text-field-spin {
101
+ to { transform: rotate(360deg); }
102
+ }
103
+
104
+ ${boeReducedMotionStyles('[part="spinner"]', "animation-duration: 1.6s;")}
105
+
106
+ [part="valid-icon"] {
107
+ inline-size: 1.05rem;
108
+ block-size: 1.05rem;
109
+ color: var(--boe-token-surface-status-surface-success, #26c281);
110
+ }
111
+
36
112
  ${boeFormFieldErrorStyles}
37
113
  ${boeFormFieldSupportStyles}
38
114
  `;
39
- export class BoxTextFieldElement extends FormAssociatedElement {
115
+ export class TextField extends FormAssociatedElement {
116
+ static tagName = DEFAULT_TAG_NAME;
40
117
  static get observedAttributes() {
41
118
  return [
42
119
  ...FormAssociatedElement.fieldObservedAttributes,
43
120
  "disabled",
44
121
  "label",
45
122
  "placeholder",
123
+ "type",
124
+ "loading",
125
+ "valid",
46
126
  "value",
47
127
  ];
48
128
  }
@@ -51,6 +131,31 @@ export class BoxTextFieldElement extends FormAssociatedElement {
51
131
  labelEl;
52
132
  descriptionEl;
53
133
  errorEl;
134
+ controlEl;
135
+ iconSlot;
136
+ statusEl;
137
+ /** Input type passthrough (text/email/tel/url/password/search/number). */
138
+ get type() {
139
+ const value = this.getAttribute("type");
140
+ return value && VALID_INPUT_TYPES.has(value) ? value : "text";
141
+ }
142
+ set type(value) {
143
+ this.setAttribute("type", value);
144
+ }
145
+ /** Shows a trailing spinner (e.g. while validating/looking up asynchronously). */
146
+ get loading() {
147
+ return this.hasAttribute("loading");
148
+ }
149
+ set loading(value) {
150
+ this.toggleAttribute("loading", Boolean(value));
151
+ }
152
+ /** Shows a trailing success check (explicit valid affirmation). */
153
+ get valid() {
154
+ return this.hasAttribute("valid");
155
+ }
156
+ set valid(value) {
157
+ this.toggleAttribute("valid", Boolean(value));
158
+ }
54
159
  get value() {
55
160
  return this.valueInternal;
56
161
  }
@@ -105,7 +210,11 @@ export class BoxTextFieldElement extends FormAssociatedElement {
105
210
  <label part="field">
106
211
  <span part="label"></span>
107
212
  ${formDescriptionMarkup()}
108
- <input type="text" part="input" />
213
+ <span part="control">
214
+ <slot name="icon" part="icon"></slot>
215
+ <input type="text" part="input" />
216
+ <span part="status" aria-hidden="true"></span>
217
+ </span>
109
218
  ${formErrorMessageMarkup()}
110
219
  </label>
111
220
  `;
@@ -113,8 +222,12 @@ export class BoxTextFieldElement extends FormAssociatedElement {
113
222
  this.descriptionEl = this.shadowRoot.querySelector('[part="description"]');
114
223
  this.inputEl = this.shadowRoot.querySelector('[part="input"]');
115
224
  this.errorEl = this.shadowRoot.querySelector('[part="error-message"]');
225
+ this.controlEl = this.shadowRoot.querySelector('[part="control"]');
226
+ this.iconSlot = this.shadowRoot.querySelector('slot[name="icon"]');
227
+ this.statusEl = this.shadowRoot.querySelector('[part="status"]');
116
228
  }
117
229
  setupListeners() {
230
+ this.iconSlot.addEventListener("slotchange", () => this.syncIconSlot());
118
231
  this.inputEl.addEventListener("input", event => {
119
232
  const nextValue = event.currentTarget.value;
120
233
  this.valueInternal = nextValue;
@@ -127,12 +240,35 @@ export class BoxTextFieldElement extends FormAssociatedElement {
127
240
  }));
128
241
  });
129
242
  }
243
+ syncIconSlot() {
244
+ if (!this.iconSlot || !this.controlEl) {
245
+ return;
246
+ }
247
+ const hasContent = this.iconSlot.assignedNodes({ flatten: true }).length > 0;
248
+ this.iconSlot.classList.toggle("has-content", hasContent);
249
+ this.controlEl.dataset.hasIcon = hasContent ? "true" : "false";
250
+ }
130
251
  update() {
131
252
  if (!this.inputEl || !this.labelEl || !this.errorEl) {
132
253
  return;
133
254
  }
134
255
  this.labelEl.textContent = this.label;
256
+ this.inputEl.type = this.type;
135
257
  this.inputEl.placeholder = this.placeholder;
258
+ this.syncIconSlot();
259
+ // Trailing status: loading spinner takes precedence over the valid check.
260
+ if (this.loading) {
261
+ this.controlEl.dataset.status = "loading";
262
+ this.statusEl.innerHTML = spinnerMarkup;
263
+ }
264
+ else if (this.valid) {
265
+ this.controlEl.dataset.status = "valid";
266
+ this.statusEl.innerHTML = validMarkup;
267
+ }
268
+ else {
269
+ this.controlEl.removeAttribute("data-status");
270
+ this.statusEl.innerHTML = "";
271
+ }
136
272
  if (this.shadowRoot?.activeElement !== this.inputEl) {
137
273
  this.inputEl.value = this.valueInternal;
138
274
  }
@@ -147,11 +283,4 @@ export class BoxTextFieldElement extends FormAssociatedElement {
147
283
  this.applyInvalidState(this.inputEl, this.errorEl);
148
284
  }
149
285
  }
150
- export const defineBoxTextFieldElement = (tagName = DEFAULT_TAG_NAME) => {
151
- const existingElement = customElements.get(tagName);
152
- if (existingElement) {
153
- return existingElement;
154
- }
155
- customElements.define(tagName, BoxTextFieldElement);
156
- return BoxTextFieldElement;
157
- };
286
+ TextField.register();
@@ -1,6 +1,7 @@
1
1
  import { FormAssociatedElement } from "../../core/index.js";
2
2
  import type { FormValue } from "../../core/index.js";
3
- export declare class BoxTimeFieldElement extends FormAssociatedElement {
3
+ export declare class TimeField extends FormAssociatedElement {
4
+ static readonly tagName: string;
4
5
  static get observedAttributes(): string[];
5
6
  private valueInternal;
6
7
  private inputEl;
@@ -21,9 +22,19 @@ export declare class BoxTimeFieldElement extends FormAssociatedElement {
21
22
  attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
22
23
  protected getFormValue(): FormValue;
23
24
  protected restoreFormValue(value: FormValue): void;
25
+ /**
26
+ * Parse a human time string in 24-hour (`13:30`) or 12-hour (`1:30 PM`,
27
+ * `1 pm`) form to canonical `HH:MM`. Returns `""` for empty input and `null`
28
+ * when it cannot be parsed.
29
+ */
30
+ static parseTime(raw: string): string | null;
31
+ /**
32
+ * Set the value from a human 12h/24h string. On success updates the value and
33
+ * returns true; on a parse failure emits `parse-error` and returns false.
34
+ */
35
+ setTimeString(value: string): boolean;
24
36
  private syncValue;
25
37
  protected renderTemplate(): void;
26
38
  protected setupListeners(): void;
27
39
  protected update(): void;
28
40
  }
29
- export declare const defineBoxTimeFieldElement: (tagName?: string) => typeof BoxTimeFieldElement;
@@ -54,7 +54,8 @@ const timeFieldStyles = `
54
54
 
55
55
  ${boeFormFieldErrorStyles}
56
56
  `;
57
- export class BoxTimeFieldElement extends FormAssociatedElement {
57
+ export class TimeField extends FormAssociatedElement {
58
+ static tagName = DEFAULT_TAG_NAME;
58
59
  static get observedAttributes() {
59
60
  return [
60
61
  ...FormAssociatedElement.formObservedAttributes,
@@ -132,6 +133,57 @@ export class BoxTimeFieldElement extends FormAssociatedElement {
132
133
  this.update();
133
134
  }
134
135
  }
136
+ /**
137
+ * Parse a human time string in 24-hour (`13:30`) or 12-hour (`1:30 PM`,
138
+ * `1 pm`) form to canonical `HH:MM`. Returns `""` for empty input and `null`
139
+ * when it cannot be parsed.
140
+ */
141
+ static parseTime(raw) {
142
+ const value = raw.trim().toLowerCase();
143
+ if (!value) {
144
+ return "";
145
+ }
146
+ const twentyFour = value.match(/^([01]?\d|2[0-3]):([0-5]\d)$/);
147
+ if (twentyFour) {
148
+ return `${twentyFour[1].padStart(2, "0")}:${twentyFour[2]}`;
149
+ }
150
+ const twelve = value.match(/^(\d{1,2})(?::([0-5]\d))?\s*(am|pm)$/);
151
+ if (twelve) {
152
+ let hours = Number.parseInt(twelve[1], 10);
153
+ const minutes = twelve[2] ?? "00";
154
+ if (hours < 1 || hours > 12) {
155
+ return null;
156
+ }
157
+ if (twelve[3] === "pm" && hours !== 12) {
158
+ hours += 12;
159
+ }
160
+ else if (twelve[3] === "am" && hours === 12) {
161
+ hours = 0;
162
+ }
163
+ return `${String(hours).padStart(2, "0")}:${minutes}`;
164
+ }
165
+ return null;
166
+ }
167
+ /**
168
+ * Set the value from a human 12h/24h string. On success updates the value and
169
+ * returns true; on a parse failure emits `parse-error` and returns false.
170
+ */
171
+ setTimeString(value) {
172
+ const parsed = TimeField.parseTime(value);
173
+ if (parsed === null) {
174
+ this.dispatchEvent(new CustomEvent("parse-error", {
175
+ bubbles: true,
176
+ composed: true,
177
+ detail: { value },
178
+ }));
179
+ return false;
180
+ }
181
+ this.syncValue(parsed);
182
+ if (this.isRendered) {
183
+ this.update();
184
+ }
185
+ return true;
186
+ }
135
187
  syncValue(nextValue) {
136
188
  this.valueInternal = nextValue;
137
189
  this.setAttribute("value", nextValue);
@@ -193,11 +245,4 @@ export class BoxTimeFieldElement extends FormAssociatedElement {
193
245
  this.applyInvalidState(this.inputEl, this.errorEl);
194
246
  }
195
247
  }
196
- export const defineBoxTimeFieldElement = (tagName = DEFAULT_TAG_NAME) => {
197
- const existingElement = customElements.get(tagName);
198
- if (existingElement) {
199
- return existingElement;
200
- }
201
- customElements.define(tagName, BoxTimeFieldElement);
202
- return BoxTimeFieldElement;
203
- };
248
+ TimeField.register();
@@ -1,7 +1,11 @@
1
1
  import { BaseElement } from "../../core/index.js";
2
- export declare class BoxAvatarElement extends BaseElement {
2
+ export declare class Avatar extends BaseElement {
3
+ static readonly tagName: string;
3
4
  static get observedAttributes(): string[];
4
5
  private avatarEl;
6
+ /** Corner indicator: `""`/`none` (default), `online`, or `external`. */
7
+ get badge(): string;
8
+ set badge(value: string);
5
9
  get alt(): string;
6
10
  set alt(value: string);
7
11
  get initials(): string;
@@ -16,6 +20,6 @@ export declare class BoxAvatarElement extends BaseElement {
16
20
  set tone(value: string);
17
21
  protected renderTemplate(): void;
18
22
  protected update(): void;
23
+ private syncBadge;
19
24
  private showAvatarFallback;
20
25
  }
21
- export declare const defineBoxAvatarElement: (tagName?: string) => typeof BoxAvatarElement;
@@ -76,12 +76,50 @@ const avatarStyles = `
76
76
  [part="image"][hidden] {
77
77
  display: none;
78
78
  }
79
+
80
+ /* Corner status/external indicator. Absent by default (no layout impact). */
81
+ [part="badge"] {
82
+ position: absolute;
83
+ inset-block-end: 0;
84
+ inset-inline-end: 0;
85
+ box-sizing: border-box;
86
+ inline-size: max(8px, calc(var(--avatar-size, ${DEFAULT_SIZE}px) * 0.34));
87
+ block-size: max(8px, calc(var(--avatar-size, ${DEFAULT_SIZE}px) * 0.34));
88
+ border-radius: 999px;
89
+ border: 2px solid var(--boe-token-surface-surface, #ffffff);
90
+ display: grid;
91
+ place-items: center;
92
+ color: #ffffff;
93
+ }
94
+
95
+ [part="badge"][data-badge="online"] {
96
+ background: var(--boe-token-surface-status-surface-success, #26c281);
97
+ }
98
+
99
+ [part="badge"][data-badge="external"] {
100
+ background: var(--boe-token-surface-status-surface-inprogress, #f5b31b);
101
+ }
102
+
103
+ [part="badge"] svg {
104
+ inline-size: 62%;
105
+ block-size: 62%;
106
+ fill: currentColor;
107
+ }
79
108
  `;
80
- export class BoxAvatarElement extends BaseElement {
109
+ export class Avatar extends BaseElement {
110
+ static tagName = DEFAULT_TAG_NAME;
81
111
  static get observedAttributes() {
82
- return ["alt", "initials", "name", "size", "src", "tone"];
112
+ return ["alt", "badge", "initials", "name", "size", "src", "tone"];
83
113
  }
84
114
  avatarEl;
115
+ /** Corner indicator: `""`/`none` (default), `online`, or `external`. */
116
+ get badge() {
117
+ const value = this.getAttribute("badge");
118
+ return value === "online" || value === "external" ? value : "none";
119
+ }
120
+ set badge(value) {
121
+ this.setAttribute("badge", value);
122
+ }
85
123
  get alt() {
86
124
  return this.getAttribute("alt") ?? this.name;
87
125
  }
@@ -171,6 +209,33 @@ export class BoxAvatarElement extends BaseElement {
171
209
  }
172
210
  this.showAvatarFallback(existingFallback, fallback);
173
211
  }
212
+ this.syncBadge();
213
+ }
214
+ syncBadge() {
215
+ const badge = this.badge;
216
+ let badgeEl = this.avatarEl.querySelector('[part="badge"]');
217
+ if (badge === "none") {
218
+ badgeEl?.remove();
219
+ return;
220
+ }
221
+ if (!badgeEl) {
222
+ badgeEl = document.createElement("span");
223
+ badgeEl.setAttribute("part", "badge");
224
+ this.avatarEl.append(badgeEl);
225
+ }
226
+ badgeEl.dataset.badge = badge;
227
+ if (badge === "external") {
228
+ badgeEl.setAttribute("aria-label", "External user");
229
+ badgeEl.setAttribute("role", "img");
230
+ // Outward arrow marks an external collaborator.
231
+ badgeEl.innerHTML =
232
+ '<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M6 3h7v7h-2V6.4l-6.3 6.3-1.4-1.4L9.6 5H6V3z"/></svg>';
233
+ }
234
+ else {
235
+ badgeEl.setAttribute("aria-label", "Online");
236
+ badgeEl.setAttribute("role", "img");
237
+ badgeEl.innerHTML = "";
238
+ }
174
239
  }
175
240
  showAvatarFallback(existingFallback, fallback) {
176
241
  const fallbackEl = existingFallback ?? document.createElement("span");
@@ -181,11 +246,4 @@ export class BoxAvatarElement extends BaseElement {
181
246
  }
182
247
  }
183
248
  }
184
- export const defineBoxAvatarElement = (tagName = DEFAULT_TAG_NAME) => {
185
- const existingElement = customElements.get(tagName);
186
- if (existingElement) {
187
- return existingElement;
188
- }
189
- customElements.define(tagName, BoxAvatarElement);
190
- return BoxAvatarElement;
191
- };
249
+ Avatar.register();
@@ -5,12 +5,21 @@ import { BaseElement } from "../../core/index.js";
5
5
  * `role="option"` that emits `select` with its `value` on click or Enter/Space
6
6
  * and reflects `selected` to `aria-selected`; the host owns the list.
7
7
  */
8
- export declare class BoxContactDatalistItemElement extends BaseElement {
8
+ export declare class ContactDatalistItem extends BaseElement {
9
+ static readonly tagName: string;
9
10
  static get observedAttributes(): string[];
10
11
  private itemEl;
11
12
  private avatarEl;
12
13
  private nameEl;
14
+ private externalEl;
15
+ private subtitleEl;
13
16
  private emailEl;
17
+ /** Marks the contact as an external collaborator. */
18
+ get external(): boolean;
19
+ set external(value: boolean);
20
+ /** Optional secondary detail line below the email (e.g. role or company). */
21
+ get subtitle(): string;
22
+ set subtitle(value: string);
14
23
  get name(): string;
15
24
  set name(value: string);
16
25
  get email(): string;
@@ -28,4 +37,3 @@ export declare class BoxContactDatalistItemElement extends BaseElement {
28
37
  protected setupListeners(): void;
29
38
  protected update(): void;
30
39
  }
31
- export declare const defineBoxContactDatalistItemElement: (tagName?: string) => typeof BoxContactDatalistItemElement;
@@ -71,6 +71,13 @@ const contactStyles = `
71
71
  gap: 0.1rem;
72
72
  }
73
73
 
74
+ [part="name-row"] {
75
+ display: flex;
76
+ align-items: center;
77
+ gap: 0.4rem;
78
+ min-inline-size: 0;
79
+ }
80
+
74
81
  [part="name"] {
75
82
  font-size: 0.9rem;
76
83
  font-weight: 600;
@@ -79,6 +86,35 @@ const contactStyles = `
79
86
  white-space: nowrap;
80
87
  }
81
88
 
89
+ /* External-collaborator marker beside the name. */
90
+ [part="external"] {
91
+ flex: none;
92
+ font-size: 0.66rem;
93
+ font-weight: 700;
94
+ letter-spacing: 0.04em;
95
+ text-transform: uppercase;
96
+ padding: 1px 5px;
97
+ border-radius: 999px;
98
+ background: color-mix(in srgb, var(--boe-token-surface-status-surface-inprogress, #f5b31b) 18%, var(--boe-token-surface-surface, #ffffff) 82%);
99
+ color: color-mix(in srgb, var(--boe-token-surface-status-surface-inprogress, #f5b31b) 55%, var(--boe-token-text-text, #222222));
100
+ }
101
+
102
+ [part="external"][hidden] {
103
+ display: none;
104
+ }
105
+
106
+ [part="subtitle"] {
107
+ font-size: 0.74rem;
108
+ color: var(--boe-token-text-text-secondary, #6f6f6f);
109
+ overflow: hidden;
110
+ text-overflow: ellipsis;
111
+ white-space: nowrap;
112
+ }
113
+
114
+ [part="subtitle"][hidden] {
115
+ display: none;
116
+ }
117
+
82
118
  [part="email"] {
83
119
  font-size: 0.78rem;
84
120
  color: var(--boe-token-text-text-secondary, #6f6f6f);
@@ -97,14 +133,31 @@ const contactStyles = `
97
133
  * `role="option"` that emits `select` with its `value` on click or Enter/Space
98
134
  * and reflects `selected` to `aria-selected`; the host owns the list.
99
135
  */
100
- export class BoxContactDatalistItemElement extends BaseElement {
136
+ export class ContactDatalistItem extends BaseElement {
137
+ static tagName = DEFAULT_TAG_NAME;
101
138
  static get observedAttributes() {
102
- return ["disabled", "email", "name", "selected", "src", "value"];
139
+ return ["disabled", "email", "external", "name", "selected", "src", "subtitle", "value"];
103
140
  }
104
141
  itemEl;
105
142
  avatarEl;
106
143
  nameEl;
144
+ externalEl;
145
+ subtitleEl;
107
146
  emailEl;
147
+ /** Marks the contact as an external collaborator. */
148
+ get external() {
149
+ return this.hasAttribute("external");
150
+ }
151
+ set external(value) {
152
+ this.toggleAttribute("external", value);
153
+ }
154
+ /** Optional secondary detail line below the email (e.g. role or company). */
155
+ get subtitle() {
156
+ return this.getAttribute("subtitle") ?? "";
157
+ }
158
+ set subtitle(value) {
159
+ this.setAttribute("subtitle", value);
160
+ }
108
161
  get name() {
109
162
  return this.getAttribute("name") ?? "";
110
163
  }
@@ -160,14 +213,20 @@ export class BoxContactDatalistItemElement extends BaseElement {
160
213
  <div part="item" role="option">
161
214
  <span part="avatar" aria-hidden="true"></span>
162
215
  <span part="body">
163
- <span part="name"></span>
216
+ <span part="name-row">
217
+ <span part="name"></span>
218
+ <span part="external" hidden>External</span>
219
+ </span>
164
220
  <span part="email" hidden></span>
221
+ <span part="subtitle" hidden></span>
165
222
  </span>
166
223
  </div>
167
224
  `;
168
225
  this.itemEl = this.shadowRoot.querySelector('[part="item"]');
169
226
  this.avatarEl = this.shadowRoot.querySelector('[part="avatar"]');
170
227
  this.nameEl = this.shadowRoot.querySelector('[part="name"]');
228
+ this.externalEl = this.shadowRoot.querySelector('[part="external"]');
229
+ this.subtitleEl = this.shadowRoot.querySelector('[part="subtitle"]');
171
230
  this.emailEl = this.shadowRoot.querySelector('[part="email"]');
172
231
  }
173
232
  setupListeners() {
@@ -215,6 +274,14 @@ export class BoxContactDatalistItemElement extends BaseElement {
215
274
  }
216
275
  }
217
276
  this.nameEl.textContent = this.name;
277
+ const external = this.external;
278
+ this.externalEl.hidden = !external;
279
+ if (external) {
280
+ this.itemEl.setAttribute("aria-description", "External collaborator");
281
+ }
282
+ else {
283
+ this.itemEl.removeAttribute("aria-description");
284
+ }
218
285
  if (this.email) {
219
286
  this.emailEl.hidden = false;
220
287
  this.emailEl.textContent = this.email;
@@ -223,13 +290,9 @@ export class BoxContactDatalistItemElement extends BaseElement {
223
290
  this.emailEl.hidden = true;
224
291
  this.emailEl.textContent = "";
225
292
  }
293
+ const subtitle = this.subtitle;
294
+ this.subtitleEl.hidden = !subtitle;
295
+ this.subtitleEl.textContent = subtitle;
226
296
  }
227
297
  }
228
- export const defineBoxContactDatalistItemElement = (tagName = DEFAULT_TAG_NAME) => {
229
- const existingElement = customElements.get(tagName);
230
- if (existingElement) {
231
- return existingElement;
232
- }
233
- customElements.define(tagName, BoxContactDatalistItemElement);
234
- return BoxContactDatalistItemElement;
235
- };
298
+ ContactDatalistItem.register();
@@ -1,5 +1,6 @@
1
1
  import { BaseElement } from "../../core/index.js";
2
- export declare class BoxPersonaElement extends BaseElement {
2
+ export declare class Persona extends BaseElement {
3
+ static readonly tagName: string;
3
4
  static get observedAttributes(): string[];
4
5
  private avatarEl;
5
6
  private nameEl;
@@ -25,4 +26,3 @@ export declare class BoxPersonaElement extends BaseElement {
25
26
  protected update(): void;
26
27
  private showAvatarFallback;
27
28
  }
28
- export declare const defineBoxPersonaElement: (tagName?: string) => typeof BoxPersonaElement;
@@ -120,7 +120,8 @@ const personaStyles = `
120
120
  color: color-mix(in srgb, var(--boe-token-surface-status-surface-inprogress, #f5b31b) 58%, var(--boe-token-text-text, #222222) 42%);
121
121
  }
122
122
  `;
123
- export class BoxPersonaElement extends BaseElement {
123
+ export class Persona extends BaseElement {
124
+ static tagName = DEFAULT_TAG_NAME;
124
125
  static get observedAttributes() {
125
126
  return ["description", "initials", "name", "size", "src", "status", "subtitle", "tone"];
126
127
  }
@@ -262,11 +263,4 @@ export class BoxPersonaElement extends BaseElement {
262
263
  }
263
264
  }
264
265
  }
265
- export const defineBoxPersonaElement = (tagName = DEFAULT_TAG_NAME) => {
266
- const existingElement = customElements.get(tagName);
267
- if (existingElement) {
268
- return existingElement;
269
- }
270
- customElements.define(tagName, BoxPersonaElement);
271
- return BoxPersonaElement;
272
- };
266
+ Persona.register();
@@ -1,5 +1,6 @@
1
1
  import { BaseElement } from "../../core/index.js";
2
- export declare class BoxAppShellElement extends BaseElement {
2
+ export declare class AppShell extends BaseElement {
3
+ static readonly tagName: string;
3
4
  static get observedAttributes(): string[];
4
5
  private shellEl;
5
6
  private titleEl;
@@ -23,4 +24,3 @@ export declare class BoxAppShellElement extends BaseElement {
23
24
  private syncLandmarkVisibility;
24
25
  protected update(): void;
25
26
  }
26
- export declare const defineBoxAppShellElement: (tagName?: string) => typeof BoxAppShellElement;
@@ -134,7 +134,8 @@ const appShellStyles = `
134
134
  }
135
135
  }
136
136
  `;
137
- export class BoxAppShellElement extends BaseElement {
137
+ export class AppShell extends BaseElement {
138
+ static tagName = DEFAULT_TAG_NAME;
138
139
  static get observedAttributes() {
139
140
  return ["heading", "nav-label", "aside-label"];
140
141
  }
@@ -248,11 +249,4 @@ export class BoxAppShellElement extends BaseElement {
248
249
  this.syncLandmarkVisibility();
249
250
  }
250
251
  }
251
- export const defineBoxAppShellElement = (tagName = DEFAULT_TAG_NAME) => {
252
- const existingElement = customElements.get(tagName);
253
- if (existingElement) {
254
- return existingElement;
255
- }
256
- customElements.define(tagName, BoxAppShellElement);
257
- return BoxAppShellElement;
258
- };
252
+ AppShell.register();