@brandsync/wc 1.7.0 → 1.9.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 (345) hide show
  1. package/custom-elements.json +340 -24
  2. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  3. package/dist/brandsync-wc/{p-fde5e9f1.entry.js → p-051d3064.entry.js} +1 -1
  4. package/dist/brandsync-wc/{p-f243683f.entry.js → p-05c7de28.entry.js} +1 -1
  5. package/dist/brandsync-wc/{p-2d6955d6.entry.js → p-062cfa34.entry.js} +1 -1
  6. package/dist/brandsync-wc/p-0e39b9cc.entry.js +1 -0
  7. package/dist/brandsync-wc/p-0eed6813.entry.js +1 -0
  8. package/dist/brandsync-wc/{p-d25b7b74.entry.js → p-107b1c5d.entry.js} +1 -1
  9. package/dist/brandsync-wc/{p-538cc08e.entry.js → p-114d2fd8.entry.js} +1 -1
  10. package/dist/brandsync-wc/{p-6754dfa9.entry.js → p-1c0db4d6.entry.js} +1 -1
  11. package/dist/brandsync-wc/{p-4a1a5d6e.entry.js → p-1f7208cb.entry.js} +1 -1
  12. package/dist/brandsync-wc/p-2181378f.entry.js +1 -0
  13. package/dist/brandsync-wc/{p-d06543a5.entry.js → p-235ae012.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-2700a63e.entry.js → p-275072dd.entry.js} +1 -1
  15. package/dist/brandsync-wc/p-27bbed83.entry.js +1 -0
  16. package/dist/brandsync-wc/p-2891d40b.entry.js +1 -0
  17. package/dist/brandsync-wc/p-29027559.entry.js +1 -0
  18. package/dist/brandsync-wc/{p-a36a0e6a.entry.js → p-3176d1d3.entry.js} +1 -1
  19. package/dist/brandsync-wc/{p-0d86c22d.entry.js → p-33e44094.entry.js} +1 -1
  20. package/dist/brandsync-wc/{p-e427bbda.entry.js → p-360452c2.entry.js} +1 -1
  21. package/dist/brandsync-wc/p-36bf37d9.entry.js +1 -0
  22. package/dist/brandsync-wc/p-3b64e3cd.entry.js +1 -0
  23. package/dist/brandsync-wc/p-3ec74d35.entry.js +1 -0
  24. package/dist/brandsync-wc/p-4574a707.entry.js +1 -0
  25. package/dist/brandsync-wc/p-4e5dcaff.entry.js +1 -0
  26. package/dist/brandsync-wc/{p-61db6ce2.entry.js → p-61c1a2a3.entry.js} +1 -1
  27. package/dist/brandsync-wc/{p-85c70f6d.entry.js → p-6331de9c.entry.js} +1 -1
  28. package/dist/brandsync-wc/{p-9c1be2a0.entry.js → p-6bf2f116.entry.js} +1 -1
  29. package/dist/brandsync-wc/p-6fd7dd6a.entry.js +1 -0
  30. package/dist/brandsync-wc/{p-c3a28a89.entry.js → p-70f64b25.entry.js} +1 -1
  31. package/dist/brandsync-wc/{p-06e9b45d.entry.js → p-7b00dd36.entry.js} +1 -1
  32. package/dist/brandsync-wc/{p-13e4966c.entry.js → p-7c94e6ae.entry.js} +1 -1
  33. package/dist/brandsync-wc/p-835a8dc7.entry.js +1 -0
  34. package/dist/brandsync-wc/{p-77433277.entry.js → p-8ee0153b.entry.js} +1 -1
  35. package/dist/brandsync-wc/{p-e1069ba9.entry.js → p-9f65f998.entry.js} +1 -1
  36. package/dist/brandsync-wc/p-9f6fe37d.entry.js +1 -0
  37. package/dist/brandsync-wc/{p-b2dc9886.entry.js → p-9f8852a0.entry.js} +1 -1
  38. package/dist/brandsync-wc/{p-DuyFft7h.js → p-AgoOSYvW.js} +2 -2
  39. package/dist/brandsync-wc/{p-fba01c96.entry.js → p-a09e157f.entry.js} +1 -1
  40. package/dist/brandsync-wc/{p-55e6438c.entry.js → p-a0d5a620.entry.js} +1 -1
  41. package/dist/brandsync-wc/{p-8b2ab522.entry.js → p-a5feaad4.entry.js} +1 -1
  42. package/dist/brandsync-wc/{p-cbaa19ab.entry.js → p-a92eec48.entry.js} +1 -1
  43. package/dist/brandsync-wc/{p-3eab22a5.entry.js → p-ae978c9a.entry.js} +1 -1
  44. package/dist/brandsync-wc/{p-f2ce9a1f.entry.js → p-bbcc47b0.entry.js} +1 -1
  45. package/dist/brandsync-wc/{p-80cf96ff.entry.js → p-be2c1740.entry.js} +1 -1
  46. package/dist/brandsync-wc/p-c10d2529.entry.js +1 -0
  47. package/dist/brandsync-wc/{p-819a3dae.entry.js → p-c3f72584.entry.js} +1 -1
  48. package/dist/brandsync-wc/{p-8b57f606.entry.js → p-c4de155c.entry.js} +1 -1
  49. package/dist/brandsync-wc/{p-c197cc95.entry.js → p-cfcf3f0a.entry.js} +1 -1
  50. package/dist/brandsync-wc/{p-f8f03334.entry.js → p-de7c946d.entry.js} +1 -1
  51. package/dist/brandsync-wc/{p-600b5434.entry.js → p-e9b43754.entry.js} +1 -1
  52. package/dist/brandsync-wc/{p-4bff9b4b.entry.js → p-f006d962.entry.js} +1 -1
  53. package/dist/brandsync-wc/p-f074f94e.entry.js +1 -0
  54. package/dist/brandsync-wc/{p-7ed5670e.entry.js → p-f7d47c17.entry.js} +1 -1
  55. package/dist/brandsync-wc/p-fc240aa0.entry.js +1 -0
  56. package/dist/brandsync-wc/{p-f518f486.entry.js → p-fc58c663.entry.js} +1 -1
  57. package/dist/brandsync-wc/{p-be14f99f.entry.js → p-fddc7bd1.entry.js} +1 -1
  58. package/dist/cjs/brandsync-wc.cjs.js +2 -2
  59. package/dist/cjs/bs-accordion.cjs.entry.js +2 -2
  60. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +1 -1
  61. package/dist/cjs/bs-ai-greeting.cjs.entry.js +1 -1
  62. package/dist/cjs/bs-ai-thinking.cjs.entry.js +1 -1
  63. package/dist/cjs/bs-attachment-list.cjs.entry.js +2 -2
  64. package/dist/cjs/bs-attachment.cjs.entry.js +2 -2
  65. package/dist/cjs/bs-avatar.cjs.entry.js +1 -1
  66. package/dist/cjs/bs-badge.cjs.entry.js +1 -1
  67. package/dist/cjs/bs-breadcrumb-overflow.cjs.entry.js +15 -3
  68. package/dist/cjs/bs-breadcrumb.cjs.entry.js +16 -2
  69. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +1 -1
  70. package/dist/cjs/bs-button-skeleton.cjs.entry.js +1 -1
  71. package/dist/cjs/bs-button.cjs.entry.js +23 -4
  72. package/dist/cjs/bs-card.cjs.entry.js +2 -2
  73. package/dist/cjs/bs-carousel.cjs.entry.js +1 -1
  74. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +2 -2
  75. package/dist/cjs/bs-chatbot-header.cjs.entry.js +1 -1
  76. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +2 -2
  77. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +1 -1
  78. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +1 -1
  79. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +1 -1
  80. package/dist/cjs/bs-checkbox.cjs.entry.js +48 -3
  81. package/dist/cjs/bs-chip-filter.cjs.entry.js +2 -2
  82. package/dist/cjs/bs-chip-informative.cjs.entry.js +2 -2
  83. package/dist/cjs/bs-chip-input.cjs.entry.js +2 -2
  84. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +1 -1
  85. package/dist/cjs/bs-composer.cjs.entry.js +1 -1
  86. package/dist/cjs/bs-data-table.cjs.entry.js +20 -6
  87. package/dist/cjs/bs-dialog.cjs.entry.js +2 -2
  88. package/dist/cjs/bs-file-upload-item.cjs.entry.js +1 -1
  89. package/dist/cjs/bs-file-upload.cjs.entry.js +1 -1
  90. package/dist/cjs/bs-icon-button.cjs.entry.js +23 -4
  91. package/dist/cjs/bs-inline-tab.cjs.entry.js +11 -3
  92. package/dist/cjs/bs-input.cjs.entry.js +69 -5
  93. package/dist/cjs/bs-logo.cjs.entry.js +1 -1
  94. package/dist/cjs/bs-menu-item.cjs.entry.js +1 -1
  95. package/dist/cjs/bs-menu.cjs.entry.js +25 -3
  96. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +2 -2
  97. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +119 -6
  98. package/dist/cjs/bs-navigation-header.cjs.entry.js +2 -2
  99. package/dist/cjs/bs-pagination.cjs.entry.js +1 -1
  100. package/dist/cjs/bs-progress-linear.cjs.entry.js +1 -1
  101. package/dist/cjs/bs-progress.cjs.entry.js +8 -3
  102. package/dist/cjs/bs-radio.cjs.entry.js +81 -12
  103. package/dist/cjs/bs-slider.cjs.entry.js +54 -2
  104. package/dist/cjs/bs-snackbar.cjs.entry.js +1 -1
  105. package/dist/cjs/bs-source-link.cjs.entry.js +2 -2
  106. package/dist/cjs/bs-stepper-step.cjs.entry.js +2 -2
  107. package/dist/cjs/bs-stepper.cjs.entry.js +3 -2
  108. package/dist/cjs/bs-switch.cjs.entry.js +36 -3
  109. package/dist/cjs/bs-tab.cjs.entry.js +11 -3
  110. package/dist/cjs/bs-tabs.cjs.entry.js +97 -3
  111. package/dist/cjs/bs-toast.cjs.entry.js +1 -1
  112. package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
  113. package/dist/cjs/{index-D7e6DfLV.js → index-kk9YXF2S.js} +43 -5
  114. package/dist/cjs/loader.cjs.js +2 -2
  115. package/dist/collection/components/bs-a11y.cmp.test.js +54 -0
  116. package/dist/collection/components/bs-accordion/bs-accordion.css +5 -5
  117. package/dist/collection/components/bs-attachment/bs-attachment.css +1 -1
  118. package/dist/collection/components/bs-attachment-list/bs-attachment-list.css +1 -1
  119. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.cmp.test.js +63 -0
  120. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.js +32 -1
  121. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.cmp.test.js +45 -0
  122. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.css +1 -1
  123. package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.js +30 -1
  124. package/dist/collection/components/bs-button/bs-button/bs-button.css +17 -10
  125. package/dist/collection/components/bs-button/bs-button/bs-button.js +16 -3
  126. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.cmp.test.js +20 -0
  127. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.css +21 -4
  128. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +18 -4
  129. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.stories.js +10 -0
  130. package/dist/collection/components/bs-card/bs-card.css +4 -0
  131. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.css +1 -1
  132. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.css +3 -3
  133. package/dist/collection/components/bs-checkbox/bs-checkbox.css +8 -1
  134. package/dist/collection/components/bs-checkbox/bs-checkbox.js +100 -2
  135. package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.css +4 -4
  136. package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.css +4 -4
  137. package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.css +5 -5
  138. package/dist/collection/components/bs-data-table/bs-data-table.cmp.test.js +19 -0
  139. package/dist/collection/components/bs-data-table/bs-data-table.css +1 -1
  140. package/dist/collection/components/bs-data-table/bs-data-table.js +19 -5
  141. package/dist/collection/components/bs-data-table/bs-data-table.stories.js +8 -1
  142. package/dist/collection/components/bs-dialog/bs-dialog.css +5 -1
  143. package/dist/collection/components/bs-form-association.cmp.test.js +172 -0
  144. package/dist/collection/components/bs-input/bs-input.css +10 -4
  145. package/dist/collection/components/bs-input/bs-input.js +82 -4
  146. package/dist/collection/components/bs-keyboard-nav.cmp.test.js +100 -0
  147. package/dist/collection/components/bs-logo/bs-logo.cmp.test.js +52 -3
  148. package/dist/collection/components/bs-menu/bs-menu.css +4 -0
  149. package/dist/collection/components/bs-menu/bs-menu.js +33 -1
  150. package/dist/collection/components/bs-menu/bs-menu.stories.js +54 -0
  151. package/dist/collection/components/bs-progress/bs-progress.js +27 -2
  152. package/dist/collection/components/bs-radio/bs-radio.cmp.test.js +4 -10
  153. package/dist/collection/components/bs-radio/bs-radio.css +7 -1
  154. package/dist/collection/components/bs-radio/bs-radio.js +92 -14
  155. package/dist/collection/components/bs-radio/bs-radio.stories.js +1 -10
  156. package/dist/collection/components/bs-slider/bs-slider.js +68 -2
  157. package/dist/collection/components/bs-source-link/bs-source-link.css +2 -2
  158. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +3 -2
  159. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.css +3 -3
  160. package/dist/collection/components/bs-switch/bs-switch.css +10 -1
  161. package/dist/collection/components/bs-switch/bs-switch.js +69 -2
  162. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.css +2 -2
  163. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +47 -1
  164. package/dist/collection/components/bs-tab/bs-tab/bs-tab.css +2 -2
  165. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +47 -1
  166. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.cmp.test.js +88 -0
  167. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +139 -2
  168. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.stories.js +24 -0
  169. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  170. package/dist/collection/components/forms/forms.stories.js +63 -0
  171. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.js +173 -5
  172. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.css +106 -34
  173. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +181 -5
  174. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.js +48 -0
  175. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  176. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.cmp.test.js +68 -0
  177. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.css +31 -17
  178. package/dist/components/bs-accordion.js +1 -1
  179. package/dist/components/bs-ai-disclaimer.js +1 -1
  180. package/dist/components/bs-ai-greeting.js +1 -1
  181. package/dist/components/bs-ai-thinking.js +1 -1
  182. package/dist/components/bs-attachment-list.js +1 -1
  183. package/dist/components/bs-attachment.js +1 -1
  184. package/dist/components/bs-avatar.js +1 -1
  185. package/dist/components/bs-badge.js +1 -1
  186. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  187. package/dist/components/bs-breadcrumb.js +1 -1
  188. package/dist/components/bs-breadcrumbs.js +1 -1
  189. package/dist/components/bs-button-skeleton.js +1 -1
  190. package/dist/components/bs-button.js +1 -1
  191. package/dist/components/bs-card.js +1 -1
  192. package/dist/components/bs-carousel.js +1 -1
  193. package/dist/components/bs-chatbot-feedback.js +1 -1
  194. package/dist/components/bs-chatbot-header.js +1 -1
  195. package/dist/components/bs-chatbot-response-action.js +1 -1
  196. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  197. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  198. package/dist/components/bs-checkbox-skeleton.js +1 -1
  199. package/dist/components/bs-checkbox.js +1 -1
  200. package/dist/components/bs-chip-filter.js +1 -1
  201. package/dist/components/bs-chip-informative.js +1 -1
  202. package/dist/components/bs-chip-input.js +1 -1
  203. package/dist/components/bs-composer-status-banner.js +1 -1
  204. package/dist/components/bs-composer.js +1 -1
  205. package/dist/components/bs-data-table.js +1 -1
  206. package/dist/components/bs-dialog.js +1 -1
  207. package/dist/components/bs-file-upload-item.js +1 -1
  208. package/dist/components/bs-file-upload.js +1 -1
  209. package/dist/components/bs-icon-button.js +1 -1
  210. package/dist/components/bs-inline-tab.js +1 -1
  211. package/dist/components/bs-input.js +1 -1
  212. package/dist/components/bs-logo.js +1 -1
  213. package/dist/components/bs-menu-item.js +1 -1
  214. package/dist/components/bs-menu.js +1 -1
  215. package/dist/components/bs-navigation-drawer-item.js +1 -1
  216. package/dist/components/bs-navigation-drawer.js +1 -1
  217. package/dist/components/bs-navigation-header.js +1 -1
  218. package/dist/components/bs-pagination.js +1 -1
  219. package/dist/components/bs-progress-linear.js +1 -1
  220. package/dist/components/bs-progress.js +1 -1
  221. package/dist/components/bs-radio.js +1 -1
  222. package/dist/components/bs-slider.js +1 -1
  223. package/dist/components/bs-snackbar.js +1 -1
  224. package/dist/components/bs-source-link.js +1 -1
  225. package/dist/components/bs-stepper-step.js +1 -1
  226. package/dist/components/bs-stepper.js +1 -1
  227. package/dist/components/bs-switch.js +1 -1
  228. package/dist/components/bs-tab.js +1 -1
  229. package/dist/components/bs-tabs.js +1 -1
  230. package/dist/components/bs-toast.js +1 -1
  231. package/dist/components/bs-tooltip.js +1 -1
  232. package/dist/components/index.js +1 -1
  233. package/dist/components/{p-LYvoWZt4.js → p-BA3c9Rom.js} +1 -1
  234. package/dist/components/{p-Dqt-Qp4W.js → p-BfEyD6Ku.js} +1 -1
  235. package/dist/components/p-BoeorHNv.js +1 -0
  236. package/dist/components/p-Buly0d5G.js +1 -0
  237. package/dist/components/p-CpUHnsq9.js +1 -0
  238. package/dist/components/{p-BxFJ74fI.js → p-EtXc94lJ.js} +1 -1
  239. package/dist/components/{p-mnGJPH85.js → p-JYlmcxBn.js} +1 -1
  240. package/dist/components/{p-BhvV55-6.js → p-R2MlkUzD.js} +1 -1
  241. package/dist/components/{p-Dx8gAOVC.js → p-wei0Ija2.js} +1 -1
  242. package/dist/esm/brandsync-wc.js +3 -3
  243. package/dist/esm/bs-accordion.entry.js +2 -2
  244. package/dist/esm/bs-ai-disclaimer.entry.js +1 -1
  245. package/dist/esm/bs-ai-greeting.entry.js +1 -1
  246. package/dist/esm/bs-ai-thinking.entry.js +1 -1
  247. package/dist/esm/bs-attachment-list.entry.js +2 -2
  248. package/dist/esm/bs-attachment.entry.js +2 -2
  249. package/dist/esm/bs-avatar.entry.js +1 -1
  250. package/dist/esm/bs-badge.entry.js +1 -1
  251. package/dist/esm/bs-breadcrumb-overflow.entry.js +15 -3
  252. package/dist/esm/bs-breadcrumb.entry.js +16 -2
  253. package/dist/esm/bs-breadcrumbs.entry.js +1 -1
  254. package/dist/esm/bs-button-skeleton.entry.js +1 -1
  255. package/dist/esm/bs-button.entry.js +23 -4
  256. package/dist/esm/bs-card.entry.js +2 -2
  257. package/dist/esm/bs-carousel.entry.js +1 -1
  258. package/dist/esm/bs-chatbot-feedback.entry.js +2 -2
  259. package/dist/esm/bs-chatbot-header.entry.js +1 -1
  260. package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
  261. package/dist/esm/bs-chatbot-sources-drawer.entry.js +1 -1
  262. package/dist/esm/bs-chatbot-suggestion-button.entry.js +1 -1
  263. package/dist/esm/bs-checkbox-skeleton.entry.js +1 -1
  264. package/dist/esm/bs-checkbox.entry.js +48 -3
  265. package/dist/esm/bs-chip-filter.entry.js +2 -2
  266. package/dist/esm/bs-chip-informative.entry.js +2 -2
  267. package/dist/esm/bs-chip-input.entry.js +2 -2
  268. package/dist/esm/bs-composer-status-banner.entry.js +1 -1
  269. package/dist/esm/bs-composer.entry.js +1 -1
  270. package/dist/esm/bs-data-table.entry.js +20 -6
  271. package/dist/esm/bs-dialog.entry.js +2 -2
  272. package/dist/esm/bs-file-upload-item.entry.js +1 -1
  273. package/dist/esm/bs-file-upload.entry.js +1 -1
  274. package/dist/esm/bs-icon-button.entry.js +23 -4
  275. package/dist/esm/bs-inline-tab.entry.js +11 -3
  276. package/dist/esm/bs-input.entry.js +69 -5
  277. package/dist/esm/bs-logo.entry.js +1 -1
  278. package/dist/esm/bs-menu-item.entry.js +1 -1
  279. package/dist/esm/bs-menu.entry.js +25 -3
  280. package/dist/esm/bs-navigation-drawer-item.entry.js +2 -2
  281. package/dist/esm/bs-navigation-drawer.entry.js +119 -6
  282. package/dist/esm/bs-navigation-header.entry.js +2 -2
  283. package/dist/esm/bs-pagination.entry.js +1 -1
  284. package/dist/esm/bs-progress-linear.entry.js +1 -1
  285. package/dist/esm/bs-progress.entry.js +8 -3
  286. package/dist/esm/bs-radio.entry.js +81 -12
  287. package/dist/esm/bs-slider.entry.js +54 -2
  288. package/dist/esm/bs-snackbar.entry.js +1 -1
  289. package/dist/esm/bs-source-link.entry.js +2 -2
  290. package/dist/esm/bs-stepper-step.entry.js +2 -2
  291. package/dist/esm/bs-stepper.entry.js +3 -2
  292. package/dist/esm/bs-switch.entry.js +36 -3
  293. package/dist/esm/bs-tab.entry.js +11 -3
  294. package/dist/esm/bs-tabs.entry.js +97 -3
  295. package/dist/esm/bs-toast.entry.js +1 -1
  296. package/dist/esm/bs-tooltip.entry.js +2 -2
  297. package/dist/esm/{index-DuyFft7h.js → index-AgoOSYvW.js} +43 -5
  298. package/dist/esm/loader.js +3 -3
  299. package/dist/types/components/bs-a11y.cmp.test.d.ts +1 -0
  300. package/dist/types/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.d.ts +10 -0
  301. package/dist/types/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.d.ts +8 -0
  302. package/dist/types/components/bs-button/bs-button/bs-button.d.ts +4 -1
  303. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.d.ts +6 -2
  304. package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.stories.d.ts +1 -0
  305. package/dist/types/components/bs-checkbox/bs-checkbox.d.ts +12 -0
  306. package/dist/types/components/bs-data-table/bs-data-table.d.ts +16 -2
  307. package/dist/types/components/bs-form-association.cmp.test.d.ts +1 -0
  308. package/dist/types/components/bs-input/bs-input.d.ts +12 -0
  309. package/dist/types/components/bs-keyboard-nav.cmp.test.d.ts +1 -0
  310. package/dist/types/components/bs-menu/bs-menu.d.ts +4 -0
  311. package/dist/types/components/bs-menu/bs-menu.stories.d.ts +1 -0
  312. package/dist/types/components/bs-progress/bs-progress.d.ts +5 -0
  313. package/dist/types/components/bs-radio/bs-radio.d.ts +23 -9
  314. package/dist/types/components/bs-slider/bs-slider.d.ts +9 -0
  315. package/dist/types/components/bs-switch/bs-switch.d.ts +10 -0
  316. package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.d.ts +8 -0
  317. package/dist/types/components/bs-tab/bs-tab/bs-tab.d.ts +8 -0
  318. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.d.ts +24 -0
  319. package/dist/types/components/bs-tab/bs-tabs/bs-tabs.stories.d.ts +1 -0
  320. package/dist/types/components/forms/forms.stories.d.ts +6 -0
  321. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.d.ts +50 -1
  322. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.d.ts +2 -0
  323. package/dist/types/components.d.ts +271 -9
  324. package/package.json +1 -1
  325. package/readme.md +14 -0
  326. package/dist/brandsync-wc/p-18021c05.entry.js +0 -1
  327. package/dist/brandsync-wc/p-1c8160c2.entry.js +0 -1
  328. package/dist/brandsync-wc/p-21c14465.entry.js +0 -1
  329. package/dist/brandsync-wc/p-27100489.entry.js +0 -1
  330. package/dist/brandsync-wc/p-309f920e.entry.js +0 -1
  331. package/dist/brandsync-wc/p-30d6a6d0.entry.js +0 -1
  332. package/dist/brandsync-wc/p-387ed85f.entry.js +0 -1
  333. package/dist/brandsync-wc/p-4b0938a5.entry.js +0 -1
  334. package/dist/brandsync-wc/p-5312b6a5.entry.js +0 -1
  335. package/dist/brandsync-wc/p-70e035ed.entry.js +0 -1
  336. package/dist/brandsync-wc/p-777a9dbf.entry.js +0 -1
  337. package/dist/brandsync-wc/p-a96856fd.entry.js +0 -1
  338. package/dist/brandsync-wc/p-b0634051.entry.js +0 -1
  339. package/dist/brandsync-wc/p-bcee3d60.entry.js +0 -1
  340. package/dist/brandsync-wc/p-d03eba2b.entry.js +0 -1
  341. package/dist/brandsync-wc/p-e61efe4d.entry.js +0 -1
  342. package/dist/brandsync-wc/p-f14bda01.entry.js +0 -1
  343. package/dist/components/p-BaxFLlKS.js +0 -1
  344. package/dist/components/p-DI5GgSqL.js +0 -1
  345. package/dist/components/p-v4T0qPVn.js +0 -1
