@brandsync/wc 1.15.0 → 1.17.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 (479) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/REFERENCE.md +313 -0
  3. package/custom-elements.json +4760 -1555
  4. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  5. package/dist/brandsync-wc/p-044ac86c.entry.js +1 -0
  6. package/dist/brandsync-wc/p-065c7e7c.entry.js +1 -0
  7. package/dist/brandsync-wc/p-07673a48.entry.js +1 -0
  8. package/dist/brandsync-wc/{p-54f9529f.entry.js → p-08e96f13.entry.js} +1 -1
  9. package/dist/brandsync-wc/{p-f3cc961b.entry.js → p-0bbaef51.entry.js} +1 -1
  10. package/dist/brandsync-wc/p-11d80e17.entry.js +1 -0
  11. package/dist/brandsync-wc/{p-c85fe37b.entry.js → p-1bd99669.entry.js} +1 -1
  12. package/dist/brandsync-wc/{p-f4d1d56e.entry.js → p-225148be.entry.js} +1 -1
  13. package/dist/brandsync-wc/{p-6df48031.entry.js → p-2bd30709.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-e294f698.entry.js → p-32297416.entry.js} +1 -1
  15. package/dist/brandsync-wc/{p-d165a742.entry.js → p-35f76ea7.entry.js} +1 -1
  16. package/dist/brandsync-wc/{p-4ca40386.entry.js → p-3bad5e1b.entry.js} +1 -1
  17. package/dist/brandsync-wc/{p-ed71eb02.entry.js → p-3bdeeb9d.entry.js} +1 -1
  18. package/dist/brandsync-wc/{p-1bf8fbbb.entry.js → p-3c6ec5d0.entry.js} +1 -1
  19. package/dist/brandsync-wc/{p-abfa43f5.entry.js → p-3cb79512.entry.js} +1 -1
  20. package/dist/brandsync-wc/p-3d2c62a6.entry.js +1 -0
  21. package/dist/brandsync-wc/{p-23379d7c.entry.js → p-3d7b0708.entry.js} +1 -1
  22. package/dist/brandsync-wc/{p-2e285364.entry.js → p-43d5f708.entry.js} +1 -1
  23. package/dist/brandsync-wc/{p-d81c4f58.entry.js → p-4b460eda.entry.js} +1 -1
  24. package/dist/brandsync-wc/{p-b6081bba.entry.js → p-4eaa9ed4.entry.js} +1 -1
  25. package/dist/brandsync-wc/{p-c25553bc.entry.js → p-4f4c0c68.entry.js} +1 -1
  26. package/dist/brandsync-wc/{p-a56bc608.entry.js → p-5057e4fe.entry.js} +1 -1
  27. package/dist/brandsync-wc/p-54d91ac9.entry.js +1 -0
  28. package/dist/brandsync-wc/{p-65fa1b21.entry.js → p-57ff14ca.entry.js} +1 -1
  29. package/dist/brandsync-wc/{p-538d5b58.entry.js → p-5b933ff4.entry.js} +1 -1
  30. package/dist/brandsync-wc/{p-b67a0c8f.entry.js → p-5c61eb06.entry.js} +1 -1
  31. package/dist/brandsync-wc/{p-86774165.entry.js → p-5eb5795f.entry.js} +1 -1
  32. package/dist/brandsync-wc/{p-b663ee67.entry.js → p-61deb48c.entry.js} +1 -1
  33. package/dist/brandsync-wc/{p-ac9472ec.entry.js → p-67f125e8.entry.js} +1 -1
  34. package/dist/brandsync-wc/{p-3488c4fc.entry.js → p-6ea02b98.entry.js} +1 -1
  35. package/dist/brandsync-wc/p-70c650b2.entry.js +1 -0
  36. package/dist/brandsync-wc/p-79fc849c.entry.js +1 -0
  37. package/dist/brandsync-wc/{p-5a45ef51.entry.js → p-7ed071fb.entry.js} +1 -1
  38. package/dist/brandsync-wc/{p-3c21d0bf.entry.js → p-8134f97c.entry.js} +1 -1
  39. package/dist/brandsync-wc/{p-4ed00786.entry.js → p-844205d9.entry.js} +1 -1
  40. package/dist/brandsync-wc/p-84d6d6eb.entry.js +1 -0
  41. package/dist/brandsync-wc/{p-401b3d3d.entry.js → p-857987f9.entry.js} +1 -1
  42. package/dist/brandsync-wc/{p-b9c9bcba.entry.js → p-8c4dfccb.entry.js} +1 -1
  43. package/dist/brandsync-wc/{p-38ac9aad.entry.js → p-90ba3032.entry.js} +1 -1
  44. package/dist/brandsync-wc/{p-1ca8b01e.entry.js → p-9396c67e.entry.js} +1 -1
  45. package/dist/brandsync-wc/{p-e9b6b30f.entry.js → p-9d740928.entry.js} +1 -1
  46. package/dist/brandsync-wc/{p-baa3d37a.entry.js → p-a7fa839a.entry.js} +1 -1
  47. package/dist/brandsync-wc/{p-f271e1d2.entry.js → p-a7fb0b59.entry.js} +1 -1
  48. package/dist/brandsync-wc/{p-89ea6366.entry.js → p-ab14a07d.entry.js} +1 -1
  49. package/dist/brandsync-wc/{p-912629c6.entry.js → p-aec2dfeb.entry.js} +1 -1
  50. package/dist/brandsync-wc/{p-8390a155.entry.js → p-b02bf1ca.entry.js} +1 -1
  51. package/dist/brandsync-wc/{p-9beeb30c.entry.js → p-b142d8c9.entry.js} +1 -1
  52. package/dist/brandsync-wc/{p-7a072e64.entry.js → p-b4511ad3.entry.js} +1 -1
  53. package/dist/brandsync-wc/{p-5ed1f45e.entry.js → p-b5710db6.entry.js} +1 -1
  54. package/dist/brandsync-wc/{p-34b0c048.entry.js → p-baa39c08.entry.js} +1 -1
  55. package/dist/brandsync-wc/{p-87d44938.entry.js → p-be7aac52.entry.js} +1 -1
  56. package/dist/brandsync-wc/p-c835afb7.entry.js +1 -0
  57. package/dist/brandsync-wc/{p-45986ad4.entry.js → p-d25adab2.entry.js} +1 -1
  58. package/dist/brandsync-wc/p-d2a15599.entry.js +1 -0
  59. package/dist/brandsync-wc/{p-b9c0b481.entry.js → p-d7956c51.entry.js} +1 -1
  60. package/dist/brandsync-wc/p-d9184940.entry.js +1 -0
  61. package/dist/brandsync-wc/{p-0f97fe35.entry.js → p-dcbeb143.entry.js} +1 -1
  62. package/dist/brandsync-wc/{p-cf287ff1.entry.js → p-debc83cc.entry.js} +1 -1
  63. package/dist/brandsync-wc/{p-dcacee29.entry.js → p-e0a9f2d1.entry.js} +1 -1
  64. package/dist/brandsync-wc/p-e123b391.entry.js +1 -0
  65. package/dist/brandsync-wc/p-e8ae626d.entry.js +1 -0
  66. package/dist/brandsync-wc/p-e8e22238.entry.js +1 -0
  67. package/dist/brandsync-wc/{p-6cb21302.entry.js → p-eb0dc5bf.entry.js} +1 -1
  68. package/dist/brandsync-wc/{p-1b4c0971.entry.js → p-f43a7f16.entry.js} +1 -1
  69. package/dist/brandsync-wc/{p-7b3518b8.entry.js → p-f82a9f0d.entry.js} +1 -1
  70. package/dist/brandsync-wc/{p-f0be9125.entry.js → p-f98dfa85.entry.js} +1 -1
  71. package/dist/brandsync-wc/{p-36fe783a.entry.js → p-fdc168ec.entry.js} +1 -1
  72. package/dist/brandsync-wc/{p-bc97ece8.entry.js → p-ffccc1ee.entry.js} +1 -1
  73. package/dist/cjs/brandsync-wc.cjs.js +1 -1
  74. package/dist/cjs/bs-accordion-group.cjs.entry.js +1 -1
  75. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +1 -1
  76. package/dist/cjs/bs-ai-greeting.cjs.entry.js +1 -1
  77. package/dist/cjs/bs-ai-thinking.cjs.entry.js +1 -1
  78. package/dist/cjs/bs-app-shell.cjs.entry.js +1 -1
  79. package/dist/cjs/bs-attachment-list.cjs.entry.js +1 -1
  80. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +1 -1
  81. package/dist/cjs/bs-button-skeleton.cjs.entry.js +1 -1
  82. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +1 -1
  83. package/dist/cjs/bs-chatbot-header.cjs.entry.js +1 -1
  84. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +1 -1
  85. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +1 -1
  86. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +1 -1
  87. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +1 -1
  88. package/dist/cjs/bs-citation-preview.cjs.entry.js +1 -1
  89. package/dist/cjs/bs-command-palette.cjs.entry.js +374 -0
  90. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +1 -1
  91. package/dist/cjs/bs-composer.cjs.entry.js +1 -1
  92. package/dist/cjs/bs-container.cjs.entry.js +1 -1
  93. package/dist/cjs/bs-data-table.cjs.entry.js +2 -2
  94. package/dist/cjs/bs-datepicker.cjs.entry.js +1 -1
  95. package/dist/cjs/bs-divider.cjs.entry.js +1 -1
  96. package/dist/cjs/bs-empty-state.cjs.entry.js +47 -0
  97. package/dist/cjs/bs-error-page.cjs.entry.js +1 -1
  98. package/dist/cjs/bs-file-upload-item.cjs.entry.js +1 -1
  99. package/dist/cjs/bs-file-upload.cjs.entry.js +1 -1
  100. package/dist/cjs/bs-global-search.cjs.entry.js +326 -0
  101. package/dist/cjs/bs-grid.cjs.entry.js +2 -2
  102. package/dist/cjs/bs-icon-button.cjs.entry.js +1 -1
  103. package/dist/cjs/bs-icon-tile.cjs.entry.js +2 -2
  104. package/dist/cjs/bs-inline-tab.cjs.entry.js +1 -1
  105. package/dist/cjs/bs-input_3.cjs.entry.js +4 -4
  106. package/dist/cjs/bs-key-caps.cjs.entry.js +39 -0
  107. package/dist/cjs/bs-key.cjs.entry.js +28 -0
  108. package/dist/cjs/bs-keyboard-shortcuts.cjs.entry.js +112 -0
  109. package/dist/cjs/bs-list-item.cjs.entry.js +66 -0
  110. package/dist/cjs/bs-list.cjs.entry.js +103 -0
  111. package/dist/cjs/bs-message-list.cjs.entry.js +1 -1
  112. package/dist/cjs/bs-message.cjs.entry.js +1 -1
  113. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +1 -1
  114. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +2 -2
  115. package/dist/cjs/bs-navigation-header.cjs.entry.js +1 -1
  116. package/dist/cjs/bs-pagination.cjs.entry.js +1 -1
  117. package/dist/cjs/bs-popover.cjs.entry.js +1 -1
  118. package/dist/cjs/bs-progress-linear.cjs.entry.js +2 -2
  119. package/dist/cjs/bs-progress.cjs.entry.js +2 -2
  120. package/dist/cjs/bs-qr-code.cjs.entry.js +1 -1
  121. package/dist/cjs/bs-radio.cjs.entry.js +1 -1
  122. package/dist/cjs/bs-search-item.cjs.entry.js +47 -0
  123. package/dist/cjs/bs-session-timeout.cjs.entry.js +1 -1
  124. package/dist/cjs/bs-shortcut-row.cjs.entry.js +27 -0
  125. package/dist/cjs/bs-skeleton.cjs.entry.js +1 -1
  126. package/dist/cjs/bs-slider.cjs.entry.js +1 -1
  127. package/dist/cjs/bs-snackbar.cjs.entry.js +1 -1
  128. package/dist/cjs/bs-source-link.cjs.entry.js +2 -2
  129. package/dist/cjs/bs-spinner.cjs.entry.js +1 -1
  130. package/dist/cjs/bs-split-pane.cjs.entry.js +1 -1
  131. package/dist/cjs/bs-stack.cjs.entry.js +1 -1
  132. package/dist/cjs/bs-stepper-step.cjs.entry.js +1 -1
  133. package/dist/cjs/bs-stepper.cjs.entry.js +1 -1
  134. package/dist/cjs/bs-switch.cjs.entry.js +1 -1
  135. package/dist/cjs/bs-tab_3.cjs.entry.js +3 -3
  136. package/dist/cjs/bs-timepicker.cjs.entry.js +2 -2
  137. package/dist/cjs/bs-toast.cjs.entry.js +1 -1
  138. package/dist/cjs/bs-tooltip-trigger.cjs.entry.js +1 -1
  139. package/dist/cjs/bs-tooltip.cjs.entry.js +1 -1
  140. package/dist/cjs/bs-tree-item.cjs.entry.js +94 -0
  141. package/dist/cjs/bs-tree.cjs.entry.js +197 -0
  142. package/dist/cjs/loader.cjs.js +1 -1
  143. package/dist/collection/collection-manifest.json +13 -1
  144. package/dist/collection/components/bs-accordion-group/bs-accordion-group.js +1 -1
  145. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  146. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  147. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  148. package/dist/collection/components/bs-app-shell/bs-app-shell.js +1 -1
  149. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  150. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +1 -1
  151. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +1 -1
  152. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
  153. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -1
  154. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
  155. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  156. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  157. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
  158. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +1 -1
  159. package/dist/collection/components/bs-citation-preview/bs-citation-preview.js +1 -1
  160. package/dist/collection/components/bs-command-palette/bs-command-palette.cmp.test.js +207 -0
  161. package/dist/collection/components/bs-command-palette/bs-command-palette.css +214 -0
  162. package/dist/collection/components/bs-command-palette/bs-command-palette.js +1114 -0
  163. package/dist/collection/components/bs-command-palette/bs-command-palette.stories.js +194 -0
  164. package/dist/collection/components/bs-composer/bs-composer.js +1 -1
  165. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +1 -1
  166. package/dist/collection/components/bs-container/bs-container.js +1 -1
  167. package/dist/collection/components/bs-data-table/bs-data-table.js +2 -2
  168. package/dist/collection/components/bs-datepicker/bs-datepicker.js +1 -1
  169. package/dist/collection/components/bs-divider/bs-divider.js +1 -1
  170. package/dist/collection/components/bs-empty-state/bs-empty-state.cmp.test.js +102 -0
  171. package/dist/collection/components/bs-empty-state/bs-empty-state.css +45 -0
  172. package/dist/collection/components/bs-empty-state/bs-empty-state.js +175 -0
  173. package/dist/collection/components/bs-empty-state/bs-empty-state.stories.js +52 -0
  174. package/dist/collection/components/bs-error-page/bs-error-page.js +1 -1
  175. package/dist/collection/components/bs-file-upload/bs-file-upload.js +1 -1
  176. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.js +1 -1
  177. package/dist/collection/components/bs-global-search/bs-global-search.cmp.test.js +491 -0
  178. package/dist/collection/components/bs-global-search/bs-global-search.css +115 -0
  179. package/dist/collection/components/bs-global-search/bs-global-search.js +1024 -0
  180. package/dist/collection/components/bs-global-search/bs-global-search.stories.js +146 -0
  181. package/dist/collection/components/bs-grid/bs-grid.js +2 -2
  182. package/dist/collection/components/bs-icon-tile/bs-icon-tile.js +2 -2
  183. package/dist/collection/components/bs-input/bs-input.js +2 -2
  184. package/dist/collection/components/bs-key/bs-key.cmp.test.js +59 -0
  185. package/dist/collection/components/bs-key/bs-key.css +58 -0
  186. package/dist/collection/components/bs-key/bs-key.js +84 -0
  187. package/dist/collection/components/bs-key/bs-key.stories.js +19 -0
  188. package/dist/collection/components/bs-key-caps/bs-key-caps.cmp.test.js +60 -0
  189. package/dist/collection/components/bs-key-caps/bs-key-caps.css +28 -0
  190. package/dist/collection/components/bs-key-caps/bs-key-caps.js +120 -0
  191. package/dist/collection/components/bs-key-caps/bs-key-caps.stories.js +29 -0
  192. package/dist/collection/components/bs-keyboard-shortcuts/bs-keyboard-shortcuts.cmp.test.js +194 -0
  193. package/dist/collection/components/bs-keyboard-shortcuts/bs-keyboard-shortcuts.css +138 -0
  194. package/dist/collection/components/bs-keyboard-shortcuts/bs-keyboard-shortcuts.js +485 -0
  195. package/dist/collection/components/bs-keyboard-shortcuts/bs-keyboard-shortcuts.stories.js +111 -0
  196. package/dist/collection/components/bs-list/bs-list.cmp.test.js +99 -0
  197. package/dist/collection/components/bs-list/bs-list.css +15 -0
  198. package/dist/collection/components/bs-list/bs-list.js +241 -0
  199. package/dist/collection/components/bs-list/bs-list.stories.js +43 -0
  200. package/dist/collection/components/bs-list-item/bs-list-item.cmp.test.js +137 -0
  201. package/dist/collection/components/bs-list-item/bs-list-item.css +139 -0
  202. package/dist/collection/components/bs-list-item/bs-list-item.js +343 -0
  203. package/dist/collection/components/bs-list-item/bs-list-item.stories.js +86 -0
  204. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  205. package/dist/collection/components/bs-menu-item/bs-menu-item.cmp.test.js +6 -0
  206. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  207. package/dist/collection/components/bs-message/bs-message.js +1 -1
  208. package/dist/collection/components/bs-message-list/bs-message-list.js +1 -1
  209. package/dist/collection/components/bs-pagination/bs-pagination.js +1 -1
  210. package/dist/collection/components/bs-popover/bs-popover.js +1 -1
  211. package/dist/collection/components/bs-progress/bs-progress.js +2 -2
  212. package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +2 -2
  213. package/dist/collection/components/bs-qr-code/bs-qr-code.js +1 -1
  214. package/dist/collection/components/bs-radio/bs-radio.js +1 -1
  215. package/dist/collection/components/bs-search-item/bs-search-item.cmp.test.js +147 -0
  216. package/dist/collection/components/bs-search-item/bs-search-item.css +112 -0
  217. package/dist/collection/components/bs-search-item/bs-search-item.js +222 -0
  218. package/dist/collection/components/bs-search-item/bs-search-item.stories.js +31 -0
  219. package/dist/collection/components/bs-session-timeout/bs-session-timeout.js +1 -1
  220. package/dist/collection/components/bs-shortcut-row/bs-shortcut-row.cmp.test.js +60 -0
  221. package/dist/collection/components/bs-shortcut-row/bs-shortcut-row.css +42 -0
  222. package/dist/collection/components/bs-shortcut-row/bs-shortcut-row.js +154 -0
  223. package/dist/collection/components/bs-shortcut-row/bs-shortcut-row.stories.js +24 -0
  224. package/dist/collection/components/bs-skeleton/bs-skeleton.js +1 -1
  225. package/dist/collection/components/bs-slider/bs-slider.js +1 -1
  226. package/dist/collection/components/bs-snackbar/bs-snackbar.js +1 -1
  227. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  228. package/dist/collection/components/bs-spinner/bs-spinner.js +1 -1
  229. package/dist/collection/components/bs-split-pane/bs-split-pane.js +1 -1
  230. package/dist/collection/components/bs-stack/bs-stack.js +1 -1
  231. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +1 -1
  232. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
  233. package/dist/collection/components/bs-switch/bs-switch.js +1 -1
  234. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
  235. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +1 -1
  236. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +1 -1
  237. package/dist/collection/components/bs-timepicker/bs-timepicker.js +2 -2
  238. package/dist/collection/components/bs-toast/bs-toast.js +1 -1
  239. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  240. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.js +1 -1
  241. package/dist/collection/components/bs-tree/bs-tree.cmp.test.js +166 -0
  242. package/dist/collection/components/bs-tree/bs-tree.css +8 -0
  243. package/dist/collection/components/bs-tree/bs-tree.js +354 -0
  244. package/dist/collection/components/bs-tree/bs-tree.stories.js +34 -0
  245. package/dist/collection/components/bs-tree-item/bs-tree-item.cmp.test.js +187 -0
  246. package/dist/collection/components/bs-tree-item/bs-tree-item.css +161 -0
  247. package/dist/collection/components/bs-tree-item/bs-tree-item.js +305 -0
  248. package/dist/collection/components/bs-tree-item/bs-tree-item.stories.js +54 -0
  249. package/dist/collection/components/bs-whats-new-entry/bs-whats-new-entry.js +1 -1
  250. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +2 -2
  251. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  252. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +1 -1
  253. package/dist/components/bs-accordion-group.js +1 -1
  254. package/dist/components/bs-ai-disclaimer.js +1 -1
  255. package/dist/components/bs-ai-greeting.js +1 -1
  256. package/dist/components/bs-ai-thinking.js +1 -1
  257. package/dist/components/bs-app-shell.js +1 -1
  258. package/dist/components/bs-attachment-list.js +1 -1
  259. package/dist/components/bs-attachment.js +1 -1
  260. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  261. package/dist/components/bs-breadcrumbs.js +1 -1
  262. package/dist/components/bs-button-skeleton.js +1 -1
  263. package/dist/components/bs-carousel.js +1 -1
  264. package/dist/components/bs-chatbot-feedback.js +1 -1
  265. package/dist/components/bs-chatbot-header.js +1 -1
  266. package/dist/components/bs-chatbot-response-action.js +1 -1
  267. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  268. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  269. package/dist/components/bs-checkbox-skeleton.js +1 -1
  270. package/dist/components/bs-citation-preview.js +1 -1
  271. package/dist/components/bs-command-palette.d.ts +11 -0
  272. package/dist/components/bs-command-palette.js +1 -0
  273. package/dist/components/bs-composer-status-banner.js +1 -1
  274. package/dist/components/bs-composer.js +1 -1
  275. package/dist/components/bs-container.js +1 -1
  276. package/dist/components/bs-cookie-consent.js +1 -1
  277. package/dist/components/bs-data-table.js +1 -1
  278. package/dist/components/bs-datepicker.js +1 -1
  279. package/dist/components/bs-dialog.js +1 -1
  280. package/dist/components/bs-divider.js +1 -1
  281. package/dist/components/bs-empty-state.d.ts +11 -0
  282. package/dist/components/bs-empty-state.js +1 -0
  283. package/dist/components/bs-error-page.js +1 -1
  284. package/dist/components/bs-file-upload-item.js +1 -1
  285. package/dist/components/bs-file-upload.js +1 -1
  286. package/dist/components/bs-global-search.d.ts +11 -0
  287. package/dist/components/bs-global-search.js +1 -0
  288. package/dist/components/bs-grid.js +1 -1
  289. package/dist/components/bs-icon-button.js +1 -1
  290. package/dist/components/bs-icon-tile.js +1 -1
  291. package/dist/components/bs-inline-tab.js +1 -1
  292. package/dist/components/bs-input.js +1 -1
  293. package/dist/components/bs-key-caps.d.ts +11 -0
  294. package/dist/components/bs-key-caps.js +1 -0
  295. package/dist/components/bs-key.d.ts +11 -0
  296. package/dist/components/bs-key.js +1 -0
  297. package/dist/components/bs-keyboard-shortcuts.d.ts +11 -0
  298. package/dist/components/bs-keyboard-shortcuts.js +1 -0
  299. package/dist/components/bs-list-item.d.ts +11 -0
  300. package/dist/components/bs-list-item.js +1 -0
  301. package/dist/components/bs-list.d.ts +11 -0
  302. package/dist/components/bs-list.js +1 -0
  303. package/dist/components/bs-menu-item.js +1 -1
  304. package/dist/components/bs-menu.js +1 -1
  305. package/dist/components/bs-message-list.js +1 -1
  306. package/dist/components/bs-message.js +1 -1
  307. package/dist/components/bs-navigation-drawer-item.js +1 -1
  308. package/dist/components/bs-navigation-drawer.js +1 -1
  309. package/dist/components/bs-navigation-header.js +1 -1
  310. package/dist/components/bs-onboarding-checklist.js +1 -1
  311. package/dist/components/bs-pagination.js +1 -1
  312. package/dist/components/bs-popover.js +1 -1
  313. package/dist/components/bs-product-tour.js +1 -1
  314. package/dist/components/bs-progress-linear.js +1 -1
  315. package/dist/components/bs-progress.js +1 -1
  316. package/dist/components/bs-qr-code.js +1 -1
  317. package/dist/components/bs-radio.js +1 -1
  318. package/dist/components/bs-search-item.d.ts +11 -0
  319. package/dist/components/bs-search-item.js +1 -0
  320. package/dist/components/bs-session-timeout.js +1 -1
  321. package/dist/components/bs-shortcut-row.d.ts +11 -0
  322. package/dist/components/bs-shortcut-row.js +1 -0
  323. package/dist/components/bs-side-panel.js +1 -1
  324. package/dist/components/bs-skeleton.js +1 -1
  325. package/dist/components/bs-slider.js +1 -1
  326. package/dist/components/bs-snackbar.js +1 -1
  327. package/dist/components/bs-source-link.js +1 -1
  328. package/dist/components/bs-spinner.js +1 -1
  329. package/dist/components/bs-split-pane.js +1 -1
  330. package/dist/components/bs-stack.js +1 -1
  331. package/dist/components/bs-stepper-step.js +1 -1
  332. package/dist/components/bs-stepper.js +1 -1
  333. package/dist/components/bs-switch.js +1 -1
  334. package/dist/components/bs-tab.js +1 -1
  335. package/dist/components/bs-tabs.js +1 -1
  336. package/dist/components/bs-timepicker.js +1 -1
  337. package/dist/components/bs-toast.js +1 -1
  338. package/dist/components/bs-tooltip-trigger.js +1 -1
  339. package/dist/components/bs-tooltip.js +1 -1
  340. package/dist/components/bs-tree-item.d.ts +11 -0
  341. package/dist/components/bs-tree-item.js +1 -0
  342. package/dist/components/bs-tree.d.ts +11 -0
  343. package/dist/components/bs-tree.js +1 -0
  344. package/dist/components/bs-whats-new-entry.js +1 -1
  345. package/dist/components/bs-whats-new.js +1 -1
  346. package/dist/components/{p-GTDI4Ibw.js → p-B32Kl4IB.js} +1 -1
  347. package/dist/components/{p-B128GX8H.js → p-BDnZvjlq.js} +1 -1
  348. package/dist/components/{p-Bqe4waKJ.js → p-BUpnOUIM.js} +1 -1
  349. package/dist/components/p-BcYNrEOB.js +1 -0
  350. package/dist/components/{p-B80vOwH6.js → p-BcbaiZLh.js} +1 -1
  351. package/dist/components/p-Bp3DIxjT.js +1 -0
  352. package/dist/components/p-CH5atin4.js +1 -0
  353. package/dist/components/{p-kDJsWjTN.js → p-CRM1wIX9.js} +1 -1
  354. package/dist/components/{p-Mf1jorXP.js → p-CYzBTzzf.js} +1 -1
  355. package/dist/components/p-CervX0wH.js +1 -0
  356. package/dist/components/{p-ElcsxZSh.js → p-Cpe2k7ZC.js} +1 -1
  357. package/dist/components/{p-BvYkZcOU.js → p-D7AXo5NT.js} +1 -1
  358. package/dist/components/{p-B3l4WpgS.js → p-D8bvv9QQ.js} +1 -1
  359. package/dist/components/{p-ByKcHsj0.js → p-DG9eT5yi.js} +1 -1
  360. package/dist/components/{p-D0KM1R2i.js → p-DMLfXpva.js} +1 -1
  361. package/dist/components/{p-CQjSDdH7.js → p-DYDk73TF.js} +1 -1
  362. package/dist/components/{p-C7RZ6qZC.js → p-DcjgRtSQ.js} +1 -1
  363. package/dist/components/p-Dt4JNhHT.js +1 -0
  364. package/dist/components/{p-CK7fiES5.js → p-DtYTs9Kh.js} +1 -1
  365. package/dist/components/{p-BsbtyRJV.js → p-TAY9S9yG.js} +1 -1
  366. package/dist/components/{p-ByLUtXxO.js → p-w-DkdA4O.js} +1 -1
  367. package/dist/esm/brandsync-wc.js +1 -1
  368. package/dist/esm/bs-accordion-group.entry.js +1 -1
  369. package/dist/esm/bs-ai-disclaimer.entry.js +1 -1
  370. package/dist/esm/bs-ai-greeting.entry.js +1 -1
  371. package/dist/esm/bs-ai-thinking.entry.js +1 -1
  372. package/dist/esm/bs-app-shell.entry.js +1 -1
  373. package/dist/esm/bs-attachment-list.entry.js +1 -1
  374. package/dist/esm/bs-breadcrumbs.entry.js +1 -1
  375. package/dist/esm/bs-button-skeleton.entry.js +1 -1
  376. package/dist/esm/bs-chatbot-feedback.entry.js +1 -1
  377. package/dist/esm/bs-chatbot-header.entry.js +1 -1
  378. package/dist/esm/bs-chatbot-response-action.entry.js +1 -1
  379. package/dist/esm/bs-chatbot-sources-drawer.entry.js +1 -1
  380. package/dist/esm/bs-chatbot-suggestion-button.entry.js +1 -1
  381. package/dist/esm/bs-checkbox-skeleton.entry.js +1 -1
  382. package/dist/esm/bs-citation-preview.entry.js +1 -1
  383. package/dist/esm/bs-command-palette.entry.js +372 -0
  384. package/dist/esm/bs-composer-status-banner.entry.js +1 -1
  385. package/dist/esm/bs-composer.entry.js +1 -1
  386. package/dist/esm/bs-container.entry.js +1 -1
  387. package/dist/esm/bs-data-table.entry.js +2 -2
  388. package/dist/esm/bs-datepicker.entry.js +1 -1
  389. package/dist/esm/bs-divider.entry.js +1 -1
  390. package/dist/esm/bs-empty-state.entry.js +45 -0
  391. package/dist/esm/bs-error-page.entry.js +1 -1
  392. package/dist/esm/bs-file-upload-item.entry.js +1 -1
  393. package/dist/esm/bs-file-upload.entry.js +1 -1
  394. package/dist/esm/bs-global-search.entry.js +324 -0
  395. package/dist/esm/bs-grid.entry.js +2 -2
  396. package/dist/esm/bs-icon-button.entry.js +1 -1
  397. package/dist/esm/bs-icon-tile.entry.js +2 -2
  398. package/dist/esm/bs-inline-tab.entry.js +1 -1
  399. package/dist/esm/bs-input_3.entry.js +4 -4
  400. package/dist/esm/bs-key-caps.entry.js +37 -0
  401. package/dist/esm/bs-key.entry.js +26 -0
  402. package/dist/esm/bs-keyboard-shortcuts.entry.js +110 -0
  403. package/dist/esm/bs-list-item.entry.js +64 -0
  404. package/dist/esm/bs-list.entry.js +101 -0
  405. package/dist/esm/bs-message-list.entry.js +1 -1
  406. package/dist/esm/bs-message.entry.js +1 -1
  407. package/dist/esm/bs-navigation-drawer-item.entry.js +1 -1
  408. package/dist/esm/bs-navigation-drawer.entry.js +2 -2
  409. package/dist/esm/bs-navigation-header.entry.js +1 -1
  410. package/dist/esm/bs-pagination.entry.js +1 -1
  411. package/dist/esm/bs-popover.entry.js +1 -1
  412. package/dist/esm/bs-progress-linear.entry.js +2 -2
  413. package/dist/esm/bs-progress.entry.js +2 -2
  414. package/dist/esm/bs-qr-code.entry.js +1 -1
  415. package/dist/esm/bs-radio.entry.js +1 -1
  416. package/dist/esm/bs-search-item.entry.js +45 -0
  417. package/dist/esm/bs-session-timeout.entry.js +1 -1
  418. package/dist/esm/bs-shortcut-row.entry.js +25 -0
  419. package/dist/esm/bs-skeleton.entry.js +1 -1
  420. package/dist/esm/bs-slider.entry.js +1 -1
  421. package/dist/esm/bs-snackbar.entry.js +1 -1
  422. package/dist/esm/bs-source-link.entry.js +2 -2
  423. package/dist/esm/bs-spinner.entry.js +1 -1
  424. package/dist/esm/bs-split-pane.entry.js +1 -1
  425. package/dist/esm/bs-stack.entry.js +1 -1
  426. package/dist/esm/bs-stepper-step.entry.js +1 -1
  427. package/dist/esm/bs-stepper.entry.js +1 -1
  428. package/dist/esm/bs-switch.entry.js +1 -1
  429. package/dist/esm/bs-tab_3.entry.js +3 -3
  430. package/dist/esm/bs-timepicker.entry.js +2 -2
  431. package/dist/esm/bs-toast.entry.js +1 -1
  432. package/dist/esm/bs-tooltip-trigger.entry.js +1 -1
  433. package/dist/esm/bs-tooltip.entry.js +1 -1
  434. package/dist/esm/bs-tree-item.entry.js +92 -0
  435. package/dist/esm/bs-tree.entry.js +195 -0
  436. package/dist/esm/loader.js +1 -1
  437. package/dist/types/components/bs-command-palette/bs-command-palette.cmp.test.d.ts +1 -0
  438. package/dist/types/components/bs-command-palette/bs-command-palette.d.ts +172 -0
  439. package/dist/types/components/bs-command-palette/bs-command-palette.stories.d.ts +56 -0
  440. package/dist/types/components/bs-empty-state/bs-empty-state.cmp.test.d.ts +1 -0
  441. package/dist/types/components/bs-empty-state/bs-empty-state.d.ts +50 -0
  442. package/dist/types/components/bs-empty-state/bs-empty-state.stories.d.ts +13 -0
  443. package/dist/types/components/bs-global-search/bs-global-search.cmp.test.d.ts +1 -0
  444. package/dist/types/components/bs-global-search/bs-global-search.d.ts +166 -0
  445. package/dist/types/components/bs-global-search/bs-global-search.stories.d.ts +61 -0
  446. package/dist/types/components/bs-key/bs-key.cmp.test.d.ts +1 -0
  447. package/dist/types/components/bs-key/bs-key.d.ts +36 -0
  448. package/dist/types/components/bs-key/bs-key.stories.d.ts +11 -0
  449. package/dist/types/components/bs-key-caps/bs-key-caps.cmp.test.d.ts +1 -0
  450. package/dist/types/components/bs-key-caps/bs-key-caps.d.ts +31 -0
  451. package/dist/types/components/bs-key-caps/bs-key-caps.stories.d.ts +15 -0
  452. package/dist/types/components/bs-keyboard-shortcuts/bs-keyboard-shortcuts.cmp.test.d.ts +1 -0
  453. package/dist/types/components/bs-keyboard-shortcuts/bs-keyboard-shortcuts.d.ts +95 -0
  454. package/dist/types/components/bs-keyboard-shortcuts/bs-keyboard-shortcuts.stories.d.ts +43 -0
  455. package/dist/types/components/bs-list/bs-list.cmp.test.d.ts +1 -0
  456. package/dist/types/components/bs-list/bs-list.d.ts +42 -0
  457. package/dist/types/components/bs-list/bs-list.stories.d.ts +13 -0
  458. package/dist/types/components/bs-list-item/bs-list-item.cmp.test.d.ts +1 -0
  459. package/dist/types/components/bs-list-item/bs-list-item.d.ts +85 -0
  460. package/dist/types/components/bs-list-item/bs-list-item.stories.d.ts +22 -0
  461. package/dist/types/components/bs-search-item/bs-search-item.cmp.test.d.ts +1 -0
  462. package/dist/types/components/bs-search-item/bs-search-item.d.ts +61 -0
  463. package/dist/types/components/bs-search-item/bs-search-item.stories.d.ts +13 -0
  464. package/dist/types/components/bs-shortcut-row/bs-shortcut-row.cmp.test.d.ts +1 -0
  465. package/dist/types/components/bs-shortcut-row/bs-shortcut-row.d.ts +38 -0
  466. package/dist/types/components/bs-shortcut-row/bs-shortcut-row.stories.d.ts +13 -0
  467. package/dist/types/components/bs-tree/bs-tree.cmp.test.d.ts +1 -0
  468. package/dist/types/components/bs-tree/bs-tree.d.ts +53 -0
  469. package/dist/types/components/bs-tree/bs-tree.stories.d.ts +11 -0
  470. package/dist/types/components/bs-tree-item/bs-tree-item.cmp.test.d.ts +1 -0
  471. package/dist/types/components/bs-tree-item/bs-tree-item.d.ts +60 -0
  472. package/dist/types/components/bs-tree-item/bs-tree-item.stories.d.ts +19 -0
  473. package/dist/types/components.d.ts +2700 -199
  474. package/package.json +1 -1
  475. package/reference.d.ts +36 -0
  476. package/reference.json +1076 -47
  477. package/dist/brandsync-wc/p-769c5b4a.entry.js +0 -1
  478. package/dist/brandsync-wc/p-e5f50e93.entry.js +0 -1
  479. package/dist/brandsync-wc/p-e72dd05e.entry.js +0 -1
