@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
@@ -0,0 +1,355 @@
1
+ import { BaseElement } from "../../core/index.js";
2
+ import { boeControl, boeOverlay, boeRadius, boeSpace } from "../../foundations/geometry/index.js";
3
+ import { boeNeutralInteractiveStyles } from "../../foundations/tokens/index.js";
4
+ import { boeMotionDuration, boeMotionEasing } from "../../foundations/motion/index.js";
5
+ import { parsePlacement, trackAnchor, } from "../../foundations/overlay/index.js";
6
+ const DEFAULT_TAG_NAME = "box-guide-tooltip";
7
+ const guideTooltipStyles = `
8
+ :host {
9
+ display: contents;
10
+ color: inherit;
11
+ font: inherit;
12
+ }
13
+
14
+ /* Positioned by JS (foundations/overlay) as a viewport-fixed callout, so it
15
+ escapes ancestor overflow and flips/shifts to stay on-screen. */
16
+ [part="callout"] {
17
+ position: fixed;
18
+ inset-block-start: 0;
19
+ inset-inline-start: 0;
20
+ z-index: 60;
21
+ inline-size: max-content;
22
+ max-inline-size: min(20rem, calc(100vw - 2rem));
23
+ padding: ${boeSpace[4]};
24
+ border-radius: ${boeOverlay.radius};
25
+ border: 1px solid color-mix(in srgb, var(--boe-token-surface-surface-brand, #0061d5) 24%, transparent);
26
+ background: var(--boe-token-surface-tooltip-surface, #4e4e4e);
27
+ color: rgba(255, 255, 255, 0.95);
28
+ box-shadow: 0 18px 40px rgba(16, 24, 32, 0.28);
29
+ line-height: 1.5;
30
+ }
31
+
32
+ [part="callout"][hidden] {
33
+ display: none;
34
+ }
35
+
36
+ [part="close"] {
37
+ position: absolute;
38
+ inset-block-start: ${boeSpace[2]};
39
+ inset-inline-end: ${boeSpace[2]};
40
+ inline-size: 1.5rem;
41
+ block-size: 1.5rem;
42
+ display: inline-grid;
43
+ place-items: center;
44
+ padding: 0;
45
+ border: 0;
46
+ border-radius: ${boeRadius.med};
47
+ background: transparent;
48
+ color: rgba(255, 255, 255, 0.8);
49
+ font: inherit;
50
+ font-size: 1rem;
51
+ line-height: 1;
52
+ cursor: pointer;
53
+ transition: background ${boeMotionDuration.interactive} ${boeMotionEasing.standard};
54
+ }
55
+
56
+ [part="close"]:hover {
57
+ background: rgba(255, 255, 255, 0.14);
58
+ color: #ffffff;
59
+ }
60
+
61
+ [part="close"]:focus-visible {
62
+ outline: 2px solid #ffffff;
63
+ outline-offset: 1px;
64
+ }
65
+
66
+ [part="heading"] {
67
+ margin: 0 1.5rem 0.35rem 0;
68
+ font-size: 0.95rem;
69
+ font-weight: 700;
70
+ }
71
+
72
+ [part="heading"][hidden] {
73
+ display: none;
74
+ }
75
+
76
+ [part="body"] {
77
+ font-size: 0.86rem;
78
+ }
79
+
80
+ [part="footer"] {
81
+ display: flex;
82
+ align-items: center;
83
+ justify-content: space-between;
84
+ gap: ${boeSpace[3]};
85
+ margin-block-start: ${boeSpace[4]};
86
+ }
87
+
88
+ [part="step"] {
89
+ font-size: 0.76rem;
90
+ color: rgba(255, 255, 255, 0.7);
91
+ }
92
+
93
+ [part="step"][hidden] {
94
+ display: none;
95
+ }
96
+
97
+ [part="actions"] {
98
+ display: inline-flex;
99
+ gap: ${boeSpace[2]};
100
+ margin-inline-start: auto;
101
+ }
102
+
103
+ [part="back"],
104
+ [part="next"] {
105
+ appearance: none;
106
+ min-height: 1.9rem;
107
+ padding: 0 ${boeSpace[3]};
108
+ border-radius: ${boeRadius.control};
109
+ font: inherit;
110
+ font-size: 0.82rem;
111
+ font-weight: 700;
112
+ letter-spacing: ${boeControl.letterSpacing};
113
+ cursor: pointer;
114
+ transition: background ${boeMotionDuration.interactive} ${boeMotionEasing.standard}, border-color ${boeMotionDuration.interactive} ${boeMotionEasing.standard};
115
+ }
116
+
117
+ [part="back"] {
118
+ border: 1px solid rgba(255, 255, 255, 0.4);
119
+ background: transparent;
120
+ color: rgba(255, 255, 255, 0.92);
121
+ }
122
+
123
+ [part="back"]:hover:not(:disabled) {
124
+ border-color: #ffffff;
125
+ }
126
+
127
+ [part="back"][hidden] {
128
+ display: none;
129
+ }
130
+
131
+ [part="next"] {
132
+ border: 1px solid transparent;
133
+ background: var(--boe-token-surface-surface-brand, #0061d5);
134
+ color: var(--boe-token-text-text-on-brand, #ffffff);
135
+ }
136
+
137
+ [part="next"]:hover:not(:disabled) {
138
+ background: var(--boe-token-surface-surface-brand-hover, #006ae9);
139
+ }
140
+
141
+ [part="back"]:disabled,
142
+ [part="next"]:disabled {
143
+ opacity: 0.5;
144
+ cursor: not-allowed;
145
+ }
146
+
147
+ ${boeNeutralInteractiveStyles('[part="close"]')}
148
+ `;
149
+ /**
150
+ * A guided-tour callout that points at a target element and walks a user through
151
+ * a sequence of steps. Anchor it with `for` (the id of a target) or a slotted
152
+ * `anchor` element; it self-anchors to the host otherwise. It renders a
153
+ * `heading`, a body (default slot), a `step`/`total` indicator, and Back/Next/
154
+ * Close controls, emitting `next`, `back`, and `close` (each with `detail.step`)
155
+ * so the host can advance the tour (moving `for`/`step`). Positioned as a
156
+ * viewport-fixed overlay via `foundations/overlay`.
157
+ */
158
+ export class GuideTooltip extends BaseElement {
159
+ static tagName = DEFAULT_TAG_NAME;
160
+ static get observedAttributes() {
161
+ return [
162
+ "open",
163
+ "heading",
164
+ "placement",
165
+ "step",
166
+ "total",
167
+ "for",
168
+ "next-label",
169
+ "back-label",
170
+ "close-label",
171
+ ];
172
+ }
173
+ openValue = false;
174
+ positionCleanup = null;
175
+ headingId = `box-guide-heading-${Math.random().toString(36).slice(2, 10)}`;
176
+ calloutEl;
177
+ closeEl;
178
+ headingEl;
179
+ stepEl;
180
+ backEl;
181
+ nextEl;
182
+ anchorSlot;
183
+ get open() {
184
+ return this.openValue;
185
+ }
186
+ set open(value) {
187
+ const next = Boolean(value);
188
+ if (this.openValue === next) {
189
+ return;
190
+ }
191
+ this.openValue = next;
192
+ this.toggleAttribute("open", next);
193
+ this.dispatchEvent(new CustomEvent("open-changed", { bubbles: true, composed: true, detail: { open: next } }));
194
+ if (this.isRendered) {
195
+ this.update();
196
+ }
197
+ }
198
+ get heading() {
199
+ return this.getAttribute("heading") ?? "";
200
+ }
201
+ set heading(value) {
202
+ this.setAttribute("heading", value);
203
+ }
204
+ get placement() {
205
+ return this.getAttribute("placement") ?? "bottom-center";
206
+ }
207
+ set placement(value) {
208
+ this.setAttribute("placement", value);
209
+ }
210
+ resolvedPlacement() {
211
+ return parsePlacement(this.getAttribute("placement")) ?? { side: "bottom", align: "center" };
212
+ }
213
+ /** 1-based current step; paired with `total` for the "n of m" indicator. */
214
+ get step() {
215
+ const raw = Number(this.getAttribute("step"));
216
+ return Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;
217
+ }
218
+ set step(value) {
219
+ this.setAttribute("step", String(value));
220
+ }
221
+ get total() {
222
+ const raw = Number(this.getAttribute("total"));
223
+ return Number.isFinite(raw) && raw > 0 ? Math.floor(raw) : 0;
224
+ }
225
+ set total(value) {
226
+ this.setAttribute("total", String(value));
227
+ }
228
+ get htmlFor() {
229
+ return this.getAttribute("for") ?? "";
230
+ }
231
+ set htmlFor(value) {
232
+ this.setAttribute("for", value);
233
+ }
234
+ get nextLabel() {
235
+ const explicit = this.getAttribute("next-label");
236
+ if (explicit) {
237
+ return explicit;
238
+ }
239
+ // On the final step Next becomes a finish action.
240
+ return this.total > 0 && this.step >= this.total ? "Done" : "Next";
241
+ }
242
+ get backLabel() {
243
+ return this.getAttribute("back-label") ?? "Back";
244
+ }
245
+ attributeChangedCallback(name, oldValue, newValue) {
246
+ if (name === "open") {
247
+ this.openValue = this.hasAttribute("open");
248
+ }
249
+ super.attributeChangedCallback(name, oldValue, newValue);
250
+ }
251
+ show() {
252
+ this.open = true;
253
+ }
254
+ hide() {
255
+ this.open = false;
256
+ }
257
+ /** Resolve the element the callout points at. */
258
+ resolveAnchor() {
259
+ const forId = this.htmlFor;
260
+ if (forId) {
261
+ const root = this.getRootNode();
262
+ const found = root.getElementById?.(forId) ??
263
+ (this.ownerDocument ?? document).getElementById(forId);
264
+ if (found) {
265
+ return found;
266
+ }
267
+ }
268
+ const slotted = this.anchorSlot?.assignedElements({ flatten: true })[0];
269
+ return slotted ?? this;
270
+ }
271
+ stopTracking() {
272
+ this.positionCleanup?.();
273
+ this.positionCleanup = null;
274
+ }
275
+ disconnectedCallback() {
276
+ this.stopTracking();
277
+ super.disconnectedCallback?.();
278
+ }
279
+ renderTemplate() {
280
+ if (!this.shadowRoot) {
281
+ return;
282
+ }
283
+ this.shadowRoot.innerHTML = `
284
+ <style>${guideTooltipStyles}</style>
285
+ <slot name="anchor"></slot>
286
+ <div part="callout" role="dialog" aria-labelledby="${this.headingId}" hidden>
287
+ <button type="button" part="close" aria-label="Close">
288
+ <svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M4 4l8 8M12 4l-8 8" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/></svg>
289
+ </button>
290
+ <h2 part="heading" id="${this.headingId}" hidden></h2>
291
+ <div part="body"><slot></slot></div>
292
+ <div part="footer">
293
+ <span part="step" hidden></span>
294
+ <div part="actions">
295
+ <button type="button" part="back">Back</button>
296
+ <button type="button" part="next">Next</button>
297
+ </div>
298
+ </div>
299
+ </div>
300
+ `;
301
+ this.calloutEl = this.shadowRoot.querySelector('[part="callout"]');
302
+ this.closeEl = this.shadowRoot.querySelector('[part="close"]');
303
+ this.headingEl = this.shadowRoot.querySelector('[part="heading"]');
304
+ this.stepEl = this.shadowRoot.querySelector('[part="step"]');
305
+ this.backEl = this.shadowRoot.querySelector('[part="back"]');
306
+ this.nextEl = this.shadowRoot.querySelector('[part="next"]');
307
+ this.anchorSlot = this.shadowRoot.querySelector('slot[name="anchor"]');
308
+ }
309
+ emit(type) {
310
+ this.dispatchEvent(new CustomEvent(type, { bubbles: true, composed: true, detail: { step: this.step } }));
311
+ }
312
+ setupListeners() {
313
+ this.closeEl.addEventListener("click", () => {
314
+ this.emit("close");
315
+ this.hide();
316
+ });
317
+ this.backEl.addEventListener("click", () => this.emit("back"));
318
+ this.nextEl.addEventListener("click", () => this.emit("next"));
319
+ this.calloutEl.addEventListener("keydown", event => {
320
+ if (event.key === "Escape") {
321
+ event.preventDefault();
322
+ this.emit("close");
323
+ this.hide();
324
+ }
325
+ });
326
+ }
327
+ update() {
328
+ if (!this.calloutEl) {
329
+ return;
330
+ }
331
+ this.calloutEl.hidden = !this.openValue;
332
+ const heading = this.heading;
333
+ this.headingEl.hidden = !heading;
334
+ this.headingEl.textContent = heading;
335
+ const step = this.step;
336
+ const total = this.total;
337
+ const showStep = step > 0 && total > 0;
338
+ this.stepEl.hidden = !showStep;
339
+ this.stepEl.textContent = showStep ? `${step} of ${total}` : "";
340
+ // Back hides on the first step; Next label finishes on the last.
341
+ this.backEl.hidden = showStep && step <= 1;
342
+ this.backEl.textContent = this.backLabel;
343
+ this.nextEl.textContent = this.nextLabel;
344
+ this.stopTracking();
345
+ if (this.openValue) {
346
+ this.positionCleanup = trackAnchor(this.resolveAnchor(), this.calloutEl, {
347
+ placement: this.resolvedPlacement(),
348
+ offset: 10,
349
+ });
350
+ // Move focus into the callout for keyboard users.
351
+ queueMicrotask(() => this.nextEl?.focus());
352
+ }
353
+ }
354
+ }
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;
@@ -71,7 +71,8 @@ const popoverStyles = `
71
71
  display: none;
72
72
  }
73
73
  `;