@@ -0,0 +1,63 @@
1
+ import { html } from "lit";
2
+ // Live examples for the Forms guide (forms.mdx). Not a component -- it shows how the
3
+ // form-associated controls behave inside a plain native <form>.
4
+ // Prints exactly what the browser would send, so the story shows the real FormData rather than a
5
+ // mocked-up result.
6
+ const showFormData = (ev) => {
7
+ ev.preventDefault();
8
+ const form = ev.currentTarget;
9
+ const out = form.parentElement?.querySelector('pre');
10
+ if (!out)
11
+ return;
12
+ const lines = [];
13
+ new FormData(form).forEach((value, key) => lines.push(`${key} = ${JSON.stringify(value)}`));
14
+ out.textContent = lines.length ? lines.join('\n') : '(no entries)';
15
+ };
16
+ const meta = {
17
+ title: 'Guides/Forms',
18
+ parameters: { layout: 'padded' },
19
+ };
20
+ export default meta;
21
+ const output = html `<pre style="margin: 16px 0 0; padding: 12px; background: #f4f4f4; color: #111; border-radius: 4px; min-height: 3em;">
22
+ Submit to see the FormData…</pre
23
+ >`;
24
+ export const Default = {
25
+ render: () => html `
26
+ <div style="max-width: 420px;">
27
+ <form @submit=${showFormData} style="display: flex; flex-direction: column; gap: 16px;">
28
+ <bs-input name="email" type="email" label="Email" required></bs-input>
29
+ <bs-input name="notes" type="textarea" label="Notes"></bs-input>
30
+ <div role="radiogroup" aria-label="Plan" style="display: flex; flex-direction: column; gap: 8px;">
31
+ <bs-radio name="plan" value="free" checked>Free</bs-radio>
32
+ <bs-radio name="plan" value="pro">Pro</bs-radio>
33
+ </div>
34
+ <bs-checkbox name="terms" value="accepted" required>I accept the terms</bs-checkbox>
35
+ <bs-switch name="alerts" checked>Email alerts</bs-switch>
36
+ <bs-slider name="volume" label="Volume" value="40" aria-label="Volume"></bs-slider>
37
+ <div style="display: flex; gap: 8px;">
38
+ <bs-button type="submit">Submit</bs-button>
39
+ <bs-button type="reset" variant="outlined">Reset</bs-button>
40
+ </div>
41
+ </form>
42
+ ${output}
43
+ </div>
44
+ `,
45
+ };
46
+ // Required fields: submitting with an empty required bs-input or an unchecked required bs-checkbox is
47
+ // blocked by the browser (requestSubmit runs validation), and the form reports invalid.
48
+ export const Validation = {
49
+ render: () => html `
50
+ <div style="max-width: 420px;">
51
+ <form
52
+ @submit=${showFormData}
53
+ @invalid=${(ev) => ev.preventDefault()}
54
+ style="display: flex; flex-direction: column; gap: 16px;"
55
+ >
56
+ <bs-input name="name" label="Name" required></bs-input>
57
+ <bs-checkbox name="terms" required>I accept the terms</bs-checkbox>
58
+ <bs-button type="submit">Submit (blocked until valid)</bs-button>
59
+ </form>
60
+ ${output}
61
+ </div>
62
+ `,
63
+ };
@@ -1,5 +1,21 @@
1
1
  import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ import { afterEach, beforeEach } from "vitest";