@@ -21,6 +21,7 @@ import { BsCheckboxSize as BsCheckboxSize1 } from "./components/bs-checkbox/bs-c
21
21
  import { BsChipFilterSize } from "./components/bs-chip/bs-chip-filter/bs-chip-filter";
22
22
  import { BsChipInformativeColor, BsChipInformativeSize } from "./components/bs-chip/bs-chip-informative/bs-chip-informative";
23
23
  import { BsChipInputSize } from "./components/bs-chip/bs-chip-input/bs-chip-input";
24
+ import { BsCommandPaletteInputDetail, BsCommandPaletteSelectDetail, BsCommandPaletteStatus } from "./components/bs-command-palette/bs-command-palette";
24
25
  import { BsComposerState, BsComposerVariant } from "./components/bs-composer/bs-composer";
25
26
  import { BsComposerStatusBannerType } from "./components/bs-composer-status-banner/bs-composer-status-banner";
26
27
  import { BsContainerSize } from "./components/bs-container/bs-container";
@@ -29,12 +30,15 @@ import { BsDataTableColumn, BsDataTableRow } from "./components/bs-data-table/bs
29
30
  import { BsDatepickerChange } from "./components/bs-datepicker/bs-datepicker";
30
31
  import { BsDialogSize } from "./components/bs-dialog/bs-dialog";
31
32
  import { BsDividerInset, BsDividerOrientation, BsDividerVariant } from "./components/bs-divider/bs-divider";
33
+ import { BsIconTileIntent } from "./components/bs-icon-tile/bs-icon-tile";
32
34
  import { BsErrorPageType } from "./components/bs-error-page/bs-error-page";
33
35
  import { BsFileUploadDirection } from "./components/bs-file-upload/bs-file-upload";
34
36
  import { BsFileUploadItemState } from "./components/bs-file-upload-item/bs-file-upload-item";
37
+ import { BsGlobalSearchSelectDetail, BsGlobalSearchStatus } from "./components/bs-global-search/bs-global-search";
35
38
  import { BsGridAlign } from "./components/bs-grid/bs-grid";
36
39
  import { BsIconButtonSize, BsIconButtonVariant } from "./components/bs-button/bs-icon-button/bs-icon-button";
37
- import { BsIconTileIntent, BsIconTileSize } from "./components/bs-icon-tile/bs-icon-tile";
40
+ import { BsIconTileIntent as BsIconTileIntent1, BsIconTileSize } from "./components/bs-icon-tile/bs-icon-tile";
41
+ import { BsShortcutGroup } from "./components/bs-keyboard-shortcuts/bs-keyboard-shortcuts";
38
42
  import { BsLogoBackground, BsLogoVariant } from "./components/bs-logo/bs-logo";
39
43
  import { BsMessageRole, BsMessageStatus } from "./components/bs-message/bs-message";
40
44
  import { BsNavigationHeaderAlignment } from "./components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header";
@@ -79,6 +83,7 @@ export { BsCheckboxSize as BsCheckboxSize1 } from "./components/bs-checkbox/bs-c
79
83
  export { BsChipFilterSize } from "./components/bs-chip/bs-chip-filter/bs-chip-filter";
80
84
  export { BsChipInformativeColor, BsChipInformativeSize } from "./components/bs-chip/bs-chip-informative/bs-chip-informative";
81
85
  export { BsChipInputSize } from "./components/bs-chip/bs-chip-input/bs-chip-input";
86
+ export { BsCommandPaletteInputDetail, BsCommandPaletteSelectDetail, BsCommandPaletteStatus } from "./components/bs-command-palette/bs-command-palette";
82
87
  export { BsComposerState, BsComposerVariant } from "./components/bs-composer/bs-composer";
83
88
  export { BsComposerStatusBannerType } from "./components/bs-composer-status-banner/bs-composer-status-banner";
84
89
  export { BsContainerSize } from "./components/bs-container/bs-container";
@@ -87,12 +92,15 @@ export { BsDataTableColumn, BsDataTableRow } from "./components/bs-data-table/bs
87
92
  export { BsDatepickerChange } from "./components/bs-datepicker/bs-datepicker";
88
93
  export { BsDialogSize } from "./components/bs-dialog/bs-dialog";
89
94
  export { BsDividerInset, BsDividerOrientation, BsDividerVariant } from "./components/bs-divider/bs-divider";
95
+ export { BsIconTileIntent } from "./components/bs-icon-tile/bs-icon-tile";
90
96
  export { BsErrorPageType } from "./components/bs-error-page/bs-error-page";
91
97
  export { BsFileUploadDirection } from "./components/bs-file-upload/bs-file-upload";
92
98
  export { BsFileUploadItemState } from "./components/bs-file-upload-item/bs-file-upload-item";
99
+ export { BsGlobalSearchSelectDetail, BsGlobalSearchStatus } from "./components/bs-global-search/bs-global-search";
93
100
  export { BsGridAlign } from "./components/bs-grid/bs-grid";
94
101
  export { BsIconButtonSize, BsIconButtonVariant } from "./components/bs-button/bs-icon-button/bs-icon-button";
95
- export { BsIconTileIntent, BsIconTileSize } from "./components/bs-icon-tile/bs-icon-tile";
102
+ export { BsIconTileIntent as BsIconTileIntent1, BsIconTileSize } from "./components/bs-icon-tile/bs-icon-tile";
103
+ export { BsShortcutGroup } from "./components/bs-keyboard-shortcuts/bs-keyboard-shortcuts";
96
104
  export { BsLogoBackground, BsLogoVariant } from "./components/bs-logo/bs-logo";
97
105
  export { BsMessageRole, BsMessageStatus } from "./components/bs-message/bs-message";
98
106
  export { BsNavigationHeaderAlignment } from "./components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header";
@@ -1307,6 +1315,168 @@ export namespace Components {
1307
1315
  */
1308
1316
  "sourceName"?: string;
1309
1317
  }
1318
+ /**
1319
+ * A Ctrl+K command palette: a modal with a search field, grouped commands, navigation and records, a
1320
+ * no-results view and a keyboard-hint footer. The data, the filtering, the command registry and the
1321
+ * recent-items storage are all yours: you slot `bs-search-item`s into the sections and set `status`.
1322
+ * Built from a native `<dialog>` (opened with `showModal()`, so focus is trapped, the page behind is inert
1323
+ * and the backdrop is the scrim), `bs-input` (type="search"), `bs-search-item`, `bs-key` (footer hints and
1324
+ * the Esc cap), `bs-chip-informative` (the scope chip) and `bs-spinner` (loading). Slot a `bs-key-caps` with
1325
+ * `slot="trailing"` inside an item to show a command's shortcut.
1326
+ * ## When to use
1327
+ * - An app-wide "do anything" entry point opened with a hotkey: run commands, navigate, open records.
1328
+ * ## When not to use
1329
+ * - A plain search box with a dropdown -- use `bs-global-search`.
1330
+ * - A small list of actions on one control -- use `bs-menu`.
1331
+ * A `>` as the first character of the field switches to commands-only mode (`commandsOnly`, reflected as
1332
+ * `commands-only`). The component filters nothing: listen to `bsInput`, swap the slotted items, set `status`.
1333
+ * Nested (sub-command) palettes are a consumer pattern: swap the slotted commands and set `scopeLabel`.
1334
+ * @prop --bs-command-palette-width - Panel width. Defaults to `640px` (Figma); capped to the viewport.
1335
+ * @prop --bs-command-palette-top - Distance from the top of the viewport. Defaults to `12vh`.
1336
+ * @prop --bs-command-palette-max-height - Max height of the results area. Defaults to `60vh`.
1337
+ * @prop --bs-command-palette-radius - Aliased to `--bs-border-radius-150`.
1338
+ * @prop --bs-command-palette-bg - Panel background. Aliased to `--bs-surface-base`.
1339
+ * @prop --bs-command-palette-shadow - Figma elevation level 4: `0 8px 16px` in `--bs-elevation-higher` (stronger in dark mode).
1340
+ * @prop --bs-command-palette-overlay - Scrim colour. Aliased to `--bs-surface-overlay`.
1341
+ * @prop --bs-command-palette-footer-bg - Aliased to `--bs-surface-container`.
1342
+ * @prop --bs-command-palette-divider-color - Aliased to `--bs-border-default`.
1343
+ * @prop --bs-command-palette-header-border-color - Aliased to `--bs-border-neutral-container`.
1344
+ * @prop --bs-command-palette-header-color - Aliased to `--bs-text-muted`.
1345
+ * @prop --bs-command-palette-hint-color - Aliased to `--bs-text-secondary`.
1346
+ * @prop --bs-command-palette-z-index - Aliased to `--bs-z-index-modal`.
1347
+ */
1348
+ interface BsCommandPalette {
1349
+ /**
1350
+ * @default 'All results'
1351
+ */
1352
+ "allResultsLabel": string;
1353
+ /**
1354
+ * Closes the palette and restores focus.
1355
+ */
1356
+ "close": () => Promise<void>;
1357
+ /**
1358
+ * @default 'Close'
1359
+ */
1360
+ "closeLabel": string;
1361
+ /**
1362
+ * @default 'Commands'
1363
+ */
1364
+ "commandsLabel": string;
1365
+ /**
1366
+ * Derived from `value` (it starts with `>`). Read-only; set `value` instead.
1367
+ * @default false
1368
+ */
1369
+ "commandsOnly": boolean;
1370
+ /**
1371
+ * @default 'Commands only'
1372
+ */
1373
+ "commandsOnlyLabel": string;
1374
+ /**
1375
+ * A suggested correction; the "Did you mean" line shows while it is set.
1376
+ */
1377
+ "didYouMean"?: string;
1378
+ /**
1379
+ * @default 'Did you mean'
1380
+ */
1381
+ "didYouMeanLabel": string;
1382
+ /**
1383
+ * @default 'Check the spelling, or search records instead.'
1384
+ */
1385
+ "emptyDescription": string;
1386
+ /**
1387
+ * No-results view copy. Include the query in `emptyHeading` yourself.
1388
+ * @default 'No commands or records'
1389
+ */
1390
+ "emptyHeading": string;
1391
+ /**
1392
+ * Global shortcut that toggles the palette, e.g. `mod+k` (`mod` is Cmd on Mac, Ctrl elsewhere). Empty = off.
1393
+ * @default ''
1394
+ */
1395
+ "hotkey": string;
1396
+ /**
1397
+ * Keep the palette open after an item is chosen.
1398
+ * @default false
1399
+ */
1400
+ "keepOpenOnSelect": boolean;
1401
+ /**
1402
+ * Accessible name of the dialog.
1403
+ * @default 'Command palette'
1404
+ */
1405
+ "label": string;
1406
+ /**
1407
+ * Accessible name of the results listbox.
1408
+ * @default 'Results'
1409
+ */
1410
+ "listLabel": string;
1411
+ /**
1412
+ * Text of the loading row.
1413
+ * @default 'Loading…'
1414
+ */
1415
+ "loadingLabel": string;
1416
+ /**
1417
+ * Footer hint texts.
1418
+ * @default 'Navigate'
1419
+ */
1420
+ "navigateLabel": string;
1421
+ /**
1422
+ * @default 'Navigation'
1423
+ */
1424
+ "navigationLabel": string;
1425
+ /**
1426
+ * Whether the palette is open.
1427
+ * @default false
1428
+ */
1429
+ "open": boolean;
1430
+ /**
1431
+ * @default 'Open'
1432
+ */
1433
+ "openLabel": string;
1434
+ /**
1435
+ * Placeholder of the field.
1436
+ * @default 'Type a command or search…'
1437
+ */
1438
+ "placeholder": string;
1439
+ /**
1440
+ * Section headers.
1441
+ * @default 'Recent'
1442
+ */
1443
+ "recentLabel": string;
1444
+ /**
1445
+ * @default 'Records'
1446
+ */
1447
+ "recordsLabel": string;
1448
+ /**
1449
+ * Nested scope: shows this text as a chip before the field. Backspace on an empty field emits `bsScopeExit`.
1450
+ */
1451
+ "scopeLabel"?: string;
1452
+ /**
1453
+ * Opens the palette.
1454
+ */
1455
+ "show": () => Promise<void>;
1456
+ /**
1457
+ * Shows the footer of keyboard hints.
1458
+ * @default true
1459
+ */
1460
+ "showFooter": boolean;
1461
+ /**
1462
+ * Which view to show. You choose it; nothing is inferred from `value`. `default` and `results` render the same; they differ for screen readers only.
1463
+ * @default 'default'
1464
+ */
1465
+ "status": BsCommandPaletteStatus;
1466
+ /**
1467
+ * @default 'Suggested'
1468
+ */
1469
+ "suggestedLabel": string;
1470
+ /**
1471
+ * @default 'Try instead'
1472
+ */
1473
+ "tryInsteadLabel": string;
1474
+ /**
1475
+ * The field value. Two-way. A leading `>` means commands-only mode.
1476
+ * @default ''
1477
+ */
1478
+ "value": string;
1479
+ }
1310
1480
  /**
1311
1481
  * A chat composer input for Genie AI-style conversational interfaces: a text field
1312
1482
  * plus an attach button, a mic/voice-recording toggle, and a single primary action button whose
@@ -1850,6 +2020,43 @@ export namespace Components {
1850
2020
  */
1851
2021
  "variant": BsDividerVariant;
1852
2022
  }
2023
+ /**
2024
+ * A centered "nothing to show" block: an icon tile, a heading, a description and an optional action.
2025
+ * Used for empty lists, "no results" and error states inside a panel, card or page section.
2026
+ * Built from `bs-icon-tile` (and, in your `action` slot, usually a `bs-button`).
2027
+ * The component has no role. Live regions belong on a wrapper you control (e.g. `role="status"` on the
2028
+ * element that stays in the DOM while this block appears and disappears).
2029
+ * ## When to use
2030
+ * - A list, table or search result that has nothing to show, or failed to load.
2031
+ * ## When not to use
2032
+ * - A full-page error with a status code -- use `bs-error-page`.
2033
+ * - A transient message -- use `bs-toast` or `bs-snackbar`.
2034
+ * @prop --bs-empty-state-padding-y - Vertical padding. Aliased to `--bs-spacing-700` (56px).
2035
+ * @prop --bs-empty-state-padding-x - Horizontal padding. Aliased to `--bs-spacing-300` (24px).
2036
+ * @prop --bs-empty-state-gap - Gap between tile, heading, description and action. Aliased to `--bs-spacing-150`.
2037
+ * @prop --bs-empty-state-heading-color - Aliased to `--bs-text-default`.
2038
+ * @prop --bs-empty-state-description-color - Aliased to `--bs-text-secondary`.
2039
+ */
2040
+ interface BsEmptyState {
2041
+ /**
2042
+ * The description text. The default slot overrides it.
2043
+ */
2044
+ "description"?: string;
2045
+ /**
2046
+ * The heading text.
2047
+ */
2048
+ "heading"?: string;
2049
+ /**
2050
+ * Heading level, 2 to 6 (renders `h2`..`h6`). Pick the one that fits the page outline.
2051
+ * @default 3
2052
+ */
2053
+ "headingLevel": 2 | 3 | 4 | 5 | 6;
2054
+ /**
2055
+ * Colour and default glyph of the icon tile. Use `error` for failures.
2056
+ * @default 'default'
2057
+ */
2058
+ "intent": BsIconTileIntent;
2059
+ }
1853
2060
  /**
1854
2061
  * A full-block page for when the user can't get to what they asked for: page not found (404), a server
1855
2062
  * error (500), no access (403), planned maintenance, or no internet connection. Matches the Figma
@@ -2005,6 +2212,161 @@ export namespace Components {
2005
2212
  */
2006
2213
  "thumbnailSrc"?: string;
2007
2214
  }
2215
+ /**
2216
+ * A global search combobox: a search field with a dropdown panel of suggestions, results, an empty state
2217
+ * or an error state, plus a keyboard-hint footer. The data, the filtering and the recent-search storage
2218
+ * are all yours: you slot `bs-search-item`s into the sections and tell the component which `status` to show.
2219
+ * Built from `bs-input` (type="search"), `bs-search-item`, `bs-empty-state` (and so `bs-icon-tile`),
2220
+ * `bs-button` and `bs-key` (the footer keycaps).
2221
+ * ## When to use
2222
+ * - An app-wide "find anything" field with recent searches, jump-to shortcuts and grouped results.
2223
+ * ## When not to use
2224
+ * - Filtering the list or table that is already on screen -- use `bs-input type="search"`.
2225
+ * - A list of commands or actions -- use `bs-menu`.
2226
+ * - The complete result set -- link to a full search results page ("See all results").
2227
+ * Put `bs-search-item` children in the light DOM with `slot="recent"`, `slot="jump-to"`,
2228
+ * `slot="top-matches"` or `slot="search-in"`. A section (and its header) is only rendered when its slot has
2229
+ * content. Up/Down arrows move a highlight through the visible items; focus never leaves the field.
2230
+ * Known limit: the items are in your light DOM and the combobox in this shadow root, so
2231
+ * `aria-activedescendant` (an id reference) does not resolve across that boundary in every browser; the
2232
+ * highlighted option also gets `aria-selected="true"`.
2233
+ * @prop --bs-global-search-width - Field and panel width. Defaults to `480px` (Figma); capped at 100%.
2234
+ * @prop --bs-global-search-panel-radius - Aliased to `--bs-border-radius-100`.
2235
+ * @prop --bs-global-search-panel-padding - Aliased to `--bs-spacing-100`.
2236
+ * @prop --bs-global-search-gap - Gap between sections, and between the field and the panel. Aliased to `--bs-spacing-100`.
2237
+ * @prop --bs-global-search-panel-bg - Panel background. Aliased to `--bs-surface-base`.
2238
+ * @prop --bs-global-search-shadow - Panel shadow: Figma elevation level 3 (`0 4px 8px` in `--bs-elevation-high`, 10% black in light mode and 30% in dark mode).
2239
+ * @prop --bs-global-search-z-index - Panel stacking. Aliased to `--bs-z-index-dropdown`.
2240
+ * @prop --bs-global-search-divider-color - Footer divider. Aliased to `--bs-border-default`.
2241
+ * @prop --bs-global-search-header-border-color - Section header underline. Aliased to `--bs-border-neutral-container`.
2242
+ * @prop --bs-global-search-header-color - Section header text. Aliased to `--bs-text-muted`.
2243
+ * @prop --bs-global-search-hint-color - Footer hint text. Aliased to `--bs-text-secondary`.
2244
+ */
2245
+ interface BsGlobalSearch {
2246
+ /**
2247
+ * Text of the footer button that clears recent searches.
2248
+ * @default 'Clear recent'
2249
+ */
2250
+ "clearRecentLabel": string;
2251
+ /**
2252
+ * Text of the empty state's action.
2253
+ * @default 'Clear search'
2254
+ */
2255
+ "clearSearchLabel": string;
2256
+ /**
2257
+ * Footer hint text after the Esc key.
2258
+ * @default 'Close'
2259
+ */
2260
+ "closeLabel": string;
2261
+ /**
2262
+ * Disables the field; the panel cannot open.
2263
+ * @default false
2264
+ */
2265
+ "disabled": boolean;
2266
+ /**
2267
+ * Description of the built-in empty state.
2268
+ * @default 'Try a different search.'
2269
+ */
2270
+ "emptyDescription": string;
2271
+ /**
2272
+ * Heading of the built-in empty state.
2273
+ * @default 'No results'
2274
+ */
2275
+ "emptyHeading": string;
2276
+ /**
2277
+ * Description of the built-in error state.
2278
+ * @default 'We couldn’t reach the server. Your query is kept — try again in a moment.'
2279
+ */
2280
+ "errorDescription": string;
2281
+ /**
2282
+ * Heading of the built-in error state.
2283
+ * @default 'Search isn’t available right now'
2284
+ */
2285
+ "errorHeading": string;
2286
+ /**
2287
+ * Footer hint text after the Enter key (results view).
2288
+ * @default 'Full results'
2289
+ */
2290
+ "fullResultsLabel": string;
2291
+ /**
2292
+ * Header of the `jump-to` section.
2293
+ * @default 'Jump to'
2294
+ */
2295
+ "jumpToLabel": string;
2296
+ /**
2297
+ * Accessible name of the search field. Falls back to the placeholder. `bs-input` has no aria-label prop, so this names the combobox wrapper.
2298
+ */
2299
+ "label"?: string;
2300
+ /**
2301
+ * Accessible name of the suggestions listbox.
2302
+ * @default 'Search suggestions'
2303
+ */
2304
+ "listLabel": string;
2305
+ /**
2306
+ * Footer hint text after the arrow keys.
2307
+ * @default 'Navigate'
2308
+ */
2309
+ "navigateLabel": string;
2310
+ /**
2311
+ * Whether the dropdown panel is open. Opens on focus, click and typing; closes on Escape, outside click and selection.
2312
+ * @default false
2313
+ */
2314
+ "open": boolean;
2315
+ /**
2316
+ * Placeholder of the field (also its accessible name unless `label` is set).
2317
+ * @default 'Search customers, orders, products…'
2318
+ */
2319
+ "placeholder": string;
2320
+ /**
2321
+ * Header of the `recent` section.
2322
+ * @default 'Recent searches'
2323
+ */
2324
+ "recentLabel": string;
2325
+ /**
2326
+ * Text of the error state's action.
2327
+ * @default 'Try again'
2328
+ */
2329
+ "retryLabel": string;
2330
+ /**
2331
+ * Header of the `search-in` section.
2332
+ * @default 'Search in'
2333
+ */
2334
+ "searchInLabel": string;
2335
+ /**
2336
+ * Footer hint text after the Enter key (default view).
2337
+ * @default 'Search'
2338
+ */
2339
+ "searchLabel": string;
2340
+ /**
2341
+ * Text of the footer button of the results view, when `totalResults` is not set.
2342
+ * @default 'See all results'
2343
+ */
2344
+ "seeAllLabel": string;
2345
+ /**
2346
+ * Shows the footer (hints and the Clear recent / See all button) for the `default` and `results` views.
2347
+ * @default true
2348
+ */
2349
+ "showFooter": boolean;
2350
+ /**
2351
+ * Which view the panel shows. You choose it; nothing is inferred from `value`.
2352
+ * @default 'default'
2353
+ */
2354
+ "status": BsGlobalSearchStatus;
2355
+ /**
2356
+ * Header of the `top-matches` section.
2357
+ * @default 'Top matches'
2358
+ */
2359
+ "topMatchesLabel": string;
2360
+ /**
2361
+ * Total number of results (status `results`): shown as "See all {n} results" and announced to screen readers.
2362
+ */
2363
+ "totalResults"?: number;
2364
+ /**
2365
+ * The query. Two-way with the field.
2366
+ * @default ''
2367
+ */
2368
+ "value": string;
2369
+ }
2008
2370
  /**
2009
2371
  * A CSS grid layout wrapper. Children are placed in equal-width columns with a token-based gap.
2010
2372
  * `columns` takes either a number (`"3"` becomes `repeat(3, minmax(0, 1fr))`) or any raw
@@ -2116,7 +2478,7 @@ export namespace Components {
2116
2478
  * Colour and default glyph. `brand` uses the brand colours; `information` the info palette.
2117
2479
  * @default 'default'
2118
2480
  */
2119
- "intent": BsIconTileIntent;
2481
+ "intent": BsIconTileIntent1;
2120
2482
  /**
2121
2483
  * Accessible name. When set, the tile is exposed as an image with this name; when empty it is decorative and hidden from assistive tech.
2122
2484
  */
@@ -2310,107 +2672,371 @@ export namespace Components {
2310
2672
  "value": string;
2311
2673
  }
2312
2674
  /**
2313
- * The BrandSync brand mark, as its own standalone component -- shared by `bs-navigation-header`
2314
- * and `bs-navigation-drawer`, which used to each render their own duplicated copy of this SVG
2315
- * (the drawer's collapsed state even faked an icon-only look by clipping the full wordmark asset
2316
- * down to a narrowed box, rather than using a real icon-only asset).
2675
+ * One key of a keyboard shortcut, e.g. `Ctrl`, `K` or `Esc` -- rendered as a `<kbd>` keycap.
2676
+ * Shows a text label, or an icon (e.g. a return arrow) via the `icon` slot.
2317
2677
  * ## When to use
2318
- * - Anywhere the BrandSync logo/icon needs to render: a navigation header, a nav drawer, etc.
2678
+ * - Showing a keyboard shortcut hint next to a control or inside a search field.
2679
+ * - Alone for a single key, or as the children of `bs-key-caps` for a multi-key shortcut.
2319
2680
  * ## When not to use
2320
- * - The Genie AI chat panel's own brand mark -- that's a different logo (`bs-chatbot-header`'s
2321
- * own inline Genie asset), not this one.
2322
- * `variant` mirrors Figma's "Logo" component set (node 10909:30421) `Device` property
2323
- * ("Desktop" / "Tab and mobile"), which was originally meant to distinguish the full lockup from
2324
- * the icon-only mark at different responsive breakpoints -- renamed here to
2325
- * `variant: 'full' | 'mark'` since that's what it actually controls (how much of the logo
2326
- * renders), not literally a device/breakpoint switch.
2327
- * `variant="custom"` is not a Figma variant at all -- it's an escape hatch for a consuming app
2328
- * that needs to show a DIFFERENT product's logo in the same slot (e.g. a white-labeled deployment,
2329
- * or a logo fetched at runtime from a service like brand.dev), via `src`/`alt`, instead of the
2330
- * built-in BrandSync assets. This component deliberately does NOT fetch that image itself --
2331
- * network calls, loading/error states, and caching are the consuming app's responsibility, same as
2332
- * every other component in this library (e.g. `bs-attachment` takes `imageSrc` rather than fetching
2333
- * an image on its own). `background` has no effect on `variant="custom"` -- a consumer's own image
2334
- * is already designed for whatever surface it's placed on.
2681
+ * - As a button or any clickable control -- a key is a static hint, not interactive.
2682
+ * @prop --bs-key-bg - Cap background. Aliased to `--bs-surface-base`.
2683
+ * @prop --bs-key-border-color - Cap border colour. Aliased to `--bs-border-default`.
2684
+ * @prop --bs-key-radius - Cap corner radius. Aliased to `--bs-border-radius-50`.
2685
+ * @prop --bs-key-padding-x - Horizontal padding. Aliased to `--bs-spacing-75`.
2686
+ * @prop --bs-key-padding-y - Vertical padding. Aliased to `--bs-spacing-50`.
2687
+ * @prop --bs-key-min-width - Smallest cap width, so single characters keep a keycap shape. Defaults to `25px` (Figma).
2688
+ * @prop --bs-key-color - Label colour. Aliased to `--bs-text-secondary`.
2689
+ * @prop --bs-key-font-size - Label size. Aliased to `--bs-font-size-xs` (12px).
2690
+ * @prop --bs-key-icon-size - Icon size. Defaults to `16px` (Figma).
2335
2691
  */