74
- export class BoxPopoverElement extends BaseElement {
74
+ export class Popover extends BaseElement {
75
+ static tagName = DEFAULT_TAG_NAME;
75
76
  static get observedAttributes() {
76
77
  return ["disabled", "label", "open", "placement"];
77
78
  }
@@ -322,11 +323,4 @@ export class BoxPopoverElement extends BaseElement {
322
323
  this.surfaceEl.style.margin = "";
323
324
  }
324
325
  }
325
- export const defineBoxPopoverElement = (tagName = DEFAULT_TAG_NAME) => {
326
- const existingElement = customElements.get(tagName);
327
- if (existingElement) {
328
- return existingElement;
329
- }
330
- customElements.define(tagName, BoxPopoverElement);
331
- return BoxPopoverElement;
332
- };
326
+ Popover.register();
@@ -1,17 +1,26 @@
1
1
  import { BaseElement } from "../../core/index.js";
2
- export declare class BoxTooltipElement extends BaseElement {
2
+ export type TooltipTheme = "default" | "error" | "callout";
3
+ export declare class Tooltip extends BaseElement {
4
+ static readonly tagName: string;
3
5
  static get observedAttributes(): string[];
6
+ private positionCleanup;
4
7
  private openValue;
5
8
  private tooltipId;
6
9
  private triggerHostEl;
7
10
  private triggerSlot;
8
11
  private fallbackTriggerEl;
9
12
  private tooltipEl;
13
+ private labelEl;
10
14
  private describedTrigger;
11
15
  get label(): string;
12
16
  set label(value: string);
13
17
  get triggerLabel(): string;
14
18
  set triggerLabel(value: string);
19
+ get placement(): string;
20
+ set placement(value: string);
21
+ private resolvedPlacement;
22
+ get theme(): TooltipTheme;
23
+ set theme(value: TooltipTheme);
15
24
  get open(): boolean;
16
25
  set open(value: boolean);
17
26
  attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
@@ -22,5 +31,6 @@ export declare class BoxTooltipElement extends BaseElement {
22
31
  protected renderTemplate(): void;
23
32
  protected setupListeners(): void;
24
33
  protected update(): void;
34
+ private stopTracking;
35
+ disconnectedCallback(): void;
25
36
  }
26
- export declare const defineBoxTooltipElement: (tagName?: string) => typeof BoxTooltipElement;
@@ -1,6 +1,7 @@
1
1
  import { BaseElement } from "../../core/index.js";
2
2
  import { boeRadius } from "../../foundations/geometry/index.js";
3
3
  import { boeNeutralInteractiveStyles } from "../../foundations/tokens/index.js";
4
+ import { parsePlacement, trackAnchor, } from "../../foundations/overlay/index.js";
4
5
  const DEFAULT_TAG_NAME = "box-tooltip";
5
6
  const DEFAULT_TRIGGER_LABEL = "More information";
6
7
  const tooltipStyles = `
@@ -37,13 +38,15 @@ const tooltipStyles = `
37
38
 
38
39
  ${boeNeutralInteractiveStyles('[part="trigger"]')}
39
40
 
41
+ /* Positioned by JS (foundations/overlay) as position: fixed, so it escapes
42
+ ancestor overflow and flips/shifts to stay in the viewport. */
40
43
  [part="tooltip"] {
41
- position: absolute;
42
- inset-block-start: calc(100% + 0.5rem);
43
- inset-inline-start: 50%;
44
- transform: translateX(-50%);
45
- z-index: 1;
46
- width: min(13.75rem, calc(100vw - 6rem));
44
+ position: fixed;
45
+ inset-block-start: 0;
46
+ inset-inline-start: 0;
47
+ z-index: 40;
48
+ width: max-content;
49
+ max-width: min(18rem, calc(100vw - 2rem));
47
50
  padding: 0.5rem 0.65rem;
48
51
  border-radius: ${boeRadius.xlarge};
49
52
  border: 1px solid color-mix(in srgb, var(--boe-token-surface-surface-brand, #0061d5) 18%, rgba(255, 255, 255, 0.08));
@@ -53,20 +56,43 @@ const tooltipStyles = `
53
56
  line-height: 1.45;
54
57
  }
55
58
 
59
+ /* Error theme — for validation hints. */
60
+ [part="tooltip"][data-theme="error"] {
61
+ background: var(--boe-token-surface-status-surface-error, #ed3757);
62
+ border-color: var(--boe-token-surface-status-surface-error, #ed3757);
63
+ color: #ffffff;
64
+ }
65
+
66
+ /* Callout theme — light surface for richer, longer content. */
67
+ [part="tooltip"][data-theme="callout"] {
68
+ background: var(--boe-token-surface-surface, #ffffff);
69
+ border-color: var(--boe-token-stroke-stroke, #e8e8e8);
70
+ color: var(--boe-token-text-text, #222222);
71
+ }
72
+
73
+ [part="tooltip"] ::slotted(img) {
74
+ max-width: 100%;
75
+ border-radius: ${boeRadius.med};
76
+ display: block;
77
+ }
78
+
56
79
  [part="tooltip"][hidden] {
57
80
  display: none;
58
81
  }
59
82
  `;
60
- export class BoxTooltipElement extends BaseElement {
83
+ export class Tooltip extends BaseElement {
84
+ static tagName = DEFAULT_TAG_NAME;
61
85
  static get observedAttributes() {
62
- return ["label", "open", "trigger-label"];
86
+ return ["label", "open", "trigger-label", "placement", "theme"];
63
87
  }
88
+ positionCleanup = null;
64
89
  openValue = false;
65
90
  tooltipId = `box-tooltip-${Math.random().toString(36).slice(2, 10)}`;
66
91
  triggerHostEl;
67
92
  triggerSlot;
68
93
  fallbackTriggerEl;
69
94
  tooltipEl;
95
+ labelEl;
70
96
  describedTrigger = null;
71
97
  get label() {
72
98
  return this.getAttribute("label") ?? "Helpful context";
@@ -80,6 +106,22 @@ export class BoxTooltipElement extends BaseElement {
80
106
  set triggerLabel(value) {
81
107
  this.setAttribute("trigger-label", value);
82
108
  }
109
+ get placement() {
110
+ return this.getAttribute("placement") ?? "bottom-center";
111
+ }
112
+ set placement(value) {
113
+ this.setAttribute("placement", value);
114
+ }
115
+ resolvedPlacement() {
116
+ return parsePlacement(this.getAttribute("placement")) ?? { side: "bottom", align: "center" };
117
+ }
118
+ get theme() {
119
+ const value = this.getAttribute("theme");
120
+ return value === "error" || value === "callout" ? value : "default";
121
+ }
122
+ set theme(value) {
123
+ this.setAttribute("theme", value);
124
+ }
83
125
  get open() {
84
126
  return this.openValue;
85
127
  }
@@ -138,13 +180,14 @@ export class BoxTooltipElement extends BaseElement {
138
180
  <span part="trigger-host">
139
181
  <slot><button type="button" part="trigger">?</button></slot>
140
182
  </span>
141
- <div id="${this.tooltipId}" part="tooltip" role="tooltip" hidden></div>
183
+ <div id="${this.tooltipId}" part="tooltip" role="tooltip" hidden><span part="label"></span><slot name="content"></slot></div>
142
184
  </span>
143
185
  `;
144
186
  this.triggerHostEl = this.shadowRoot.querySelector('[part="trigger-host"]');
145
- this.triggerSlot = this.shadowRoot.querySelector("slot");
187
+ this.triggerSlot = this.shadowRoot.querySelector("slot:not([name])");
146
188
  this.fallbackTriggerEl = this.shadowRoot.querySelector('[part="trigger"]');
147
189
  this.tooltipEl = this.shadowRoot.querySelector('[part="tooltip"]');
190
+ this.labelEl = this.shadowRoot.querySelector('[part="label"]');
148
191
  }
149
192
  setupListeners() {
150
193
  this.triggerHostEl.addEventListener("mouseenter", () => this.show());
@@ -180,25 +223,39 @@ export class BoxTooltipElement extends BaseElement {
180
223
  if (!this.triggerHostEl || !this.tooltipEl || !this.triggerSlot) {
181
224
  return;
182
225
  }
183
- const label = this.label;
184
- this.tooltipEl.textContent = label;
226
+ this.labelEl.textContent = this.label;
227
+ const theme = this.theme;
228
+ if (theme === "default") {
229
+ this.tooltipEl.removeAttribute("data-theme");
230
+ }
231
+ else {
232
+ this.tooltipEl.setAttribute("data-theme", theme);
233
+ }
185
234
  this.tooltipEl.hidden = !this.openValue;
186
235
  const trigger = this.resolveDescribedTrigger();
187
236
  if (trigger === this.fallbackTriggerEl) {
188
237
  this.fallbackTriggerEl.setAttribute("aria-label", this.triggerLabel);
189
238
  }
190
239
  this.clearDescribedBy();
240
+ this.stopTracking();
191
241
  if (this.openValue) {
192
242
  trigger.setAttribute("aria-describedby", this.tooltipId);
193
243
  this.describedTrigger = trigger;
244
+ // Position as a fixed-coordinate overlay so it escapes ancestor overflow
245
+ // and flips/shifts to stay on-screen.
246
+ this.positionCleanup = trackAnchor(this.triggerHostEl, this.tooltipEl, {
247
+ placement: this.resolvedPlacement(),
248
+ offset: 8,
249
+ });
194
250
  }
195
251
  }
252
+ stopTracking() {
253
+ this.positionCleanup?.();
254
+ this.positionCleanup = null;
255
+ }
256
+ disconnectedCallback() {
257
+ this.stopTracking();
258
+ super.disconnectedCallback?.();
259
+ }
196
260
  }
197
- export const defineBoxTooltipElement = (tagName = DEFAULT_TAG_NAME) => {
198
- const existingElement = customElements.get(tagName);
199
- if (existingElement) {
200
- return existingElement;
201
- }
202
- customElements.define(tagName, BoxTooltipElement);
203
- return BoxTooltipElement;
204
- };
261
+ Tooltip.register();
@@ -1,5 +1,6 @@
1
1
  import { BaseElement } from "../../core/index.js";
2
- export declare class BoxIllustrationElement extends BaseElement {
2
+ export declare class Illustration extends BaseElement {
3
+ static readonly tagName: string;
3
4
  private readonly handleDesignSystemChange;
4
5
  static get observedAttributes(): string[];
5
6
  private figureEl;
@@ -23,4 +24,3 @@ export declare class BoxIllustrationElement extends BaseElement {
23
24
  protected renderTemplate(): void;
24
25
  protected update(): void;
25
26
  }
26
- export declare const defineBoxIllustrationElement: (tagName?: string) => typeof BoxIllustrationElement;
@@ -188,7 +188,8 @@ const illustrationStyles = `
188
188
  display: none;
189
189
  }
190
190
  `;
191
- export class BoxIllustrationElement extends BaseElement {
191
+ export class Illustration extends BaseElement {
192
+ static tagName = DEFAULT_TAG_NAME;
192
193
  handleDesignSystemChange = () => {
193
194
  this.update();
194
195
  };
@@ -309,11 +310,4 @@ export class BoxIllustrationElement extends BaseElement {
309
310
  }
310
311
  }
311
312
  }
312
- export const defineBoxIllustrationElement = (tagName = DEFAULT_TAG_NAME) => {
313
- const existingElement = customElements.get(tagName);
314
- if (existingElement) {
315
- return existingElement;
316
- }
317
- customElements.define(tagName, BoxIllustrationElement);
318
- return BoxIllustrationElement;
319
- };
313
+ Illustration.register();
@@ -1,4 +1,7 @@
1
- export declare abstract class BaseElement extends HTMLElement {
1
+ declare const HTMLElementBase: typeof HTMLElement;
2
+ export declare abstract class BaseElement extends HTMLElementBase {
3
+ static readonly tagName: string;
4
+ static register<T extends typeof BaseElement>(this: T, tagName?: string): T;
2
5
  protected isRendered: boolean;
3
6
  constructor();
4
7
  connectedCallback(): void;
@@ -20,3 +23,4 @@ export declare abstract class BaseElement extends HTMLElement {
20
23
  */
21
24
  protected abstract update(): void;
22
25
  }
26
+ export {};
@@ -1,4 +1,32 @@
1
- export class BaseElement extends HTMLElement {
1
+ const HTMLElementBase = (typeof globalThis.HTMLElement === "undefined" ? class {
2
+ } : globalThis.HTMLElement);
3
+ /**
4
+ * Registers a custom element when a browser registry is available.
5
+ *
6
+ * Component modules call this at import time. The browser guard keeps those
7
+ * modules safe to evaluate during SSR, while the existing-definition check
8
+ * makes repeated root and per-component imports idempotent.
9
+ */
10
+ const registerCustomElement = (tagName, constructor) => {
11
+ const registry = globalThis.customElements;
12
+ if (!registry) {
13
+ return constructor;
14
+ }
15
+ const existing = registry.get(tagName);
16
+ if (existing) {
17
+ return existing;
18
+ }
19
+ registry.define(tagName, constructor);
20
+ return constructor;
21
+ };
22
+ export class BaseElement extends HTMLElementBase {
23
+ static tagName = "";
24
+ static register(tagName = this.tagName) {
25
+ if (!tagName) {
26
+ throw new TypeError("Custom element classes must declare a tagName.");
27
+ }
28
+ return registerCustomElement(tagName, this);
29
+ }
2
30
  isRendered = false;
3
31
  constructor() {
4
32
  super();
@@ -0,0 +1 @@
1
+ export * from "../patterns/share/access-stats.js";
@@ -0,0 +1 @@
1
+ export * from "../patterns/share/access-stats.js";
@@ -0,0 +1 @@
1
+ export * from "../components/navigation/accordion.js";