2
3
  import { page } from "vitest/browser";
4
+ import { runAxeCheck } from "../../../../test/helpers/conventions";
5
+ // The test browser (and its viewport) is shared across test files, so every test here starts from a
6
+ // known viewport and restores whatever it found. The default 414px viewport is inside the drawer's
7
+ // small-screen (<= 768px) overlay mode, so the original tests -- written for the desktop drawer --
8
+ // run at 1024px; the overlay has its own describe at 390px below.
9
+ const previousViewport = { w: 0, h: 0 };
10
+ beforeEach(async () => {
11
+ previousViewport.w = window.innerWidth;
12
+ previousViewport.h = window.innerHeight;
13
+ await page.viewport(1024, 768);
14
+ });
15
+ afterEach(async () => {
16
+ await page.viewport(previousViewport.w, previousViewport.h);
17
+ document.body.style.overflow = '';
18
+ });
3
19
  describe('bs-navigation-drawer', () => {
4
20
  it('renders a <nav> landmark with the logo', async () => {
5
21
  const { root } = await render(h("bs-navigation-drawer", null));
@@ -110,11 +126,8 @@ describe('bs-navigation-drawer', () => {
110
126
  expect(searchClickSpy).toHaveReceivedEventTimes(1);
111
127
  });
112
128
  it('hides the search-trigger button when not collapsed', async () => {
113
- // The default test viewport (414px) is inside this component's own <= 768px small-screen
114
- // breakpoint (see bs-navigation-drawer.css), which forces the same visual treatment as
115
- // `collapsed` regardless of the prop -- widen the viewport here so this test is isolated to
116
- // the `collapsed` *prop*'s own behavior, not the viewport-driven treatment.
117
- await page.viewport(1024, 768);
129
+ // Desktop viewport (set for the whole file above), so this is isolated to the `collapsed`
130
+ // *prop*'s own behavior, not the small-screen overlay.
118
131
  const { root } = await render(h("bs-navigation-drawer", null));
119
132
  const trigger = root.shadowRoot.querySelector('[part="search-trigger"]');
120
133
  expect(getComputedStyle(trigger).display).toBe('none');
@@ -147,3 +160,158 @@ describe('bs-navigation-drawer', () => {
147
160
  });
148
161
  });
149
162
  });
163
+ describe('bs-navigation-drawer: small-screen overlay (<= 768px)', () => {
164
+ const frame = () => new Promise(r => requestAnimationFrame(() => requestAnimationFrame(() => r())));
165
+ const nav = (root) => root.shadowRoot.querySelector('nav');
166
+ const backdrop = (root) => root.shadowRoot.querySelector('[part="backdrop"]');
167
+ const css = (el) => getComputedStyle(el);
168
+ const renderDrawer = async (props = {}) => {
169
+ await page.viewport(390, 800);
170
+ const result = await render(h("bs-navigation-drawer", { ...props }, h("bs-navigation-drawer-item", null, "Home"), h("bs-navigation-drawer-item", { expandable: true, expanded: true }, "Reports", h("bs-navigation-drawer-item", { slot: "children", nested: true }, "Sales"))));
171
+ await result.waitForChanges();
172
+ return result;
173
+ };
174
+ it('is closed by default: off-canvas, hidden from the tab order and the accessibility tree', async () => {
175
+ const { root } = await renderDrawer();
176
+ expect(css(nav(root)).visibility).toBe('hidden');
177
+ expect(nav(root)).not.toHaveClass('bs-navigation-drawer--open');
178
+ expect(nav(root).getAttribute('role')).toBeNull();
179
+ expect(css(backdrop(root)).visibility).toBe('hidden');
180
+ });
181
+ it('takes no space in the page flow (position: fixed)', async () => {
182
+ const { root } = await renderDrawer();
183
+ expect(css(nav(root)).position).toBe('fixed');
184
+ });
185
+ it('open shows the drawer fully expanded over a backdrop', async () => {
186
+ const { root, waitForChanges } = await renderDrawer();
187
+ root.open = true;
188
+ await waitForChanges();
189
+ await new Promise(r => setTimeout(r, 350)); // let the slide-in finish
190
+ expect(css(nav(root)).visibility).toBe('visible');
191
+ expect(Math.round(nav(root).getBoundingClientRect().left)).toBe(0);
192
+ expect(Math.round(nav(root).getBoundingClientRect().width)).toBe(280);
193
+ // still the plain nav landmark: ARIA does not allow role="dialog" on <nav>
194
+ expect(nav(root).getAttribute('role')).toBeNull();
195
+ expect(css(backdrop(root)).visibility).toBe('visible');
196
+ // full wordmark + title, not the rail's mark; no collapse toggle or compact search trigger
197
+ expect(css(root.shadowRoot.querySelector('.bs-navigation-drawer__logo--full')).display).not.toBe('none');
198
+ expect(css(root.shadowRoot.querySelector('.bs-navigation-drawer__logo--mark')).display).toBe('none');
199
+ expect(css(root.shadowRoot.querySelector('[part="title"]')).display).not.toBe('none');
200
+ expect(css(root.shadowRoot.querySelector('[part="collapse"]')).display).toBe('none');
201
+ expect(css(root.shadowRoot.querySelector('[part="search-trigger"]')).display).toBe('none');
202
+ });
203
+ it('forces the items to their expanded layout, even when the drawer has collapsed set', async () => {
204
+ const { root, waitForChanges } = await renderDrawer({ collapsed: true });
205
+ root.open = true;
206
+ await waitForChanges();
207
+ const topLevel = Array.from(root.querySelectorAll(':scope > bs-navigation-drawer-item'));
208
+ expect(topLevel.map(i => i.collapsed)).toEqual([false, false]);
209
+ // the expandable item's children are reachable (its children wrapper is shown)
210
+ const children = topLevel[1].shadowRoot.querySelector('[part="children"]');
211
+ expect(children).not.toBeNull();
212
+ expect(css(children).display).not.toBe('none');
213
+ });
214
+ it('Escape closes the overlay, sets open back to false and emits bsClose once', async () => {
215
+ const { root, waitForChanges, spyOnEvent } = await renderDrawer();
216
+ const spy = spyOnEvent('bsClose');
217
+ root.open = true;
218
+ await waitForChanges();
219
+ document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
220
+ await waitForChanges();
221
+ expect(root.open).toBe(false);
222
+ expect(root.hasAttribute('open')).toBe(false);
223
+ expect(spy).toHaveReceivedEventTimes(1);
224
+ });
225
+ it('clicking the backdrop closes the overlay and emits bsClose', async () => {
226
+ const { root, waitForChanges, spyOnEvent } = await renderDrawer();
227
+ const spy = spyOnEvent('bsClose');
228
+ root.open = true;
229
+ await waitForChanges();
230
+ backdrop(root).click();
231
+ await waitForChanges();
232
+ expect(root.open).toBe(false);
233
+ expect(spy).toHaveReceivedEventTimes(1);
234
+ });
235
+ it('setting open = false from code does not emit bsClose', async () => {
236
+ const { root, waitForChanges, spyOnEvent } = await renderDrawer({ open: true });
237
+ const spy = spyOnEvent('bsClose');
238
+ root.open = false;
239
+ await waitForChanges();
240
+ expect(spy).not.toHaveReceivedEvent();
241
+ });
242
+ it('Escape does nothing while the overlay is closed', async () => {
243
+ const { waitForChanges, spyOnEvent } = await renderDrawer();
244
+ const spy = spyOnEvent('bsClose');
245
+ document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }));
246
+ await waitForChanges();
247
+ expect(spy).not.toHaveReceivedEvent();
248
+ });
249
+ it('moves focus into the overlay on open and returns it to the trigger on close', async () => {
250
+ await page.viewport(390, 800);
251
+ const { root, waitForChanges } = await render(h("div", null, h("button", { id: "hamburger" }, "Menu"), h("bs-navigation-drawer", null, h("bs-navigation-drawer-item", null, "Home"))));
252
+ const trigger = root.querySelector('#hamburger');
253
+ const drawer = root.querySelector('bs-navigation-drawer');
254
+ trigger.focus();
255
+ drawer.open = true;
256
+ await waitForChanges();
257
+ await frame();
258
+ expect(drawer.shadowRoot.activeElement).toBe(nav(drawer));
259
+ drawer.open = false;
260
+ await waitForChanges();
261
+ expect(document.activeElement).toBe(trigger);
262
+ });
263
+ it('keeps focus inside the open overlay: focus that lands outside is pulled back in', async () => {
264
+ await page.viewport(390, 800);
265
+ const { root, waitForChanges } = await render(h("div", null, h("button", { id: "outside" }, "Outside"), h("bs-navigation-drawer", { open: true }, h("bs-navigation-drawer-item", null, "Home"))));
266
+ await waitForChanges();
267
+ await frame();
268
+ const drawer = root.querySelector('bs-navigation-drawer');
269
+ root.querySelector('#outside').focus();
270
+ await frame();
271
+ expect(drawer.shadowRoot.activeElement).toBe(nav(drawer));
272
+ });
273
+ it('locks page scroll while open and restores it on close', async () => {
274
+ const { root, waitForChanges } = await renderDrawer();
275
+ expect(document.body.style.overflow).toBe('');
276
+ root.open = true;
277
+ await waitForChanges();
278
+ expect(document.body.style.overflow).toBe('hidden');
279
+ root.open = false;
280
+ await waitForChanges();
281
+ expect(document.body.style.overflow).toBe('');
282
+ });
283
+ it('on wider screens open is ignored: in the page flow, no backdrop, no scroll lock', async () => {
284
+ await page.viewport(1024, 768);
285
+ const { root, waitForChanges } = await render(h("bs-navigation-drawer", { open: true }));
286
+ await waitForChanges();
287
+ expect(css(nav(root)).position).not.toBe('fixed');
288
+ expect(css(nav(root)).visibility).toBe('visible');
289
+ expect(backdrop(root)).toBeNull();
290
+ expect(document.body.style.overflow).toBe('');
291
+ expect(nav(root).getAttribute('role')).toBeNull();
292
+ });
293
+ it('widening the viewport while the overlay is open returns to the normal drawer and releases scroll', async () => {
294
+ const { root, waitForChanges } = await renderDrawer({ open: true });
295
+ expect(document.body.style.overflow).toBe('hidden');
296
+ await page.viewport(1024, 768);
297
+ await new Promise(r => setTimeout(r, 150));
298
+ await waitForChanges();
299
+ expect(css(nav(root)).position).not.toBe('fixed');
300
+ expect(document.body.style.overflow).toBe('');
301
+ expect(backdrop(root)).toBeNull();
302
+ });
303
+ it('is off-canvas on the inline-end side in RTL', async () => {
304
+ await page.viewport(390, 800);
305
+ const { root, waitForChanges } = await render(h("div", { dir: "rtl" }, h("bs-navigation-drawer", null)));
306
+ await waitForChanges();
307
+ const drawer = root.querySelector('bs-navigation-drawer');
308
+ // closed: translated by +100% of its width (to the right, off-screen) rather than -100%
309
+ expect(new DOMMatrix(css(nav(drawer)).transform).m41).toBeGreaterThan(0);
310
+ });
311
+ it('has no axe-core violations while open', async () => {
312
+ const { root, waitForChanges } = await renderDrawer({ open: true });
313
+ await waitForChanges();
314
+ await new Promise(r => setTimeout(r, 350));
315
+ await runAxeCheck(root);
316
+ });
317
+ });
@@ -12,10 +12,9 @@
12
12
  * rhythm) -- bumped up from the originally Figma-measured --bs-spacing-150 (12px) at the user's