2336
- interface BsLogo {
2337
- /**
2338
- * `variant="custom"` only: accessible alt text for the image -- a product logo is meaningful content (whose brand is this?), not decorative, so set this to something real (e.g. the product/company name). Falls back to `alt=""` (marking the image decorative to assistive tech) when unset, rather than omitting the `alt` attribute entirely -- an `<img>` with no `alt` attribute at all is a harder accessibility failure than one explicitly marked decorative, but an empty fallback is still worse than a real name, so don't rely on it. Ignored for `full`/`mark` (those already carry their own fixed `aria-label="BrandSync"`).
2339
- * @default null
2340
- */
2341
- "alt": string | null;
2342
- /**
2343
- * Which pre-built asset to use for `variant="full"` -- Figma ships a genuinely separate, differently-drawn dark-background asset (every wordmark path filled solid white, and the icon's outer shape a single solid-white path instead of the light version's two-path white-fill-plus-border-ring), not a CSS currentColor swap of identical paths. `"auto"` (default) renders both assets and lets CSS pick one via `--bs-logo-asset-light-display`/`--bs-logo-asset-dark-display` (defined in `src/global/base.css`, flipped by the same `[data-theme="dark"]` attribute every other `--bs-*` token already reacts to) -- so the logo just follows the ambient theme with no wiring needed, the same way a consuming app's own dark mode already re-themes every other part of this library via ordinary CSS custom property inheritance. Set `"light"`/`"dark"` explicitly to pin one regardless of the ambient theme -- e.g. a dark sidebar that isn't otherwise dark-themed. Has no effect on `variant="mark"`: Figma's component set only has one real designed instance of the icon-only mark (`Device="Tab and mobile"`, `Background="Default"`) -- there's no separate dark version of it, so the mark renders identically regardless of this prop.
2344
- * @default 'auto'
2345
- */
2346
- "background": BsLogoBackground;
2347
- /**
2348
- * `variant="custom"` only: the image URL to render (e.g. a URL your app already fetched from a logo API). Ignored for `full`/`mark`.
2349
- * @default null
2350
- */
2351
- "src": string | null;
2692
+ interface BsKey {
2352
2693
  /**
2353
- * How much of the logo to render. `full` is the icon + "EG BrandSync" wordmark (190.977x44 natural size); `mark` is just the icon (44x44 natural size), no wordmark; `custom` renders a consumer-supplied image via `src`/`alt` instead of a built-in BrandSync asset -- see the class doc above.
2354
- * @default 'full'
2694
+ * The key's text, e.g. `Ctrl`. The default slot overrides it.
2355
2695
  */
2356
- "variant": BsLogoVariant;
2357
- }
2358
- /**
2359
- * A generic dropdown/popup menu container: a rounded, elevated list of items (typically
2360
- * `bs-menu-item` elements).
2361
- * ## When to use
2362
- * - A popup list of actions/options triggered by another control (e.g. a "more options" kebab
2363
- * button), such as `bs-chatbot-response-action`'s `menu` slot.
2364
- * ## When not to use
2365
- * - A persistent, always-visible list of options -- this component is purpose-built as a popup
2366
- * surface (rounded corners, elevation shadow), not a plain list.
2367
- * @prop --bs-menu-bg - Background of the menu box. Aliased to `--bs-surface-raised`.
2368
- * @prop --bs-menu-radius - Corner radius of the menu box. Aliased to `--bs-border-radius-100`.
2369
- * @prop --bs-menu-padding-y - Top/bottom padding of the menu box. Aliased to `--bs-spacing-50`.
2370
- * @prop --bs-menu-gap - Gap between slotted items. Aliased to `--bs-spacing-50`.
2371
- * @prop --bs-menu-shadow - Elevation shadow of the menu box. Aliased to `--bs-shadow-sm`.
2372
- */
2373
- interface BsMenu {
2696
+ "label"?: string;
2374
2697
  }
2375
2698
  /**
2376
- * A single selectable row inside a `bs-menu`: an optional icon plus a text label, rendered as a
2377
- * real `<button>` for correct keyboard/click semantics.
2699
+ * A keyboard shortcut of one to four keys joined by "+", e.g. `Ctrl + K`. Give it a `keys` string
2700
+ * (`"Ctrl+Shift+K"`) or array (`['Ctrl', '+']` for a literal plus key), or slot your own `bs-key`
2701
+ * elements -- for example when a key is an icon.
2378
2702
  * ## When to use
2379
- * - As a child of `bs-menu`, one per selectable action/option.
2703
+ * - A shortcut hint beside a menu item, button or inside a search field.
2380
2704
  * ## When not to use
2381
- * - Outside of `bs-menu` -- this component's sizing/hover treatment is designed to sit inside the
2382
- * menu's rounded, padded list box.
2383
- * @prop --bs-menu-item-radius - Corner radius of the row. Aliased to `--bs-border-radius-100`.
2384
- * @prop --bs-menu-item-padding-y - Top/bottom padding. Aliased to `--bs-spacing-100`.
2385
- * @prop --bs-menu-item-padding-x - Left/right padding. Aliased to `--bs-spacing-150`.
2386
- * @prop --bs-menu-item-gap - Gap between icon and label. Aliased to `--bs-spacing-100`.
2387
- * @prop --bs-menu-item-hover - Background on hover. Aliased to `--bs-color-neutral-container-hover`.
2388
- * @prop --bs-menu-item-pressed - Background when pressed. Aliased to `--bs-color-neutral-container-pressed`.
2389
- * @prop --bs-menu-item-disabled-bg - Background when `disabled` is set. Aliased to `--bs-surface-action-disabled`.
2390
- * @prop --bs-menu-item-icon-color - Icon color. Aliased to `--bs-icon-default`.
2391
- * @prop --bs-menu-item-icon-color-disabled - Icon color when `disabled` is set. Aliased to `--bs-icon-disabled`.
2392
- * @prop --bs-menu-item-color - Label text color. Aliased to `--bs-text-muted`.
2393
- * @prop --bs-menu-item-color-disabled - Label text color when `disabled` is set. Aliased to `--bs-text-on-disabled`.
2394
- * @prop --bs-menu-item-font-size - Aliased to `--bs-font-size-md`.
2395
- * @prop --bs-menu-item-line-height - Aliased to `--bs-line-height-body-md`.
2705
+ * - Instructions that need prose ("press Enter to submit") -- write a sentence and use a single `bs-key` inline.
2706
+ * - Anything interactive -- keys are static hints.
2707
+ * @prop --bs-key-caps-gap - Gap between keys and separators. Aliased to `--bs-spacing-100`.
2708
+ * @prop --bs-key-caps-separator-color - Colour of the "+" separators. Aliased to `--bs-text-muted`.
2709
+ * @prop --bs-key-caps-disabled-opacity - Opacity of the whole shortcut while `disabled`. Defaults to `0.38` (Figma).
2396
2710
  */
2397
- interface BsMenuItem {
2711
+ interface BsKeyCaps {
2398
2712
  /**
2399
- * Disables the item: no hover/pressed/focus styling, no pointer cursor, not reachable by keyboard tabbing, and clicking it does not emit `bsSelect`.
2713
+ * Dims the whole shortcut and marks it `aria-disabled`.
2400
2714
  * @default false
2401
2715
  */
2402
2716
  "disabled": boolean;
2717
+ /**
2718
+ * The keys as text. A string is split on `+` (`"Ctrl+K"`); use an array to include a literal plus key. Ignored when `bs-key` elements are slotted instead. Figma defines one to four keys.
2719
+ */
2720
+ "keys"?: string | string[];
2721
+ /**
2722
+ * Accessible name of the shortcut, e.g. "Control plus K". Defaults to the keys joined with " plus ".
2723
+ */
2724
+ "label"?: string;
2403
2725
  }
2404
2726
  /**
2405
- * A single chat message bubble. User messages align to the end with a primary-tinted bubble;
2406
- * assistant messages align to the start on a neutral bubble. The consumer renders the content
2407
- * (e.g. markdown) into the default slot.
2408
- * Composed from: `bs-card` (the bubble surface).
2727
+ * A searchable reference panel of keyboard shortcuts: heading and close button, a search field, an
2728
+ * optional single-key on/off switch, shortcut groups in two columns and a footer hint. It is a
2729
+ * surface, not a modal -- place it inside `bs-dialog` or a popover.
2730
+ * Built from `bs-card`, `bs-icon-button`, `bs-input`, `bs-switch`, `bs-shortcut-row` (and so
2731
+ * `bs-key-caps` / `bs-key`).
2409
2732
  * ## When to use
2410
- * - One entry per turn in a chat transcript, usually inside `bs-message-list`.
2733
+ * - A "press ? to see shortcuts" help overlay for an app with many shortcuts.
2411
2734
  * ## When not to use
2412
- * - For transient notices or system banners -- use `bs-toast` / `bs-composer-status-banner`.
2413
- * @prop --bs-message-gap - Gap between avatar and message column. Aliased to `--bs-spacing-100`.
2735
+ * - A long-form help page or documentation -- link to it instead.
2736
+ * - A list of commands the user can run from it -- use `bs-menu`.
2737
+ * @prop --bs-keyboard-shortcuts-width - Panel width and min-width. Defaults to `720px` (Figma).
2738
+ * @prop --bs-keyboard-shortcuts-bg - Panel background. Aliased to `--bs-surface-base`.
2739
+ * @prop --bs-keyboard-shortcuts-radius - Aliased to `--bs-border-radius-150`.
2740
+ * @prop --bs-keyboard-shortcuts-padding - Aliased to `--bs-spacing-200`.
2741
+ * @prop --bs-keyboard-shortcuts-gap - Gap between sections. Aliased to `--bs-spacing-200`.
2742
+ * @prop --bs-keyboard-shortcuts-shadow - Figma elevation level 4 (`0 8px 8px` in `--bs-elevation-higher`, 12% black in light mode and 25% in dark mode).
2743
+ * @prop --bs-keyboard-shortcuts-column-gap - Gap between the two columns. Aliased to `--bs-spacing-600`.
2744
+ * @prop --bs-keyboard-shortcuts-color - Main text colour. Aliased to `--bs-text-default`.
2745
+ * @prop --bs-keyboard-shortcuts-color-secondary - Titles, captions, footer. Aliased to `--bs-text-secondary`.
2746
+ */
2747
+ interface BsKeyboardShortcuts {
2748
+ /**
2749
+ * Accessible name of the close button.
2750
+ * @default 'Close'
2751
+ */
2752
+ "closeLabel": string;
2753
+ /**
2754
+ * The key shown in the footer hint.
2755
+ * @default '?'
2756
+ */
2757
+ "footerKey": string;
2758
+ /**
2759
+ * Text before the footer key.
2760
+ * @default 'Press'
2761
+ */
2762
+ "footerPrefix": string;
2763
+ /**
2764
+ * Footer text after the key.
2765
+ * @default 'anywhere to open this list. On Mac: Cmd instead of Ctrl.'
2766
+ */
2767
+ "footerText": string;
2768
+ /**
2769
+ * Property only: the shortcut groups.
2770
+ * @default []
2771
+ */
2772
+ "groups": BsShortcutGroup[];
2773
+ /**
2774
+ * Heading text. The `heading` slot overrides it.
2775
+ * @default 'Keyboard shortcuts'
2776
+ */
2777
+ "heading": string;
2778
+ /**
2779
+ * Line shown when the query matches nothing.
2780
+ * @default 'No shortcuts match'
2781
+ */
2782
+ "noResultsText": string;
2783
+ /**
2784
+ * Current search text. Filters by action or keys text, case-insensitively.
2785
+ * @default ''
2786
+ */
2787
+ "query": string;
2788
+ /**
2789
+ * Search field placeholder (also its accessible name: `bs-input` has no aria-label prop).
2790
+ * @default 'Search for an action'
2791
+ */
2792
+ "searchPlaceholder": string;
2793
+ /**
2794
+ * Shows the footer hint.
2795
+ * @default true
2796
+ */
2797
+ "showFooterHint": boolean;
2798
+ /**
2799
+ * Shows the single-key switch row.
2800
+ * @default true
2801
+ */
2802
+ "showSingleKeySwitch": boolean;
2803
+ /**
2804
+ * Switch caption.
2805
+ * @default 'Turn off if they clash with a screen reader or other tools.'
2806
+ */
2807
+ "singleKeyDescription": string;
2808
+ /**
2809
+ * Whether single-key shortcuts are on. When off they are shown dimmed.
2810
+ * @default true
2811
+ */
2812
+ "singleKeyEnabled": boolean;
2813
+ /**
2814
+ * Switch title.
2815
+ * @default 'Single-key shortcuts'
2816
+ */
2817
+ "singleKeyLabel": string;
2818
+ }
2819
+ /**
2820
+ * A vertical list of `bs-list-item` rows, optionally single-select.
2821
+ * ## When to use
2822
+ * - Records, people, files or options shown as rows with leading media and descriptions.
2823
+ * - `selectable` for a single-choice list (e.g. a conversation list next to a detail pane).
2824
+ * ## When not to use
2825
+ * - A popup list of actions -- use `bs-menu`.
2826
+ * - Navigation between app sections -- use `bs-navigation-drawer`.
2827
+ * - Multi-column, sortable or paged data -- use `bs-data-table`.
2828
+ * Built from `bs-list-item` children (light DOM; the list never moves nodes).
2829
+ * @prop --bs-list-gap - Gap between rows. Defaults to `0`.
2830
+ * @prop --bs-list-divider-color - Divider colour when `dividers` is set. Aliased to `--bs-border-neutral-container`.
2831
+ */
2832
+ interface BsList {
2833
+ /**
2834
+ * Accessible name of the list.
2835
+ * @default null
2836
+ */
2837
+ "ariaLabel": string | null;
2838
+ /**
2839
+ * Draws a 1px separator between rows.
2840
+ * @default false
2841
+ */
2842
+ "dividers": boolean;
2843
+ /**
2844
+ * Single-selection mode: role="listbox", rows are `option`s with roving tabindex.
2845
+ * @default false
2846
+ */
2847
+ "selectable": boolean;
2848
+ /**
2849
+ * `value` of the selected item (selectable mode).
2850
+ * @default null
2851
+ */
2852
+ "value": string | null;
2853
+ }
2854
+ /**
2855
+ * A single row of a list: optional leading media (avatar, icon, image), a label, a description and
2856
+ * optional support text, and an optional trailing caret or custom trailing content.
2857
+ * ## When to use
2858
+ * - As a child of `bs-list`, one per record, person, file or option.
2859
+ * - Standalone as a plain information row (non-interactive), or with `interactive` as a button-like row.
2860
+ * ## When not to use
2861
+ * - A popup list of actions -- use `bs-menu` / `bs-menu-item`.
2862
+ * - App navigation with an active route -- use `bs-navigation-drawer-item`.
2863
+ * - Tabular data with columns, sorting or paging -- use `bs-data-table`.
2864
+ * Composed from: leading media (`bs-avatar`) and trailing controls (`bs-icon-button`) are supplied by the
2865
+ * consumer through the `leading` and `trailing` slots; the row itself only reserves layout. The default
2866
+ * trailing caret is inline SVG.
2867
+ * Roles are driven by the parent `bs-list` (via `selectionRole`). Standalone, the row has no role
2868
+ * (`listitem` is only valid inside a list) unless `interactive` is set, which makes it a focusable
2869
+ * `role="button"`.
2870
+ * @prop --bs-list-item-min-height - Minimum row height. Aliased to `--bs-spacing-1000`.
2871
+ * @prop --bs-list-item-padding-y - Aliased to `--bs-spacing-150`.
2872
+ * @prop --bs-list-item-padding-x - Aliased to `--bs-spacing-200`.
2873
+ * @prop --bs-list-item-gap - Gap between leading, content and trailing. Aliased to `--bs-spacing-200`.
2874
+ * @prop --bs-list-item-content-gap - Gap between text lines. Aliased to `--bs-spacing-25`.
2875
+ * @prop --bs-list-item-radius - Aliased to `--bs-border-radius-100`.
2876
+ * @prop --bs-list-item-bg - Enabled background. `transparent`.
2877
+ * @prop --bs-list-item-bg-hover - Aliased to `--bs-surface-hover`.
2878
+ * @prop --bs-list-item-bg-pressed - Aliased to `--bs-surface-pressed`.
2879
+ * @prop --bs-list-item-bg-focus - Aliased to `--bs-surface-focus`.
2880
+ * @prop --bs-list-item-bg-selected - Aliased to `--bs-surface-selected`.
2881
+ * @prop --bs-list-item-bg-selected-hover - Aliased to `--bs-surface-selected-hover`.
2882
+ * @prop --bs-list-item-bg-selected-pressed - Aliased to `--bs-surface-selected-pressed`.
2883
+ * @prop --bs-list-item-bg-selected-focus - Aliased to `--bs-surface-selected-focus`.
2884
+ * @prop --bs-list-item-bg-disabled - Aliased to `--bs-surface-action-disabled`.
2885
+ * @prop --bs-list-item-color - Text colour. Aliased to `--bs-text-default`.
2886
+ * @prop --bs-list-item-color-disabled - Aliased to `--bs-text-on-disabled`.
2887
+ * @prop --bs-list-item-focus-ring - Focus ring colour. Aliased to `--bs-border-neutral-focus`.
2888
+ * @prop --bs-list-item-image-width - Leading image width. 72px.
2889
+ * @prop --bs-list-item-image-height - Leading image height. 56px.
2890
+ */
2891
+ interface BsListItem {
2892
+ /**
2893
+ * Second text line (the "paragraph").
2894
+ * @default null
2895
+ */
2896
+ "description": string | null;
2897
+ /**
2898
+ * Disables the row: dimmed, not focusable, no click event.
2899
+ * @default false
2900
+ */
2901
+ "disabled": boolean;
2902
+ /**
2903
+ * Makes a standalone row a focusable `role="button"` that emits `bsItemClick`.
2904
+ * @default false
2905
+ */
2906
+ "interactive": boolean;
2907
+ /**
2908
+ * First text line (semibold).
2909
+ * @default null
2910
+ */
2911
+ "label": string | null;
2912
+ /**
2913
+ * Marks the row as selected. Managed by the parent `bs-list` when it is `selectable`.
2914
+ * @default false
2915
+ */
2916
+ "selected": boolean;
2917
+ /**
2918
+ * Set by the parent `bs-list`: `listitem` (plain list) or `option` (selectable list). Do not set by hand.
2919
+ * @default null
2920
+ */
2921
+ "selectionRole": 'listitem' | 'option' | null;
2922
+ /**
2923
+ * Shows a trailing caret (unless the `trailing` slot has content).
2924
+ * @default false
2925
+ */
2926
+ "showArrow": boolean;
2927
+ /**
2928
+ * Optional third text line.
2929
+ * @default null
2930
+ */
2931
+ "supportText": string | null;
2932
+ /**
2933
+ * Identifies the item; emitted by `bsItemClick` and matched against `bs-list`'s `value`.
2934
+ * @default null
2935
+ */
2936
+ "value": string | null;
2937
+ }
2938
+ /**
2939
+ * The BrandSync brand mark, as its own standalone component -- shared by `bs-navigation-header`
2940
+ * and `bs-navigation-drawer`, which used to each render their own duplicated copy of this SVG
2941
+ * (the drawer's collapsed state even faked an icon-only look by clipping the full wordmark asset
2942
+ * down to a narrowed box, rather than using a real icon-only asset).
2943
+ * ## When to use
2944
+ * - Anywhere the BrandSync logo/icon needs to render: a navigation header, a nav drawer, etc.
2945
+ * ## When not to use
2946
+ * - The Genie AI chat panel's own brand mark -- that's a different logo (`bs-chatbot-header`'s
2947
+ * own inline Genie asset), not this one.
2948
+ * `variant` mirrors Figma's "Logo" component set (node 10909:30421) `Device` property
2949
+ * ("Desktop" / "Tab and mobile"), which was originally meant to distinguish the full lockup from
2950
+ * the icon-only mark at different responsive breakpoints -- renamed here to
2951
+ * `variant: 'full' | 'mark'` since that's what it actually controls (how much of the logo
2952
+ * renders), not literally a device/breakpoint switch.
2953
+ * `variant="custom"` is not a Figma variant at all -- it's an escape hatch for a consuming app
2954
+ * that needs to show a DIFFERENT product's logo in the same slot (e.g. a white-labeled deployment,
2955
+ * or a logo fetched at runtime from a service like brand.dev), via `src`/`alt`, instead of the
2956
+ * built-in BrandSync assets. This component deliberately does NOT fetch that image itself --
2957
+ * network calls, loading/error states, and caching are the consuming app's responsibility, same as
2958
+ * every other component in this library (e.g. `bs-attachment` takes `imageSrc` rather than fetching
2959
+ * an image on its own). `background` has no effect on `variant="custom"` -- a consumer's own image
2960
+ * is already designed for whatever surface it's placed on.
2961
+ */
2962
+ interface BsLogo {
2963
+ /**
2964
+ * `variant="custom"` only: accessible alt text for the image -- a product logo is meaningful content (whose brand is this?), not decorative, so set this to something real (e.g. the product/company name). Falls back to `alt=""` (marking the image decorative to assistive tech) when unset, rather than omitting the `alt` attribute entirely -- an `<img>` with no `alt` attribute at all is a harder accessibility failure than one explicitly marked decorative, but an empty fallback is still worse than a real name, so don't rely on it. Ignored for `full`/`mark` (those already carry their own fixed `aria-label="BrandSync"`).
2965
+ * @default null
2966
+ */
2967
+ "alt": string | null;
2968
+ /**
2969
+ * Which pre-built asset to use for `variant="full"` -- Figma ships a genuinely separate, differently-drawn dark-background asset (every wordmark path filled solid white, and the icon's outer shape a single solid-white path instead of the light version's two-path white-fill-plus-border-ring), not a CSS currentColor swap of identical paths. `"auto"` (default) renders both assets and lets CSS pick one via `--bs-logo-asset-light-display`/`--bs-logo-asset-dark-display` (defined in `src/global/base.css`, flipped by the same `[data-theme="dark"]` attribute every other `--bs-*` token already reacts to) -- so the logo just follows the ambient theme with no wiring needed, the same way a consuming app's own dark mode already re-themes every other part of this library via ordinary CSS custom property inheritance. Set `"light"`/`"dark"` explicitly to pin one regardless of the ambient theme -- e.g. a dark sidebar that isn't otherwise dark-themed. Has no effect on `variant="mark"`: Figma's component set only has one real designed instance of the icon-only mark (`Device="Tab and mobile"`, `Background="Default"`) -- there's no separate dark version of it, so the mark renders identically regardless of this prop.
2970
+ * @default 'auto'
2971
+ */
2972
+ "background": BsLogoBackground;
2973
+ /**
2974
+ * `variant="custom"` only: the image URL to render (e.g. a URL your app already fetched from a logo API). Ignored for `full`/`mark`.
2975
+ * @default null
2976
+ */
2977
+ "src": string | null;
2978
+ /**
2979
+ * How much of the logo to render. `full` is the icon + "EG BrandSync" wordmark (190.977x44 natural size); `mark` is just the icon (44x44 natural size), no wordmark; `custom` renders a consumer-supplied image via `src`/`alt` instead of a built-in BrandSync asset -- see the class doc above.
2980
+ * @default 'full'
2981
+ */
2982
+ "variant": BsLogoVariant;
2983
+ }
2984
+ /**
2985
+ * A generic dropdown/popup menu container: a rounded, elevated list of items (typically
2986
+ * `bs-menu-item` elements).
2987
+ * ## When to use
2988
+ * - A popup list of actions/options triggered by another control (e.g. a "more options" kebab
2989
+ * button), such as `bs-chatbot-response-action`'s `menu` slot.
2990
+ * ## When not to use
2991
+ * - A persistent, always-visible list of options -- this component is purpose-built as a popup
2992
+ * surface (rounded corners, elevation shadow), not a plain list.
2993
+ * @prop --bs-menu-bg - Background of the menu box. Aliased to `--bs-surface-raised`.
2994
+ * @prop --bs-menu-radius - Corner radius of the menu box. Aliased to `--bs-border-radius-100`.
2995
+ * @prop --bs-menu-padding-y - Top/bottom padding of the menu box. Aliased to `--bs-spacing-50`.
2996
+ * @prop --bs-menu-gap - Gap between slotted items. Aliased to `--bs-spacing-50`.
2997
+ * @prop --bs-menu-shadow - Elevation shadow of the menu box. Aliased to `--bs-shadow-sm`.
2998
+ */
2999
+ interface BsMenu {
3000
+ }
3001
+ /**
3002
+ * A single selectable row inside a `bs-menu`: an optional icon plus a text label, rendered as a
3003
+ * real `<button>` for correct keyboard/click semantics.
3004
+ * ## When to use
3005
+ * - As a child of `bs-menu`, one per selectable action/option.
3006
+ * ## When not to use
3007
+ * - Outside of `bs-menu` -- this component's sizing/hover treatment is designed to sit inside the
3008
+ * menu's rounded, padded list box.
3009
+ * @prop --bs-menu-item-radius - Corner radius of the row. Aliased to `--bs-border-radius-100`.
3010
+ * @prop --bs-menu-item-padding-y - Top/bottom padding. Aliased to `--bs-spacing-100`.
3011
+ * @prop --bs-menu-item-padding-x - Left/right padding. Aliased to `--bs-spacing-150`.
3012
+ * @prop --bs-menu-item-gap - Gap between icon and label. Aliased to `--bs-spacing-100`.
3013
+ * @prop --bs-menu-item-hover - Background on hover. Aliased to `--bs-color-neutral-container-hover`.
3014
+ * @prop --bs-menu-item-pressed - Background when pressed. Aliased to `--bs-color-neutral-container-pressed`.
3015
+ * @prop --bs-menu-item-disabled-bg - Background when `disabled` is set. Aliased to `--bs-surface-action-disabled`.
3016
+ * @prop --bs-menu-item-icon-color - Icon color. Aliased to `--bs-icon-default`.
3017
+ * @prop --bs-menu-item-icon-color-disabled - Icon color when `disabled` is set. Aliased to `--bs-icon-disabled`.
3018
+ * @prop --bs-menu-item-color - Label text color. Aliased to `--bs-text-muted`.
3019
+ * @prop --bs-menu-item-color-disabled - Label text color when `disabled` is set. Aliased to `--bs-text-on-disabled`.
3020
+ * @prop --bs-menu-item-font-size - Aliased to `--bs-font-size-md`.
3021
+ * @prop --bs-menu-item-line-height - Aliased to `--bs-line-height-body-md`.
3022
+ */
3023
+ interface BsMenuItem {
3024
+ /**
3025
+ * Disables the item: no hover/pressed/focus styling, no pointer cursor, not reachable by keyboard tabbing, and clicking it does not emit `bsSelect`.
3026
+ * @default false
3027
+ */
3028
+ "disabled": boolean;
3029
+ }
3030
+ /**
3031
+ * A single chat message bubble. User messages align to the end with a primary-tinted bubble;
3032
+ * assistant messages align to the start on a neutral bubble. The consumer renders the content
3033
+ * (e.g. markdown) into the default slot.
3034
+ * Composed from: `bs-card` (the bubble surface).
3035
+ * ## When to use
3036
+ * - One entry per turn in a chat transcript, usually inside `bs-message-list`.
3037
+ * ## When not to use
3038
+ * - For transient notices or system banners -- use `bs-toast` / `bs-composer-status-banner`.
3039
+ * @prop --bs-message-gap - Gap between avatar and message column. Aliased to `--bs-spacing-100`.
2414
3040
  * @prop --bs-message-max-width - Max width of the message column. Defaults to `80%`.
2415
3041
  * @prop --bs-message-padding - Bubble padding. Aliased to `--bs-spacing-150`.
2416
3042
  * @prop --bs-message-radius - Bubble corner radius. Aliased to `--bs-border-radius-150`.
@@ -3178,6 +3804,55 @@ export namespace Components {
3178
3804
  */
3179
3805
  "value": string;
3180
3806
  }
3807
+ /**
3808
+ * One result or suggestion row of a search dropdown: a leading icon, a primary line, an optional
3809
+ * description line and trailing text. Static, not focusable -- focus stays in the search field and the
3810
+ * parent (`bs-global-search`) marks the highlighted row with `active`.
3811
+ * Standalone it has no role. `bs-global-search` sets `selectionRole="option"` (and an `id`) on its rows,
3812
+ * the same pattern as `bs-list-item` and `bs-shortcut-row`.
3813
+ * ## When to use
3814
+ * - A suggestion, recent search or result inside `bs-global-search`.
3815
+ * ## When not to use
3816
+ * - A row in a generic list -- use `bs-list-item`.
3817
+ * - A command in a popup menu -- use `bs-menu-item`.
3818
+ * @prop --bs-search-item-min-height - Aliased to `--bs-spacing-600` (48px).
3819
+ * @prop --bs-search-item-padding-y - Aliased to `--bs-spacing-100`.
3820
+ * @prop --bs-search-item-padding-x - Aliased to `--bs-spacing-150`.
3821
+ * @prop --bs-search-item-gap - Aliased to `--bs-spacing-100`.
3822
+ * @prop --bs-search-item-radius - Aliased to `--bs-border-radius-100`.
3823
+ * @prop --bs-search-item-bg - Resting background. `transparent`.
3824
+ * @prop --bs-search-item-bg-active - Active (highlighted) and hover background. Aliased to `--bs-surface-hover`.
3825
+ * @prop --bs-search-item-bg-pressed - Aliased to `--bs-surface-pressed`.
3826
+ * @prop --bs-search-item-color - Primary text. Aliased to `--bs-text-default`.
3827
+ * @prop --bs-search-item-color-muted - Description and trailing text. Aliased to `--bs-text-muted`.
3828
+ * @prop --bs-search-item-color-disabled - Aliased to `--bs-text-on-disabled`.
3829
+ * @prop --bs-search-item-icon-color - Aliased to `--bs-icon-default`.
3830
+ */
3831
+ interface BsSearchItem {
3832
+ /**
3833
+ * Highlighted row (keyboard or hover). Set by the parent.
3834
+ * @default false
3835
+ */
3836
+ "active": boolean;
3837
+ /**
3838
+ * Dims the row and ignores clicks.
3839
+ * @default false
3840
+ */
3841
+ "disabled": boolean;
3842
+ /**
3843
+ * Set by the parent (`"option"`). Standalone rows have no role.
3844
+ * @default null
3845
+ */
3846
+ "selectionRole": 'option' | null;
3847
+ /**
3848
+ * Trailing text shorthand. The `trailing` slot overrides it.
3849
+ */
3850
+ "trailing"?: string;
3851
+ /**
3852
+ * Identifies the item; emitted by `bsItemSelect`.
3853
+ */
3854
+ "value"?: string;
3855
+ }
3181
3856
  /**
3182
3857
  * The three moments around an expiring session, as one card. Matches the Figma "Session timeout"
3183
3858
  * component's three types:
@@ -3302,6 +3977,46 @@ export namespace Components {
3302
3977
  */
3303
3978
  "type": BsSessionTimeoutType;
3304
3979
  }
3980
+ /**
3981
+ * One row of a shortcut list: an action label on the left and its keyboard shortcut on the right.
3982
+ * Static information, not interactive. Standalone it has no role; `bs-keyboard-shortcuts` sets
3983
+ * `selectionRole="listitem"` on its rows (same pattern as `bs-list-item`).
3984
+ * Built from `bs-key-caps` (and so `bs-key`).
3985
+ * ## When to use
3986
+ * - A line in a keyboard-shortcut reference, usually inside `bs-keyboard-shortcuts`.
3987
+ * ## When not to use
3988
+ * - A clickable command or menu entry -- use `bs-menu-item` (which has its own shortcut slot).
3989
+ * @prop --bs-shortcut-row-height - Row height. Defaults to `36px` (Figma).
3990
+ * @prop --bs-shortcut-row-padding-x - Horizontal padding. Aliased to `--bs-spacing-100`.
3991
+ * @prop --bs-shortcut-row-gap - Gap between label and keys. Aliased to `--bs-spacing-100`.
3992
+ * @prop --bs-shortcut-row-radius - Corner radius. Aliased to `--bs-border-radius-75`.
3993
+ * @prop --bs-shortcut-row-color - Label colour. Aliased to `--bs-text-default`.
3994
+ * @prop --bs-shortcut-row-color-disabled - Label colour while `disabled`. Aliased to `--bs-text-on-disabled`.
3995
+ */
3996
+ interface BsShortcutRow {
3997
+ /**
3998
+ * The action, e.g. "Save". The default slot overrides it.
3999
+ */
4000
+ "action"?: string;
4001
+ /**
4002
+ * Dims the label and the keys.
4003
+ * @default false
4004
+ */
4005
+ "disabled": boolean;
4006
+ /**
4007
+ * The keys, e.g. `"Ctrl+S"`, or an array (`['Ctrl', '+']`) for a literal plus key. See `bs-key-caps`.
4008
+ */
4009
+ "keys"?: string | string[];
4010
+ /**
4011
+ * Accessible name of the key caps, e.g. "Control plus S". Defaults to the keys joined with "plus".
4012
+ */
4013
+ "label"?: string;
4014
+ /**
4015
+ * Set by the parent list (`"listitem"`). Standalone rows have no role.
4016
+ * @default null
4017
+ */
4018
+ "selectionRole": 'listitem' | null;
4019
+ }
3305
4020
  /**
3306
4021
  * A generic slide-in panel (drawer) anchored to the start or end edge, for history, filters, FAQ
3307
4022
  * and similar secondary content. Closes via its close button or Escape and emits `bsClose`.
@@ -4090,31 +4805,112 @@ export namespace Components {
4090
4805
  "text": string;
4091
4806
  }
4092
4807
  /**
4093
- * A product's "What's new" surface, in three forms matching the Figma component:
4094
- * - `feed` -- a docked panel: heading, "Mark all as read", filter tabs, the list of updates (each a
4095
- * `bs-whats-new-entry`) and a link to the full release notes.
4096
- * - `announcement` -- one big update, with a hero image, a tag, a heading, a few bullet points, "1 of 3"
4097
- * and Remind me later / Next.
4098
- * - `teaser` -- a small card pointing at the feed: tag, date, heading, a line of text and "Open What's new".
4099
- * The component only shows what you give it and reports what the user pressed. It doesn't fetch updates,
4100
- * track which the user has seen, or decide when to appear: your app owns `entries` (with their `unread`
4101
- * flags) and reacts to the events.
4102
- * **Built from:** `bs-card` (the surface), `bs-whats-new-entry` (each update), `bs-tabs` (the filters),
4103
- * `bs-chip-informative` (the tags), `bs-button`, `bs-icon-button`.
4104
- * ## When to use
4105
- * - Telling users about changes to the product, in a place they can come back to.
4106
- * ## When not to use
4107
- * - Messages about the user's own data or an action they just took -- use `bs-snackbar`, `bs-toast`.
4108
- * - A guided walk through the interface -- use `bs-product-tour`.
4808
+ * A hierarchical list of `bs-tree-item` rows with single selection, expand/collapse and the
4809
+ * WAI-ARIA tree keyboard pattern.
4810
+ * The tree owns `role="tree"`, the roving `tabindex` (exactly one enabled, visible item is
4811
+ * tabbable: the selected one, otherwise the first), selection (kept in sync with each item's
4812
+ * `selected`) and keyboard navigation over the visible (rendered, non-disabled) items. Items own
4813
+ * their expansion state and emit `bsSelect` / `bsToggle`.
4814
+ * Built from: `bs-tree-item` rows.
4109
4815
  */