13
13
  * request after seeing it rendered (felt cramped in practice), not a Figma re-measurement.
14
14
  * @prop --bs-navigation-drawer-width: Default width of the drawer. 280px, matching Figma's own
15
- * frame -- overridable by a consumer that needs a different fixed width. Below a 768px viewport
16
- * width, this is overridden by a `@media (max-width: 768px)` rule that forces the existing
17
- * `collapsed` 96px icon-only rail treatment instead (see --bs-navigation-drawer-collapsed-width
18
- * below), so the drawer stops reserving a permanent 280px of layout width on small screens.
15
+ * frame -- overridable by a consumer that needs a different fixed width. At 768px and below the
16
+ * drawer is an off-canvas overlay (see `open`) of this same width (capped at the viewport
17
+ * width), so it stops reserving a permanent 280px of layout width on small screens.
19
18
  * @prop --bs-navigation-drawer-title-font-family: Title text font family. Aliased to
20
19
  * --bs-typography-font-family-heading.
21
20
  * @prop --bs-navigation-drawer-title-font-weight: Title text font weight. Aliased to
@@ -50,6 +49,14 @@
50
49
  * --bs-border-neutral-container (same border color as the drawer's own right edge).
51
50
  * @prop --bs-navigation-drawer-search-trigger-icon: Search-trigger icon color. Aliased to
52
51
  * --bs-icon-default.
52
+ * @prop --bs-navigation-drawer-backdrop: Scrim behind the small-screen overlay. Aliased to
53
+ * --bs-surface-overlay-level-2.
54
+ * @prop --bs-navigation-drawer-overlay-shadow: Shadow of the small-screen overlay panel. Aliased
55
+ * to --bs-shadow-lg.
56
+ * @prop --bs-navigation-drawer-overlay-z-index: Stacking order of the small-screen overlay (the
57
+ * panel sits one above its backdrop). Aliased to --bs-z-index-modal.
58
+ * @prop --bs-navigation-drawer-overlay-duration: Slide/fade duration of the small-screen overlay.
59
+ * Aliased to --bs-duration-default.
53
60
  */
54
61
  :host {
55
62
  display: block;
@@ -82,6 +89,11 @@
82
89
  --bs-navigation-drawer-search-trigger-bg: var(--bs-color-neutral-container);
83
90
  --bs-navigation-drawer-search-trigger-border: var(--bs-border-neutral-container);
84
91
  --bs-navigation-drawer-search-trigger-icon: var(--bs-icon-default);
92
+
93
+ --bs-navigation-drawer-backdrop: var(--bs-surface-overlay-level-2);
94
+ --bs-navigation-drawer-overlay-shadow: var(--bs-shadow-lg);
95
+ --bs-navigation-drawer-overlay-z-index: var(--bs-z-index-modal);
96
+ --bs-navigation-drawer-overlay-duration: var(--bs-duration-default);
85
97
  }
86
98
 
87
99
  .bs-navigation-drawer {
@@ -259,41 +271,101 @@
259
271
  display: none;
260
272
  }
261
273
 
262
- /* Below 768px (a standard tablet/small-screen breakpoint, and the narrow end of this component's
263
- normal tablet-and-up usage) a permanently-reserved 280px-wide drawer pushes page content down to
264
- an unusably narrow remainder on real small-screen viewports (e.g. 390px). This library has no
265
- existing width-based @media breakpoint convention to follow (grepping every other component's
266
- CSS only turns up `@media (prefers-reduced-motion: reduce)`), so rather than inventing new
267
- open/closed overlay API, this reuses the drawer's own existing `collapsed` 96px icon-only rail
268
- treatment (see the `:host([collapsed])` rules above) and applies it unconditionally at this
269
- width -- same rail, now driven by viewport instead of only by the `collapsed` prop/toggle. Placed
270
- last in this file so it wins over the unscoped `.bs-navigation-drawer`/`__title`/etc. rules above
271
- on specificity ties, regardless of whether `collapsed` happens to be reflected on the host. */
272
- @media (max-width: 768px) {
273
- .bs-navigation-drawer {
274
- width: var(--bs-navigation-drawer-collapsed-width);
275
- padding-left: 0;
276
- padding-right: 0;
277
- align-items: center;
278
- }
274
+ /* Small screens (768px and below, tracked in bs-navigation-drawer.tsx with matchMedia, which sets
275
+ the `data-overlay` attribute on the host): instead of a permanent rail the drawer becomes an
276
+ off-canvas overlay -- hidden until `open`, then sliding in over the page with a backdrop. A rail
277
+ clipped item labels inside 96px and offered no way to reach nested items, so the overlay shows the
278
+ drawer fully expanded (the items are switched to their expanded layout in the component). The
279
+ overrides below intentionally come after, and match the specificity of, the `:host([collapsed])`
280
+ rules above, so a `collapsed` set for desktop never leaks into the overlay. */
281
+ .bs-navigation-drawer:focus {
282
+ outline: none; /* programmatic focus target only (tabindex="-1"), see the component */
283
+ }
279
284
 
280
- .bs-navigation-drawer__logo--full {
281
- display: none;
282
- }
285
+ :host([data-overlay]) .bs-navigation-drawer {
286
+ position: fixed;
287
+ inset-block: 0;
288
+ inset-inline-start: 0;
289
+ z-index: calc(var(--bs-navigation-drawer-overlay-z-index) + 1);
290
+ width: var(--bs-navigation-drawer-width);
291
+ max-width: 100vw;
292
+ padding: var(--bs-navigation-drawer-padding-y) var(--bs-navigation-drawer-padding-right) var(--bs-navigation-drawer-padding-y)
293
+ var(--bs-navigation-drawer-padding-left);
294
+ align-items: stretch;
295
+ box-shadow: var(--bs-navigation-drawer-overlay-shadow);
296
+ /* Closed: off-canvas and hidden from the tab order / accessibility tree. `visibility` flips after
297
+ the slide-out finishes (delayed transition) so the exit is still seen. */
298
+ transform: translateX(-100%);
299
+ visibility: hidden;
300
+ transition:
301
+ transform var(--bs-navigation-drawer-overlay-duration) var(--bs-easing-standard),
302
+ visibility 0s linear var(--bs-navigation-drawer-overlay-duration);
303
+ }
283
304
 
284
- .bs-navigation-drawer__logo--mark {
285
- display: flex;
286
- }
305
+ :host([data-overlay]:dir(rtl)) .bs-navigation-drawer {
306
+ transform: translateX(100%);
307
+ }
287
308
 
288
- .bs-navigation-drawer__title {
289
- display: none;
290
- }
309
+ :host([data-overlay]) .bs-navigation-drawer.bs-navigation-drawer--open {
310
+ transform: none;
311
+ visibility: visible;
312
+ transition:
313
+ transform var(--bs-navigation-drawer-overlay-duration) var(--bs-easing-standard),
314
+ visibility 0s;
315
+ }
316
+
317
+ /* Fully expanded inside the overlay, whatever `collapsed` says. Nothing sits behind the collapse
318
+ toggle or the compact search trigger here, so neither is shown. */
319
+ :host([data-overlay]) .bs-navigation-drawer__logo--full {
320
+ display: flex;
321
+ }
322
+
323
+ :host([data-overlay]) .bs-navigation-drawer__logo--mark {
324
+ display: none;
325
+ }
326
+
327
+ :host([data-overlay]) .bs-navigation-drawer__title {
328
+ display: block;
329
+ }
330
+
331
+ :host([data-overlay]) .bs-navigation-drawer__search {
332
+ display: block;
333
+ }
334
+
335
+ :host([data-overlay]) .bs-navigation-drawer__search-trigger,
336
+ :host([data-overlay]) .bs-navigation-drawer__collapse {
337
+ display: none;
338
+ }
339
+
340
+ .bs-navigation-drawer__backdrop {
341
+ position: fixed;
342
+ inset: 0;
343
+ z-index: var(--bs-navigation-drawer-overlay-z-index);
344
+ background: var(--bs-navigation-drawer-backdrop);
345
+ opacity: 0;
346
+ visibility: hidden;
347
+ transition:
348
+ opacity var(--bs-navigation-drawer-overlay-duration) var(--bs-easing-standard),
349
+ visibility 0s linear var(--bs-navigation-drawer-overlay-duration);
350
+ }
291
351
 
292
- .bs-navigation-drawer__search {
293
- display: none;
352
+ :host([open]) .bs-navigation-drawer__backdrop {
353
+ opacity: 1;
354
+ visibility: visible;
355
+ transition:
356
+ opacity var(--bs-navigation-drawer-overlay-duration) var(--bs-easing-standard),
357
+ visibility 0s;
358
+ }
359
+
360
+ @media (prefers-reduced-motion: reduce) {
361
+ :host([data-overlay]) .bs-navigation-drawer,
362
+ .bs-navigation-drawer__backdrop {
363
+ transition: none;
294
364
  }
365
+ }
295
366
 
296
- .bs-navigation-drawer__search-trigger {
297
- display: inline-flex;
367
+ @media (forced-colors: active) {
368
+ :host([data-overlay]) .bs-navigation-drawer {
369
+ border: 1px solid CanvasText;
298
370
  }
299
371
  }