4110
- interface BsWhatsNew {
4816
+ interface BsTree {
4111
4817
  /**
4112
- * Label of the link (`teaser`).
4113
- * @default 'Open What’s new'
4818
+ * Accessible name of the tree. Bound onto the internal `role="tree"` element (an `aria-label` on the host would not reach it).
4819
+ * @default null
4114
4820
  */
4115
- "actionLabel": string;
4821
+ "ariaLabel": string | null;
4116
4822
  /**
4117
- * Shows a close button.
4823
+ * Collapses every parent item.
4824
+ */
4825
+ "collapseAll": () => Promise<void>;
4826
+ /**
4827
+ * Expands every parent item.
4828
+ */
4829
+ "expandAll": () => Promise<void>;
4830
+ /**
4831
+ * When `false`, rows do not select (clicks and Enter/Space do nothing) but parents still expand and collapse.
4832
+ * @default true
4833
+ */
4834
+ "selectable": boolean;
4835
+ /**
4836
+ * The `value` (or, when empty, the `label`) of the selected item. Two-way synced with each item's `selected` (single selection). Setting it from code does not emit `bsChange`.
4837
+ * @default ''
4838
+ */
4839
+ "value": string;
4840
+ }
4841
+ /**
4842
+ * A single row of a `bs-tree`. An item that contains child `bs-tree-item` elements is a parent
4843
+ * (it gets an expand/collapse caret and a folder icon); an item without children is a leaf (no
4844
+ * caret, file icon).
4845
+ * The host carries `role="treeitem"` and the `aria-*` state; the owning `bs-tree` manages the
4846
+ * roving `tabindex`, selection and keyboard navigation. Nesting depth is computed automatically
4847
+ * from the number of ancestor `bs-tree-item` elements and exposed as `aria-level` -- it is not a
4848
+ * prop. Clicking the row selects it; clicking the caret (or pressing Right/Left in a tree) toggles
4849
+ * expansion -- the two are deliberately separate.
4850
+ * Built from: inline SVG icons only (no existing `bs-*` component covers a tree row).
4851
+ */
4852
+ interface BsTreeItem {
4853
+ /**
4854
+ * Disables the row: not focusable, ignores clicks, dimmed. Reflected.
4855
+ * @default false
4856
+ */
4857
+ "disabled": boolean;
4858
+ /**
4859
+ * Whether the child items are shown. Only meaningful for parents. Mutable: the caret, the keyboard and the owning tree toggle it. Reflected.
4860
+ * @default false
4861
+ */
4862
+ "expanded": boolean;
4863
+ /**
4864
+ * The row's text. Use the `label` slot for rich content.
4865
+ * @default ''
4866
+ */
4867
+ "label": string;
4868
+ /**
4869
+ * Marks the row as selected. Owned by the tree (single selection, synced with its `value`). Reflected.
4870
+ * @default false
4871
+ */
4872
+ "selected": boolean;
4873
+ /**
4874
+ * Sets `expanded` as a user action: updates the prop and emits `bsToggle`. No-op for leaves, disabled items, or when the value would not change.
4875
+ */
4876
+ "setExpanded": (next: boolean) => Promise<void>;
4877
+ /**
4878
+ * Shows the leading icon (default folder / file, or the `icon` slot).
4879
+ * @default true
4880
+ */
4881
+ "showIcon": boolean;
4882
+ /**
4883
+ * Identifier used in events and for the tree's `value`. Falls back to `label` when empty.
4884
+ * @default ''
4885
+ */
4886
+ "value": string;
4887
+ }
4888
+ /**
4889
+ * A product's "What's new" surface, in three forms matching the Figma component:
4890
+ * - `feed` -- a docked panel: heading, "Mark all as read", filter tabs, the list of updates (each a
4891
+ * `bs-whats-new-entry`) and a link to the full release notes.
4892
+ * - `announcement` -- one big update, with a hero image, a tag, a heading, a few bullet points, "1 of 3"
4893
+ * and Remind me later / Next.
4894
+ * - `teaser` -- a small card pointing at the feed: tag, date, heading, a line of text and "Open What's new".
4895
+ * The component only shows what you give it and reports what the user pressed. It doesn't fetch updates,
4896
+ * track which the user has seen, or decide when to appear: your app owns `entries` (with their `unread`
4897
+ * flags) and reacts to the events.
4898
+ * **Built from:** `bs-card` (the surface), `bs-whats-new-entry` (each update), `bs-tabs` (the filters),
4899
+ * `bs-chip-informative` (the tags), `bs-button`, `bs-icon-button`.
4900
+ * ## When to use
4901
+ * - Telling users about changes to the product, in a place they can come back to.
4902
+ * ## When not to use
4903
+ * - Messages about the user's own data or an action they just took -- use `bs-snackbar`, `bs-toast`.
4904
+ * - A guided walk through the interface -- use `bs-product-tour`.
4905
+ */
4906
+ interface BsWhatsNew {
4907
+ /**
4908
+ * Label of the link (`teaser`).
4909
+ * @default 'Open What’s new'
4910
+ */
4911
+ "actionLabel": string;
4912
+ /**
4913
+ * Shows a close button.
4118
4914
  * @default false
4119
4915
  */
4120
4916
  "closable": boolean;
@@ -4338,6 +5134,10 @@ export interface BsCitationPreviewCustomEvent<T> extends CustomEvent<T> {
4338
5134
  detail: T;
4339
5135
  target: HTMLBsCitationPreviewElement;
4340
5136
  }
5137
+ export interface BsCommandPaletteCustomEvent<T> extends CustomEvent<T> {
5138
+ detail: T;
5139
+ target: HTMLBsCommandPaletteElement;
5140
+ }
4341
5141
  export interface BsComposerCustomEvent<T> extends CustomEvent<T> {
4342
5142
  detail: T;
4343
5143
  target: HTMLBsComposerElement;
@@ -4374,6 +5174,10 @@ export interface BsFileUploadItemCustomEvent<T> extends CustomEvent<T> {
4374
5174
  detail: T;
4375
5175
  target: HTMLBsFileUploadItemElement;
4376
5176
  }
5177
+ export interface BsGlobalSearchCustomEvent<T> extends CustomEvent<T> {
5178
+ detail: T;
5179
+ target: HTMLBsGlobalSearchElement;
5180
+ }
4377
5181
  export interface BsInlineTabCustomEvent<T> extends CustomEvent<T> {
4378
5182
  detail: T;
4379
5183
  target: HTMLBsInlineTabElement;
@@ -4382,6 +5186,18 @@ export interface BsInputCustomEvent<T> extends CustomEvent<T> {
4382
5186
  detail: T;
4383
5187
  target: HTMLBsInputElement;
4384
5188
  }
5189
+ export interface BsKeyboardShortcutsCustomEvent<T> extends CustomEvent<T> {
5190
+ detail: T;
5191
+ target: HTMLBsKeyboardShortcutsElement;
5192
+ }
5193
+ export interface BsListCustomEvent<T> extends CustomEvent<T> {
5194
+ detail: T;
5195
+ target: HTMLBsListElement;
5196
+ }
5197
+ export interface BsListItemCustomEvent<T> extends CustomEvent<T> {
5198
+ detail: T;
5199
+ target: HTMLBsListItemElement;
5200
+ }
4385
5201
  export interface BsMenuItemCustomEvent<T> extends CustomEvent<T> {
4386
5202
  detail: T;
4387
5203
  target: HTMLBsMenuItemElement;
@@ -4422,6 +5238,10 @@ export interface BsRadioCustomEvent<T> extends CustomEvent<T> {
4422
5238
  detail: T;
4423
5239
  target: HTMLBsRadioElement;
4424
5240
  }
5241
+ export interface BsSearchItemCustomEvent<T> extends CustomEvent<T> {
5242
+ detail: T;
5243
+ target: HTMLBsSearchItemElement;
5244
+ }
4425
5245
  export interface BsSessionTimeoutCustomEvent<T> extends CustomEvent<T> {
4426
5246
  detail: T;
4427
5247
  target: HTMLBsSessionTimeoutElement;
@@ -4466,6 +5286,14 @@ export interface BsToastCustomEvent<T> extends CustomEvent<T> {
4466
5286
  detail: T;
4467
5287
  target: HTMLBsToastElement;
4468
5288
  }
5289
+ export interface BsTreeCustomEvent<T> extends CustomEvent<T> {
5290
+ detail: T;
5291
+ target: HTMLBsTreeElement;
5292
+ }
5293
+ export interface BsTreeItemCustomEvent<T> extends CustomEvent<T> {
5294
+ detail: T;
5295
+ target: HTMLBsTreeItemElement;
5296
+ }
4469
5297
  export interface BsWhatsNewCustomEvent<T> extends CustomEvent<T> {
4470
5298
  detail: T;
4471
5299
  target: HTMLBsWhatsNewElement;
@@ -5352,6 +6180,57 @@ declare global {
5352
6180
  prototype: HTMLBsCitationPreviewElement;
5353
6181
  new (): HTMLBsCitationPreviewElement;
5354
6182
  };
6183
+ interface HTMLBsCommandPaletteElementEventMap {
6184
+ "bsInput": BsCommandPaletteInputDetail;
6185
+ "bsSelect": BsCommandPaletteSelectDetail;
6186
+ "bsSuggestion": string;
6187
+ "bsOpenChange": boolean;
6188
+ "bsScopeExit": void;
6189
+ }
6190
+ /**
6191
+ * A Ctrl+K command palette: a modal with a search field, grouped commands, navigation and records, a
6192
+ * no-results view and a keyboard-hint footer. The data, the filtering, the command registry and the
6193
+ * recent-items storage are all yours: you slot `bs-search-item`s into the sections and set `status`.
6194
+ * Built from a native `<dialog>` (opened with `showModal()`, so focus is trapped, the page behind is inert
6195
+ * and the backdrop is the scrim), `bs-input` (type="search"), `bs-search-item`, `bs-key` (footer hints and
6196
+ * the Esc cap), `bs-chip-informative` (the scope chip) and `bs-spinner` (loading). Slot a `bs-key-caps` with
6197
+ * `slot="trailing"` inside an item to show a command's shortcut.
6198
+ * ## When to use
6199
+ * - An app-wide "do anything" entry point opened with a hotkey: run commands, navigate, open records.
6200
+ * ## When not to use
6201
+ * - A plain search box with a dropdown -- use `bs-global-search`.
6202
+ * - A small list of actions on one control -- use `bs-menu`.
6203
+ * A `>` as the first character of the field switches to commands-only mode (`commandsOnly`, reflected as
6204
+ * `commands-only`). The component filters nothing: listen to `bsInput`, swap the slotted items, set `status`.
6205
+ * Nested (sub-command) palettes are a consumer pattern: swap the slotted commands and set `scopeLabel`.
6206
+ * @prop --bs-command-palette-width - Panel width. Defaults to `640px` (Figma); capped to the viewport.
6207
+ * @prop --bs-command-palette-top - Distance from the top of the viewport. Defaults to `12vh`.
6208
+ * @prop --bs-command-palette-max-height - Max height of the results area. Defaults to `60vh`.
6209
+ * @prop --bs-command-palette-radius - Aliased to `--bs-border-radius-150`.
6210
+ * @prop --bs-command-palette-bg - Panel background. Aliased to `--bs-surface-base`.
6211
+ * @prop --bs-command-palette-shadow - Figma elevation level 4: `0 8px 16px` in `--bs-elevation-higher` (stronger in dark mode).
6212
+ * @prop --bs-command-palette-overlay - Scrim colour. Aliased to `--bs-surface-overlay`.
6213
+ * @prop --bs-command-palette-footer-bg - Aliased to `--bs-surface-container`.
6214
+ * @prop --bs-command-palette-divider-color - Aliased to `--bs-border-default`.
6215
+ * @prop --bs-command-palette-header-border-color - Aliased to `--bs-border-neutral-container`.
6216
+ * @prop --bs-command-palette-header-color - Aliased to `--bs-text-muted`.
6217
+ * @prop --bs-command-palette-hint-color - Aliased to `--bs-text-secondary`.
6218
+ * @prop --bs-command-palette-z-index - Aliased to `--bs-z-index-modal`.
6219
+ */
6220
+ interface HTMLBsCommandPaletteElement extends Components.BsCommandPalette, HTMLStencilElement {
6221
+ addEventListener<K extends keyof HTMLBsCommandPaletteElementEventMap>(type: K, listener: (this: HTMLBsCommandPaletteElement, ev: BsCommandPaletteCustomEvent<HTMLBsCommandPaletteElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
6222
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
6223
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
6224
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
6225
+ removeEventListener<K extends keyof HTMLBsCommandPaletteElementEventMap>(type: K, listener: (this: HTMLBsCommandPaletteElement, ev: BsCommandPaletteCustomEvent<HTMLBsCommandPaletteElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
6226
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
6227
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
6228
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
6229
+ }
6230
+ var HTMLBsCommandPaletteElement: {
6231
+ prototype: HTMLBsCommandPaletteElement;
6232
+ new (): HTMLBsCommandPaletteElement;
6233
+ };
5355
6234
  interface HTMLBsComposerElementEventMap {
5356
6235
  "bsInput": string;
5357
6236
  "bsSubmit": void;
@@ -5667,6 +6546,29 @@ declare global {
5667
6546
  prototype: HTMLBsDividerElement;
5668
6547
  new (): HTMLBsDividerElement;
5669
6548
  };
6549
+ /**
6550
+ * A centered "nothing to show" block: an icon tile, a heading, a description and an optional action.
6551
+ * Used for empty lists, "no results" and error states inside a panel, card or page section.
6552
+ * Built from `bs-icon-tile` (and, in your `action` slot, usually a `bs-button`).
6553
+ * The component has no role. Live regions belong on a wrapper you control (e.g. `role="status"` on the
6554
+ * element that stays in the DOM while this block appears and disappears).
6555
+ * ## When to use
6556
+ * - A list, table or search result that has nothing to show, or failed to load.
6557
+ * ## When not to use
6558
+ * - A full-page error with a status code -- use `bs-error-page`.
6559
+ * - A transient message -- use `bs-toast` or `bs-snackbar`.
6560
+ * @prop --bs-empty-state-padding-y - Vertical padding. Aliased to `--bs-spacing-700` (56px).
6561
+ * @prop --bs-empty-state-padding-x - Horizontal padding. Aliased to `--bs-spacing-300` (24px).
6562
+ * @prop --bs-empty-state-gap - Gap between tile, heading, description and action. Aliased to `--bs-spacing-150`.
6563
+ * @prop --bs-empty-state-heading-color - Aliased to `--bs-text-default`.
6564
+ * @prop --bs-empty-state-description-color - Aliased to `--bs-text-secondary`.
6565
+ */
6566
+ interface HTMLBsEmptyStateElement extends Components.BsEmptyState, HTMLStencilElement {
6567
+ }
6568
+ var HTMLBsEmptyStateElement: {
6569
+ prototype: HTMLBsEmptyStateElement;
6570
+ new (): HTMLBsEmptyStateElement;
6571
+ };
5670
6572
  interface HTMLBsErrorPageElementEventMap {
5671
6573
  "bsPrimary": void;
5672
6574
  "bsSecondary": void;
@@ -5757,6 +6659,60 @@ declare global {
5757
6659
  prototype: HTMLBsFileUploadItemElement;
5758
6660
  new (): HTMLBsFileUploadItemElement;
5759
6661
  };
6662
+ interface HTMLBsGlobalSearchElementEventMap {
6663
+ "bsInput": string;
6664
+ "bsSearch": string;
6665
+ "bsSelect": BsGlobalSearchSelectDetail;
6666
+ "bsOpenChange": boolean;
6667
+ "bsClearRecent": void;
6668
+ "bsClearSearch": void;
6669
+ "bsSeeAll": void;
6670
+ "bsRetry": void;
6671
+ }
6672
+ /**
6673
+ * A global search combobox: a search field with a dropdown panel of suggestions, results, an empty state
6674
+ * or an error state, plus a keyboard-hint footer. The data, the filtering and the recent-search storage
6675
+ * are all yours: you slot `bs-search-item`s into the sections and tell the component which `status` to show.
6676
+ * Built from `bs-input` (type="search"), `bs-search-item`, `bs-empty-state` (and so `bs-icon-tile`),
6677
+ * `bs-button` and `bs-key` (the footer keycaps).
6678
+ * ## When to use
6679
+ * - An app-wide "find anything" field with recent searches, jump-to shortcuts and grouped results.
6680
+ * ## When not to use
6681
+ * - Filtering the list or table that is already on screen -- use `bs-input type="search"`.
6682
+ * - A list of commands or actions -- use `bs-menu`.
6683
+ * - The complete result set -- link to a full search results page ("See all results").
6684
+ * Put `bs-search-item` children in the light DOM with `slot="recent"`, `slot="jump-to"`,
6685
+ * `slot="top-matches"` or `slot="search-in"`. A section (and its header) is only rendered when its slot has
6686
+ * content. Up/Down arrows move a highlight through the visible items; focus never leaves the field.
6687
+ * Known limit: the items are in your light DOM and the combobox in this shadow root, so
6688
+ * `aria-activedescendant` (an id reference) does not resolve across that boundary in every browser; the
6689
+ * highlighted option also gets `aria-selected="true"`.
6690
+ * @prop --bs-global-search-width - Field and panel width. Defaults to `480px` (Figma); capped at 100%.
6691
+ * @prop --bs-global-search-panel-radius - Aliased to `--bs-border-radius-100`.
6692
+ * @prop --bs-global-search-panel-padding - Aliased to `--bs-spacing-100`.
6693
+ * @prop --bs-global-search-gap - Gap between sections, and between the field and the panel. Aliased to `--bs-spacing-100`.
6694
+ * @prop --bs-global-search-panel-bg - Panel background. Aliased to `--bs-surface-base`.
6695
+ * @prop --bs-global-search-shadow - Panel shadow: Figma elevation level 3 (`0 4px 8px` in `--bs-elevation-high`, 10% black in light mode and 30% in dark mode).
6696
+ * @prop --bs-global-search-z-index - Panel stacking. Aliased to `--bs-z-index-dropdown`.
6697
+ * @prop --bs-global-search-divider-color - Footer divider. Aliased to `--bs-border-default`.
6698
+ * @prop --bs-global-search-header-border-color - Section header underline. Aliased to `--bs-border-neutral-container`.
6699
+ * @prop --bs-global-search-header-color - Section header text. Aliased to `--bs-text-muted`.
6700
+ * @prop --bs-global-search-hint-color - Footer hint text. Aliased to `--bs-text-secondary`.
6701
+ */
6702
+ interface HTMLBsGlobalSearchElement extends Components.BsGlobalSearch, HTMLStencilElement {
6703
+ addEventListener<K extends keyof HTMLBsGlobalSearchElementEventMap>(type: K, listener: (this: HTMLBsGlobalSearchElement, ev: BsGlobalSearchCustomEvent<HTMLBsGlobalSearchElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
6704
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
6705
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
6706
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
6707
+ removeEventListener<K extends keyof HTMLBsGlobalSearchElementEventMap>(type: K, listener: (this: HTMLBsGlobalSearchElement, ev: BsGlobalSearchCustomEvent<HTMLBsGlobalSearchElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
6708
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
6709
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
6710
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
6711
+ }
6712
+ var HTMLBsGlobalSearchElement: {
6713
+ prototype: HTMLBsGlobalSearchElement;
6714
+ new (): HTMLBsGlobalSearchElement;
6715
+ };
5760
6716
  /**
5761
6717
  * A CSS grid layout wrapper. Children are placed in equal-width columns with a token-based gap.
5762
6718
  * `columns` takes either a number (`"3"` becomes `repeat(3, minmax(0, 1fr))`) or any raw
@@ -5904,6 +6860,173 @@ declare global {
5904
6860
  prototype: HTMLBsInputElement;
5905
6861
  new (): HTMLBsInputElement;
5906
6862
  };
6863
+ /**
6864
+ * One key of a keyboard shortcut, e.g. `Ctrl`, `K` or `Esc` -- rendered as a `<kbd>` keycap.
6865
+ * Shows a text label, or an icon (e.g. a return arrow) via the `icon` slot.
6866
+ * ## When to use
6867
+ * - Showing a keyboard shortcut hint next to a control or inside a search field.
6868
+ * - Alone for a single key, or as the children of `bs-key-caps` for a multi-key shortcut.
6869
+ * ## When not to use
6870
+ * - As a button or any clickable control -- a key is a static hint, not interactive.
6871
+ * @prop --bs-key-bg - Cap background. Aliased to `--bs-surface-base`.
6872
+ * @prop --bs-key-border-color - Cap border colour. Aliased to `--bs-border-default`.
6873
+ * @prop --bs-key-radius - Cap corner radius. Aliased to `--bs-border-radius-50`.
6874
+ * @prop --bs-key-padding-x - Horizontal padding. Aliased to `--bs-spacing-75`.
6875
+ * @prop --bs-key-padding-y - Vertical padding. Aliased to `--bs-spacing-50`.
6876
+ * @prop --bs-key-min-width - Smallest cap width, so single characters keep a keycap shape. Defaults to `25px` (Figma).
6877
+ * @prop --bs-key-color - Label colour. Aliased to `--bs-text-secondary`.
6878
+ * @prop --bs-key-font-size - Label size. Aliased to `--bs-font-size-xs` (12px).
6879
+ * @prop --bs-key-icon-size - Icon size. Defaults to `16px` (Figma).
6880
+ */
6881
+ interface HTMLBsKeyElement extends Components.BsKey, HTMLStencilElement {
6882
+ }
6883
+ var HTMLBsKeyElement: {
6884
+ prototype: HTMLBsKeyElement;
6885
+ new (): HTMLBsKeyElement;
6886
+ };
6887
+ /**
6888
+ * A keyboard shortcut of one to four keys joined by "+", e.g. `Ctrl + K`. Give it a `keys` string
6889
+ * (`"Ctrl+Shift+K"`) or array (`['Ctrl', '+']` for a literal plus key), or slot your own `bs-key`
6890
+ * elements -- for example when a key is an icon.
6891
+ * ## When to use
6892
+ * - A shortcut hint beside a menu item, button or inside a search field.
6893
+ * ## When not to use
6894
+ * - Instructions that need prose ("press Enter to submit") -- write a sentence and use a single `bs-key` inline.
6895
+ * - Anything interactive -- keys are static hints.
6896
+ * @prop --bs-key-caps-gap - Gap between keys and separators. Aliased to `--bs-spacing-100`.
6897
+ * @prop --bs-key-caps-separator-color - Colour of the "+" separators. Aliased to `--bs-text-muted`.
6898
+ * @prop --bs-key-caps-disabled-opacity - Opacity of the whole shortcut while `disabled`. Defaults to `0.38` (Figma).
6899
+ */
6900
+ interface HTMLBsKeyCapsElement extends Components.BsKeyCaps, HTMLStencilElement {
6901
+ }
6902
+ var HTMLBsKeyCapsElement: {
6903
+ prototype: HTMLBsKeyCapsElement;
6904
+ new (): HTMLBsKeyCapsElement;
6905
+ };
6906
+ interface HTMLBsKeyboardShortcutsElementEventMap {
6907
+ "bsClose": void;
6908
+ "bsQueryChange": string;
6909
+ "bsSingleKeyChange": boolean;
6910
+ }
6911
+ /**
6912
+ * A searchable reference panel of keyboard shortcuts: heading and close button, a search field, an
6913
+ * optional single-key on/off switch, shortcut groups in two columns and a footer hint. It is a
6914
+ * surface, not a modal -- place it inside `bs-dialog` or a popover.
6915
+ * Built from `bs-card`, `bs-icon-button`, `bs-input`, `bs-switch`, `bs-shortcut-row` (and so
6916
+ * `bs-key-caps` / `bs-key`).
6917
+ * ## When to use
6918
+ * - A "press ? to see shortcuts" help overlay for an app with many shortcuts.
6919
+ * ## When not to use
6920
+ * - A long-form help page or documentation -- link to it instead.
6921
+ * - A list of commands the user can run from it -- use `bs-menu`.
6922
+ * @prop --bs-keyboard-shortcuts-width - Panel width and min-width. Defaults to `720px` (Figma).
6923
+ * @prop --bs-keyboard-shortcuts-bg - Panel background. Aliased to `--bs-surface-base`.
6924
+ * @prop --bs-keyboard-shortcuts-radius - Aliased to `--bs-border-radius-150`.
6925
+ * @prop --bs-keyboard-shortcuts-padding - Aliased to `--bs-spacing-200`.
6926
+ * @prop --bs-keyboard-shortcuts-gap - Gap between sections. Aliased to `--bs-spacing-200`.
6927
+ * @prop --bs-keyboard-shortcuts-shadow - Figma elevation level 4 (`0 8px 8px` in `--bs-elevation-higher`, 12% black in light mode and 25% in dark mode).
6928
+ * @prop --bs-keyboard-shortcuts-column-gap - Gap between the two columns. Aliased to `--bs-spacing-600`.
6929
+ * @prop --bs-keyboard-shortcuts-color - Main text colour. Aliased to `--bs-text-default`.
6930
+ * @prop --bs-keyboard-shortcuts-color-secondary - Titles, captions, footer. Aliased to `--bs-text-secondary`.
6931
+ */
6932
+ interface HTMLBsKeyboardShortcutsElement extends Components.BsKeyboardShortcuts, HTMLStencilElement {
6933
+ addEventListener<K extends keyof HTMLBsKeyboardShortcutsElementEventMap>(type: K, listener: (this: HTMLBsKeyboardShortcutsElement, ev: BsKeyboardShortcutsCustomEvent<HTMLBsKeyboardShortcutsElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
6934
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
6935
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
6936
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
6937
+ removeEventListener<K extends keyof HTMLBsKeyboardShortcutsElementEventMap>(type: K, listener: (this: HTMLBsKeyboardShortcutsElement, ev: BsKeyboardShortcutsCustomEvent<HTMLBsKeyboardShortcutsElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
6938
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
6939
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
6940
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
6941
+ }
6942
+ var HTMLBsKeyboardShortcutsElement: {
6943
+ prototype: HTMLBsKeyboardShortcutsElement;
6944
+ new (): HTMLBsKeyboardShortcutsElement;
6945
+ };
6946
+ interface HTMLBsListElementEventMap {
6947
+ "bsChange": string | null;
6948
+ }
6949
+ /**
6950
+ * A vertical list of `bs-list-item` rows, optionally single-select.
6951
+ * ## When to use
6952
+ * - Records, people, files or options shown as rows with leading media and descriptions.
6953
+ * - `selectable` for a single-choice list (e.g. a conversation list next to a detail pane).
6954
+ * ## When not to use
6955
+ * - A popup list of actions -- use `bs-menu`.
6956
+ * - Navigation between app sections -- use `bs-navigation-drawer`.
6957
+ * - Multi-column, sortable or paged data -- use `bs-data-table`.
6958
+ * Built from `bs-list-item` children (light DOM; the list never moves nodes).
6959
+ * @prop --bs-list-gap - Gap between rows. Defaults to `0`.
6960
+ * @prop --bs-list-divider-color - Divider colour when `dividers` is set. Aliased to `--bs-border-neutral-container`.
6961
+ */
6962
+ interface HTMLBsListElement extends Components.BsList, HTMLStencilElement {
6963
+ addEventListener<K extends keyof HTMLBsListElementEventMap>(type: K, listener: (this: HTMLBsListElement, ev: BsListCustomEvent<HTMLBsListElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
6964
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
6965
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
6966
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
6967
+ removeEventListener<K extends keyof HTMLBsListElementEventMap>(type: K, listener: (this: HTMLBsListElement, ev: BsListCustomEvent<HTMLBsListElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
6968
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
6969
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
6970
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
6971
+ }
6972
+ var HTMLBsListElement: {
6973
+ prototype: HTMLBsListElement;
6974
+ new (): HTMLBsListElement;
6975
+ };
6976
+ interface HTMLBsListItemElementEventMap {
6977
+ "bsItemClick": string | null;
6978
+ }
6979
+ /**
6980
+ * A single row of a list: optional leading media (avatar, icon, image), a label, a description and
6981
+ * optional support text, and an optional trailing caret or custom trailing content.
6982
+ * ## When to use
6983
+ * - As a child of `bs-list`, one per record, person, file or option.
6984
+ * - Standalone as a plain information row (non-interactive), or with `interactive` as a button-like row.
6985
+ * ## When not to use
6986
+ * - A popup list of actions -- use `bs-menu` / `bs-menu-item`.
6987
+ * - App navigation with an active route -- use `bs-navigation-drawer-item`.
6988
+ * - Tabular data with columns, sorting or paging -- use `bs-data-table`.
6989
+ * Composed from: leading media (`bs-avatar`) and trailing controls (`bs-icon-button`) are supplied by the
6990
+ * consumer through the `leading` and `trailing` slots; the row itself only reserves layout. The default
6991
+ * trailing caret is inline SVG.
6992
+ * Roles are driven by the parent `bs-list` (via `selectionRole`). Standalone, the row has no role
6993
+ * (`listitem` is only valid inside a list) unless `interactive` is set, which makes it a focusable
6994
+ * `role="button"`.
6995
+ * @prop --bs-list-item-min-height - Minimum row height. Aliased to `--bs-spacing-1000`.
6996
+ * @prop --bs-list-item-padding-y - Aliased to `--bs-spacing-150`.
6997
+ * @prop --bs-list-item-padding-x - Aliased to `--bs-spacing-200`.
6998
+ * @prop --bs-list-item-gap - Gap between leading, content and trailing. Aliased to `--bs-spacing-200`.
6999
+ * @prop --bs-list-item-content-gap - Gap between text lines. Aliased to `--bs-spacing-25`.
7000
+ * @prop --bs-list-item-radius - Aliased to `--bs-border-radius-100`.
7001
+ * @prop --bs-list-item-bg - Enabled background. `transparent`.
7002
+ * @prop --bs-list-item-bg-hover - Aliased to `--bs-surface-hover`.
7003
+ * @prop --bs-list-item-bg-pressed - Aliased to `--bs-surface-pressed`.
7004
+ * @prop --bs-list-item-bg-focus - Aliased to `--bs-surface-focus`.
7005
+ * @prop --bs-list-item-bg-selected - Aliased to `--bs-surface-selected`.
7006
+ * @prop --bs-list-item-bg-selected-hover - Aliased to `--bs-surface-selected-hover`.
7007
+ * @prop --bs-list-item-bg-selected-pressed - Aliased to `--bs-surface-selected-pressed`.
7008
+ * @prop --bs-list-item-bg-selected-focus - Aliased to `--bs-surface-selected-focus`.
7009
+ * @prop --bs-list-item-bg-disabled - Aliased to `--bs-surface-action-disabled`.
7010
+ * @prop --bs-list-item-color - Text colour. Aliased to `--bs-text-default`.
7011
+ * @prop --bs-list-item-color-disabled - Aliased to `--bs-text-on-disabled`.
7012
+ * @prop --bs-list-item-focus-ring - Focus ring colour. Aliased to `--bs-border-neutral-focus`.
7013
+ * @prop --bs-list-item-image-width - Leading image width. 72px.
7014
+ * @prop --bs-list-item-image-height - Leading image height. 56px.
7015
+ */
7016
+ interface HTMLBsListItemElement extends Components.BsListItem, HTMLStencilElement {
7017
+ addEventListener<K extends keyof HTMLBsListItemElementEventMap>(type: K, listener: (this: HTMLBsListItemElement, ev: BsListItemCustomEvent<HTMLBsListItemElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
7018
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
7019
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
7020
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
7021
+ removeEventListener<K extends keyof HTMLBsListItemElementEventMap>(type: K, listener: (this: HTMLBsListItemElement, ev: BsListItemCustomEvent<HTMLBsListItemElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
7022
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
7023
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
7024
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
7025
+ }
7026
+ var HTMLBsListItemElement: {
7027
+ prototype: HTMLBsListItemElement;
7028
+ new (): HTMLBsListItemElement;
7029
+ };
5907
7030
  /**
5908
7031
  * The BrandSync brand mark, as its own standalone component -- shared by `bs-navigation-header`
5909
7032
  * and `bs-navigation-drawer`, which used to each render their own duplicated copy of this SVG
@@ -6439,6 +7562,47 @@ declare global {
6439
7562
  prototype: HTMLBsRadioElement;
6440
7563
  new (): HTMLBsRadioElement;
6441
7564
  };
7565
+ interface HTMLBsSearchItemElementEventMap {
7566
+ "bsItemSelect": string | undefined;
7567
+ }
7568
+ /**
7569
+ * One result or suggestion row of a search dropdown: a leading icon, a primary line, an optional
7570
+ * description line and trailing text. Static, not focusable -- focus stays in the search field and the
7571
+ * parent (`bs-global-search`) marks the highlighted row with `active`.
7572
+ * Standalone it has no role. `bs-global-search` sets `selectionRole="option"` (and an `id`) on its rows,
7573
+ * the same pattern as `bs-list-item` and `bs-shortcut-row`.
7574
+ * ## When to use
7575
+ * - A suggestion, recent search or result inside `bs-global-search`.
7576
+ * ## When not to use
7577
+ * - A row in a generic list -- use `bs-list-item`.
7578
+ * - A command in a popup menu -- use `bs-menu-item`.
7579
+ * @prop --bs-search-item-min-height - Aliased to `--bs-spacing-600` (48px).
7580
+ * @prop --bs-search-item-padding-y - Aliased to `--bs-spacing-100`.
7581
+ * @prop --bs-search-item-padding-x - Aliased to `--bs-spacing-150`.
7582
+ * @prop --bs-search-item-gap - Aliased to `--bs-spacing-100`.
7583
+ * @prop --bs-search-item-radius - Aliased to `--bs-border-radius-100`.
7584
+ * @prop --bs-search-item-bg - Resting background. `transparent`.
7585
+ * @prop --bs-search-item-bg-active - Active (highlighted) and hover background. Aliased to `--bs-surface-hover`.
7586
+ * @prop --bs-search-item-bg-pressed - Aliased to `--bs-surface-pressed`.
7587
+ * @prop --bs-search-item-color - Primary text. Aliased to `--bs-text-default`.
7588
+ * @prop --bs-search-item-color-muted - Description and trailing text. Aliased to `--bs-text-muted`.
7589
+ * @prop --bs-search-item-color-disabled - Aliased to `--bs-text-on-disabled`.
7590
+ * @prop --bs-search-item-icon-color - Aliased to `--bs-icon-default`.
7591
+ */
7592
+ interface HTMLBsSearchItemElement extends Components.BsSearchItem, HTMLStencilElement {
7593
+ addEventListener<K extends keyof HTMLBsSearchItemElementEventMap>(type: K, listener: (this: HTMLBsSearchItemElement, ev: BsSearchItemCustomEvent<HTMLBsSearchItemElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
7594
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
7595
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
7596
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
7597
+ removeEventListener<K extends keyof HTMLBsSearchItemElementEventMap>(type: K, listener: (this: HTMLBsSearchItemElement, ev: BsSearchItemCustomEvent<HTMLBsSearchItemElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
7598
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
7599
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
7600
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
7601
+ }
7602
+ var HTMLBsSearchItemElement: {
7603
+ prototype: HTMLBsSearchItemElement;
7604
+ new (): HTMLBsSearchItemElement;
7605
+ };
6442
7606
  interface HTMLBsSessionTimeoutElementEventMap {
6443
7607
  "bsPrimary": { password?: string } | void;
6444
7608
  "bsSecondary": void;
@@ -6486,6 +7650,28 @@ declare global {
6486
7650
  prototype: HTMLBsSessionTimeoutElement;
6487
7651
  new (): HTMLBsSessionTimeoutElement;
6488
7652
  };
7653
+ /**
7654
+ * One row of a shortcut list: an action label on the left and its keyboard shortcut on the right.
7655
+ * Static information, not interactive. Standalone it has no role; `bs-keyboard-shortcuts` sets
7656
+ * `selectionRole="listitem"` on its rows (same pattern as `bs-list-item`).
7657
+ * Built from `bs-key-caps` (and so `bs-key`).
7658
+ * ## When to use
7659
+ * - A line in a keyboard-shortcut reference, usually inside `bs-keyboard-shortcuts`.
7660
+ * ## When not to use
7661
+ * - A clickable command or menu entry -- use `bs-menu-item` (which has its own shortcut slot).
7662
+ * @prop --bs-shortcut-row-height - Row height. Defaults to `36px` (Figma).
7663
+ * @prop --bs-shortcut-row-padding-x - Horizontal padding. Aliased to `--bs-spacing-100`.
7664
+ * @prop --bs-shortcut-row-gap - Gap between label and keys. Aliased to `--bs-spacing-100`.
7665
+ * @prop --bs-shortcut-row-radius - Corner radius. Aliased to `--bs-border-radius-75`.
7666
+ * @prop --bs-shortcut-row-color - Label colour. Aliased to `--bs-text-default`.
7667
+ * @prop --bs-shortcut-row-color-disabled - Label colour while `disabled`. Aliased to `--bs-text-on-disabled`.
7668
+ */
7669
+ interface HTMLBsShortcutRowElement extends Components.BsShortcutRow, HTMLStencilElement {
7670
+ }
7671
+ var HTMLBsShortcutRowElement: {
7672
+ prototype: HTMLBsShortcutRowElement;
7673
+ new (): HTMLBsShortcutRowElement;
7674
+ };
6489
7675
  interface HTMLBsSidePanelElementEventMap {
6490
7676
  "bsClose": void;
6491
7677
  }
@@ -7005,6 +8191,61 @@ declare global {
7005
8191
  prototype: HTMLBsTooltipTriggerElement;
7006
8192
  new (): HTMLBsTooltipTriggerElement;
7007
8193
  };
8194
+ interface HTMLBsTreeElementEventMap {
8195
+ "bsChange": string;
8196
+ }
8197
+ /**
8198
+ * A hierarchical list of `bs-tree-item` rows with single selection, expand/collapse and the
8199
+ * WAI-ARIA tree keyboard pattern.
8200
+ * The tree owns `role="tree"`, the roving `tabindex` (exactly one enabled, visible item is
8201
+ * tabbable: the selected one, otherwise the first), selection (kept in sync with each item's
8202
+ * `selected`) and keyboard navigation over the visible (rendered, non-disabled) items. Items own
8203
+ * their expansion state and emit `bsSelect` / `bsToggle`.
8204
+ * Built from: `bs-tree-item` rows.
8205
+ */
8206
+ interface HTMLBsTreeElement extends Components.BsTree, HTMLStencilElement {
8207
+ addEventListener<K extends keyof HTMLBsTreeElementEventMap>(type: K, listener: (this: HTMLBsTreeElement, ev: BsTreeCustomEvent<HTMLBsTreeElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
8208
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
8209
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
8210
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
8211
+ removeEventListener<K extends keyof HTMLBsTreeElementEventMap>(type: K, listener: (this: HTMLBsTreeElement, ev: BsTreeCustomEvent<HTMLBsTreeElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
8212
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
8213
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
8214
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
8215
+ }
8216
+ var HTMLBsTreeElement: {
8217
+ prototype: HTMLBsTreeElement;
8218
+ new (): HTMLBsTreeElement;
8219
+ };
8220
+ interface HTMLBsTreeItemElementEventMap {
8221
+ "bsToggle": boolean;
8222
+ "bsSelect": string;
8223
+ }
8224
+ /**
8225
+ * A single row of a `bs-tree`. An item that contains child `bs-tree-item` elements is a parent
8226
+ * (it gets an expand/collapse caret and a folder icon); an item without children is a leaf (no
8227
+ * caret, file icon).
8228
+ * The host carries `role="treeitem"` and the `aria-*` state; the owning `bs-tree` manages the
8229
+ * roving `tabindex`, selection and keyboard navigation. Nesting depth is computed automatically
8230
+ * from the number of ancestor `bs-tree-item` elements and exposed as `aria-level` -- it is not a
8231
+ * prop. Clicking the row selects it; clicking the caret (or pressing Right/Left in a tree) toggles
8232
+ * expansion -- the two are deliberately separate.
8233
+ * Built from: inline SVG icons only (no existing `bs-*` component covers a tree row).
8234
+ */
8235
+ interface HTMLBsTreeItemElement extends Components.BsTreeItem, HTMLStencilElement {
8236
+ addEventListener<K extends keyof HTMLBsTreeItemElementEventMap>(type: K, listener: (this: HTMLBsTreeItemElement, ev: BsTreeItemCustomEvent<HTMLBsTreeItemElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
8237
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
8238
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
8239
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
8240
+ removeEventListener<K extends keyof HTMLBsTreeItemElementEventMap>(type: K, listener: (this: HTMLBsTreeItemElement, ev: BsTreeItemCustomEvent<HTMLBsTreeItemElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
8241
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
8242
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
8243
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
8244
+ }
8245
+ var HTMLBsTreeItemElement: {
8246
+ prototype: HTMLBsTreeItemElement;
8247
+ new (): HTMLBsTreeItemElement;
8248
+ };
7008
8249
  interface HTMLBsWhatsNewElementEventMap {
7009
8250
  "bsMarkAllRead": void;
7010
8251
  "bsEntryAction": { id: string };
@@ -7103,6 +8344,7 @@ declare global {
7103
8344
  "bs-chip-informative": HTMLBsChipInformativeElement;
7104
8345
  "bs-chip-input": HTMLBsChipInputElement;
7105
8346
  "bs-citation-preview": HTMLBsCitationPreviewElement;
8347
+ "bs-command-palette": HTMLBsCommandPaletteElement;
7106
8348
  "bs-composer": HTMLBsComposerElement;
7107
8349
  "bs-composer-status-banner": HTMLBsComposerStatusBannerElement;
7108
8350
  "bs-container": HTMLBsContainerElement;
@@ -7111,14 +8353,21 @@ declare global {
7111
8353
  "bs-datepicker": HTMLBsDatepickerElement;
7112
8354
  "bs-dialog": HTMLBsDialogElement;
7113
8355
  "bs-divider": HTMLBsDividerElement;
8356
+ "bs-empty-state": HTMLBsEmptyStateElement;
7114
8357
  "bs-error-page": HTMLBsErrorPageElement;
7115
8358
  "bs-file-upload": HTMLBsFileUploadElement;
7116
8359
  "bs-file-upload-item": HTMLBsFileUploadItemElement;
8360
+ "bs-global-search": HTMLBsGlobalSearchElement;
7117
8361
  "bs-grid": HTMLBsGridElement;
7118
8362
  "bs-icon-button": HTMLBsIconButtonElement;
7119
8363
  "bs-icon-tile": HTMLBsIconTileElement;
7120
8364
  "bs-inline-tab": HTMLBsInlineTabElement;
7121
8365
  "bs-input": HTMLBsInputElement;
8366
+ "bs-key": HTMLBsKeyElement;
8367
+ "bs-key-caps": HTMLBsKeyCapsElement;
8368
+ "bs-keyboard-shortcuts": HTMLBsKeyboardShortcutsElement;
8369
+ "bs-list": HTMLBsListElement;
8370
+ "bs-list-item": HTMLBsListItemElement;
7122
8371
  "bs-logo": HTMLBsLogoElement;
7123
8372
  "bs-menu": HTMLBsMenuElement;
7124
8373
  "bs-menu-item": HTMLBsMenuItemElement;
@@ -7135,7 +8384,9 @@ declare global {
7135
8384
  "bs-progress-linear": HTMLBsProgressLinearElement;
7136
8385
  "bs-qr-code": HTMLBsQrCodeElement;
7137
8386
  "bs-radio": HTMLBsRadioElement;
8387
+ "bs-search-item": HTMLBsSearchItemElement;
7138
8388
  "bs-session-timeout": HTMLBsSessionTimeoutElement;
8389
+ "bs-shortcut-row": HTMLBsShortcutRowElement;
7139
8390
  "bs-side-panel": HTMLBsSidePanelElement;
7140
8391
  "bs-skeleton": HTMLBsSkeletonElement;
7141
8392
  "bs-slider": HTMLBsSliderElement;
@@ -7153,6 +8404,8 @@ declare global {
7153
8404
  "bs-toast": HTMLBsToastElement;
7154
8405
  "bs-tooltip": HTMLBsTooltipElement;
7155
8406
  "bs-tooltip-trigger": HTMLBsTooltipTriggerElement;
8407
+ "bs-tree": HTMLBsTreeElement;
8408
+ "bs-tree-item": HTMLBsTreeItemElement;
7156
8409
  "bs-whats-new": HTMLBsWhatsNewElement;
7157
8410
  "bs-whats-new-entry": HTMLBsWhatsNewEntryElement;
7158
8411
  }
@@ -8468,56 +9721,230 @@ declare namespace LocalJSX {
8468
9721
  "sourceName"?: string;
8469
9722
  }
8470
9723
  /**
8471
- * A chat composer input for Genie AI-style conversational interfaces: a text field
8472
- * plus an attach button, a mic/voice-recording toggle, and a single primary action button whose
8473
- * icon and behavior change with `state` (send, stop generating, or confirm a voice recording).
9724
+ * A Ctrl+K command palette: a modal with a search field, grouped commands, navigation and records, a
9725
+ * no-results view and a keyboard-hint footer. The data, the filtering, the command registry and the
9726
+ * recent-items storage are all yours: you slot `bs-search-item`s into the sections and set `status`.
9727
+ * Built from a native `<dialog>` (opened with `showModal()`, so focus is trapped, the page behind is inert
9728
+ * and the backdrop is the scrim), `bs-input` (type="search"), `bs-search-item`, `bs-key` (footer hints and
9729
+ * the Esc cap), `bs-chip-informative` (the scope chip) and `bs-spinner` (loading). Slot a `bs-key-caps` with
9730
+ * `slot="trailing"` inside an item to show a command's shortcut.
8474
9731
  * ## When to use
8475
- * - The message-entry bar for an AI chat/assistant or human support conversation.
9732
+ * - An app-wide "do anything" entry point opened with a hotkey: run commands, navigate, open records.
8476
9733
  * ## When not to use
8477
- * - A general-purpose text field — use `bs-input` instead; this component's layout and states are
8478
- * purpose-built for a chat composer, not a generic form field.
8479
- * ## Focus
8480
- * Uses `shadow: { delegatesFocus: true }`, so calling `.focus()` on the `<bs-composer>` host
8481
- * element itself (not just its internal `<input>`) moves focus into the shadow-DOM text field --
8482
- * useful for e.g. focusing the composer after a parent view mounts, without reaching into its
8483
- * shadow root.
8484
- * @prop --bs-composer-radius - Corner radius of the container. Aliased to `--bs-border-radius-150`.
8485
- * @prop --bs-composer-button-radius - Corner radius of the attach/mic/action buttons. Aliased to `--bs-border-radius-100`.
8486
- * @prop --bs-composer-button-size - Width/height of the attach/mic/action buttons. Aliased to `--bs-spacing-600`.
8487
- * @prop --bs-composer-bg - Background of the pill container. Aliased to `--bs-input-bg-default`.
8488
- * @prop --bs-composer-border - Border color of the pill container. Aliased to `--bs-input-border-default`.
8489
- * @prop --bs-composer-border-focus - Border color when the text field has focus. Aliased to `--bs-input-border-focus`.
8490
- * @prop --bs-composer-action-bg - Background of the primary action button. Aliased to `--bs-color-primary-default`.
8491
- * @prop --bs-composer-action-bg-hover - Aliased to `--bs-color-primary-hover`.
8492
- * @prop --bs-composer-action-bg-pressed - Aliased to `--bs-color-primary-pressed`.
8493
- * @prop --bs-composer-action-bg-disabled - Aliased to `--bs-surface-action-disabled`.
8494
- * @prop --bs-composer-action-icon - Icon color on the primary action button. Aliased to `--bs-text-on-action`.
8495
- * @prop --bs-composer-action-icon-disabled - Aliased to `--bs-text-on-disabled`.
8496
- * @prop --bs-composer-attach-icon - Icon color of the attach button. Aliased to `--bs-icon-default`.
8497
- * @prop --bs-composer-mic-icon - Icon color of the mic/stop-recording button. Aliased to `--bs-icon-default`.
8498
- * @prop --bs-composer-mic-icon-disabled - Aliased to `--bs-icon-disabled`.
8499
- * @prop --bs-composer-subtle-hover - Background of the attach/mic buttons on hover (subtle-button treatment, same as `bs-button`'s `subtle` variant). Aliased to `--bs-color-neutral-container`.
8500
- * @prop --bs-composer-subtle-pressed - Background of the attach/mic buttons when pressed. Aliased to `--bs-color-neutral-container-pressed`.
8501
- * @prop --bs-composer-input-max-lines - How many lines the text field grows to before scrolling internally instead of growing further. Aliased to `10`.
9734
+ * - A plain search box with a dropdown -- use `bs-global-search`.
9735
+ * - A small list of actions on one control -- use `bs-menu`.
9736
+ * A `>` as the first character of the field switches to commands-only mode (`commandsOnly`, reflected as
9737
+ * `commands-only`). The component filters nothing: listen to `bsInput`, swap the slotted items, set `status`.
9738
+ * Nested (sub-command) palettes are a consumer pattern: swap the slotted commands and set `scopeLabel`.
9739
+ * @prop --bs-command-palette-width - Panel width. Defaults to `640px` (Figma); capped to the viewport.
9740
+ * @prop --bs-command-palette-top - Distance from the top of the viewport. Defaults to `12vh`.
9741
+ * @prop --bs-command-palette-max-height - Max height of the results area. Defaults to `60vh`.
9742
+ * @prop --bs-command-palette-radius - Aliased to `--bs-border-radius-150`.
9743
+ * @prop --bs-command-palette-bg - Panel background. Aliased to `--bs-surface-base`.
9744
+ * @prop --bs-command-palette-shadow - Figma elevation level 4: `0 8px 16px` in `--bs-elevation-higher` (stronger in dark mode).
9745
+ * @prop --bs-command-palette-overlay - Scrim colour. Aliased to `--bs-surface-overlay`.
9746
+ * @prop --bs-command-palette-footer-bg - Aliased to `--bs-surface-container`.
9747
+ * @prop --bs-command-palette-divider-color - Aliased to `--bs-border-default`.
9748
+ * @prop --bs-command-palette-header-border-color - Aliased to `--bs-border-neutral-container`.
9749
+ * @prop --bs-command-palette-header-color - Aliased to `--bs-text-muted`.
9750
+ * @prop --bs-command-palette-hint-color - Aliased to `--bs-text-secondary`.
9751
+ * @prop --bs-command-palette-z-index - Aliased to `--bs-z-index-modal`.
8502
9752
  */
8503
- interface BsComposer {
9753
+ interface BsCommandPalette {
8504
9754
  /**
8505
- * Accessible name for the text field. This component has no visible `<label>` (chat composers don't show one in the design), so `ariaLabel` is the only way a consumer gives the textbox an accessible name -- set it in every real usage.
8506
- * @default null
9755
+ * @default 'All results'
8507
9756
  */
8508
- "ariaLabel"?: string | null;
9757
+ "allResultsLabel"?: string;
8509
9758
  /**
8510
- * Accessible name of the attach button.
8511
- * @default 'Attach'
9759
+ * @default 'Close'
8512
9760
  */
8513
- "attachLabel"?: string;
9761
+ "closeLabel"?: string;
8514
9762
  /**
8515
- * Accessible name of the primary action button while `state="recording"`.
8516
- * @default 'Confirm'
9763
+ * @default 'Commands'
8517
9764
  */
8518
- "confirmLabel"?: string;
9765
+ "commandsLabel"?: string;
8519
9766
  /**
8520
- * Removes the attach ("+") button from the DOM.
9767
+ * Derived from `value` (it starts with `>`). Read-only; set `value` instead.
9768
+ * @default false
9769
+ */
9770
+ "commandsOnly"?: boolean;
9771
+ /**
9772
+ * @default 'Commands only'
9773
+ */
9774
+ "commandsOnlyLabel"?: string;
9775
+ /**
9776
+ * A suggested correction; the "Did you mean" line shows while it is set.
9777
+ */
9778
+ "didYouMean"?: string;
9779
+ /**
9780
+ * @default 'Did you mean'
9781
+ */
9782
+ "didYouMeanLabel"?: string;
9783
+ /**
9784
+ * @default 'Check the spelling, or search records instead.'
9785
+ */
9786
+ "emptyDescription"?: string;
9787
+ /**
9788
+ * No-results view copy. Include the query in `emptyHeading` yourself.
9789
+ * @default 'No commands or records'
9790
+ */
9791
+ "emptyHeading"?: string;
9792
+ /**
9793
+ * Global shortcut that toggles the palette, e.g. `mod+k` (`mod` is Cmd on Mac, Ctrl elsewhere). Empty = off.
9794
+ * @default ''
9795
+ */
9796
+ "hotkey"?: string;
9797
+ /**
9798
+ * Keep the palette open after an item is chosen.
9799
+ * @default false
9800
+ */
9801
+ "keepOpenOnSelect"?: boolean;
9802
+ /**
9803
+ * Accessible name of the dialog.
9804
+ * @default 'Command palette'
9805
+ */
9806
+ "label"?: string;
9807
+ /**
9808
+ * Accessible name of the results listbox.
9809
+ * @default 'Results'
9810
+ */
9811
+ "listLabel"?: string;
9812
+ /**
9813
+ * Text of the loading row.
9814
+ * @default 'Loading…'
9815
+ */
9816
+ "loadingLabel"?: string;
9817
+ /**
9818
+ * Footer hint texts.
9819
+ * @default 'Navigate'
9820
+ */
9821
+ "navigateLabel"?: string;
9822
+ /**
9823
+ * @default 'Navigation'
9824
+ */
9825
+ "navigationLabel"?: string;
9826
+ /**
9827
+ * Fires on every keystroke with `{ value, query, commandsOnly }`.
9828
+ */
9829
+ "onBsInput"?: (event: BsCommandPaletteCustomEvent<BsCommandPaletteInputDetail>) => void;
9830
+ /**
9831
+ * Fires when the palette opens or closes through user interaction (hotkey, Esc, scrim, selection).
9832
+ */
9833
+ "onBsOpenChange"?: (event: BsCommandPaletteCustomEvent<boolean>) => void;
9834
+ /**
9835
+ * Fires on Backspace in an empty field while `scopeLabel` is set.
9836
+ */
9837
+ "onBsScopeExit"?: (event: BsCommandPaletteCustomEvent<void>) => void;
9838
+ /**
9839
+ * Fires when an item is chosen (click or Enter) with `{ value, section, commandsOnly }`.
9840
+ */
9841
+ "onBsSelect"?: (event: BsCommandPaletteCustomEvent<BsCommandPaletteSelectDetail>) => void;
9842
+ /**
9843
+ * Fires when the "Did you mean" suggestion is pressed, with its text.
9844
+ */
9845
+ "onBsSuggestion"?: (event: BsCommandPaletteCustomEvent<string>) => void;
9846
+ /**
9847
+ * Whether the palette is open.
9848
+ * @default false
9849
+ */
9850
+ "open"?: boolean;
9851
+ /**
9852
+ * @default 'Open'
9853
+ */
9854
+ "openLabel"?: string;
9855
+ /**
9856
+ * Placeholder of the field.
9857
+ * @default 'Type a command or search…'
9858
+ */
9859
+ "placeholder"?: string;
9860
+ /**
9861
+ * Section headers.
9862
+ * @default 'Recent'
9863
+ */
9864
+ "recentLabel"?: string;
9865
+ /**
9866
+ * @default 'Records'
9867
+ */
9868
+ "recordsLabel"?: string;
9869
+ /**
9870
+ * Nested scope: shows this text as a chip before the field. Backspace on an empty field emits `bsScopeExit`.
9871
+ */
9872
+ "scopeLabel"?: string;
9873
+ /**
9874
+ * Shows the footer of keyboard hints.
9875
+ * @default true
9876
+ */
9877
+ "showFooter"?: boolean;
9878
+ /**
9879
+ * Which view to show. You choose it; nothing is inferred from `value`. `default` and `results` render the same; they differ for screen readers only.
9880
+ * @default 'default'
9881
+ */
9882
+ "status"?: BsCommandPaletteStatus;
9883
+ /**
9884
+ * @default 'Suggested'
9885
+ */
9886
+ "suggestedLabel"?: string;
9887
+ /**
9888
+ * @default 'Try instead'
9889
+ */
9890
+ "tryInsteadLabel"?: string;
9891
+ /**
9892
+ * The field value. Two-way. A leading `>` means commands-only mode.
9893
+ * @default ''
9894
+ */
9895
+ "value"?: string;
9896
+ }
9897
+ /**
9898
+ * A chat composer input for Genie AI-style conversational interfaces: a text field
9899
+ * plus an attach button, a mic/voice-recording toggle, and a single primary action button whose
9900
+ * icon and behavior change with `state` (send, stop generating, or confirm a voice recording).
9901
+ * ## When to use
9902
+ * - The message-entry bar for an AI chat/assistant or human support conversation.
9903
+ * ## When not to use
9904
+ * - A general-purpose text field — use `bs-input` instead; this component's layout and states are
9905
+ * purpose-built for a chat composer, not a generic form field.
9906
+ * ## Focus
9907
+ * Uses `shadow: { delegatesFocus: true }`, so calling `.focus()` on the `<bs-composer>` host
9908
+ * element itself (not just its internal `<input>`) moves focus into the shadow-DOM text field --
9909
+ * useful for e.g. focusing the composer after a parent view mounts, without reaching into its
9910
+ * shadow root.
9911
+ * @prop --bs-composer-radius - Corner radius of the container. Aliased to `--bs-border-radius-150`.
9912
+ * @prop --bs-composer-button-radius - Corner radius of the attach/mic/action buttons. Aliased to `--bs-border-radius-100`.
9913
+ * @prop --bs-composer-button-size - Width/height of the attach/mic/action buttons. Aliased to `--bs-spacing-600`.
9914
+ * @prop --bs-composer-bg - Background of the pill container. Aliased to `--bs-input-bg-default`.
9915
+ * @prop --bs-composer-border - Border color of the pill container. Aliased to `--bs-input-border-default`.
9916
+ * @prop --bs-composer-border-focus - Border color when the text field has focus. Aliased to `--bs-input-border-focus`.
9917
+ * @prop --bs-composer-action-bg - Background of the primary action button. Aliased to `--bs-color-primary-default`.
9918
+ * @prop --bs-composer-action-bg-hover - Aliased to `--bs-color-primary-hover`.
9919
+ * @prop --bs-composer-action-bg-pressed - Aliased to `--bs-color-primary-pressed`.
9920
+ * @prop --bs-composer-action-bg-disabled - Aliased to `--bs-surface-action-disabled`.
9921
+ * @prop --bs-composer-action-icon - Icon color on the primary action button. Aliased to `--bs-text-on-action`.
9922
+ * @prop --bs-composer-action-icon-disabled - Aliased to `--bs-text-on-disabled`.
9923
+ * @prop --bs-composer-attach-icon - Icon color of the attach button. Aliased to `--bs-icon-default`.
9924
+ * @prop --bs-composer-mic-icon - Icon color of the mic/stop-recording button. Aliased to `--bs-icon-default`.
9925
+ * @prop --bs-composer-mic-icon-disabled - Aliased to `--bs-icon-disabled`.
9926
+ * @prop --bs-composer-subtle-hover - Background of the attach/mic buttons on hover (subtle-button treatment, same as `bs-button`'s `subtle` variant). Aliased to `--bs-color-neutral-container`.
9927
+ * @prop --bs-composer-subtle-pressed - Background of the attach/mic buttons when pressed. Aliased to `--bs-color-neutral-container-pressed`.
9928
+ * @prop --bs-composer-input-max-lines - How many lines the text field grows to before scrolling internally instead of growing further. Aliased to `10`.
9929
+ */
9930
+ interface BsComposer {
9931
+ /**
9932
+ * Accessible name for the text field. This component has no visible `<label>` (chat composers don't show one in the design), so `ariaLabel` is the only way a consumer gives the textbox an accessible name -- set it in every real usage.
9933
+ * @default null
9934
+ */
9935
+ "ariaLabel"?: string | null;
9936
+ /**
9937
+ * Accessible name of the attach button.
9938
+ * @default 'Attach'
9939
+ */
9940
+ "attachLabel"?: string;
9941
+ /**
9942
+ * Accessible name of the primary action button while `state="recording"`.
9943
+ * @default 'Confirm'
9944
+ */
9945
+ "confirmLabel"?: string;
9946
+ /**
9947
+ * Removes the attach ("+") button from the DOM.
8521
9948
  * @default false
8522
9949
  */
8523
9950
  "hideAttach"?: boolean;
@@ -9081,6 +10508,43 @@ declare namespace LocalJSX {
9081
10508
  */
9082
10509
  "variant"?: BsDividerVariant;
9083
10510
  }
10511
+ /**
10512
+ * A centered "nothing to show" block: an icon tile, a heading, a description and an optional action.
10513
+ * Used for empty lists, "no results" and error states inside a panel, card or page section.
10514
+ * Built from `bs-icon-tile` (and, in your `action` slot, usually a `bs-button`).
10515
+ * The component has no role. Live regions belong on a wrapper you control (e.g. `role="status"` on the
10516
+ * element that stays in the DOM while this block appears and disappears).
10517
+ * ## When to use
10518
+ * - A list, table or search result that has nothing to show, or failed to load.
10519
+ * ## When not to use
10520
+ * - A full-page error with a status code -- use `bs-error-page`.
10521
+ * - A transient message -- use `bs-toast` or `bs-snackbar`.
10522
+ * @prop --bs-empty-state-padding-y - Vertical padding. Aliased to `--bs-spacing-700` (56px).
10523
+ * @prop --bs-empty-state-padding-x - Horizontal padding. Aliased to `--bs-spacing-300` (24px).
10524
+ * @prop --bs-empty-state-gap - Gap between tile, heading, description and action. Aliased to `--bs-spacing-150`.
10525
+ * @prop --bs-empty-state-heading-color - Aliased to `--bs-text-default`.
10526
+ * @prop --bs-empty-state-description-color - Aliased to `--bs-text-secondary`.
10527
+ */
10528
+ interface BsEmptyState {
10529
+ /**
10530
+ * The description text. The default slot overrides it.
10531
+ */
10532
+ "description"?: string;
10533
+ /**
10534
+ * The heading text.
10535
+ */
10536
+ "heading"?: string;
10537
+ /**
10538
+ * Heading level, 2 to 6 (renders `h2`..`h6`). Pick the one that fits the page outline.
10539
+ * @default 3
10540
+ */
10541
+ "headingLevel"?: 2 | 3 | 4 | 5 | 6;
10542
+ /**
10543
+ * Colour and default glyph of the icon tile. Use `error` for failures.
10544
+ * @default 'default'
10545
+ */
10546
+ "intent"?: BsIconTileIntent;
10547
+ }
9084
10548
  /**
9085
10549
  * A full-block page for when the user can't get to what they asked for: page not found (404), a server
9086
10550
  * error (500), no access (403), planned maintenance, or no internet connection. Matches the Figma
@@ -9260,6 +10724,193 @@ declare namespace LocalJSX {
9260
10724
  */
9261
10725
  "thumbnailSrc"?: string;
9262
10726
  }
10727
+ /**
10728
+ * A global search combobox: a search field with a dropdown panel of suggestions, results, an empty state
10729
+ * or an error state, plus a keyboard-hint footer. The data, the filtering and the recent-search storage
10730
+ * are all yours: you slot `bs-search-item`s into the sections and tell the component which `status` to show.
10731
+ * Built from `bs-input` (type="search"), `bs-search-item`, `bs-empty-state` (and so `bs-icon-tile`),
10732
+ * `bs-button` and `bs-key` (the footer keycaps).
10733
+ * ## When to use
10734
+ * - An app-wide "find anything" field with recent searches, jump-to shortcuts and grouped results.
10735
+ * ## When not to use
10736
+ * - Filtering the list or table that is already on screen -- use `bs-input type="search"`.
10737
+ * - A list of commands or actions -- use `bs-menu`.
10738
+ * - The complete result set -- link to a full search results page ("See all results").
10739
+ * Put `bs-search-item` children in the light DOM with `slot="recent"`, `slot="jump-to"`,
10740
+ * `slot="top-matches"` or `slot="search-in"`. A section (and its header) is only rendered when its slot has
10741
+ * content. Up/Down arrows move a highlight through the visible items; focus never leaves the field.
10742
+ * Known limit: the items are in your light DOM and the combobox in this shadow root, so
10743
+ * `aria-activedescendant` (an id reference) does not resolve across that boundary in every browser; the
10744
+ * highlighted option also gets `aria-selected="true"`.
10745
+ * @prop --bs-global-search-width - Field and panel width. Defaults to `480px` (Figma); capped at 100%.
10746
+ * @prop --bs-global-search-panel-radius - Aliased to `--bs-border-radius-100`.
10747
+ * @prop --bs-global-search-panel-padding - Aliased to `--bs-spacing-100`.
10748
+ * @prop --bs-global-search-gap - Gap between sections, and between the field and the panel. Aliased to `--bs-spacing-100`.
10749
+ * @prop --bs-global-search-panel-bg - Panel background. Aliased to `--bs-surface-base`.
10750
+ * @prop --bs-global-search-shadow - Panel shadow: Figma elevation level 3 (`0 4px 8px` in `--bs-elevation-high`, 10% black in light mode and 30% in dark mode).
10751
+ * @prop --bs-global-search-z-index - Panel stacking. Aliased to `--bs-z-index-dropdown`.
10752
+ * @prop --bs-global-search-divider-color - Footer divider. Aliased to `--bs-border-default`.
10753
+ * @prop --bs-global-search-header-border-color - Section header underline. Aliased to `--bs-border-neutral-container`.
10754
+ * @prop --bs-global-search-header-color - Section header text. Aliased to `--bs-text-muted`.
10755
+ * @prop --bs-global-search-hint-color - Footer hint text. Aliased to `--bs-text-secondary`.
10756
+ */
10757
+ interface BsGlobalSearch {
10758
+ /**
10759
+ * Text of the footer button that clears recent searches.
10760
+ * @default 'Clear recent'
10761
+ */
10762
+ "clearRecentLabel"?: string;
10763
+ /**
10764
+ * Text of the empty state's action.
10765
+ * @default 'Clear search'
10766
+ */
10767
+ "clearSearchLabel"?: string;
10768
+ /**
10769
+ * Footer hint text after the Esc key.
10770
+ * @default 'Close'
10771
+ */
10772
+ "closeLabel"?: string;
10773
+ /**
10774
+ * Disables the field; the panel cannot open.
10775
+ * @default false
10776
+ */
10777
+ "disabled"?: boolean;
10778
+ /**
10779
+ * Description of the built-in empty state.
10780
+ * @default 'Try a different search.'
10781
+ */
10782
+ "emptyDescription"?: string;
10783
+ /**
10784
+ * Heading of the built-in empty state.
10785
+ * @default 'No results'
10786
+ */
10787
+ "emptyHeading"?: string;
10788
+ /**
10789
+ * Description of the built-in error state.
10790
+ * @default 'We couldn’t reach the server. Your query is kept — try again in a moment.'
10791
+ */
10792
+ "errorDescription"?: string;
10793
+ /**
10794
+ * Heading of the built-in error state.
10795
+ * @default 'Search isn’t available right now'
10796
+ */
10797
+ "errorHeading"?: string;
10798
+ /**
10799
+ * Footer hint text after the Enter key (results view).
10800
+ * @default 'Full results'
10801
+ */
10802
+ "fullResultsLabel"?: string;
10803
+ /**
10804
+ * Header of the `jump-to` section.
10805
+ * @default 'Jump to'
10806
+ */
10807
+ "jumpToLabel"?: string;
10808
+ /**
10809
+ * Accessible name of the search field. Falls back to the placeholder. `bs-input` has no aria-label prop, so this names the combobox wrapper.
10810
+ */
10811
+ "label"?: string;
10812
+ /**
10813
+ * Accessible name of the suggestions listbox.
10814
+ * @default 'Search suggestions'
10815
+ */
10816
+ "listLabel"?: string;
10817
+ /**
10818
+ * Footer hint text after the arrow keys.
10819
+ * @default 'Navigate'
10820
+ */
10821
+ "navigateLabel"?: string;
10822
+ /**
10823
+ * Fires when "Clear recent" is pressed.
10824
+ */
10825
+ "onBsClearRecent"?: (event: BsGlobalSearchCustomEvent<void>) => void;
10826
+ /**
10827
+ * Fires when the empty state's "Clear search" is pressed; the value is also cleared.
10828
+ */
10829
+ "onBsClearSearch"?: (event: BsGlobalSearchCustomEvent<void>) => void;
10830
+ /**
10831
+ * Fires on every keystroke with the query. The component filters nothing itself.
10832
+ */
10833
+ "onBsInput"?: (event: BsGlobalSearchCustomEvent<string>) => void;
10834
+ /**
10835
+ * Fires when the panel opens or closes through user interaction, with the new state.
10836
+ */
10837
+ "onBsOpenChange"?: (event: BsGlobalSearchCustomEvent<boolean>) => void;
10838
+ /**
10839
+ * Fires when the error state's "Try again" is pressed.
10840
+ */
10841
+ "onBsRetry"?: (event: BsGlobalSearchCustomEvent<void>) => void;
10842
+ /**
10843
+ * Fires on Enter with no highlighted item, with the query.
10844
+ */
10845
+ "onBsSearch"?: (event: BsGlobalSearchCustomEvent<string>) => void;
10846
+ /**
10847
+ * Fires when "See all results" is pressed.
10848
+ */
10849
+ "onBsSeeAll"?: (event: BsGlobalSearchCustomEvent<void>) => void;
10850
+ /**
10851
+ * Fires when an item is chosen (click or Enter), with its `value` and section (slot name).
10852
+ */
10853
+ "onBsSelect"?: (event: BsGlobalSearchCustomEvent<BsGlobalSearchSelectDetail>) => void;
10854
+ /**
10855
+ * Whether the dropdown panel is open. Opens on focus, click and typing; closes on Escape, outside click and selection.
10856
+ * @default false
10857
+ */
10858
+ "open"?: boolean;
10859
+ /**
10860
+ * Placeholder of the field (also its accessible name unless `label` is set).
10861
+ * @default 'Search customers, orders, products…'
10862
+ */
10863
+ "placeholder"?: string;
10864
+ /**
10865
+ * Header of the `recent` section.
10866
+ * @default 'Recent searches'
10867
+ */
10868
+ "recentLabel"?: string;
10869
+ /**
10870
+ * Text of the error state's action.
10871
+ * @default 'Try again'
10872
+ */
10873
+ "retryLabel"?: string;
10874
+ /**
10875
+ * Header of the `search-in` section.
10876
+ * @default 'Search in'
10877
+ */
10878
+ "searchInLabel"?: string;
10879
+ /**
10880
+ * Footer hint text after the Enter key (default view).
10881
+ * @default 'Search'
10882
+ */
10883
+ "searchLabel"?: string;
10884
+ /**
10885
+ * Text of the footer button of the results view, when `totalResults` is not set.
10886
+ * @default 'See all results'
10887
+ */
10888
+ "seeAllLabel"?: string;
10889
+ /**
10890
+ * Shows the footer (hints and the Clear recent / See all button) for the `default` and `results` views.
10891
+ * @default true
10892
+ */
10893
+ "showFooter"?: boolean;
10894
+ /**
10895
+ * Which view the panel shows. You choose it; nothing is inferred from `value`.
10896
+ * @default 'default'
10897
+ */
10898
+ "status"?: BsGlobalSearchStatus;
10899
+ /**
10900
+ * Header of the `top-matches` section.
10901
+ * @default 'Top matches'
10902
+ */
10903
+ "topMatchesLabel"?: string;
10904
+ /**
10905
+ * Total number of results (status `results`): shown as "See all {n} results" and announced to screen readers.
10906
+ */
10907
+ "totalResults"?: number;
10908
+ /**
10909
+ * The query. Two-way with the field.
10910
+ * @default ''
10911
+ */
10912
+ "value"?: string;
10913
+ }
9263
10914
  /**
9264
10915
  * A CSS grid layout wrapper. Children are placed in equal-width columns with a token-based gap.
9265
10916
  * `columns` takes either a number (`"3"` becomes `repeat(3, minmax(0, 1fr))`) or any raw
@@ -9379,7 +11030,7 @@ declare namespace LocalJSX {
9379
11030
  * Colour and default glyph. `brand` uses the brand colours; `information` the info palette.
9380
11031
  * @default 'default'
9381
11032
  */
9382
- "intent"?: BsIconTileIntent;
11033
+ "intent"?: BsIconTileIntent1;
9383
11034
  /**
9384
11035
  * Accessible name. When set, the tile is exposed as an image with this name; when empty it is decorative and hidden from assistive tech.
9385
11036
  */
@@ -9521,86 +11172,370 @@ declare namespace LocalJSX {
9521
11172
  /**
9522
11173
  * The `name` the value is submitted under in a surrounding `<form>`'s `FormData`.
9523
11174
  */
9524
- "name"?: string;
9525
- "onBsChange"?: (event: BsInputCustomEvent<string>) => void;
11175
+ "name"?: string;
11176
+ "onBsChange"?: (event: BsInputCustomEvent<string>) => void;
11177
+ /**
11178
+ * Emitted when a chip is committed (Enter pressed in the draft input) for `type="chip"`.
11179
+ */
11180
+ "onBsChipAdd"?: (event: BsInputCustomEvent<string>) => void;
11181
+ /**
11182
+ * Emitted when a chip's remove button is clicked for `type="chip"`.
11183
+ */
11184
+ "onBsChipRemove"?: (event: BsInputCustomEvent<string>) => void;
11185
+ /**
11186
+ * Emitted when the country `<select>` changes for `type="country"`.
11187
+ */
11188
+ "onBsCountryChange"?: (event: BsInputCustomEvent<string>) => void;
11189
+ "onBsInput"?: (event: BsInputCustomEvent<string>) => void;
11190
+ /**
11191
+ * Emitted when `type="dropdown"`'s trigger is toggled. See `open`'s doc comment for this type's shell-only limitation.
11192
+ */
11193
+ "onBsOpen"?: (event: BsInputCustomEvent<boolean>) => void;
11194
+ /**
11195
+ * Emitted when the title `<select>` changes for `type="initials"`.
11196
+ */
11197
+ "onBsTitleChange"?: (event: BsInputCustomEvent<string>) => void;
11198
+ /**
11199
+ * Whether the `type="dropdown"` trigger is open. Reflects to an attribute so consumers can style an open state via CSS. When `options` is non-empty, this also controls whether the `bs-menu` of `bs-menu-item`s is rendered below the field.
11200
+ * @default false
11201
+ */
11202
+ "open"?: boolean;
11203
+ /**
11204
+ * Options for `type="select"` (rendered as native `<option>`s) and `type="dropdown"` (rendered as a `bs-menu` of `bs-menu-item`s when `open`). Must be set as a JS property, not an HTML attribute -- see CONVENTIONS.md's non-string props rule.
11205
+ * @default []
11206
+ */
11207
+ "options"?: { label: string; value: string }[];
11208
+ "placeholder"?: string;
11209
+ /**
11210
+ * Marks the field as required: renders a red `*` after the label and sets `aria-required="true"` on the control. Applies regardless of `type`.
11211
+ * @default false
11212
+ */
11213
+ "required"?: boolean;
11214
+ /**
11215
+ * Number of visible rows for `type="textarea"`.
11216
+ * @default 3
11217
+ */
11218
+ "rows"?: number;
11219
+ /**
11220
+ * Accessible name of the password toggle while the password is hidden.
11221
+ * @default 'Show password'
11222
+ */
11223
+ "showPasswordLabel"?: string;
11224
+ /**
11225
+ * Step size for `type="number"`'s increment/decrement stepper buttons.
11226
+ * @default 1
11227
+ */
11228
+ "step"?: number;
11229
+ /**
11230
+ * Title select options for `type="initials"` (e.g. `['Mrs.', 'Mr.', 'Dr.']`). Must be set as a JS property, not an HTML attribute -- see CONVENTIONS.md's non-string props rule.
11231
+ * @default []
11232
+ */
11233
+ "titleOptions"?: string[];
11234
+ /**
11235
+ * @default 'text'
11236
+ */
11237
+ "type"?: | 'text'
11238
+ | 'email'
11239
+ | 'password'
11240
+ | 'number'
11241
+ | 'search'
11242
+ | 'date'
11243
+ | 'dropdown'
11244
+ | 'select'
11245
+ | 'textarea'
11246
+ | 'chip'
11247
+ | 'initials'
11248
+ | 'country'
11249
+ | 'pin';
11250
+ /**
11251
+ * Current value. Native `input`/`change` events don't cross the Shadow DOM boundary, so this component re-dispatches them as `bsInput`/`bsChange` custom events instead. Mutable so the `number` type's stepper buttons can update it directly.
11252
+ * @default ''
11253
+ */
11254
+ "value"?: string;
11255
+ }
11256
+ /**
11257
+ * One key of a keyboard shortcut, e.g. `Ctrl`, `K` or `Esc` -- rendered as a `<kbd>` keycap.
11258
+ * Shows a text label, or an icon (e.g. a return arrow) via the `icon` slot.
11259
+ * ## When to use
11260
+ * - Showing a keyboard shortcut hint next to a control or inside a search field.
11261
+ * - Alone for a single key, or as the children of `bs-key-caps` for a multi-key shortcut.
11262
+ * ## When not to use
11263
+ * - As a button or any clickable control -- a key is a static hint, not interactive.
11264
+ * @prop --bs-key-bg - Cap background. Aliased to `--bs-surface-base`.
11265
+ * @prop --bs-key-border-color - Cap border colour. Aliased to `--bs-border-default`.
11266
+ * @prop --bs-key-radius - Cap corner radius. Aliased to `--bs-border-radius-50`.
11267
+ * @prop --bs-key-padding-x - Horizontal padding. Aliased to `--bs-spacing-75`.
11268
+ * @prop --bs-key-padding-y - Vertical padding. Aliased to `--bs-spacing-50`.
11269
+ * @prop --bs-key-min-width - Smallest cap width, so single characters keep a keycap shape. Defaults to `25px` (Figma).
11270
+ * @prop --bs-key-color - Label colour. Aliased to `--bs-text-secondary`.
11271
+ * @prop --bs-key-font-size - Label size. Aliased to `--bs-font-size-xs` (12px).
11272
+ * @prop --bs-key-icon-size - Icon size. Defaults to `16px` (Figma).
11273
+ */
11274
+ interface BsKey {
11275
+ /**
11276
+ * The key's text, e.g. `Ctrl`. The default slot overrides it.
11277
+ */
11278
+ "label"?: string;
11279
+ }
11280
+ /**
11281
+ * A keyboard shortcut of one to four keys joined by "+", e.g. `Ctrl + K`. Give it a `keys` string
11282
+ * (`"Ctrl+Shift+K"`) or array (`['Ctrl', '+']` for a literal plus key), or slot your own `bs-key`
11283
+ * elements -- for example when a key is an icon.
11284
+ * ## When to use
11285
+ * - A shortcut hint beside a menu item, button or inside a search field.
11286
+ * ## When not to use
11287
+ * - Instructions that need prose ("press Enter to submit") -- write a sentence and use a single `bs-key` inline.
11288
+ * - Anything interactive -- keys are static hints.
11289
+ * @prop --bs-key-caps-gap - Gap between keys and separators. Aliased to `--bs-spacing-100`.
11290
+ * @prop --bs-key-caps-separator-color - Colour of the "+" separators. Aliased to `--bs-text-muted`.
11291
+ * @prop --bs-key-caps-disabled-opacity - Opacity of the whole shortcut while `disabled`. Defaults to `0.38` (Figma).
11292
+ */
11293
+ interface BsKeyCaps {
11294
+ /**
11295
+ * Dims the whole shortcut and marks it `aria-disabled`.
11296
+ * @default false
11297
+ */
11298
+ "disabled"?: boolean;
11299
+ /**
11300
+ * The keys as text. A string is split on `+` (`"Ctrl+K"`); use an array to include a literal plus key. Ignored when `bs-key` elements are slotted instead. Figma defines one to four keys.
11301
+ */
11302
+ "keys"?: string | string[];
11303
+ /**
11304
+ * Accessible name of the shortcut, e.g. "Control plus K". Defaults to the keys joined with " plus ".
11305
+ */
11306
+ "label"?: string;
11307
+ }
11308
+ /**
11309
+ * A searchable reference panel of keyboard shortcuts: heading and close button, a search field, an
11310
+ * optional single-key on/off switch, shortcut groups in two columns and a footer hint. It is a
11311
+ * surface, not a modal -- place it inside `bs-dialog` or a popover.
11312
+ * Built from `bs-card`, `bs-icon-button`, `bs-input`, `bs-switch`, `bs-shortcut-row` (and so
11313
+ * `bs-key-caps` / `bs-key`).
11314
+ * ## When to use
11315
+ * - A "press ? to see shortcuts" help overlay for an app with many shortcuts.
11316
+ * ## When not to use
11317
+ * - A long-form help page or documentation -- link to it instead.
11318
+ * - A list of commands the user can run from it -- use `bs-menu`.
11319
+ * @prop --bs-keyboard-shortcuts-width - Panel width and min-width. Defaults to `720px` (Figma).
11320
+ * @prop --bs-keyboard-shortcuts-bg - Panel background. Aliased to `--bs-surface-base`.
11321
+ * @prop --bs-keyboard-shortcuts-radius - Aliased to `--bs-border-radius-150`.
11322
+ * @prop --bs-keyboard-shortcuts-padding - Aliased to `--bs-spacing-200`.
11323
+ * @prop --bs-keyboard-shortcuts-gap - Gap between sections. Aliased to `--bs-spacing-200`.
11324
+ * @prop --bs-keyboard-shortcuts-shadow - Figma elevation level 4 (`0 8px 8px` in `--bs-elevation-higher`, 12% black in light mode and 25% in dark mode).
11325
+ * @prop --bs-keyboard-shortcuts-column-gap - Gap between the two columns. Aliased to `--bs-spacing-600`.
11326
+ * @prop --bs-keyboard-shortcuts-color - Main text colour. Aliased to `--bs-text-default`.
11327
+ * @prop --bs-keyboard-shortcuts-color-secondary - Titles, captions, footer. Aliased to `--bs-text-secondary`.
11328
+ */
11329
+ interface BsKeyboardShortcuts {
11330
+ /**
11331
+ * Accessible name of the close button.
11332
+ * @default 'Close'
11333
+ */
11334
+ "closeLabel"?: string;
11335
+ /**
11336
+ * The key shown in the footer hint.
11337
+ * @default '?'
11338
+ */
11339
+ "footerKey"?: string;
11340
+ /**
11341
+ * Text before the footer key.
11342
+ * @default 'Press'
11343
+ */
11344
+ "footerPrefix"?: string;
11345
+ /**
11346
+ * Footer text after the key.
11347
+ * @default 'anywhere to open this list. On Mac: Cmd instead of Ctrl.'
11348
+ */
11349
+ "footerText"?: string;
11350
+ /**
11351
+ * Property only: the shortcut groups.
11352
+ * @default []
11353
+ */
11354
+ "groups"?: BsShortcutGroup[];
11355
+ /**
11356
+ * Heading text. The `heading` slot overrides it.
11357
+ * @default 'Keyboard shortcuts'
11358
+ */
11359
+ "heading"?: string;
11360
+ /**
11361
+ * Line shown when the query matches nothing.
11362
+ * @default 'No shortcuts match'
11363
+ */
11364
+ "noResultsText"?: string;
11365
+ /**
11366
+ * Emitted by the close button and by Escape.
11367
+ */
11368
+ "onBsClose"?: (event: BsKeyboardShortcutsCustomEvent<void>) => void;
11369
+ /**
11370
+ * Emitted when the search text changes, with the new text.
11371
+ */
11372
+ "onBsQueryChange"?: (event: BsKeyboardShortcutsCustomEvent<string>) => void;
11373
+ /**
11374
+ * Emitted when the single-key switch changes, with the new value.
11375
+ */
11376
+ "onBsSingleKeyChange"?: (event: BsKeyboardShortcutsCustomEvent<boolean>) => void;
11377
+ /**
11378
+ * Current search text. Filters by action or keys text, case-insensitively.
11379
+ * @default ''
11380
+ */
11381
+ "query"?: string;
11382
+ /**
11383
+ * Search field placeholder (also its accessible name: `bs-input` has no aria-label prop).
11384
+ * @default 'Search for an action'
11385
+ */
11386
+ "searchPlaceholder"?: string;
11387
+ /**
11388
+ * Shows the footer hint.
11389
+ * @default true
11390
+ */
11391
+ "showFooterHint"?: boolean;
11392
+ /**
11393
+ * Shows the single-key switch row.
11394
+ * @default true
11395
+ */
11396
+ "showSingleKeySwitch"?: boolean;
11397
+ /**
11398
+ * Switch caption.
11399
+ * @default 'Turn off if they clash with a screen reader or other tools.'
11400
+ */
11401
+ "singleKeyDescription"?: string;
11402
+ /**
11403
+ * Whether single-key shortcuts are on. When off they are shown dimmed.
11404
+ * @default true
11405
+ */
11406
+ "singleKeyEnabled"?: boolean;
11407
+ /**
11408
+ * Switch title.
11409
+ * @default 'Single-key shortcuts'
11410
+ */
11411
+ "singleKeyLabel"?: string;
11412
+ }
11413
+ /**
11414
+ * A vertical list of `bs-list-item` rows, optionally single-select.
11415
+ * ## When to use
11416
+ * - Records, people, files or options shown as rows with leading media and descriptions.
11417
+ * - `selectable` for a single-choice list (e.g. a conversation list next to a detail pane).
11418
+ * ## When not to use
11419
+ * - A popup list of actions -- use `bs-menu`.
11420
+ * - Navigation between app sections -- use `bs-navigation-drawer`.
11421
+ * - Multi-column, sortable or paged data -- use `bs-data-table`.
11422
+ * Built from `bs-list-item` children (light DOM; the list never moves nodes).
11423
+ * @prop --bs-list-gap - Gap between rows. Defaults to `0`.
11424
+ * @prop --bs-list-divider-color - Divider colour when `dividers` is set. Aliased to `--bs-border-neutral-container`.
11425
+ */
11426
+ interface BsList {
11427
+ /**
11428
+ * Accessible name of the list.
11429
+ * @default null
11430
+ */
11431
+ "ariaLabel"?: string | null;
9526
11432
  /**
9527
- * Emitted when a chip is committed (Enter pressed in the draft input) for `type="chip"`.
11433
+ * Draws a 1px separator between rows.
11434
+ * @default false
9528
11435
  */
9529
- "onBsChipAdd"?: (event: BsInputCustomEvent<string>) => void;
11436
+ "dividers"?: boolean;
9530
11437
  /**
9531
- * Emitted when a chip's remove button is clicked for `type="chip"`.
11438
+ * Fires with the new `value` when the user changes the selection.
9532
11439
  */
9533
- "onBsChipRemove"?: (event: BsInputCustomEvent<string>) => void;
11440
+ "onBsChange"?: (event: BsListCustomEvent<string | null>) => void;
9534
11441
  /**
9535
- * Emitted when the country `<select>` changes for `type="country"`.
11442
+ * Single-selection mode: role="listbox", rows are `option`s with roving tabindex.
11443
+ * @default false
9536
11444
  */
9537
- "onBsCountryChange"?: (event: BsInputCustomEvent<string>) => void;
9538
- "onBsInput"?: (event: BsInputCustomEvent<string>) => void;
11445
+ "selectable"?: boolean;
9539
11446
  /**
9540
- * Emitted when `type="dropdown"`'s trigger is toggled. See `open`'s doc comment for this type's shell-only limitation.
11447
+ * `value` of the selected item (selectable mode).
11448
+ * @default null
9541
11449
  */
9542
- "onBsOpen"?: (event: BsInputCustomEvent<boolean>) => void;
11450
+ "value"?: string | null;
11451
+ }
11452
+ /**
11453
+ * A single row of a list: optional leading media (avatar, icon, image), a label, a description and
11454
+ * optional support text, and an optional trailing caret or custom trailing content.
11455
+ * ## When to use
11456
+ * - As a child of `bs-list`, one per record, person, file or option.
11457
+ * - Standalone as a plain information row (non-interactive), or with `interactive` as a button-like row.
11458
+ * ## When not to use
11459
+ * - A popup list of actions -- use `bs-menu` / `bs-menu-item`.
11460
+ * - App navigation with an active route -- use `bs-navigation-drawer-item`.
11461
+ * - Tabular data with columns, sorting or paging -- use `bs-data-table`.
11462
+ * Composed from: leading media (`bs-avatar`) and trailing controls (`bs-icon-button`) are supplied by the
11463
+ * consumer through the `leading` and `trailing` slots; the row itself only reserves layout. The default
11464
+ * trailing caret is inline SVG.
11465
+ * Roles are driven by the parent `bs-list` (via `selectionRole`). Standalone, the row has no role
11466
+ * (`listitem` is only valid inside a list) unless `interactive` is set, which makes it a focusable
11467
+ * `role="button"`.
11468
+ * @prop --bs-list-item-min-height - Minimum row height. Aliased to `--bs-spacing-1000`.
11469
+ * @prop --bs-list-item-padding-y - Aliased to `--bs-spacing-150`.
11470
+ * @prop --bs-list-item-padding-x - Aliased to `--bs-spacing-200`.
11471
+ * @prop --bs-list-item-gap - Gap between leading, content and trailing. Aliased to `--bs-spacing-200`.
11472
+ * @prop --bs-list-item-content-gap - Gap between text lines. Aliased to `--bs-spacing-25`.
11473
+ * @prop --bs-list-item-radius - Aliased to `--bs-border-radius-100`.
11474
+ * @prop --bs-list-item-bg - Enabled background. `transparent`.
11475
+ * @prop --bs-list-item-bg-hover - Aliased to `--bs-surface-hover`.
11476
+ * @prop --bs-list-item-bg-pressed - Aliased to `--bs-surface-pressed`.
11477
+ * @prop --bs-list-item-bg-focus - Aliased to `--bs-surface-focus`.
11478
+ * @prop --bs-list-item-bg-selected - Aliased to `--bs-surface-selected`.
11479
+ * @prop --bs-list-item-bg-selected-hover - Aliased to `--bs-surface-selected-hover`.
11480
+ * @prop --bs-list-item-bg-selected-pressed - Aliased to `--bs-surface-selected-pressed`.
11481
+ * @prop --bs-list-item-bg-selected-focus - Aliased to `--bs-surface-selected-focus`.
11482
+ * @prop --bs-list-item-bg-disabled - Aliased to `--bs-surface-action-disabled`.
11483
+ * @prop --bs-list-item-color - Text colour. Aliased to `--bs-text-default`.
11484
+ * @prop --bs-list-item-color-disabled - Aliased to `--bs-text-on-disabled`.
11485
+ * @prop --bs-list-item-focus-ring - Focus ring colour. Aliased to `--bs-border-neutral-focus`.
11486
+ * @prop --bs-list-item-image-width - Leading image width. 72px.
11487
+ * @prop --bs-list-item-image-height - Leading image height. 56px.
11488
+ */
11489
+ interface BsListItem {
9543
11490
  /**
9544
- * Emitted when the title `<select>` changes for `type="initials"`.
11491
+ * Second text line (the "paragraph").
11492
+ * @default null
9545
11493
  */
9546
- "onBsTitleChange"?: (event: BsInputCustomEvent<string>) => void;
11494
+ "description"?: string | null;
9547
11495
  /**
9548
- * Whether the `type="dropdown"` trigger is open. Reflects to an attribute so consumers can style an open state via CSS. When `options` is non-empty, this also controls whether the `bs-menu` of `bs-menu-item`s is rendered below the field.
11496
+ * Disables the row: dimmed, not focusable, no click event.
9549
11497
  * @default false
9550
11498
  */
9551
- "open"?: boolean;
11499
+ "disabled"?: boolean;
9552
11500
  /**
9553
- * Options for `type="select"` (rendered as native `<option>`s) and `type="dropdown"` (rendered as a `bs-menu` of `bs-menu-item`s when `open`). Must be set as a JS property, not an HTML attribute -- see CONVENTIONS.md's non-string props rule.
9554
- * @default []
11501
+ * Makes a standalone row a focusable `role="button"` that emits `bsItemClick`.
11502
+ * @default false
9555
11503
  */
9556
- "options"?: { label: string; value: string }[];
9557
- "placeholder"?: string;
11504
+ "interactive"?: boolean;
9558
11505
  /**
9559
- * Marks the field as required: renders a red `*` after the label and sets `aria-required="true"` on the control. Applies regardless of `type`.
9560
- * @default false
11506
+ * First text line (semibold).
11507
+ * @default null
9561
11508
  */
9562
- "required"?: boolean;
11509
+ "label"?: string | null;
9563
11510
  /**
9564
- * Number of visible rows for `type="textarea"`.
9565
- * @default 3
11511
+ * Fires on click / Enter / Space when the row is interactive and not disabled. Payload is `value`.
9566
11512
  */
9567
- "rows"?: number;
11513
+ "onBsItemClick"?: (event: BsListItemCustomEvent<string | null>) => void;
9568
11514
  /**
9569
- * Accessible name of the password toggle while the password is hidden.
9570
- * @default 'Show password'
11515
+ * Marks the row as selected. Managed by the parent `bs-list` when it is `selectable`.
11516
+ * @default false
9571
11517
  */
9572
- "showPasswordLabel"?: string;
11518
+ "selected"?: boolean;
9573
11519
  /**
9574
- * Step size for `type="number"`'s increment/decrement stepper buttons.
9575
- * @default 1
11520
+ * Set by the parent `bs-list`: `listitem` (plain list) or `option` (selectable list). Do not set by hand.
11521
+ * @default null
9576
11522
  */
9577
- "step"?: number;
11523
+ "selectionRole"?: 'listitem' | 'option' | null;
9578
11524
  /**
9579
- * Title select options for `type="initials"` (e.g. `['Mrs.', 'Mr.', 'Dr.']`). Must be set as a JS property, not an HTML attribute -- see CONVENTIONS.md's non-string props rule.
9580
- * @default []
11525
+ * Shows a trailing caret (unless the `trailing` slot has content).
11526
+ * @default false
9581
11527
  */
9582
- "titleOptions"?: string[];
11528
+ "showArrow"?: boolean;
9583
11529
  /**
9584
- * @default 'text'
11530
+ * Optional third text line.
11531
+ * @default null
9585
11532
  */
9586
- "type"?: | 'text'
9587
- | 'email'
9588
- | 'password'
9589
- | 'number'
9590
- | 'search'
9591
- | 'date'
9592
- | 'dropdown'
9593
- | 'select'
9594
- | 'textarea'
9595
- | 'chip'
9596
- | 'initials'
9597
- | 'country'
9598
- | 'pin';
11533
+ "supportText"?: string | null;
9599
11534
  /**
9600
- * Current value. Native `input`/`change` events don't cross the Shadow DOM boundary, so this component re-dispatches them as `bsInput`/`bsChange` custom events instead. Mutable so the `number` type's stepper buttons can update it directly.
9601
- * @default ''
11535
+ * Identifies the item; emitted by `bsItemClick` and matched against `bs-list`'s `value`.
11536
+ * @default null
9602
11537
  */
9603
- "value"?: string;
11538
+ "value"?: string | null;
9604
11539
  }
9605
11540
  /**
9606
11541
  * The BrandSync brand mark, as its own standalone component -- shared by `bs-navigation-header`
@@ -10567,6 +12502,59 @@ declare namespace LocalJSX {
10567
12502
  */
10568
12503
  "value"?: string;
10569
12504
  }
12505
+ /**
12506
+ * One result or suggestion row of a search dropdown: a leading icon, a primary line, an optional
12507
+ * description line and trailing text. Static, not focusable -- focus stays in the search field and the
12508
+ * parent (`bs-global-search`) marks the highlighted row with `active`.
12509
+ * Standalone it has no role. `bs-global-search` sets `selectionRole="option"` (and an `id`) on its rows,
12510
+ * the same pattern as `bs-list-item` and `bs-shortcut-row`.
12511
+ * ## When to use
12512
+ * - A suggestion, recent search or result inside `bs-global-search`.
12513
+ * ## When not to use
12514
+ * - A row in a generic list -- use `bs-list-item`.
12515
+ * - A command in a popup menu -- use `bs-menu-item`.
12516
+ * @prop --bs-search-item-min-height - Aliased to `--bs-spacing-600` (48px).
12517
+ * @prop --bs-search-item-padding-y - Aliased to `--bs-spacing-100`.
12518
+ * @prop --bs-search-item-padding-x - Aliased to `--bs-spacing-150`.
12519
+ * @prop --bs-search-item-gap - Aliased to `--bs-spacing-100`.
12520
+ * @prop --bs-search-item-radius - Aliased to `--bs-border-radius-100`.
12521
+ * @prop --bs-search-item-bg - Resting background. `transparent`.
12522
+ * @prop --bs-search-item-bg-active - Active (highlighted) and hover background. Aliased to `--bs-surface-hover`.
12523
+ * @prop --bs-search-item-bg-pressed - Aliased to `--bs-surface-pressed`.
12524
+ * @prop --bs-search-item-color - Primary text. Aliased to `--bs-text-default`.
12525
+ * @prop --bs-search-item-color-muted - Description and trailing text. Aliased to `--bs-text-muted`.
12526
+ * @prop --bs-search-item-color-disabled - Aliased to `--bs-text-on-disabled`.
12527
+ * @prop --bs-search-item-icon-color - Aliased to `--bs-icon-default`.
12528
+ */
12529
+ interface BsSearchItem {
12530
+ /**
12531
+ * Highlighted row (keyboard or hover). Set by the parent.
12532
+ * @default false
12533
+ */
12534
+ "active"?: boolean;
12535
+ /**
12536
+ * Dims the row and ignores clicks.
12537
+ * @default false
12538
+ */
12539
+ "disabled"?: boolean;
12540
+ /**
12541
+ * Fires with `value` when the row is clicked, or when the parent selects it with Enter.
12542
+ */
12543
+ "onBsItemSelect"?: (event: BsSearchItemCustomEvent<string | undefined>) => void;
12544
+ /**
12545
+ * Set by the parent (`"option"`). Standalone rows have no role.
12546
+ * @default null
12547
+ */
12548
+ "selectionRole"?: 'option' | null;
12549
+ /**
12550
+ * Trailing text shorthand. The `trailing` slot overrides it.
12551
+ */
12552
+ "trailing"?: string;
12553
+ /**
12554
+ * Identifies the item; emitted by `bsItemSelect`.
12555
+ */
12556
+ "value"?: string;
12557
+ }
10570
12558
  /**
10571
12559
  * The three moments around an expiring session, as one card. Matches the Figma "Session timeout"
10572
12560
  * component's three types:
@@ -10711,6 +12699,46 @@ declare namespace LocalJSX {
10711
12699
  */
10712
12700
  "type"?: BsSessionTimeoutType;
10713
12701
  }
12702
+ /**
12703
+ * One row of a shortcut list: an action label on the left and its keyboard shortcut on the right.
12704
+ * Static information, not interactive. Standalone it has no role; `bs-keyboard-shortcuts` sets
12705
+ * `selectionRole="listitem"` on its rows (same pattern as `bs-list-item`).
12706
+ * Built from `bs-key-caps` (and so `bs-key`).
12707
+ * ## When to use
12708
+ * - A line in a keyboard-shortcut reference, usually inside `bs-keyboard-shortcuts`.
12709
+ * ## When not to use
12710
+ * - A clickable command or menu entry -- use `bs-menu-item` (which has its own shortcut slot).
12711
+ * @prop --bs-shortcut-row-height - Row height. Defaults to `36px` (Figma).
12712
+ * @prop --bs-shortcut-row-padding-x - Horizontal padding. Aliased to `--bs-spacing-100`.
12713
+ * @prop --bs-shortcut-row-gap - Gap between label and keys. Aliased to `--bs-spacing-100`.
12714
+ * @prop --bs-shortcut-row-radius - Corner radius. Aliased to `--bs-border-radius-75`.
12715
+ * @prop --bs-shortcut-row-color - Label colour. Aliased to `--bs-text-default`.
12716
+ * @prop --bs-shortcut-row-color-disabled - Label colour while `disabled`. Aliased to `--bs-text-on-disabled`.
12717
+ */
12718
+ interface BsShortcutRow {
12719
+ /**
12720
+ * The action, e.g. "Save". The default slot overrides it.
12721
+ */
12722
+ "action"?: string;
12723
+ /**
12724
+ * Dims the label and the keys.
12725
+ * @default false
12726
+ */
12727
+ "disabled"?: boolean;
12728
+ /**
12729
+ * The keys, e.g. `"Ctrl+S"`, or an array (`['Ctrl', '+']`) for a literal plus key. See `bs-key-caps`.
12730
+ */
12731
+ "keys"?: string | string[];
12732
+ /**
12733
+ * Accessible name of the key caps, e.g. "Control plus S". Defaults to the keys joined with "plus".
12734
+ */
12735
+ "label"?: string;
12736
+ /**
12737
+ * Set by the parent list (`"listitem"`). Standalone rows have no role.
12738
+ * @default null
12739
+ */
12740
+ "selectionRole"?: 'listitem' | null;
12741
+ }
10714
12742
  /**
10715
12743
  * A generic slide-in panel (drawer) anchored to the start or end edge, for history, filters, FAQ
10716
12744
  * and similar secondary content. Closes via its close button or Escape and emits `bsClose`.
@@ -11566,6 +13594,87 @@ declare namespace LocalJSX {
11566
13594
  */
11567
13595
  "text"?: string;
11568
13596
  }
13597
+ /**
13598
+ * A hierarchical list of `bs-tree-item` rows with single selection, expand/collapse and the
13599
+ * WAI-ARIA tree keyboard pattern.
13600
+ * The tree owns `role="tree"`, the roving `tabindex` (exactly one enabled, visible item is
13601
+ * tabbable: the selected one, otherwise the first), selection (kept in sync with each item's
13602
+ * `selected`) and keyboard navigation over the visible (rendered, non-disabled) items. Items own
13603
+ * their expansion state and emit `bsSelect` / `bsToggle`.
13604
+ * Built from: `bs-tree-item` rows.
13605
+ */
13606
+ interface BsTree {
13607
+ /**
13608
+ * Accessible name of the tree. Bound onto the internal `role="tree"` element (an `aria-label` on the host would not reach it).
13609
+ * @default null
13610
+ */
13611
+ "ariaLabel"?: string | null;
13612
+ /**
13613
+ * Emitted when the user changes the selection (click, Enter/Space), with the new value. Not emitted when `value` is set from code.
13614
+ */
13615
+ "onBsChange"?: (event: BsTreeCustomEvent<string>) => void;
13616
+ /**
13617
+ * When `false`, rows do not select (clicks and Enter/Space do nothing) but parents still expand and collapse.
13618
+ * @default true
13619
+ */
13620
+ "selectable"?: boolean;
13621
+ /**
13622
+ * The `value` (or, when empty, the `label`) of the selected item. Two-way synced with each item's `selected` (single selection). Setting it from code does not emit `bsChange`.
13623
+ * @default ''
13624
+ */
13625
+ "value"?: string;
13626
+ }
13627
+ /**
13628
+ * A single row of a `bs-tree`. An item that contains child `bs-tree-item` elements is a parent
13629
+ * (it gets an expand/collapse caret and a folder icon); an item without children is a leaf (no
13630
+ * caret, file icon).
13631
+ * The host carries `role="treeitem"` and the `aria-*` state; the owning `bs-tree` manages the
13632
+ * roving `tabindex`, selection and keyboard navigation. Nesting depth is computed automatically
13633
+ * from the number of ancestor `bs-tree-item` elements and exposed as `aria-level` -- it is not a
13634
+ * prop. Clicking the row selects it; clicking the caret (or pressing Right/Left in a tree) toggles
13635
+ * expansion -- the two are deliberately separate.
13636
+ * Built from: inline SVG icons only (no existing `bs-*` component covers a tree row).
13637
+ */
13638
+ interface BsTreeItem {
13639
+ /**
13640
+ * Disables the row: not focusable, ignores clicks, dimmed. Reflected.
13641
+ * @default false
13642
+ */
13643
+ "disabled"?: boolean;
13644
+ /**
13645
+ * Whether the child items are shown. Only meaningful for parents. Mutable: the caret, the keyboard and the owning tree toggle it. Reflected.
13646
+ * @default false
13647
+ */
13648
+ "expanded"?: boolean;
13649
+ /**
13650
+ * The row's text. Use the `label` slot for rich content.
13651
+ * @default ''
13652
+ */
13653
+ "label"?: string;
13654
+ /**
13655
+ * Emitted (bubbling, composed) when the user activates the row, with the item's value. The owning `bs-tree` listens and updates the selection.
13656
+ */
13657
+ "onBsSelect"?: (event: BsTreeItemCustomEvent<string>) => void;
13658
+ /**
13659
+ * Emitted when the user toggles expansion (caret click or keyboard), with the new `expanded` value. Not emitted when `expanded` is set from code.
13660
+ */
13661
+ "onBsToggle"?: (event: BsTreeItemCustomEvent<boolean>) => void;
13662
+ /**
13663
+ * Marks the row as selected. Owned by the tree (single selection, synced with its `value`). Reflected.
13664
+ * @default false
13665
+ */
13666
+ "selected"?: boolean;
13667
+ /**
13668
+ * Shows the leading icon (default folder / file, or the `icon` slot).
13669
+ * @default true
13670
+ */
13671
+ "showIcon"?: boolean;
13672
+ /**
13673
+ * Identifier used in events and for the tree's `value`. Falls back to `label` when empty.
13674
+ * @default ''
13675
+ */
13676
+ "value"?: string;
13677
+ }
11569
13678
  /**
11570
13679
  * A product's "What's new" surface, in three forms matching the Figma component:
11571
13680
  * - `feed` -- a docked panel: heading, "Mark all as read", filter tabs, the list of updates (each a
@@ -11965,6 +14074,35 @@ declare namespace LocalJSX {
11965
14074
  "page": string;
11966
14075
  "href": string;
11967
14076
  }
14077
+ interface BsCommandPaletteAttributes {
14078
+ "value": string;
14079
+ "open": boolean;
14080
+ "commandsOnly": boolean;
14081
+ "status": BsCommandPaletteStatus;
14082
+ "label": string;
14083
+ "placeholder": string;
14084
+ "keepOpenOnSelect": boolean;
14085
+ "showFooter": boolean;
14086
+ "hotkey": string;
14087
+ "scopeLabel": string;
14088
+ "recentLabel": string;
14089
+ "suggestedLabel": string;
14090
+ "commandsLabel": string;
14091
+ "navigationLabel": string;
14092
+ "recordsLabel": string;
14093
+ "tryInsteadLabel": string;
14094
+ "navigateLabel": string;
14095
+ "openLabel": string;
14096
+ "closeLabel": string;
14097
+ "commandsOnlyLabel": string;
14098
+ "allResultsLabel": string;
14099
+ "emptyHeading": string;
14100
+ "emptyDescription": string;
14101
+ "didYouMean": string;
14102
+ "didYouMeanLabel": string;
14103
+ "loadingLabel": string;
14104
+ "listLabel": string;
14105
+ }
11968
14106
  interface BsComposerAttributes {
11969
14107
  "variant": BsComposerVariant;
11970
14108
  "placeholder": string;
@@ -12048,6 +14186,12 @@ declare namespace LocalJSX {
12048
14186
  "inset": BsDividerInset;
12049
14187
  "decorative": boolean;
12050
14188
  }
14189
+ interface BsEmptyStateAttributes {
14190
+ "heading": string;
14191
+ "description": string;
14192
+ "intent": BsIconTileIntent;
14193
+ "headingLevel": 2 | 3 | 4 | 5 | 6;
14194
+ }
12051
14195
  interface BsErrorPageAttributes {
12052
14196
  "type": BsErrorPageType;
12053
14197
  "code": string;
@@ -12079,6 +14223,33 @@ declare namespace LocalJSX {
12079
14223
  "cancelLabel": string;
12080
14224
  "removeLabel": string;
12081
14225
  }
14226
+ interface BsGlobalSearchAttributes {
14227
+ "value": string;
14228
+ "placeholder": string;
14229
+ "label": string;
14230
+ "disabled": boolean;
14231
+ "open": boolean;
14232
+ "status": BsGlobalSearchStatus;
14233
+ "totalResults": number;
14234
+ "showFooter": boolean;
14235
+ "listLabel": string;
14236
+ "recentLabel": string;
14237
+ "jumpToLabel": string;
14238
+ "topMatchesLabel": string;
14239
+ "searchInLabel": string;
14240
+ "navigateLabel": string;
14241
+ "searchLabel": string;
14242
+ "closeLabel": string;
14243
+ "fullResultsLabel": string;
14244
+ "clearRecentLabel": string;
14245
+ "seeAllLabel": string;
14246
+ "emptyHeading": string;
14247
+ "emptyDescription": string;
14248
+ "clearSearchLabel": string;
14249
+ "errorHeading": string;
14250
+ "errorDescription": string;
14251
+ "retryLabel": string;
14252
+ }
12082
14253
  interface BsGridAttributes {
12083
14254
  "columns": string;
12084
14255
  "gap": string;
@@ -12141,6 +14312,46 @@ declare namespace LocalJSX {
12141
14312
  "length": number;
12142
14313
  "open": boolean;
12143
14314
  }
14315
+ interface BsKeyAttributes {
14316
+ "label": string;
14317
+ }
14318
+ interface BsKeyCapsAttributes {
14319
+ "keys": string | string[];
14320
+ "disabled": boolean;
14321
+ "label": string;
14322
+ }
14323
+ interface BsKeyboardShortcutsAttributes {
14324
+ "heading": string;
14325
+ "closeLabel": string;
14326
+ "searchPlaceholder": string;
14327
+ "query": string;
14328
+ "showSingleKeySwitch": boolean;
14329
+ "singleKeyEnabled": boolean;
14330
+ "singleKeyLabel": string;
14331
+ "singleKeyDescription": string;
14332
+ "showFooterHint": boolean;
14333
+ "footerKey": string;
14334
+ "footerText": string;
14335
+ "footerPrefix": string;
14336
+ "noResultsText": string;
14337
+ }
14338
+ interface BsListAttributes {
14339
+ "selectable": boolean;
14340
+ "value": string | null;
14341
+ "dividers": boolean;
14342
+ "ariaLabel": string | null;
14343
+ }
14344
+ interface BsListItemAttributes {
14345
+ "label": string | null;
14346
+ "description": string | null;
14347
+ "supportText": string | null;
14348
+ "selected": boolean;
14349
+ "disabled": boolean;
14350
+ "showArrow": boolean;
14351
+ "value": string | null;
14352
+ "interactive": boolean;
14353
+ "selectionRole": 'listitem' | 'option' | null;
14354
+ }
12144
14355
  interface BsLogoAttributes {
12145
14356
  "variant": BsLogoVariant;
12146
14357
  "background": BsLogoBackground;
@@ -12276,6 +14487,13 @@ declare namespace LocalJSX {
12276
14487
  "checked": boolean;
12277
14488
  "disabled": boolean;
12278
14489
  }
14490
+ interface BsSearchItemAttributes {
14491
+ "value": string;
14492
+ "active": boolean;
14493
+ "disabled": boolean;
14494
+ "trailing": string;
14495
+ "selectionRole": 'option' | null;
14496
+ }
12279
14497
  interface BsSessionTimeoutAttributes {
12280
14498
  "type": BsSessionTimeoutType;
12281
14499
  "heading": string;
@@ -12298,6 +14516,13 @@ declare namespace LocalJSX {
12298
14516
  "dividerLabel": string;
12299
14517
  "cancelLabel": string;
12300
14518
  }
14519
+ interface BsShortcutRowAttributes {
14520
+ "action": string;
14521
+ "keys": string | string[];
14522
+ "label": string;
14523
+ "disabled": boolean;
14524
+ "selectionRole": 'listitem' | null;
14525
+ }
12301
14526
  interface BsSidePanelAttributes {
12302
14527
  "open": boolean;
12303
14528
  "heading": string;
@@ -12425,6 +14650,19 @@ declare namespace LocalJSX {
12425
14650
  "delay": number;
12426
14651
  "placement": BsTooltipTriggerPlacement;
12427
14652
  }
14653
+ interface BsTreeAttributes {
14654
+ "ariaLabel": string | null;
14655
+ "value": string;
14656
+ "selectable": boolean;
14657
+ }
14658
+ interface BsTreeItemAttributes {
14659
+ "label": string;
14660
+ "expanded": boolean;
14661
+ "selected": boolean;
14662
+ "disabled": boolean;
14663
+ "showIcon": boolean;
14664
+ "value": string;
14665
+ }
12428
14666
  interface BsWhatsNewAttributes {
12429
14667
  "type": BsWhatsNewType;
12430
14668
  "heading": string;
@@ -12490,6 +14728,7 @@ declare namespace LocalJSX {
12490
14728
  "bs-chip-informative": Omit<BsChipInformative, keyof BsChipInformativeAttributes> & { [K in keyof BsChipInformative & keyof BsChipInformativeAttributes]?: BsChipInformative[K] } & { [K in keyof BsChipInformative & keyof BsChipInformativeAttributes as `attr:${K}`]?: BsChipInformativeAttributes[K] } & { [K in keyof BsChipInformative & keyof BsChipInformativeAttributes as `prop:${K}`]?: BsChipInformative[K] };
12491
14729
  "bs-chip-input": Omit<BsChipInput, keyof BsChipInputAttributes> & { [K in keyof BsChipInput & keyof BsChipInputAttributes]?: BsChipInput[K] } & { [K in keyof BsChipInput & keyof BsChipInputAttributes as `attr:${K}`]?: BsChipInputAttributes[K] } & { [K in keyof BsChipInput & keyof BsChipInputAttributes as `prop:${K}`]?: BsChipInput[K] };
12492
14730
  "bs-citation-preview": Omit<BsCitationPreview, keyof BsCitationPreviewAttributes> & { [K in keyof BsCitationPreview & keyof BsCitationPreviewAttributes]?: BsCitationPreview[K] } & { [K in keyof BsCitationPreview & keyof BsCitationPreviewAttributes as `attr:${K}`]?: BsCitationPreviewAttributes[K] } & { [K in keyof BsCitationPreview & keyof BsCitationPreviewAttributes as `prop:${K}`]?: BsCitationPreview[K] };
14731
+ "bs-command-palette": Omit<BsCommandPalette, keyof BsCommandPaletteAttributes> & { [K in keyof BsCommandPalette & keyof BsCommandPaletteAttributes]?: BsCommandPalette[K] } & { [K in keyof BsCommandPalette & keyof BsCommandPaletteAttributes as `attr:${K}`]?: BsCommandPaletteAttributes[K] } & { [K in keyof BsCommandPalette & keyof BsCommandPaletteAttributes as `prop:${K}`]?: BsCommandPalette[K] };
12493
14732
  "bs-composer": Omit<BsComposer, keyof BsComposerAttributes> & { [K in keyof BsComposer & keyof BsComposerAttributes]?: BsComposer[K] } & { [K in keyof BsComposer & keyof BsComposerAttributes as `attr:${K}`]?: BsComposerAttributes[K] } & { [K in keyof BsComposer & keyof BsComposerAttributes as `prop:${K}`]?: BsComposer[K] };
12494
14733
  "bs-composer-status-banner": Omit<BsComposerStatusBanner, keyof BsComposerStatusBannerAttributes> & { [K in keyof BsComposerStatusBanner & keyof BsComposerStatusBannerAttributes]?: BsComposerStatusBanner[K] } & { [K in keyof BsComposerStatusBanner & keyof BsComposerStatusBannerAttributes as `attr:${K}`]?: BsComposerStatusBannerAttributes[K] } & { [K in keyof BsComposerStatusBanner & keyof BsComposerStatusBannerAttributes as `prop:${K}`]?: BsComposerStatusBanner[K] };
12495
14734
  "bs-container": Omit<BsContainer, keyof BsContainerAttributes> & { [K in keyof BsContainer & keyof BsContainerAttributes]?: BsContainer[K] } & { [K in keyof BsContainer & keyof BsContainerAttributes as `attr:${K}`]?: BsContainerAttributes[K] } & { [K in keyof BsContainer & keyof BsContainerAttributes as `prop:${K}`]?: BsContainer[K] };
@@ -12498,14 +14737,21 @@ declare namespace LocalJSX {
12498
14737
  "bs-datepicker": Omit<BsDatepicker, keyof BsDatepickerAttributes> & { [K in keyof BsDatepicker & keyof BsDatepickerAttributes]?: BsDatepicker[K] } & { [K in keyof BsDatepicker & keyof BsDatepickerAttributes as `attr:${K}`]?: BsDatepickerAttributes[K] } & { [K in keyof BsDatepicker & keyof BsDatepickerAttributes as `prop:${K}`]?: BsDatepicker[K] };
12499
14738
  "bs-dialog": Omit<BsDialog, keyof BsDialogAttributes> & { [K in keyof BsDialog & keyof BsDialogAttributes]?: BsDialog[K] } & { [K in keyof BsDialog & keyof BsDialogAttributes as `attr:${K}`]?: BsDialogAttributes[K] } & { [K in keyof BsDialog & keyof BsDialogAttributes as `prop:${K}`]?: BsDialog[K] };
12500
14739
  "bs-divider": Omit<BsDivider, keyof BsDividerAttributes> & { [K in keyof BsDivider & keyof BsDividerAttributes]?: BsDivider[K] } & { [K in keyof BsDivider & keyof BsDividerAttributes as `attr:${K}`]?: BsDividerAttributes[K] } & { [K in keyof BsDivider & keyof BsDividerAttributes as `prop:${K}`]?: BsDivider[K] };
14740
+ "bs-empty-state": Omit<BsEmptyState, keyof BsEmptyStateAttributes> & { [K in keyof BsEmptyState & keyof BsEmptyStateAttributes]?: BsEmptyState[K] } & { [K in keyof BsEmptyState & keyof BsEmptyStateAttributes as `attr:${K}`]?: BsEmptyStateAttributes[K] } & { [K in keyof BsEmptyState & keyof BsEmptyStateAttributes as `prop:${K}`]?: BsEmptyState[K] };
12501
14741
  "bs-error-page": Omit<BsErrorPage, keyof BsErrorPageAttributes> & { [K in keyof BsErrorPage & keyof BsErrorPageAttributes]?: BsErrorPage[K] } & { [K in keyof BsErrorPage & keyof BsErrorPageAttributes as `attr:${K}`]?: BsErrorPageAttributes[K] } & { [K in keyof BsErrorPage & keyof BsErrorPageAttributes as `prop:${K}`]?: BsErrorPage[K] };
12502
14742
  "bs-file-upload": Omit<BsFileUpload, keyof BsFileUploadAttributes> & { [K in keyof BsFileUpload & keyof BsFileUploadAttributes]?: BsFileUpload[K] } & { [K in keyof BsFileUpload & keyof BsFileUploadAttributes as `attr:${K}`]?: BsFileUploadAttributes[K] } & { [K in keyof BsFileUpload & keyof BsFileUploadAttributes as `prop:${K}`]?: BsFileUpload[K] };
12503
14743
  "bs-file-upload-item": Omit<BsFileUploadItem, keyof BsFileUploadItemAttributes> & { [K in keyof BsFileUploadItem & keyof BsFileUploadItemAttributes]?: BsFileUploadItem[K] } & { [K in keyof BsFileUploadItem & keyof BsFileUploadItemAttributes as `attr:${K}`]?: BsFileUploadItemAttributes[K] } & { [K in keyof BsFileUploadItem & keyof BsFileUploadItemAttributes as `prop:${K}`]?: BsFileUploadItem[K] };
14744
+ "bs-global-search": Omit<BsGlobalSearch, keyof BsGlobalSearchAttributes> & { [K in keyof BsGlobalSearch & keyof BsGlobalSearchAttributes]?: BsGlobalSearch[K] } & { [K in keyof BsGlobalSearch & keyof BsGlobalSearchAttributes as `attr:${K}`]?: BsGlobalSearchAttributes[K] } & { [K in keyof BsGlobalSearch & keyof BsGlobalSearchAttributes as `prop:${K}`]?: BsGlobalSearch[K] };
12504
14745
  "bs-grid": Omit<BsGrid, keyof BsGridAttributes> & { [K in keyof BsGrid & keyof BsGridAttributes]?: BsGrid[K] } & { [K in keyof BsGrid & keyof BsGridAttributes as `attr:${K}`]?: BsGridAttributes[K] } & { [K in keyof BsGrid & keyof BsGridAttributes as `prop:${K}`]?: BsGrid[K] };
12505
14746
  "bs-icon-button": Omit<BsIconButton, keyof BsIconButtonAttributes> & { [K in keyof BsIconButton & keyof BsIconButtonAttributes]?: BsIconButton[K] } & { [K in keyof BsIconButton & keyof BsIconButtonAttributes as `attr:${K}`]?: BsIconButtonAttributes[K] } & { [K in keyof BsIconButton & keyof BsIconButtonAttributes as `prop:${K}`]?: BsIconButton[K] };
12506
14747
  "bs-icon-tile": Omit<BsIconTile, keyof BsIconTileAttributes> & { [K in keyof BsIconTile & keyof BsIconTileAttributes]?: BsIconTile[K] } & { [K in keyof BsIconTile & keyof BsIconTileAttributes as `attr:${K}`]?: BsIconTileAttributes[K] } & { [K in keyof BsIconTile & keyof BsIconTileAttributes as `prop:${K}`]?: BsIconTile[K] };
12507
14748
  "bs-inline-tab": Omit<BsInlineTab, keyof BsInlineTabAttributes> & { [K in keyof BsInlineTab & keyof BsInlineTabAttributes]?: BsInlineTab[K] } & { [K in keyof BsInlineTab & keyof BsInlineTabAttributes as `attr:${K}`]?: BsInlineTabAttributes[K] } & { [K in keyof BsInlineTab & keyof BsInlineTabAttributes as `prop:${K}`]?: BsInlineTab[K] };
12508
14749
  "bs-input": Omit<BsInput, keyof BsInputAttributes> & { [K in keyof BsInput & keyof BsInputAttributes]?: BsInput[K] } & { [K in keyof BsInput & keyof BsInputAttributes as `attr:${K}`]?: BsInputAttributes[K] } & { [K in keyof BsInput & keyof BsInputAttributes as `prop:${K}`]?: BsInput[K] };
14750
+ "bs-key": Omit<BsKey, keyof BsKeyAttributes> & { [K in keyof BsKey & keyof BsKeyAttributes]?: BsKey[K] } & { [K in keyof BsKey & keyof BsKeyAttributes as `attr:${K}`]?: BsKeyAttributes[K] } & { [K in keyof BsKey & keyof BsKeyAttributes as `prop:${K}`]?: BsKey[K] };
14751
+ "bs-key-caps": Omit<BsKeyCaps, keyof BsKeyCapsAttributes> & { [K in keyof BsKeyCaps & keyof BsKeyCapsAttributes]?: BsKeyCaps[K] } & { [K in keyof BsKeyCaps & keyof BsKeyCapsAttributes as `attr:${K}`]?: BsKeyCapsAttributes[K] } & { [K in keyof BsKeyCaps & keyof BsKeyCapsAttributes as `prop:${K}`]?: BsKeyCaps[K] };
14752
+ "bs-keyboard-shortcuts": Omit<BsKeyboardShortcuts, keyof BsKeyboardShortcutsAttributes> & { [K in keyof BsKeyboardShortcuts & keyof BsKeyboardShortcutsAttributes]?: BsKeyboardShortcuts[K] } & { [K in keyof BsKeyboardShortcuts & keyof BsKeyboardShortcutsAttributes as `attr:${K}`]?: BsKeyboardShortcutsAttributes[K] } & { [K in keyof BsKeyboardShortcuts & keyof BsKeyboardShortcutsAttributes as `prop:${K}`]?: BsKeyboardShortcuts[K] };
14753
+ "bs-list": Omit<BsList, keyof BsListAttributes> & { [K in keyof BsList & keyof BsListAttributes]?: BsList[K] } & { [K in keyof BsList & keyof BsListAttributes as `attr:${K}`]?: BsListAttributes[K] } & { [K in keyof BsList & keyof BsListAttributes as `prop:${K}`]?: BsList[K] };
14754
+ "bs-list-item": Omit<BsListItem, keyof BsListItemAttributes> & { [K in keyof BsListItem & keyof BsListItemAttributes]?: BsListItem[K] } & { [K in keyof BsListItem & keyof BsListItemAttributes as `attr:${K}`]?: BsListItemAttributes[K] } & { [K in keyof BsListItem & keyof BsListItemAttributes as `prop:${K}`]?: BsListItem[K] };
12509
14755
  "bs-logo": Omit<BsLogo, keyof BsLogoAttributes> & { [K in keyof BsLogo & keyof BsLogoAttributes]?: BsLogo[K] } & { [K in keyof BsLogo & keyof BsLogoAttributes as `attr:${K}`]?: BsLogoAttributes[K] } & { [K in keyof BsLogo & keyof BsLogoAttributes as `prop:${K}`]?: BsLogo[K] };
12510
14756
  "bs-menu": BsMenu;
12511
14757
  "bs-menu-item": Omit<BsMenuItem, keyof BsMenuItemAttributes> & { [K in keyof BsMenuItem & keyof BsMenuItemAttributes]?: BsMenuItem[K] } & { [K in keyof BsMenuItem & keyof BsMenuItemAttributes as `attr:${K}`]?: BsMenuItemAttributes[K] } & { [K in keyof BsMenuItem & keyof BsMenuItemAttributes as `prop:${K}`]?: BsMenuItem[K] };
@@ -12522,7 +14768,9 @@ declare namespace LocalJSX {
12522
14768
  "bs-progress-linear": Omit<BsProgressLinear, keyof BsProgressLinearAttributes> & { [K in keyof BsProgressLinear & keyof BsProgressLinearAttributes]?: BsProgressLinear[K] } & { [K in keyof BsProgressLinear & keyof BsProgressLinearAttributes as `attr:${K}`]?: BsProgressLinearAttributes[K] } & { [K in keyof BsProgressLinear & keyof BsProgressLinearAttributes as `prop:${K}`]?: BsProgressLinear[K] };
12523
14769
  "bs-qr-code": Omit<BsQrCode, keyof BsQrCodeAttributes> & { [K in keyof BsQrCode & keyof BsQrCodeAttributes]?: BsQrCode[K] } & { [K in keyof BsQrCode & keyof BsQrCodeAttributes as `attr:${K}`]?: BsQrCodeAttributes[K] } & { [K in keyof BsQrCode & keyof BsQrCodeAttributes as `prop:${K}`]?: BsQrCode[K] };
12524
14770
  "bs-radio": Omit<BsRadio, keyof BsRadioAttributes> & { [K in keyof BsRadio & keyof BsRadioAttributes]?: BsRadio[K] } & { [K in keyof BsRadio & keyof BsRadioAttributes as `attr:${K}`]?: BsRadioAttributes[K] } & { [K in keyof BsRadio & keyof BsRadioAttributes as `prop:${K}`]?: BsRadio[K] };
14771
+ "bs-search-item": Omit<BsSearchItem, keyof BsSearchItemAttributes> & { [K in keyof BsSearchItem & keyof BsSearchItemAttributes]?: BsSearchItem[K] } & { [K in keyof BsSearchItem & keyof BsSearchItemAttributes as `attr:${K}`]?: BsSearchItemAttributes[K] } & { [K in keyof BsSearchItem & keyof BsSearchItemAttributes as `prop:${K}`]?: BsSearchItem[K] };
12525
14772
  "bs-session-timeout": Omit<BsSessionTimeout, keyof BsSessionTimeoutAttributes> & { [K in keyof BsSessionTimeout & keyof BsSessionTimeoutAttributes]?: BsSessionTimeout[K] } & { [K in keyof BsSessionTimeout & keyof BsSessionTimeoutAttributes as `attr:${K}`]?: BsSessionTimeoutAttributes[K] } & { [K in keyof BsSessionTimeout & keyof BsSessionTimeoutAttributes as `prop:${K}`]?: BsSessionTimeout[K] };
14773
+ "bs-shortcut-row": Omit<BsShortcutRow, keyof BsShortcutRowAttributes> & { [K in keyof BsShortcutRow & keyof BsShortcutRowAttributes]?: BsShortcutRow[K] } & { [K in keyof BsShortcutRow & keyof BsShortcutRowAttributes as `attr:${K}`]?: BsShortcutRowAttributes[K] } & { [K in keyof BsShortcutRow & keyof BsShortcutRowAttributes as `prop:${K}`]?: BsShortcutRow[K] };
12526
14774
  "bs-side-panel": Omit<BsSidePanel, keyof BsSidePanelAttributes> & { [K in keyof BsSidePanel & keyof BsSidePanelAttributes]?: BsSidePanel[K] } & { [K in keyof BsSidePanel & keyof BsSidePanelAttributes as `attr:${K}`]?: BsSidePanelAttributes[K] } & { [K in keyof BsSidePanel & keyof BsSidePanelAttributes as `prop:${K}`]?: BsSidePanel[K] };
12527
14775
  "bs-skeleton": Omit<BsSkeleton, keyof BsSkeletonAttributes> & { [K in keyof BsSkeleton & keyof BsSkeletonAttributes]?: BsSkeleton[K] } & { [K in keyof BsSkeleton & keyof BsSkeletonAttributes as `attr:${K}`]?: BsSkeletonAttributes[K] } & { [K in keyof BsSkeleton & keyof BsSkeletonAttributes as `prop:${K}`]?: BsSkeleton[K] };
12528
14776
  "bs-slider": Omit<BsSlider, keyof BsSliderAttributes> & { [K in keyof BsSlider & keyof BsSliderAttributes]?: BsSlider[K] } & { [K in keyof BsSlider & keyof BsSliderAttributes as `attr:${K}`]?: BsSliderAttributes[K] } & { [K in keyof BsSlider & keyof BsSliderAttributes as `prop:${K}`]?: BsSlider[K] };
@@ -12540,6 +14788,8 @@ declare namespace LocalJSX {
12540
14788
  "bs-toast": Omit<BsToast, keyof BsToastAttributes> & { [K in keyof BsToast & keyof BsToastAttributes]?: BsToast[K] } & { [K in keyof BsToast & keyof BsToastAttributes as `attr:${K}`]?: BsToastAttributes[K] } & { [K in keyof BsToast & keyof BsToastAttributes as `prop:${K}`]?: BsToast[K] };
12541
14789
  "bs-tooltip": Omit<BsTooltip, keyof BsTooltipAttributes> & { [K in keyof BsTooltip & keyof BsTooltipAttributes]?: BsTooltip[K] } & { [K in keyof BsTooltip & keyof BsTooltipAttributes as `attr:${K}`]?: BsTooltipAttributes[K] } & { [K in keyof BsTooltip & keyof BsTooltipAttributes as `prop:${K}`]?: BsTooltip[K] };
12542
14790
  "bs-tooltip-trigger": Omit<BsTooltipTrigger, keyof BsTooltipTriggerAttributes> & { [K in keyof BsTooltipTrigger & keyof BsTooltipTriggerAttributes]?: BsTooltipTrigger[K] } & { [K in keyof BsTooltipTrigger & keyof BsTooltipTriggerAttributes as `attr:${K}`]?: BsTooltipTriggerAttributes[K] } & { [K in keyof BsTooltipTrigger & keyof BsTooltipTriggerAttributes as `prop:${K}`]?: BsTooltipTrigger[K] };
14791
+ "bs-tree": Omit<BsTree, keyof BsTreeAttributes> & { [K in keyof BsTree & keyof BsTreeAttributes]?: BsTree[K] } & { [K in keyof BsTree & keyof BsTreeAttributes as `attr:${K}`]?: BsTreeAttributes[K] } & { [K in keyof BsTree & keyof BsTreeAttributes as `prop:${K}`]?: BsTree[K] };
14792
+ "bs-tree-item": Omit<BsTreeItem, keyof BsTreeItemAttributes> & { [K in keyof BsTreeItem & keyof BsTreeItemAttributes]?: BsTreeItem[K] } & { [K in keyof BsTreeItem & keyof BsTreeItemAttributes as `attr:${K}`]?: BsTreeItemAttributes[K] } & { [K in keyof BsTreeItem & keyof BsTreeItemAttributes as `prop:${K}`]?: BsTreeItem[K] };
12543
14793
  "bs-whats-new": Omit<BsWhatsNew, keyof BsWhatsNewAttributes> & { [K in keyof BsWhatsNew & keyof BsWhatsNewAttributes]?: BsWhatsNew[K] } & { [K in keyof BsWhatsNew & keyof BsWhatsNewAttributes as `attr:${K}`]?: BsWhatsNewAttributes[K] } & { [K in keyof BsWhatsNew & keyof BsWhatsNewAttributes as `prop:${K}`]?: BsWhatsNew[K] };
12544
14794
  "bs-whats-new-entry": Omit<BsWhatsNewEntry, keyof BsWhatsNewEntryAttributes> & { [K in keyof BsWhatsNewEntry & keyof BsWhatsNewEntryAttributes]?: BsWhatsNewEntry[K] } & { [K in keyof BsWhatsNewEntry & keyof BsWhatsNewEntryAttributes as `attr:${K}`]?: BsWhatsNewEntryAttributes[K] } & { [K in keyof BsWhatsNewEntry & keyof BsWhatsNewEntryAttributes as `prop:${K}`]?: BsWhatsNewEntry[K] };
12545
14795
  }
@@ -13117,6 +15367,37 @@ declare module "@stencil/core" {
13117
15367
  * @prop --bs-citation-preview-page-color - Page label color. Aliased to `--bs-text-secondary`.
13118
15368
  */
13119
15369
  "bs-citation-preview": LocalJSX.IntrinsicElements["bs-citation-preview"] & JSXBase.HTMLAttributes<HTMLBsCitationPreviewElement>;
15370
+ /**
15371
+ * A Ctrl+K command palette: a modal with a search field, grouped commands, navigation and records, a
15372
+ * no-results view and a keyboard-hint footer. The data, the filtering, the command registry and the
15373
+ * recent-items storage are all yours: you slot `bs-search-item`s into the sections and set `status`.
15374
+ * Built from a native `<dialog>` (opened with `showModal()`, so focus is trapped, the page behind is inert
15375
+ * and the backdrop is the scrim), `bs-input` (type="search"), `bs-search-item`, `bs-key` (footer hints and
15376
+ * the Esc cap), `bs-chip-informative` (the scope chip) and `bs-spinner` (loading). Slot a `bs-key-caps` with
15377
+ * `slot="trailing"` inside an item to show a command's shortcut.
15378
+ * ## When to use
15379
+ * - An app-wide "do anything" entry point opened with a hotkey: run commands, navigate, open records.
15380
+ * ## When not to use
15381
+ * - A plain search box with a dropdown -- use `bs-global-search`.
15382
+ * - A small list of actions on one control -- use `bs-menu`.
15383
+ * A `>` as the first character of the field switches to commands-only mode (`commandsOnly`, reflected as
15384
+ * `commands-only`). The component filters nothing: listen to `bsInput`, swap the slotted items, set `status`.
15385
+ * Nested (sub-command) palettes are a consumer pattern: swap the slotted commands and set `scopeLabel`.
15386
+ * @prop --bs-command-palette-width - Panel width. Defaults to `640px` (Figma); capped to the viewport.
15387
+ * @prop --bs-command-palette-top - Distance from the top of the viewport. Defaults to `12vh`.
15388
+ * @prop --bs-command-palette-max-height - Max height of the results area. Defaults to `60vh`.
15389
+ * @prop --bs-command-palette-radius - Aliased to `--bs-border-radius-150`.
15390
+ * @prop --bs-command-palette-bg - Panel background. Aliased to `--bs-surface-base`.
15391
+ * @prop --bs-command-palette-shadow - Figma elevation level 4: `0 8px 16px` in `--bs-elevation-higher` (stronger in dark mode).
15392
+ * @prop --bs-command-palette-overlay - Scrim colour. Aliased to `--bs-surface-overlay`.
15393
+ * @prop --bs-command-palette-footer-bg - Aliased to `--bs-surface-container`.
15394
+ * @prop --bs-command-palette-divider-color - Aliased to `--bs-border-default`.
15395
+ * @prop --bs-command-palette-header-border-color - Aliased to `--bs-border-neutral-container`.
15396
+ * @prop --bs-command-palette-header-color - Aliased to `--bs-text-muted`.
15397
+ * @prop --bs-command-palette-hint-color - Aliased to `--bs-text-secondary`.
15398
+ * @prop --bs-command-palette-z-index - Aliased to `--bs-z-index-modal`.
15399
+ */
15400
+ "bs-command-palette": LocalJSX.IntrinsicElements["bs-command-palette"] & JSXBase.HTMLAttributes<HTMLBsCommandPaletteElement>;
13120
15401
  /**
13121
15402
  * A chat composer input for Genie AI-style conversational interfaces: a text field
13122
15403
  * plus an attach button, a mic/voice-recording toggle, and a single primary action button whose
@@ -13313,6 +15594,24 @@ declare module "@stencil/core" {
13313
15594
  * @prop --bs-divider-inset - Indent applied by `inset`. Aliased to `--bs-spacing-300`.
13314
15595
  */
13315
15596
  "bs-divider": LocalJSX.IntrinsicElements["bs-divider"] & JSXBase.HTMLAttributes<HTMLBsDividerElement>;
15597
+ /**
15598
+ * A centered "nothing to show" block: an icon tile, a heading, a description and an optional action.
15599
+ * Used for empty lists, "no results" and error states inside a panel, card or page section.
15600
+ * Built from `bs-icon-tile` (and, in your `action` slot, usually a `bs-button`).
15601
+ * The component has no role. Live regions belong on a wrapper you control (e.g. `role="status"` on the
15602
+ * element that stays in the DOM while this block appears and disappears).
15603
+ * ## When to use
15604
+ * - A list, table or search result that has nothing to show, or failed to load.
15605
+ * ## When not to use
15606
+ * - A full-page error with a status code -- use `bs-error-page`.
15607
+ * - A transient message -- use `bs-toast` or `bs-snackbar`.
15608
+ * @prop --bs-empty-state-padding-y - Vertical padding. Aliased to `--bs-spacing-700` (56px).
15609
+ * @prop --bs-empty-state-padding-x - Horizontal padding. Aliased to `--bs-spacing-300` (24px).
15610
+ * @prop --bs-empty-state-gap - Gap between tile, heading, description and action. Aliased to `--bs-spacing-150`.
15611
+ * @prop --bs-empty-state-heading-color - Aliased to `--bs-text-default`.
15612
+ * @prop --bs-empty-state-description-color - Aliased to `--bs-text-secondary`.
15613
+ */
15614
+ "bs-empty-state": LocalJSX.IntrinsicElements["bs-empty-state"] & JSXBase.HTMLAttributes<HTMLBsEmptyStateElement>;
13316
15615
  /**
13317
15616
  * A full-block page for when the user can't get to what they asked for: page not found (404), a server
13318
15617
  * error (500), no access (403), planned maintenance, or no internet connection. Matches the Figma
@@ -13352,6 +15651,37 @@ declare module "@stencil/core" {
13352
15651
  * - Attaching files to a chat message -- use `bs-attachment`.
13353
15652
  */
13354
15653
  "bs-file-upload-item": LocalJSX.IntrinsicElements["bs-file-upload-item"] & JSXBase.HTMLAttributes<HTMLBsFileUploadItemElement>;
15654
+ /**
15655
+ * A global search combobox: a search field with a dropdown panel of suggestions, results, an empty state
15656
+ * or an error state, plus a keyboard-hint footer. The data, the filtering and the recent-search storage
15657
+ * are all yours: you slot `bs-search-item`s into the sections and tell the component which `status` to show.
15658
+ * Built from `bs-input` (type="search"), `bs-search-item`, `bs-empty-state` (and so `bs-icon-tile`),
15659
+ * `bs-button` and `bs-key` (the footer keycaps).
15660
+ * ## When to use
15661
+ * - An app-wide "find anything" field with recent searches, jump-to shortcuts and grouped results.
15662
+ * ## When not to use
15663
+ * - Filtering the list or table that is already on screen -- use `bs-input type="search"`.
15664
+ * - A list of commands or actions -- use `bs-menu`.
15665
+ * - The complete result set -- link to a full search results page ("See all results").
15666
+ * Put `bs-search-item` children in the light DOM with `slot="recent"`, `slot="jump-to"`,
15667
+ * `slot="top-matches"` or `slot="search-in"`. A section (and its header) is only rendered when its slot has
15668
+ * content. Up/Down arrows move a highlight through the visible items; focus never leaves the field.
15669
+ * Known limit: the items are in your light DOM and the combobox in this shadow root, so
15670
+ * `aria-activedescendant` (an id reference) does not resolve across that boundary in every browser; the
15671
+ * highlighted option also gets `aria-selected="true"`.
15672
+ * @prop --bs-global-search-width - Field and panel width. Defaults to `480px` (Figma); capped at 100%.
15673
+ * @prop --bs-global-search-panel-radius - Aliased to `--bs-border-radius-100`.
15674
+ * @prop --bs-global-search-panel-padding - Aliased to `--bs-spacing-100`.
15675
+ * @prop --bs-global-search-gap - Gap between sections, and between the field and the panel. Aliased to `--bs-spacing-100`.
15676
+ * @prop --bs-global-search-panel-bg - Panel background. Aliased to `--bs-surface-base`.
15677
+ * @prop --bs-global-search-shadow - Panel shadow: Figma elevation level 3 (`0 4px 8px` in `--bs-elevation-high`, 10% black in light mode and 30% in dark mode).
15678
+ * @prop --bs-global-search-z-index - Panel stacking. Aliased to `--bs-z-index-dropdown`.
15679
+ * @prop --bs-global-search-divider-color - Footer divider. Aliased to `--bs-border-default`.
15680
+ * @prop --bs-global-search-header-border-color - Section header underline. Aliased to `--bs-border-neutral-container`.
15681
+ * @prop --bs-global-search-header-color - Section header text. Aliased to `--bs-text-muted`.
15682
+ * @prop --bs-global-search-hint-color - Footer hint text. Aliased to `--bs-text-secondary`.
15683
+ */
15684
+ "bs-global-search": LocalJSX.IntrinsicElements["bs-global-search"] & JSXBase.HTMLAttributes<HTMLBsGlobalSearchElement>;
13355
15685
  /**
13356
15686
  * A CSS grid layout wrapper. Children are placed in equal-width columns with a token-based gap.
13357
15687
  * `columns` takes either a number (`"3"` becomes `repeat(3, minmax(0, 1fr))`) or any raw
@@ -13446,6 +15776,113 @@ declare module "@stencil/core" {
13446
15776
  * options list at all (freeform chip entry).
13447
15777
  */
13448
15778
  "bs-input": LocalJSX.IntrinsicElements["bs-input"] & JSXBase.HTMLAttributes<HTMLBsInputElement>;
15779
+ /**
15780
+ * One key of a keyboard shortcut, e.g. `Ctrl`, `K` or `Esc` -- rendered as a `<kbd>` keycap.
15781
+ * Shows a text label, or an icon (e.g. a return arrow) via the `icon` slot.
15782
+ * ## When to use
15783
+ * - Showing a keyboard shortcut hint next to a control or inside a search field.
15784
+ * - Alone for a single key, or as the children of `bs-key-caps` for a multi-key shortcut.
15785
+ * ## When not to use
15786
+ * - As a button or any clickable control -- a key is a static hint, not interactive.
15787
+ * @prop --bs-key-bg - Cap background. Aliased to `--bs-surface-base`.
15788
+ * @prop --bs-key-border-color - Cap border colour. Aliased to `--bs-border-default`.
15789
+ * @prop --bs-key-radius - Cap corner radius. Aliased to `--bs-border-radius-50`.
15790
+ * @prop --bs-key-padding-x - Horizontal padding. Aliased to `--bs-spacing-75`.
15791
+ * @prop --bs-key-padding-y - Vertical padding. Aliased to `--bs-spacing-50`.
15792
+ * @prop --bs-key-min-width - Smallest cap width, so single characters keep a keycap shape. Defaults to `25px` (Figma).
15793
+ * @prop --bs-key-color - Label colour. Aliased to `--bs-text-secondary`.
15794
+ * @prop --bs-key-font-size - Label size. Aliased to `--bs-font-size-xs` (12px).
15795
+ * @prop --bs-key-icon-size - Icon size. Defaults to `16px` (Figma).
15796
+ */
15797
+ "bs-key": LocalJSX.IntrinsicElements["bs-key"] & JSXBase.HTMLAttributes<HTMLBsKeyElement>;
15798
+ /**
15799
+ * A keyboard shortcut of one to four keys joined by "+", e.g. `Ctrl + K`. Give it a `keys` string
15800
+ * (`"Ctrl+Shift+K"`) or array (`['Ctrl', '+']` for a literal plus key), or slot your own `bs-key`
15801
+ * elements -- for example when a key is an icon.
15802
+ * ## When to use
15803
+ * - A shortcut hint beside a menu item, button or inside a search field.
15804
+ * ## When not to use
15805
+ * - Instructions that need prose ("press Enter to submit") -- write a sentence and use a single `bs-key` inline.
15806
+ * - Anything interactive -- keys are static hints.
15807
+ * @prop --bs-key-caps-gap - Gap between keys and separators. Aliased to `--bs-spacing-100`.
15808
+ * @prop --bs-key-caps-separator-color - Colour of the "+" separators. Aliased to `--bs-text-muted`.
15809
+ * @prop --bs-key-caps-disabled-opacity - Opacity of the whole shortcut while `disabled`. Defaults to `0.38` (Figma).
15810
+ */
15811
+ "bs-key-caps": LocalJSX.IntrinsicElements["bs-key-caps"] & JSXBase.HTMLAttributes<HTMLBsKeyCapsElement>;
15812
+ /**
15813
+ * A searchable reference panel of keyboard shortcuts: heading and close button, a search field, an
15814
+ * optional single-key on/off switch, shortcut groups in two columns and a footer hint. It is a
15815
+ * surface, not a modal -- place it inside `bs-dialog` or a popover.
15816
+ * Built from `bs-card`, `bs-icon-button`, `bs-input`, `bs-switch`, `bs-shortcut-row` (and so
15817
+ * `bs-key-caps` / `bs-key`).
15818
+ * ## When to use
15819
+ * - A "press ? to see shortcuts" help overlay for an app with many shortcuts.
15820
+ * ## When not to use
15821
+ * - A long-form help page or documentation -- link to it instead.
15822
+ * - A list of commands the user can run from it -- use `bs-menu`.
15823
+ * @prop --bs-keyboard-shortcuts-width - Panel width and min-width. Defaults to `720px` (Figma).
15824
+ * @prop --bs-keyboard-shortcuts-bg - Panel background. Aliased to `--bs-surface-base`.
15825
+ * @prop --bs-keyboard-shortcuts-radius - Aliased to `--bs-border-radius-150`.
15826
+ * @prop --bs-keyboard-shortcuts-padding - Aliased to `--bs-spacing-200`.
15827
+ * @prop --bs-keyboard-shortcuts-gap - Gap between sections. Aliased to `--bs-spacing-200`.
15828
+ * @prop --bs-keyboard-shortcuts-shadow - Figma elevation level 4 (`0 8px 8px` in `--bs-elevation-higher`, 12% black in light mode and 25% in dark mode).
15829
+ * @prop --bs-keyboard-shortcuts-column-gap - Gap between the two columns. Aliased to `--bs-spacing-600`.
15830
+ * @prop --bs-keyboard-shortcuts-color - Main text colour. Aliased to `--bs-text-default`.
15831
+ * @prop --bs-keyboard-shortcuts-color-secondary - Titles, captions, footer. Aliased to `--bs-text-secondary`.
15832
+ */
15833
+ "bs-keyboard-shortcuts": LocalJSX.IntrinsicElements["bs-keyboard-shortcuts"] & JSXBase.HTMLAttributes<HTMLBsKeyboardShortcutsElement>;
15834
+ /**
15835
+ * A vertical list of `bs-list-item` rows, optionally single-select.
15836
+ * ## When to use
15837
+ * - Records, people, files or options shown as rows with leading media and descriptions.
15838
+ * - `selectable` for a single-choice list (e.g. a conversation list next to a detail pane).
15839
+ * ## When not to use
15840
+ * - A popup list of actions -- use `bs-menu`.
15841
+ * - Navigation between app sections -- use `bs-navigation-drawer`.
15842
+ * - Multi-column, sortable or paged data -- use `bs-data-table`.
15843
+ * Built from `bs-list-item` children (light DOM; the list never moves nodes).
15844
+ * @prop --bs-list-gap - Gap between rows. Defaults to `0`.
15845
+ * @prop --bs-list-divider-color - Divider colour when `dividers` is set. Aliased to `--bs-border-neutral-container`.
15846
+ */
15847
+ "bs-list": LocalJSX.IntrinsicElements["bs-list"] & JSXBase.HTMLAttributes<HTMLBsListElement>;
15848
+ /**
15849
+ * A single row of a list: optional leading media (avatar, icon, image), a label, a description and
15850
+ * optional support text, and an optional trailing caret or custom trailing content.
15851
+ * ## When to use
15852
+ * - As a child of `bs-list`, one per record, person, file or option.
15853
+ * - Standalone as a plain information row (non-interactive), or with `interactive` as a button-like row.
15854
+ * ## When not to use
15855
+ * - A popup list of actions -- use `bs-menu` / `bs-menu-item`.
15856
+ * - App navigation with an active route -- use `bs-navigation-drawer-item`.
15857
+ * - Tabular data with columns, sorting or paging -- use `bs-data-table`.
15858
+ * Composed from: leading media (`bs-avatar`) and trailing controls (`bs-icon-button`) are supplied by the
15859
+ * consumer through the `leading` and `trailing` slots; the row itself only reserves layout. The default
15860
+ * trailing caret is inline SVG.
15861
+ * Roles are driven by the parent `bs-list` (via `selectionRole`). Standalone, the row has no role
15862
+ * (`listitem` is only valid inside a list) unless `interactive` is set, which makes it a focusable
15863
+ * `role="button"`.
15864
+ * @prop --bs-list-item-min-height - Minimum row height. Aliased to `--bs-spacing-1000`.
15865
+ * @prop --bs-list-item-padding-y - Aliased to `--bs-spacing-150`.
15866
+ * @prop --bs-list-item-padding-x - Aliased to `--bs-spacing-200`.
15867
+ * @prop --bs-list-item-gap - Gap between leading, content and trailing. Aliased to `--bs-spacing-200`.
15868
+ * @prop --bs-list-item-content-gap - Gap between text lines. Aliased to `--bs-spacing-25`.
15869
+ * @prop --bs-list-item-radius - Aliased to `--bs-border-radius-100`.
15870
+ * @prop --bs-list-item-bg - Enabled background. `transparent`.
15871
+ * @prop --bs-list-item-bg-hover - Aliased to `--bs-surface-hover`.
15872
+ * @prop --bs-list-item-bg-pressed - Aliased to `--bs-surface-pressed`.
15873
+ * @prop --bs-list-item-bg-focus - Aliased to `--bs-surface-focus`.
15874
+ * @prop --bs-list-item-bg-selected - Aliased to `--bs-surface-selected`.
15875
+ * @prop --bs-list-item-bg-selected-hover - Aliased to `--bs-surface-selected-hover`.
15876
+ * @prop --bs-list-item-bg-selected-pressed - Aliased to `--bs-surface-selected-pressed`.
15877
+ * @prop --bs-list-item-bg-selected-focus - Aliased to `--bs-surface-selected-focus`.
15878
+ * @prop --bs-list-item-bg-disabled - Aliased to `--bs-surface-action-disabled`.
15879
+ * @prop --bs-list-item-color - Text colour. Aliased to `--bs-text-default`.
15880
+ * @prop --bs-list-item-color-disabled - Aliased to `--bs-text-on-disabled`.
15881
+ * @prop --bs-list-item-focus-ring - Focus ring colour. Aliased to `--bs-border-neutral-focus`.
15882
+ * @prop --bs-list-item-image-width - Leading image width. 72px.
15883
+ * @prop --bs-list-item-image-height - Leading image height. 56px.
15884
+ */
15885
+ "bs-list-item": LocalJSX.IntrinsicElements["bs-list-item"] & JSXBase.HTMLAttributes<HTMLBsListItemElement>;
13449
15886
  /**
13450
15887
  * The BrandSync brand mark, as its own standalone component -- shared by `bs-navigation-header`
13451
15888
  * and `bs-navigation-drawer`, which used to each render their own duplicated copy of this SVG
@@ -13777,6 +16214,31 @@ declare module "@stencil/core" {
13777
16214
  * - An on/off setting that takes effect immediately (no explicit form submission) -- use `bs-switch`.
13778
16215
  */
13779
16216
  "bs-radio": LocalJSX.IntrinsicElements["bs-radio"] & JSXBase.HTMLAttributes<HTMLBsRadioElement>;
16217
+ /**
16218
+ * One result or suggestion row of a search dropdown: a leading icon, a primary line, an optional
16219
+ * description line and trailing text. Static, not focusable -- focus stays in the search field and the
16220
+ * parent (`bs-global-search`) marks the highlighted row with `active`.
16221
+ * Standalone it has no role. `bs-global-search` sets `selectionRole="option"` (and an `id`) on its rows,
16222
+ * the same pattern as `bs-list-item` and `bs-shortcut-row`.
16223
+ * ## When to use
16224
+ * - A suggestion, recent search or result inside `bs-global-search`.
16225
+ * ## When not to use
16226
+ * - A row in a generic list -- use `bs-list-item`.
16227
+ * - A command in a popup menu -- use `bs-menu-item`.
16228
+ * @prop --bs-search-item-min-height - Aliased to `--bs-spacing-600` (48px).
16229
+ * @prop --bs-search-item-padding-y - Aliased to `--bs-spacing-100`.
16230
+ * @prop --bs-search-item-padding-x - Aliased to `--bs-spacing-150`.
16231
+ * @prop --bs-search-item-gap - Aliased to `--bs-spacing-100`.
16232
+ * @prop --bs-search-item-radius - Aliased to `--bs-border-radius-100`.
16233
+ * @prop --bs-search-item-bg - Resting background. `transparent`.
16234
+ * @prop --bs-search-item-bg-active - Active (highlighted) and hover background. Aliased to `--bs-surface-hover`.
16235
+ * @prop --bs-search-item-bg-pressed - Aliased to `--bs-surface-pressed`.
16236
+ * @prop --bs-search-item-color - Primary text. Aliased to `--bs-text-default`.
16237
+ * @prop --bs-search-item-color-muted - Description and trailing text. Aliased to `--bs-text-muted`.
16238
+ * @prop --bs-search-item-color-disabled - Aliased to `--bs-text-on-disabled`.
16239
+ * @prop --bs-search-item-icon-color - Aliased to `--bs-icon-default`.
16240
+ */
16241
+ "bs-search-item": LocalJSX.IntrinsicElements["bs-search-item"] & JSXBase.HTMLAttributes<HTMLBsSearchItemElement>;
13780
16242
  /**
13781
16243
  * The three moments around an expiring session, as one card. Matches the Figma "Session timeout"
13782
16244
  * component's three types:
@@ -13804,6 +16266,23 @@ declare module "@stencil/core" {
13804
16266
  * (`bs-dialog`) if the warning must trap focus.
13805
16267
  */
13806
16268
  "bs-session-timeout": LocalJSX.IntrinsicElements["bs-session-timeout"] & JSXBase.HTMLAttributes<HTMLBsSessionTimeoutElement>;
16269
+ /**
16270
+ * One row of a shortcut list: an action label on the left and its keyboard shortcut on the right.
16271
+ * Static information, not interactive. Standalone it has no role; `bs-keyboard-shortcuts` sets
16272
+ * `selectionRole="listitem"` on its rows (same pattern as `bs-list-item`).
16273
+ * Built from `bs-key-caps` (and so `bs-key`).
16274
+ * ## When to use
16275
+ * - A line in a keyboard-shortcut reference, usually inside `bs-keyboard-shortcuts`.
16276
+ * ## When not to use
16277
+ * - A clickable command or menu entry -- use `bs-menu-item` (which has its own shortcut slot).
16278
+ * @prop --bs-shortcut-row-height - Row height. Defaults to `36px` (Figma).
16279
+ * @prop --bs-shortcut-row-padding-x - Horizontal padding. Aliased to `--bs-spacing-100`.
16280
+ * @prop --bs-shortcut-row-gap - Gap between label and keys. Aliased to `--bs-spacing-100`.
16281
+ * @prop --bs-shortcut-row-radius - Corner radius. Aliased to `--bs-border-radius-75`.
16282
+ * @prop --bs-shortcut-row-color - Label colour. Aliased to `--bs-text-default`.
16283
+ * @prop --bs-shortcut-row-color-disabled - Label colour while `disabled`. Aliased to `--bs-text-on-disabled`.
16284
+ */
16285
+ "bs-shortcut-row": LocalJSX.IntrinsicElements["bs-shortcut-row"] & JSXBase.HTMLAttributes<HTMLBsShortcutRowElement>;
13807
16286
  /**
13808
16287
  * A generic slide-in panel (drawer) anchored to the start or end edge, for history, filters, FAQ
13809
16288
  * and similar secondary content. Closes via its close button or Escape and emits `bsClose`.
@@ -14124,6 +16603,28 @@ declare module "@stencil/core" {
14124
16603
  * @prop --bs-tooltip-trigger-z-index - Stacking order. Aliased to `--bs-z-index-popover`.
14125
16604
  */
14126
16605
  "bs-tooltip-trigger": LocalJSX.IntrinsicElements["bs-tooltip-trigger"] & JSXBase.HTMLAttributes<HTMLBsTooltipTriggerElement>;
16606
+ /**
16607
+ * A hierarchical list of `bs-tree-item` rows with single selection, expand/collapse and the
16608
+ * WAI-ARIA tree keyboard pattern.
16609
+ * The tree owns `role="tree"`, the roving `tabindex` (exactly one enabled, visible item is
16610
+ * tabbable: the selected one, otherwise the first), selection (kept in sync with each item's
16611
+ * `selected`) and keyboard navigation over the visible (rendered, non-disabled) items. Items own
16612
+ * their expansion state and emit `bsSelect` / `bsToggle`.
16613
+ * Built from: `bs-tree-item` rows.
16614
+ */
16615
+ "bs-tree": LocalJSX.IntrinsicElements["bs-tree"] & JSXBase.HTMLAttributes<HTMLBsTreeElement>;
16616
+ /**
16617
+ * A single row of a `bs-tree`. An item that contains child `bs-tree-item` elements is a parent
16618
+ * (it gets an expand/collapse caret and a folder icon); an item without children is a leaf (no
16619
+ * caret, file icon).
16620
+ * The host carries `role="treeitem"` and the `aria-*` state; the owning `bs-tree` manages the
16621
+ * roving `tabindex`, selection and keyboard navigation. Nesting depth is computed automatically
16622
+ * from the number of ancestor `bs-tree-item` elements and exposed as `aria-level` -- it is not a
16623
+ * prop. Clicking the row selects it; clicking the caret (or pressing Right/Left in a tree) toggles
16624
+ * expansion -- the two are deliberately separate.
16625
+ * Built from: inline SVG icons only (no existing `bs-*` component covers a tree row).
16626
+ */
16627
+ "bs-tree-item": LocalJSX.IntrinsicElements["bs-tree-item"] & JSXBase.HTMLAttributes<HTMLBsTreeItemElement>;
14127
16628
  /**
14128
16629
  * A product's "What's new" surface, in three forms matching the Figma component:
14129
16630
  * - `feed` -- a docked panel: heading, "Mark all as read", filter tabs, the list of updates (each a