@brandsync/wc 1.12.1 → 1.14.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 (512) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/CONVENTIONS.md +109 -0
  3. package/REFERENCE.md +1388 -0
  4. package/custom-elements.json +5069 -2575
  5. package/dist/brandsync-wc/brandsync-wc.css +1 -1783
  6. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  7. package/dist/brandsync-wc/{p-83c90489.entry.js → p-00be9a64.entry.js} +1 -1
  8. package/dist/brandsync-wc/{p-b9ccd9d1.entry.js → p-020cb767.entry.js} +1 -1
  9. package/dist/brandsync-wc/p-046a53de.entry.js +1 -0
  10. package/dist/brandsync-wc/p-056608f0.entry.js +1 -0
  11. package/dist/brandsync-wc/p-0cb6fc39.entry.js +1 -0
  12. package/dist/brandsync-wc/p-0e738622.entry.js +1 -0
  13. package/dist/brandsync-wc/{p-e5daa6ca.entry.js → p-10290c41.entry.js} +1 -1
  14. package/dist/brandsync-wc/{p-e2556b4e.entry.js → p-144b6ac8.entry.js} +1 -1
  15. package/dist/brandsync-wc/{p-56c37e0a.entry.js → p-16c78ff6.entry.js} +1 -1
  16. package/dist/brandsync-wc/p-1b5cc9b8.entry.js +1 -0
  17. package/dist/brandsync-wc/p-204cc690.entry.js +1 -0
  18. package/dist/brandsync-wc/p-221244a9.entry.js +1 -0
  19. package/dist/brandsync-wc/p-227a5182.entry.js +1 -0
  20. package/dist/brandsync-wc/p-23b56775.entry.js +1 -0
  21. package/dist/brandsync-wc/p-2967240d.entry.js +1 -0
  22. package/dist/brandsync-wc/p-2c1efaa1.entry.js +1 -0
  23. package/dist/brandsync-wc/p-2e68b76e.entry.js +1 -0
  24. package/dist/brandsync-wc/{p-a9169157.entry.js → p-315b510c.entry.js} +1 -1
  25. package/dist/brandsync-wc/{p-1978e63c.entry.js → p-31cd66e0.entry.js} +1 -1
  26. package/dist/brandsync-wc/p-3477539c.entry.js +1 -0
  27. package/dist/brandsync-wc/{p-81605b82.entry.js → p-361aef36.entry.js} +1 -1
  28. package/dist/brandsync-wc/{p-89fabf27.entry.js → p-3789c7a5.entry.js} +1 -1
  29. package/dist/brandsync-wc/{p-2497d128.entry.js → p-3dabf202.entry.js} +1 -1
  30. package/dist/brandsync-wc/{p-fc069773.entry.js → p-45cb3e6d.entry.js} +1 -1
  31. package/dist/brandsync-wc/{p-de110ad0.entry.js → p-47b7fe76.entry.js} +1 -1
  32. package/dist/brandsync-wc/{p-2f4e08e1.entry.js → p-47cd19aa.entry.js} +1 -1
  33. package/dist/brandsync-wc/{p-f15d9524.entry.js → p-4b40a596.entry.js} +1 -1
  34. package/dist/brandsync-wc/p-51f40972.entry.js +1 -0
  35. package/dist/brandsync-wc/{p-39a26c64.entry.js → p-617bd76d.entry.js} +1 -1
  36. package/dist/brandsync-wc/p-658532b7.entry.js +1 -0
  37. package/dist/brandsync-wc/{p-617bd13a.entry.js → p-686297f1.entry.js} +1 -1
  38. package/dist/brandsync-wc/{p-78f4fcf0.entry.js → p-6ca1e51b.entry.js} +1 -1
  39. package/dist/brandsync-wc/{p-52cb2358.entry.js → p-6e923ebc.entry.js} +1 -1
  40. package/dist/brandsync-wc/{p-00a0d489.entry.js → p-8048d033.entry.js} +1 -1
  41. package/dist/brandsync-wc/{p-0b2d3b7e.entry.js → p-80700878.entry.js} +1 -1
  42. package/dist/brandsync-wc/{p-2368a92e.entry.js → p-8184d7de.entry.js} +1 -1
  43. package/dist/brandsync-wc/p-833f9dc4.entry.js +1 -0
  44. package/dist/brandsync-wc/p-8390a155.entry.js +1 -0
  45. package/dist/brandsync-wc/{p-fcee0dc4.entry.js → p-89fa7567.entry.js} +1 -1
  46. package/dist/brandsync-wc/{p-7796b93f.entry.js → p-8c9938a5.entry.js} +1 -1
  47. package/dist/brandsync-wc/{p-68fcd4a4.entry.js → p-9125632c.entry.js} +1 -1
  48. package/dist/brandsync-wc/{p-416322bd.entry.js → p-94d435a2.entry.js} +1 -1
  49. package/dist/brandsync-wc/p-9d12b1fb.entry.js +1 -0
  50. package/dist/brandsync-wc/{p-5ba90a13.entry.js → p-9d660c03.entry.js} +1 -1
  51. package/dist/brandsync-wc/p-9fa67924.entry.js +1 -0
  52. package/dist/brandsync-wc/p-D3SkQJpw.js +3 -0
  53. package/dist/brandsync-wc/{p-7f954939.entry.js → p-a28ef52e.entry.js} +1 -1
  54. package/dist/brandsync-wc/p-a2e59aca.entry.js +1 -0
  55. package/dist/brandsync-wc/{p-09435f41.entry.js → p-a5659499.entry.js} +1 -1
  56. package/dist/brandsync-wc/p-b6ac1b50.entry.js +1 -0
  57. package/dist/brandsync-wc/{p-69c0a85d.entry.js → p-b793a0d6.entry.js} +1 -1
  58. package/dist/brandsync-wc/p-bee30626.entry.js +1 -0
  59. package/dist/brandsync-wc/{p-1aab6d07.entry.js → p-c05ee501.entry.js} +1 -1
  60. package/dist/brandsync-wc/p-c488cc8b.entry.js +1 -0
  61. package/dist/brandsync-wc/p-c67bc817.entry.js +1 -0
  62. package/dist/brandsync-wc/{p-247e36ad.entry.js → p-cc1055e6.entry.js} +1 -1
  63. package/dist/brandsync-wc/p-cc25ee67.entry.js +1 -0
  64. package/dist/brandsync-wc/p-ce16f038.entry.js +1 -0
  65. package/dist/brandsync-wc/{p-491b51e6.entry.js → p-d5a6098d.entry.js} +1 -1
  66. package/dist/brandsync-wc/{p-282ddbee.entry.js → p-d892277f.entry.js} +1 -1
  67. package/dist/brandsync-wc/p-dd52209a.entry.js +1 -0
  68. package/dist/brandsync-wc/{p-09bc1923.entry.js → p-df3e7973.entry.js} +1 -1
  69. package/dist/brandsync-wc/p-dfad8c0a.entry.js +1 -0
  70. package/dist/brandsync-wc/p-e0927a9a.entry.js +1 -0
  71. package/dist/brandsync-wc/{p-0ee4126c.entry.js → p-e1b7bea7.entry.js} +1 -1
  72. package/dist/brandsync-wc/{p-0b7c77c1.entry.js → p-e65d286c.entry.js} +1 -1
  73. package/dist/brandsync-wc/{p-f5180578.entry.js → p-e6fc2cd4.entry.js} +1 -1
  74. package/dist/brandsync-wc/p-f271e1d2.entry.js +1 -0
  75. package/dist/brandsync-wc/{p-3f09296a.entry.js → p-f3eca1ce.entry.js} +1 -1
  76. package/dist/brandsync-wc/{p-2177042f.entry.js → p-fa6b9750.entry.js} +1 -1
  77. package/dist/brandsync-wc/{p-78a69a59.entry.js → p-fc76031e.entry.js} +1 -1
  78. package/dist/brandsync-wc/{p-be3dd446.entry.js → p-ffc07eb5.entry.js} +1 -1
  79. package/dist/cjs/brandsync-wc.cjs.js +2 -2
  80. package/dist/cjs/bs-accordion-group.cjs.entry.js +33 -0
  81. package/dist/cjs/bs-accordion.cjs.entry.js +1 -1
  82. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +2 -2
  83. package/dist/cjs/bs-ai-greeting.cjs.entry.js +2 -2
  84. package/dist/cjs/bs-ai-thinking.cjs.entry.js +2 -2
  85. package/dist/cjs/bs-attachment-list.cjs.entry.js +2 -2
  86. package/dist/cjs/bs-attachment.cjs.entry.js +9 -5
  87. package/dist/cjs/bs-avatar.cjs.entry.js +1 -1
  88. package/dist/cjs/bs-badge.cjs.entry.js +1 -1
  89. package/dist/cjs/bs-breadcrumb-overflow.cjs.entry.js +1 -1
  90. package/dist/cjs/bs-breadcrumb.cjs.entry.js +1 -1
  91. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +2 -2
  92. package/dist/cjs/bs-button-skeleton.cjs.entry.js +4 -2
  93. package/dist/cjs/bs-button.cjs.entry.js +1 -1
  94. package/dist/cjs/bs-card.cjs.entry.js +1 -1
  95. package/dist/cjs/bs-carousel.cjs.entry.js +1 -1
  96. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +18 -2
  97. package/dist/cjs/bs-chatbot-header.cjs.entry.js +20 -2
  98. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +25 -3
  99. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +4 -2
  100. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +3 -3
  101. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +4 -2
  102. package/dist/cjs/bs-checkbox.cjs.entry.js +1 -1
  103. package/dist/cjs/bs-chip-filter.cjs.entry.js +1 -1
  104. package/dist/cjs/bs-chip-informative.cjs.entry.js +1 -1
  105. package/dist/cjs/bs-chip-input.cjs.entry.js +4 -2
  106. package/dist/cjs/bs-citation-preview.cjs.entry.js +29 -0
  107. package/dist/cjs/bs-composer-status-banner.cjs.entry.js +11 -3
  108. package/dist/cjs/bs-composer.cjs.entry.js +36 -7
  109. package/dist/cjs/bs-cookie-consent.cjs.entry.js +1 -1
  110. package/dist/cjs/bs-data-table.cjs.entry.js +5 -3
  111. package/dist/cjs/bs-datepicker.cjs.entry.js +1 -1
  112. package/dist/cjs/bs-dialog.cjs.entry.js +4 -2
  113. package/dist/cjs/bs-error-page.cjs.entry.js +1 -1
  114. package/dist/cjs/bs-file-upload-item.cjs.entry.js +1 -1
  115. package/dist/cjs/bs-file-upload.cjs.entry.js +1 -1
  116. package/dist/cjs/bs-icon-button.cjs.entry.js +1 -1
  117. package/dist/cjs/bs-icon-tile.cjs.entry.js +1 -1
  118. package/dist/cjs/bs-inline-tab.cjs.entry.js +2 -2
  119. package/dist/cjs/bs-input_3.cjs.entry.js +15 -7
  120. package/dist/cjs/bs-logo.cjs.entry.js +1 -1
  121. package/dist/cjs/bs-message-list.cjs.entry.js +71 -0
  122. package/dist/cjs/bs-message.cjs.entry.js +25 -0
  123. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +2 -2
  124. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +9 -3
  125. package/dist/cjs/bs-navigation-header.cjs.entry.js +2 -2
  126. package/dist/cjs/bs-onboarding-checklist.cjs.entry.js +1 -1
  127. package/dist/cjs/bs-pagination.cjs.entry.js +6 -2
  128. package/dist/cjs/bs-popover.cjs.entry.js +153 -0
  129. package/dist/cjs/bs-product-tour.cjs.entry.js +1 -1
  130. package/dist/cjs/bs-progress-linear.cjs.entry.js +3 -3
  131. package/dist/cjs/bs-progress.cjs.entry.js +3 -3
  132. package/dist/cjs/bs-qr-code.cjs.entry.js +2 -2
  133. package/dist/cjs/bs-radio.cjs.entry.js +2 -2
  134. package/dist/cjs/bs-session-timeout.cjs.entry.js +2 -2
  135. package/dist/cjs/bs-side-panel.cjs.entry.js +164 -0
  136. package/dist/cjs/bs-skeleton.cjs.entry.js +51 -0
  137. package/dist/cjs/bs-slider.cjs.entry.js +7 -3
  138. package/dist/cjs/bs-snackbar.cjs.entry.js +2 -2
  139. package/dist/cjs/bs-source-link.cjs.entry.js +3 -3
  140. package/dist/cjs/bs-spinner.cjs.entry.js +24 -0
  141. package/dist/cjs/bs-split-pane.cjs.entry.js +193 -0
  142. package/dist/cjs/bs-stepper-step.cjs.entry.js +2 -2
  143. package/dist/cjs/bs-stepper.cjs.entry.js +2 -2
  144. package/dist/cjs/bs-switch.cjs.entry.js +2 -2
  145. package/dist/cjs/bs-tab_3.cjs.entry.js +4 -4
  146. package/dist/cjs/bs-timepicker.cjs.entry.js +8 -4
  147. package/dist/cjs/bs-toast.cjs.entry.js +4 -2
  148. package/dist/cjs/bs-tooltip-trigger.cjs.entry.js +46 -0
  149. package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
  150. package/dist/cjs/bs-whats-new.cjs.entry.js +1 -1
  151. package/dist/cjs/index-BYfMRtlW.js +1863 -0
  152. package/dist/cjs/loader.cjs.js +2 -2
  153. package/dist/collection/collection-manifest.json +10 -0
  154. package/dist/collection/components/bs-accordion-group/bs-accordion-group.cmp.test.js +39 -0
  155. package/dist/collection/components/bs-accordion-group/bs-accordion-group.css +10 -0
  156. package/dist/collection/components/bs-accordion-group/bs-accordion-group.js +86 -0
  157. package/dist/collection/components/bs-accordion-group/bs-accordion-group.stories.js +18 -0
  158. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  159. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  160. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  161. package/dist/collection/components/bs-attachment/bs-attachment.js +48 -4
  162. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  163. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +1 -1
  164. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +23 -1
  165. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.cmp.test.js +10 -0
  166. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +178 -2
  167. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.cmp.test.js +6 -0
  168. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +200 -1
  169. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.cmp.test.js +8 -0
  170. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.css +4 -0
  171. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +223 -1
  172. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +24 -2
  173. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.css +1 -4
  174. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +3 -6
  175. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +23 -1
  176. package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.js +23 -1
  177. package/dist/collection/components/bs-citation-preview/bs-citation-preview.cmp.test.js +34 -0
  178. package/dist/collection/components/bs-citation-preview/bs-citation-preview.css +36 -0
  179. package/dist/collection/components/bs-citation-preview/bs-citation-preview.js +154 -0
  180. package/dist/collection/components/bs-citation-preview/bs-citation-preview.stories.js +22 -0
  181. package/dist/collection/components/bs-composer/bs-composer.cmp.test.js +29 -2
  182. package/dist/collection/components/bs-composer/bs-composer.css +16 -0
  183. package/dist/collection/components/bs-composer/bs-composer.js +234 -6
  184. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.cmp.test.js +5 -0
  185. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.css +16 -0
  186. package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +49 -1
  187. package/dist/collection/components/bs-data-table/bs-data-table.js +24 -2
  188. package/dist/collection/components/bs-dialog/bs-dialog.js +23 -1
  189. package/dist/collection/components/bs-input/bs-input.js +92 -4
  190. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  191. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  192. package/dist/collection/components/bs-message/bs-message.cmp.test.js +36 -0
  193. package/dist/collection/components/bs-message/bs-message.css +77 -0
  194. package/dist/collection/components/bs-message/bs-message.js +156 -0
  195. package/dist/collection/components/bs-message/bs-message.stories.js +33 -0
  196. package/dist/collection/components/bs-message-list/bs-message-list.cmp.test.js +58 -0
  197. package/dist/collection/components/bs-message-list/bs-message-list.css +40 -0
  198. package/dist/collection/components/bs-message-list/bs-message-list.js +161 -0
  199. package/dist/collection/components/bs-message-list/bs-message-list.stories.js +17 -0
  200. package/dist/collection/components/bs-pagination/bs-pagination.cmp.test.js +5 -0
  201. package/dist/collection/components/bs-pagination/bs-pagination.js +45 -1
  202. package/dist/collection/components/bs-popover/bs-popover.cmp.test.js +107 -0
  203. package/dist/collection/components/bs-popover/bs-popover.css +61 -0
  204. package/dist/collection/components/bs-popover/bs-popover.js +247 -0
  205. package/dist/collection/components/bs-popover/bs-popover.stories.js +26 -0
  206. package/dist/collection/components/bs-progress/bs-progress.js +2 -2
  207. package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +2 -2
  208. package/dist/collection/components/bs-qr-code/bs-qr-code.js +1 -1
  209. package/dist/collection/components/bs-radio/bs-radio.js +1 -1
  210. package/dist/collection/components/bs-session-timeout/bs-session-timeout.js +1 -1
  211. package/dist/collection/components/bs-side-panel/bs-side-panel.cmp.test.js +117 -0
  212. package/dist/collection/components/bs-side-panel/bs-side-panel.css +77 -0
  213. package/dist/collection/components/bs-side-panel/bs-side-panel.js +325 -0
  214. package/dist/collection/components/bs-side-panel/bs-side-panel.stories.js +24 -0
  215. package/dist/collection/components/bs-skeleton/bs-skeleton.cmp.test.js +49 -0
  216. package/dist/collection/components/bs-skeleton/bs-skeleton.css +62 -0
  217. package/dist/collection/components/bs-skeleton/bs-skeleton.js +204 -0
  218. package/dist/collection/components/bs-skeleton/bs-skeleton.stories.js +43 -0
  219. package/dist/collection/components/bs-slider/bs-slider.js +46 -2
  220. package/dist/collection/components/bs-snackbar/bs-snackbar.js +1 -1
  221. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  222. package/dist/collection/components/bs-spinner/bs-spinner.cmp.test.js +32 -0
  223. package/dist/collection/components/bs-spinner/bs-spinner.css +61 -0
  224. package/dist/collection/components/bs-spinner/bs-spinner.js +96 -0
  225. package/dist/collection/components/bs-spinner/bs-spinner.stories.js +30 -0
  226. package/dist/collection/components/bs-split-pane/bs-split-pane.cmp.test.js +107 -0
  227. package/dist/collection/components/bs-split-pane/bs-split-pane.css +108 -0
  228. package/dist/collection/components/bs-split-pane/bs-split-pane.js +404 -0
  229. package/dist/collection/components/bs-split-pane/bs-split-pane.stories.js +47 -0
  230. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +1 -1
  231. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
  232. package/dist/collection/components/bs-switch/bs-switch.js +1 -1
  233. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
  234. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +1 -1
  235. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +1 -1
  236. package/dist/collection/components/bs-timepicker/bs-timepicker.js +48 -4
  237. package/dist/collection/components/bs-toast/bs-toast.js +23 -1
  238. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  239. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.cmp.test.js +73 -0
  240. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.css +52 -0
  241. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.js +140 -0
  242. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.stories.js +21 -0
  243. package/dist/collection/components/bs-whats-new-entry/bs-whats-new-entry.js +1 -1
  244. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +68 -2
  245. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  246. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +1 -1
  247. package/dist/collection/global/brand-theming.cmp.test.js +44 -0
  248. package/dist/components/bs-accordion-group.d.ts +11 -0
  249. package/dist/components/bs-accordion-group.js +1 -0
  250. package/dist/components/bs-accordion.js +1 -1
  251. package/dist/components/bs-ai-disclaimer.js +1 -1
  252. package/dist/components/bs-ai-greeting.js +1 -1
  253. package/dist/components/bs-ai-thinking.js +1 -1
  254. package/dist/components/bs-attachment-list.js +1 -1
  255. package/dist/components/bs-attachment.js +1 -1
  256. package/dist/components/bs-avatar.js +1 -1
  257. package/dist/components/bs-badge.js +1 -1
  258. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  259. package/dist/components/bs-breadcrumb.js +1 -1
  260. package/dist/components/bs-breadcrumbs.js +1 -1
  261. package/dist/components/bs-button-skeleton.js +1 -1
  262. package/dist/components/bs-button.js +1 -1
  263. package/dist/components/bs-card.js +1 -1
  264. package/dist/components/bs-carousel.js +1 -1
  265. package/dist/components/bs-chatbot-feedback.js +1 -1
  266. package/dist/components/bs-chatbot-header.js +1 -1
  267. package/dist/components/bs-chatbot-response-action.js +1 -1
  268. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  269. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  270. package/dist/components/bs-checkbox-skeleton.js +1 -1
  271. package/dist/components/bs-checkbox.js +1 -1
  272. package/dist/components/bs-chip-filter.js +1 -1
  273. package/dist/components/bs-chip-informative.js +1 -1
  274. package/dist/components/bs-chip-input.js +1 -1
  275. package/dist/components/bs-citation-preview.d.ts +11 -0
  276. package/dist/components/bs-citation-preview.js +1 -0
  277. package/dist/components/bs-composer-status-banner.js +1 -1
  278. package/dist/components/bs-composer.js +1 -1
  279. package/dist/components/bs-cookie-consent.js +1 -1
  280. package/dist/components/bs-data-table.js +1 -1
  281. package/dist/components/bs-datepicker.js +1 -1
  282. package/dist/components/bs-dialog.js +1 -1
  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-icon-button.js +1 -1
  287. package/dist/components/bs-icon-tile.js +1 -1
  288. package/dist/components/bs-inline-tab.js +1 -1
  289. package/dist/components/bs-input.js +1 -1
  290. package/dist/components/bs-logo.js +1 -1
  291. package/dist/components/bs-menu-item.js +1 -1
  292. package/dist/components/bs-menu.js +1 -1
  293. package/dist/components/bs-message-list.d.ts +11 -0
  294. package/dist/components/bs-message-list.js +1 -0
  295. package/dist/components/bs-message.d.ts +11 -0
  296. package/dist/components/bs-message.js +1 -0
  297. package/dist/components/bs-navigation-drawer-item.js +1 -1
  298. package/dist/components/bs-navigation-drawer.js +1 -1
  299. package/dist/components/bs-navigation-header.js +1 -1
  300. package/dist/components/bs-onboarding-checklist.js +1 -1
  301. package/dist/components/bs-pagination.js +1 -1
  302. package/dist/components/bs-popover.d.ts +11 -0
  303. package/dist/components/bs-popover.js +1 -0
  304. package/dist/components/bs-product-tour.js +1 -1
  305. package/dist/components/bs-progress-linear.js +1 -1
  306. package/dist/components/bs-progress.js +1 -1
  307. package/dist/components/bs-qr-code.js +1 -1
  308. package/dist/components/bs-radio.js +1 -1
  309. package/dist/components/bs-session-timeout.js +1 -1
  310. package/dist/components/bs-side-panel.d.ts +11 -0
  311. package/dist/components/bs-side-panel.js +1 -0
  312. package/dist/components/bs-skeleton.d.ts +11 -0
  313. package/dist/components/bs-skeleton.js +1 -0
  314. package/dist/components/bs-slider.js +1 -1
  315. package/dist/components/bs-snackbar.js +1 -1
  316. package/dist/components/bs-source-link.js +1 -1
  317. package/dist/components/bs-spinner.d.ts +11 -0
  318. package/dist/components/bs-spinner.js +1 -0
  319. package/dist/components/bs-split-pane.d.ts +11 -0
  320. package/dist/components/bs-split-pane.js +1 -0
  321. package/dist/components/bs-stepper-step.js +1 -1
  322. package/dist/components/bs-stepper.js +1 -1
  323. package/dist/components/bs-switch.js +1 -1
  324. package/dist/components/bs-tab.js +1 -1
  325. package/dist/components/bs-tabs.js +1 -1
  326. package/dist/components/bs-timepicker.js +1 -1
  327. package/dist/components/bs-toast.js +1 -1
  328. package/dist/components/bs-tooltip-trigger.d.ts +11 -0
  329. package/dist/components/bs-tooltip-trigger.js +1 -0
  330. package/dist/components/bs-tooltip.js +1 -1
  331. package/dist/components/bs-whats-new-entry.js +1 -1
  332. package/dist/components/bs-whats-new.js +1 -1
  333. package/dist/components/index.js +1 -1
  334. package/dist/components/p-B2gx7SZk.js +1 -0
  335. package/dist/components/{p-C_j_jDM6.js → p-BESyTlfT.js} +1 -1
  336. package/dist/components/{p-YsHQLXET.js → p-BIW9eUic.js} +1 -1
  337. package/dist/components/{p-Be_Pmccm.js → p-BJR8KVFc.js} +1 -1
  338. package/dist/components/{p-BEEoVNRu.js → p-BTPdjnXT.js} +1 -1
  339. package/dist/components/{p-Be9L4_Fe.js → p-CDYw4Eyj.js} +1 -1
  340. package/dist/components/{p-DuLL7Ouw.js → p-CRtvJlh8.js} +1 -1
  341. package/dist/components/{p-Dr0Qk9Zc.js → p-ChcaPfNL.js} +1 -1
  342. package/dist/components/{p-DE8K7fg0.js → p-CiSEDtbE.js} +1 -1
  343. package/dist/components/{p-CbimDNGY.js → p-CrmEXUwm.js} +1 -1
  344. package/dist/components/{p-zTHlbyH6.js → p-DAwSBMeM.js} +1 -1
  345. package/dist/components/{p-qmS2CBqi.js → p-DYuzgzxI.js} +1 -1
  346. package/dist/components/p-Dm3TqgV_.js +1 -0
  347. package/dist/components/{p-CUfs0ROR.js → p-DpVeeIko.js} +1 -1
  348. package/dist/components/{p-CA31vqjL.js → p-DvNED6Lb.js} +1 -1
  349. package/dist/components/{p-Bl_tVzeq.js → p-HAmR4gM2.js} +1 -1
  350. package/dist/components/p-HzaOqQ0U.js +1 -0
  351. package/dist/components/{p-C8yT2Ucq.js → p-QnTjSed5.js} +1 -1
  352. package/dist/components/{p-CncySD_-.js → p-Rx4bpeYN.js} +1 -1
  353. package/dist/components/p-nC2VxRNo.js +1 -0
  354. package/dist/components/p-zscW5LNR.js +1 -0
  355. package/dist/esm/brandsync-wc.js +3 -3
  356. package/dist/esm/bs-accordion-group.entry.js +31 -0
  357. package/dist/esm/bs-accordion.entry.js +1 -1
  358. package/dist/esm/bs-ai-disclaimer.entry.js +2 -2
  359. package/dist/esm/bs-ai-greeting.entry.js +2 -2
  360. package/dist/esm/bs-ai-thinking.entry.js +2 -2
  361. package/dist/esm/bs-attachment-list.entry.js +2 -2
  362. package/dist/esm/bs-attachment.entry.js +9 -5
  363. package/dist/esm/bs-avatar.entry.js +1 -1
  364. package/dist/esm/bs-badge.entry.js +1 -1
  365. package/dist/esm/bs-breadcrumb-overflow.entry.js +1 -1
  366. package/dist/esm/bs-breadcrumb.entry.js +1 -1
  367. package/dist/esm/bs-breadcrumbs.entry.js +2 -2
  368. package/dist/esm/bs-button-skeleton.entry.js +4 -2
  369. package/dist/esm/bs-button.entry.js +1 -1
  370. package/dist/esm/bs-card.entry.js +1 -1
  371. package/dist/esm/bs-carousel.entry.js +1 -1
  372. package/dist/esm/bs-chatbot-feedback.entry.js +18 -2
  373. package/dist/esm/bs-chatbot-header.entry.js +20 -2
  374. package/dist/esm/bs-chatbot-response-action.entry.js +25 -3
  375. package/dist/esm/bs-chatbot-sources-drawer.entry.js +4 -2
  376. package/dist/esm/bs-chatbot-suggestion-button.entry.js +3 -3
  377. package/dist/esm/bs-checkbox-skeleton.entry.js +4 -2
  378. package/dist/esm/bs-checkbox.entry.js +1 -1
  379. package/dist/esm/bs-chip-filter.entry.js +1 -1
  380. package/dist/esm/bs-chip-informative.entry.js +1 -1
  381. package/dist/esm/bs-chip-input.entry.js +4 -2
  382. package/dist/esm/bs-citation-preview.entry.js +27 -0
  383. package/dist/esm/bs-composer-status-banner.entry.js +11 -3
  384. package/dist/esm/bs-composer.entry.js +36 -7
  385. package/dist/esm/bs-cookie-consent.entry.js +1 -1
  386. package/dist/esm/bs-data-table.entry.js +5 -3
  387. package/dist/esm/bs-datepicker.entry.js +1 -1
  388. package/dist/esm/bs-dialog.entry.js +4 -2
  389. package/dist/esm/bs-error-page.entry.js +1 -1
  390. package/dist/esm/bs-file-upload-item.entry.js +1 -1
  391. package/dist/esm/bs-file-upload.entry.js +1 -1
  392. package/dist/esm/bs-icon-button.entry.js +1 -1
  393. package/dist/esm/bs-icon-tile.entry.js +1 -1
  394. package/dist/esm/bs-inline-tab.entry.js +2 -2
  395. package/dist/esm/bs-input_3.entry.js +15 -7
  396. package/dist/esm/bs-logo.entry.js +1 -1
  397. package/dist/esm/bs-message-list.entry.js +69 -0
  398. package/dist/esm/bs-message.entry.js +23 -0
  399. package/dist/esm/bs-navigation-drawer-item.entry.js +2 -2
  400. package/dist/esm/bs-navigation-drawer.entry.js +9 -3
  401. package/dist/esm/bs-navigation-header.entry.js +2 -2
  402. package/dist/esm/bs-onboarding-checklist.entry.js +1 -1
  403. package/dist/esm/bs-pagination.entry.js +6 -2
  404. package/dist/esm/bs-popover.entry.js +151 -0
  405. package/dist/esm/bs-product-tour.entry.js +1 -1
  406. package/dist/esm/bs-progress-linear.entry.js +3 -3
  407. package/dist/esm/bs-progress.entry.js +3 -3
  408. package/dist/esm/bs-qr-code.entry.js +2 -2
  409. package/dist/esm/bs-radio.entry.js +2 -2
  410. package/dist/esm/bs-session-timeout.entry.js +2 -2
  411. package/dist/esm/bs-side-panel.entry.js +162 -0
  412. package/dist/esm/bs-skeleton.entry.js +49 -0
  413. package/dist/esm/bs-slider.entry.js +7 -3
  414. package/dist/esm/bs-snackbar.entry.js +2 -2
  415. package/dist/esm/bs-source-link.entry.js +3 -3
  416. package/dist/esm/bs-spinner.entry.js +22 -0
  417. package/dist/esm/bs-split-pane.entry.js +191 -0
  418. package/dist/esm/bs-stepper-step.entry.js +2 -2
  419. package/dist/esm/bs-stepper.entry.js +2 -2
  420. package/dist/esm/bs-switch.entry.js +2 -2
  421. package/dist/esm/bs-tab_3.entry.js +4 -4
  422. package/dist/esm/bs-timepicker.entry.js +8 -4
  423. package/dist/esm/bs-toast.entry.js +4 -2
  424. package/dist/esm/bs-tooltip-trigger.entry.js +44 -0
  425. package/dist/esm/bs-tooltip.entry.js +2 -2
  426. package/dist/esm/bs-whats-new.entry.js +1 -1
  427. package/dist/esm/index-D3SkQJpw.js +1853 -0
  428. package/dist/esm/loader.js +3 -3
  429. package/dist/types/components/bs-accordion-group/bs-accordion-group.cmp.test.d.ts +1 -0
  430. package/dist/types/components/bs-accordion-group/bs-accordion-group.d.ts +25 -0
  431. package/dist/types/components/bs-accordion-group/bs-accordion-group.stories.d.ts +9 -0
  432. package/dist/types/components/bs-attachment/bs-attachment.d.ts +4 -0
  433. package/dist/types/components/bs-button-skeleton/bs-button-skeleton.d.ts +2 -0
  434. package/dist/types/components/bs-chatbot-feedback/bs-chatbot-feedback.d.ts +16 -0
  435. package/dist/types/components/bs-chatbot-header/bs-chatbot-header.d.ts +19 -0
  436. package/dist/types/components/bs-chatbot-response-action/bs-chatbot-response-action.d.ts +22 -0
  437. package/dist/types/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.d.ts +2 -0
  438. package/dist/types/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.d.ts +2 -5
  439. package/dist/types/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.d.ts +2 -0
  440. package/dist/types/components/bs-chip/bs-chip-input/bs-chip-input.d.ts +2 -0
  441. package/dist/types/components/bs-citation-preview/bs-citation-preview.cmp.test.d.ts +1 -0
  442. package/dist/types/components/bs-citation-preview/bs-citation-preview.d.ts +40 -0
  443. package/dist/types/components/bs-citation-preview/bs-citation-preview.stories.d.ts +13 -0
  444. package/dist/types/components/bs-composer/bs-composer.d.ts +25 -1
  445. package/dist/types/components/bs-composer-status-banner/bs-composer-status-banner.d.ts +5 -0
  446. package/dist/types/components/bs-data-table/bs-data-table.d.ts +2 -0
  447. package/dist/types/components/bs-dialog/bs-dialog.d.ts +2 -0
  448. package/dist/types/components/bs-input/bs-input.d.ts +8 -0
  449. package/dist/types/components/bs-message/bs-message.cmp.test.d.ts +1 -0
  450. package/dist/types/components/bs-message/bs-message.d.ts +49 -0
  451. package/dist/types/components/bs-message/bs-message.stories.d.ts +15 -0
  452. package/dist/types/components/bs-message-list/bs-message-list.cmp.test.d.ts +1 -0
  453. package/dist/types/components/bs-message-list/bs-message-list.d.ts +44 -0
  454. package/dist/types/components/bs-message-list/bs-message-list.stories.d.ts +8 -0
  455. package/dist/types/components/bs-pagination/bs-pagination.d.ts +4 -0
  456. package/dist/types/components/bs-popover/bs-popover.cmp.test.d.ts +1 -0
  457. package/dist/types/components/bs-popover/bs-popover.d.ts +58 -0
  458. package/dist/types/components/bs-popover/bs-popover.stories.d.ts +11 -0
  459. package/dist/types/components/bs-side-panel/bs-side-panel.cmp.test.d.ts +1 -0
  460. package/dist/types/components/bs-side-panel/bs-side-panel.d.ts +67 -0
  461. package/dist/types/components/bs-side-panel/bs-side-panel.stories.d.ts +14 -0
  462. package/dist/types/components/bs-skeleton/bs-skeleton.cmp.test.d.ts +1 -0
  463. package/dist/types/components/bs-skeleton/bs-skeleton.d.ts +44 -0
  464. package/dist/types/components/bs-skeleton/bs-skeleton.stories.d.ts +17 -0
  465. package/dist/types/components/bs-slider/bs-slider.d.ts +4 -0
  466. package/dist/types/components/bs-spinner/bs-spinner.cmp.test.d.ts +1 -0
  467. package/dist/types/components/bs-spinner/bs-spinner.d.ts +32 -0
  468. package/dist/types/components/bs-spinner/bs-spinner.stories.d.ts +12 -0
  469. package/dist/types/components/bs-split-pane/bs-split-pane.cmp.test.d.ts +1 -0
  470. package/dist/types/components/bs-split-pane/bs-split-pane.d.ts +85 -0
  471. package/dist/types/components/bs-split-pane/bs-split-pane.stories.d.ts +15 -0
  472. package/dist/types/components/bs-timepicker/bs-timepicker.d.ts +4 -0
  473. package/dist/types/components/bs-toast/bs-toast.d.ts +2 -0
  474. package/dist/types/components/bs-tooltip-trigger/bs-tooltip-trigger.cmp.test.d.ts +1 -0
  475. package/dist/types/components/bs-tooltip-trigger/bs-tooltip-trigger.d.ts +35 -0
  476. package/dist/types/components/bs-tooltip-trigger/bs-tooltip-trigger.stories.d.ts +10 -0
  477. package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.d.ts +6 -0
  478. package/dist/types/components.d.ts +1995 -39
  479. package/dist/types/global/brand-theming.cmp.test.d.ts +1 -0
  480. package/package.json +21 -5
  481. package/reference.d.ts +245 -0
  482. package/reference.json +4284 -0
  483. package/reference.mjs +2 -0
  484. package/tailwind-preset.cjs +36 -0
  485. package/testing/vitest-setup.mjs +41 -0
  486. package/dist/brandsync-wc/p-09cbf05b.entry.js +0 -1
  487. package/dist/brandsync-wc/p-0f8cd2e8.entry.js +0 -1
  488. package/dist/brandsync-wc/p-1261f0b0.entry.js +0 -1
  489. package/dist/brandsync-wc/p-20030f4d.entry.js +0 -1
  490. package/dist/brandsync-wc/p-22f8201a.entry.js +0 -1
  491. package/dist/brandsync-wc/p-34e5feaf.entry.js +0 -1
  492. package/dist/brandsync-wc/p-3a1af63a.entry.js +0 -1
  493. package/dist/brandsync-wc/p-452f9c1c.entry.js +0 -1
  494. package/dist/brandsync-wc/p-6a696161.entry.js +0 -1
  495. package/dist/brandsync-wc/p-6c6cdf77.entry.js +0 -1
  496. package/dist/brandsync-wc/p-6e735e37.entry.js +0 -1
  497. package/dist/brandsync-wc/p-73f214ed.entry.js +0 -1
  498. package/dist/brandsync-wc/p-823ab3b2.entry.js +0 -1
  499. package/dist/brandsync-wc/p-DqQRXQMx.js +0 -3
  500. package/dist/brandsync-wc/p-b84366a7.entry.js +0 -1
  501. package/dist/brandsync-wc/p-b8d2ce91.entry.js +0 -1
  502. package/dist/brandsync-wc/p-b9a4042e.entry.js +0 -1
  503. package/dist/brandsync-wc/p-d754ee13.entry.js +0 -1
  504. package/dist/brandsync-wc/p-d75f3f87.entry.js +0 -1
  505. package/dist/brandsync-wc/p-d8b29a53.entry.js +0 -1
  506. package/dist/brandsync-wc/p-f7d15fbe.entry.js +0 -1
  507. package/dist/cjs/index-tFJjflK5.js +0 -1863
  508. package/dist/components/p-BGW5q5LZ.js +0 -1
  509. package/dist/components/p-BZ3M4lOU.js +0 -1
  510. package/dist/components/p-CVrEuVFo.js +0 -1
  511. package/dist/components/p-CeUK3n7D.js +0 -1
  512. package/dist/esm/index-DqQRXQMx.js +0 -1853
@@ -0,0 +1,325 @@
1
+ import { h } from "@stencil/core";
2
+ let panelId = 0;
3
+ /**
4
+ * A generic slide-in panel (drawer) anchored to the start or end edge, for history, filters, FAQ
5
+ * and similar secondary content. Closes via its close button or Escape and emits `bsClose`.
6
+ *
7
+ * Composed from `bs-icon-button` (close button).
8
+ *
9
+ * While open, Tab/Shift+Tab are trapped in the panel; with `overlay`, the rest of the page is made `inert`.
10
+ *
11
+ * ## When to use
12
+ * - Secondary content that sits beside the page without leaving it.
13
+ *
14
+ * ## When not to use
15
+ * - A blocking confirmation (use `bs-dialog`).
16
+ *
17
+ * @slot - Default slot: the panel body.
18
+ * @slot header-actions - Extra actions shown in the header next to the close button.
19
+ * @slot footer - Optional footer area (e.g. apply/reset buttons).
20
+ * @part overlay - The backdrop (only when `overlay` is set).
21
+ * @part panel - The panel surface (role="dialog").
22
+ * @part header - The header row.
23
+ * @part heading - The heading text.
24
+ * @part body - The scrollable body.
25
+ * @part footer - The footer wrapper.
26
+ * @prop --bs-side-panel-bg - Panel background. Aliased to `--bs-surface-raised`.
27
+ * @prop --bs-side-panel-width - Panel width. Aliased to `calc(var(--bs-scale-1600) * 3)`.
28
+ * @prop --bs-side-panel-padding - Header/body/footer padding. Aliased to `--bs-spacing-200`.
29
+ * @prop --bs-side-panel-shadow - Panel shadow. Aliased to `--bs-shadow-md`.
30
+ * @prop --bs-side-panel-overlay-bg - Backdrop color. Aliased to `--bs-surface-overlay`.
31
+ * @prop --bs-side-panel-color - Text color. Aliased to `--bs-text-default`.
32
+ * @prop --bs-side-panel-z-index - Stacking order. Aliased to `--bs-z-index-modal`.
33
+ */
34
+ export class BsSidePanel {
35
+ el;
36
+ /** Whether the panel is visible. */
37
+ open = false;
38
+ /** Panel title; also its accessible name. */
39
+ heading = '';
40
+ /** Edge the panel is anchored to. */
41
+ side = 'end';
42
+ /** Accessible label of the close button. */
43
+ closeLabel = 'Close';
44
+ /** Shows a backdrop behind the panel; clicking it closes the panel. */
45
+ overlay = false;
46
+ /** Emitted when the panel requests to close (close button, Escape, overlay click). */
47
+ bsClose;
48
+ headingId = `bs-side-panel-heading-${++panelId}`;
49
+ previouslyFocused = null;
50
+ panelEl;
51
+ /** Elements we set `inert` on (so we only undo our own changes). */
52
+ inertified = [];
53
+ onOpenChange(next) {
54
+ if (next) {
55
+ this.previouslyFocused = document.activeElement ?? null;
56
+ this.applyInert();
57
+ }
58
+ else {
59
+ this.restoreInert();
60
+ this.previouslyFocused?.focus?.();
61
+ this.previouslyFocused = null;
62
+ }
63
+ }
64
+ onOverlayChange() {
65
+ if (!this.open)
66
+ return;
67
+ this.restoreInert();
68
+ this.applyInert();
69
+ }
70
+ connectedCallback() {
71
+ if (this.open)
72
+ this.applyInert();
73
+ }
74
+ disconnectedCallback() {
75
+ this.restoreInert();
76
+ }
77
+ /** Marks everything outside the panel as inert (modal overlay only). */
78
+ applyInert() {
79
+ if (!this.overlay || this.inertified.length)
80
+ return;
81
+ let node = this.el;
82
+ while (node && node !== document.body) {
83
+ const parent = node.parentElement;
84
+ if (!parent)
85
+ break;
86
+ Array.from(parent.children).forEach(sib => {
87
+ if (sib === node || !(sib instanceof HTMLElement) || sib.inert)
88
+ return;
89
+ sib.inert = true;
90
+ this.inertified.push(sib);
91
+ });
92
+ node = parent;
93
+ }
94
+ }
95
+ restoreInert() {
96
+ this.inertified.forEach(el => (el.inert = false));
97
+ this.inertified = [];
98
+ }
99
+ getFocusables() {
100
+ const sel = 'a[href],button:not([disabled]),input:not([disabled]):not([type="hidden"]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"]),bs-icon-button,[contenteditable="true"]';
101
+ const out = [];
102
+ const visit = (root) => {
103
+ Array.from(root.children).forEach(child => {
104
+ if (child instanceof HTMLSlotElement) {
105
+ const assigned = child.assignedElements({ flatten: true });
106
+ assigned.forEach(a => consider(a));
107
+ }
108
+ else
109
+ consider(child);
110
+ });
111
+ };
112
+ const consider = (el) => {
113
+ if (!(el instanceof HTMLElement) || el.hidden || el.inert)
114
+ return;
115
+ if (el.matches(sel) && el.getAttribute('tabindex') !== '-1') {
116
+ // A custom element that delegates focus is itself the tab stop.
117
+ out.push(el);
118
+ return;
119
+ }
120
+ visit(el.shadowRoot ?? el);
121
+ };
122
+ if (this.panelEl)
123
+ visit(this.panelEl);
124
+ return out;
125
+ }
126
+ trapTab(ev) {
127
+ const items = this.getFocusables();
128
+ if (!items.length) {
129
+ ev.preventDefault();
130
+ this.panelEl?.focus();
131
+ return;
132
+ }
133
+ const first = items[0];
134
+ const last = items[items.length - 1];
135
+ const path = ev.composedPath();
136
+ const active = items.find(i => path.includes(i));
137
+ const atPanel = path[0] === this.panelEl;
138
+ if (ev.shiftKey && (atPanel || active === first || !active)) {
139
+ ev.preventDefault();
140
+ last.focus();
141
+ }
142
+ else if (!ev.shiftKey && (active === last || (!active && !atPanel))) {
143
+ ev.preventDefault();
144
+ first.focus();
145
+ }
146
+ }
147
+ componentDidRender() {
148
+ if (this.open && this.panelEl && !this.focusedIn) {
149
+ this.focusedIn = true;
150
+ this.panelEl.focus();
151
+ }
152
+ else if (!this.open) {
153
+ this.focusedIn = false;
154
+ }
155
+ }
156
+ focusedIn = false;
157
+ close = () => {
158
+ this.open = false;
159
+ this.bsClose.emit();
160
+ };
161
+ onKeyDown = (ev) => {
162
+ if (ev.key === 'Escape' && this.open) {
163
+ ev.stopPropagation();
164
+ this.close();
165
+ }
166
+ else if (ev.key === 'Tab' && this.open) {
167
+ this.trapTab(ev);
168
+ }
169
+ };
170
+ render() {
171
+ if (!this.open)
172
+ return null;
173
+ return (h("div", { class: `bs-side-panel bs-side-panel--${this.side}`, onKeyDown: this.onKeyDown }, this.overlay && h("div", { part: "overlay", class: "bs-side-panel__overlay", onClick: this.close }), h("div", { part: "panel", class: "bs-side-panel__panel", role: "dialog", "aria-modal": "true", "aria-labelledby": this.headingId, tabindex: "-1", ref: el => (this.panelEl = el) }, h("div", { part: "header", class: "bs-side-panel__header" }, h("h2", { part: "heading", id: this.headingId, class: "bs-side-panel__heading" }, this.heading), h("div", { class: "bs-side-panel__actions" }, h("slot", { name: "header-actions" }), h("bs-icon-button", { variant: "subtle", ariaLabel: this.closeLabel, onClick: this.close }, h("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true" }, h("path", { d: "M6 6L18 18M18 6L6 18", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round" }))))), h("div", { part: "body", class: "bs-side-panel__body" }, h("slot", null)), h("div", { part: "footer", class: "bs-side-panel__footer" }, h("slot", { name: "footer" })))));
174
+ }
175
+ static get is() { return "bs-side-panel"; }
176
+ static get encapsulation() { return "shadow"; }
177
+ static get originalStyleUrls() {
178
+ return {
179
+ "$": ["bs-side-panel.css"]
180
+ };
181
+ }
182
+ static get styleUrls() {
183
+ return {
184
+ "$": ["bs-side-panel.css"]
185
+ };
186
+ }
187
+ static get properties() {
188
+ return {
189
+ "open": {
190
+ "type": "boolean",
191
+ "mutable": true,
192
+ "complexType": {
193
+ "original": "boolean",
194
+ "resolved": "boolean",
195
+ "references": {}
196
+ },
197
+ "required": false,
198
+ "optional": false,
199
+ "docs": {
200
+ "tags": [],
201
+ "text": "Whether the panel is visible."
202
+ },
203
+ "getter": false,
204
+ "setter": false,
205
+ "reflect": true,
206
+ "attribute": "open",
207
+ "defaultValue": "false"
208
+ },
209
+ "heading": {
210
+ "type": "string",
211
+ "mutable": false,
212
+ "complexType": {
213
+ "original": "string",
214
+ "resolved": "string",
215
+ "references": {}
216
+ },
217
+ "required": false,
218
+ "optional": false,
219
+ "docs": {
220
+ "tags": [],
221
+ "text": "Panel title; also its accessible name."
222
+ },
223
+ "getter": false,
224
+ "setter": false,
225
+ "reflect": false,
226
+ "attribute": "heading",
227
+ "defaultValue": "''"
228
+ },
229
+ "side": {
230
+ "type": "string",
231
+ "mutable": false,
232
+ "complexType": {
233
+ "original": "BsSidePanelSide",
234
+ "resolved": "\"end\" | \"start\"",
235
+ "references": {
236
+ "BsSidePanelSide": {
237
+ "location": "local",
238
+ "path": "/home/runner/work/eg-brandsync-storybook/eg-brandsync-storybook/packages/wc/src/components/bs-side-panel/bs-side-panel.tsx",
239
+ "id": "src/components/bs-side-panel/bs-side-panel.tsx::BsSidePanelSide"
240
+ }
241
+ }
242
+ },
243
+ "required": false,
244
+ "optional": false,
245
+ "docs": {
246
+ "tags": [],
247
+ "text": "Edge the panel is anchored to."
248
+ },
249
+ "getter": false,
250
+ "setter": false,
251
+ "reflect": true,
252
+ "attribute": "side",
253
+ "defaultValue": "'end'"
254
+ },
255
+ "closeLabel": {
256
+ "type": "string",
257
+ "mutable": false,
258
+ "complexType": {
259
+ "original": "string",
260
+ "resolved": "string",
261
+ "references": {}
262
+ },
263
+ "required": false,
264
+ "optional": false,
265
+ "docs": {
266
+ "tags": [],
267
+ "text": "Accessible label of the close button."
268
+ },
269
+ "getter": false,
270
+ "setter": false,
271
+ "reflect": false,
272
+ "attribute": "close-label",
273
+ "defaultValue": "'Close'"
274
+ },
275
+ "overlay": {
276
+ "type": "boolean",
277
+ "mutable": false,
278
+ "complexType": {
279
+ "original": "boolean",
280
+ "resolved": "boolean",
281
+ "references": {}
282
+ },
283
+ "required": false,
284
+ "optional": false,
285
+ "docs": {
286
+ "tags": [],
287
+ "text": "Shows a backdrop behind the panel; clicking it closes the panel."
288
+ },
289
+ "getter": false,
290
+ "setter": false,
291
+ "reflect": true,
292
+ "attribute": "overlay",
293
+ "defaultValue": "false"
294
+ }
295
+ };
296
+ }
297
+ static get events() {
298
+ return [{
299
+ "method": "bsClose",
300
+ "name": "bsClose",
301
+ "bubbles": true,
302
+ "cancelable": true,
303
+ "composed": true,
304
+ "docs": {
305
+ "tags": [],
306
+ "text": "Emitted when the panel requests to close (close button, Escape, overlay click)."
307
+ },
308
+ "complexType": {
309
+ "original": "void",
310
+ "resolved": "void",
311
+ "references": {}
312
+ }
313
+ }];
314
+ }
315
+ static get elementRef() { return "el"; }
316
+ static get watchers() {
317
+ return [{
318
+ "propName": "open",
319
+ "methodName": "onOpenChange"
320
+ }, {
321
+ "propName": "overlay",
322
+ "methodName": "onOverlayChange"
323
+ }];
324
+ }
325
+ }
@@ -0,0 +1,24 @@
1
+ import { html } from "lit";
2
+ import { componentDescription } from "../../stories-utils";
3
+ const meta = {
4
+ title: 'Components/bs-side-panel',
5
+ parameters: { docs: { description: { component: componentDescription('bs-side-panel') } } },
6
+ render: args => html `
7
+ <bs-side-panel ?open=${args.open} heading=${args.heading} side=${args.side} close-label=${args.closeLabel} ?overlay=${args.overlay}>
8
+ <p>Panel body content.</p>
9
+ <bs-button slot="footer">Apply</bs-button>
10
+ </bs-side-panel>
11
+ `,
12
+ argTypes: {
13
+ open: { control: 'boolean' },
14
+ heading: { control: 'text' },
15
+ side: { control: 'inline-radio', options: ['start', 'end'] },
16
+ closeLabel: { control: 'text' },
17
+ overlay: { control: 'boolean' },
18
+ },
19
+ args: { open: true, heading: 'History', side: 'end', closeLabel: 'Close', overlay: false },
20
+ };
21
+ export default meta;
22
+ export const Default = {};
23
+ export const WithOverlay = { name: 'With overlay', args: { overlay: true } };
24
+ export const Start = { name: 'Start side', args: { side: 'start' } };
@@ -0,0 +1,49 @@
1
+ import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ describe('bs-skeleton', () => {
3
+ it('is aria-hidden by default with no role', async () => {
4
+ const { root } = await render(h("bs-skeleton", null));
5
+ const c = root.shadowRoot.querySelector('[part="container"]');
6
+ expect(c).toEqualAttribute('aria-hidden', 'true');
7
+ expect(c.hasAttribute('role')).toBe(false);
8
+ });
9
+ it('uses role="status" + aria-label when label is set', async () => {
10
+ const { root } = await render(h("bs-skeleton", { label: "Loading profile" }));
11
+ const c = root.shadowRoot.querySelector('[part="container"]');
12
+ expect(c).toEqualAttribute('role', 'status');
13
+ expect(c).toEqualAttribute('aria-label', 'Loading profile');
14
+ expect(c.hasAttribute('aria-hidden')).toBe(false);
15
+ });
16
+ it('renders one line per `lines` for text, with a shorter last line', async () => {
17
+ const { root } = await render(h("bs-skeleton", { lines: 3 }));
18
+ const lines = root.shadowRoot.querySelectorAll('[part="line"]');
19
+ expect(lines.length).toBe(3);
20
+ expect(lines[2]).toHaveClass('bs-skeleton__line--short');
21
+ expect(lines[0]).not.toHaveClass('bs-skeleton__line--short');
22
+ });
23
+ it('ignores `lines` for non-text variants and clamps invalid values', async () => {
24
+ const { root, setProps } = await render(h("bs-skeleton", { variant: "rect", lines: 4 }));
25
+ expect(root.shadowRoot.querySelectorAll('[part="line"]').length).toBe(1);
26
+ await setProps({ variant: 'text', lines: 0 });
27
+ expect(root.shadowRoot.querySelectorAll('[part="line"]').length).toBe(1);
28
+ });
29
+ it('applies the variant class and width/height inline', async () => {
30
+ const { root } = await render(h("bs-skeleton", { variant: "rect", width: "200px", height: "40px" }));
31
+ const line = root.shadowRoot.querySelector('[part="line"]');
32
+ expect(line).toHaveClass('bs-skeleton__line--rect');
33
+ expect(line.style.width).toBe('200px');
34
+ expect(line.style.height).toBe('40px');
35
+ });
36
+ it('circle mirrors a single dimension', async () => {
37
+ const { root } = await render(h("bs-skeleton", { variant: "circle", width: "48px" }));
38
+ const line = root.shadowRoot.querySelector('[part="line"]');
39
+ expect(line.style.width).toBe('48px');
40
+ expect(line.style.height).toBe('48px');
41
+ });
42
+ it('animated toggles the animation class', async () => {
43
+ const { root, setProps } = await render(h("bs-skeleton", null));
44
+ const c = root.shadowRoot.querySelector('[part="container"]');
45
+ expect(c).toHaveClass('bs-skeleton--animated');
46
+ await setProps({ animated: false });
47
+ expect(c).not.toHaveClass('bs-skeleton--animated');
48
+ });
49
+ });
@@ -0,0 +1,62 @@
1
+ :host {
2
+ display: block;
3
+ --bs-skeleton-bg: var(--bs-color-neutral-container);
4
+ --bs-skeleton-radius: var(--bs-border-radius-100);
5
+ --bs-skeleton-width: 100%;
6
+ --bs-skeleton-text-height: 1em;
7
+ --bs-skeleton-rect-height: 96px;
8
+ --bs-skeleton-gap: var(--bs-spacing-100);
9
+ --bs-skeleton-duration: 1.5s;
10
+ }
11
+
12
+ .bs-skeleton {
13
+ display: flex;
14
+ flex-direction: column;
15
+ gap: var(--bs-skeleton-gap);
16
+ }
17
+
18
+ .bs-skeleton__line {
19
+ display: block;
20
+ max-width: 100%;
21
+ width: var(--bs-skeleton-width);
22
+ background: var(--bs-skeleton-bg);
23
+ border-radius: var(--bs-skeleton-radius);
24
+ }
25
+
26
+ .bs-skeleton__line--text {
27
+ height: var(--bs-skeleton-text-height);
28
+ }
29
+
30
+ .bs-skeleton__line--rect {
31
+ height: var(--bs-skeleton-rect-height);
32
+ }
33
+
34
+ .bs-skeleton__line--circle {
35
+ height: var(--bs-skeleton-rect-height);
36
+ width: var(--bs-skeleton-rect-height);
37
+ border-radius: var(--bs-border-radius-full);
38
+ }
39
+
40
+ .bs-skeleton__line--short {
41
+ width: 60%;
42
+ }
43
+
44
+ .bs-skeleton--animated .bs-skeleton__line {
45
+ animation: bs-skeleton-pulse var(--bs-skeleton-duration) ease-in-out infinite;
46
+ }
47
+
48
+ @keyframes bs-skeleton-pulse {
49
+ 0%,
50
+ 100% {
51
+ opacity: 1;
52
+ }
53
+ 50% {
54
+ opacity: 0.5;
55
+ }
56
+ }
57
+
58
+ @media (prefers-reduced-motion: reduce) {
59
+ .bs-skeleton--animated .bs-skeleton__line {
60
+ animation: none;
61
+ }
62
+ }
@@ -0,0 +1,204 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * A general-purpose loading placeholder for content whose shape isn't covered by a dedicated
4
+ * skeleton (e.g. `bs-button-skeleton`). Renders a pulsing text line (or several), rectangle or circle.
5
+ *
6
+ * Decorative by default (`aria-hidden="true"`). Set `label` to expose it to assistive tech as a
7
+ * `role="status"` live region with that accessible name -- do this on one placeholder per loading
8
+ * region, not on every placeholder, so screen readers don't announce it repeatedly.
9
+ *
10
+ * ## When to use
11
+ * - Standing in for text, images, avatars or other blocks while their data loads.
12
+ *
13
+ * ## When not to use
14
+ * - For a `bs-button` or `bs-checkbox` placeholder -- use `bs-button-skeleton` / `bs-checkbox-skeleton`.
15
+ * - For an in-progress action on already-rendered UI -- use `bs-spinner` or `bs-progress`.
16
+ *
17
+ * @part container - The outer wrapper.
18
+ * @part line - Each pulsing placeholder element (one per line for `variant="text"`).
19
+ * @prop --bs-skeleton-bg - Placeholder color. Aliased to `--bs-color-neutral-container`.
20
+ * @prop --bs-skeleton-radius - Corner radius for `text`/`rect`. Aliased to `--bs-border-radius-100`.
21
+ * @prop --bs-skeleton-width - Width when the `width` prop is not set. Defaults to `100%`.
22
+ * @prop --bs-skeleton-text-height - Height of each text line when `height` is not set. Defaults to `1em`.
23
+ * @prop --bs-skeleton-rect-height - Height of `rect`/`circle` when `height` is not set. Defaults to `96px`.
24
+ * @prop --bs-skeleton-gap - Gap between text lines. Aliased to `--bs-spacing-100`.
25
+ * @prop --bs-skeleton-duration - Pulse duration. Defaults to `1.5s`.
26
+ */
27
+ export class BsSkeleton {
28
+ /** Shape of the placeholder. */
29
+ variant = 'text';
30
+ /** Any CSS length (e.g. `200px`, `50%`). Falls back to `--bs-skeleton-width`. For `circle`, if
31
+ * only one of `width`/`height` is set the other matches it. */
32
+ width;
33
+ /** Any CSS length. Falls back to the variant's default height custom property. */
34
+ height;
35
+ /** Number of text lines (`variant="text"` only). The last line of a multi-line block is shorter.
36
+ * Values below 1 are treated as 1. */
37
+ lines = 1;
38
+ /** Whether the placeholder pulses. Disabled automatically under `prefers-reduced-motion`. */
39
+ animated = true;
40
+ /** When set, the placeholder gets `role="status"` and this as its `aria-label`; otherwise it is
41
+ * `aria-hidden="true"`. */
42
+ label;
43
+ render() {
44
+ const isText = this.variant === 'text';
45
+ const count = isText ? Math.max(1, Math.floor(Number(this.lines)) || 1) : 1;
46
+ let width = this.width;
47
+ let height = this.height;
48
+ if (this.variant === 'circle') {
49
+ width = width ?? height;
50
+ height = height ?? width;
51
+ }
52
+ const style = {};
53
+ if (width)
54
+ style.width = width;
55
+ if (height)
56
+ style.height = height;
57
+ const lines = [];
58
+ for (let i = 0; i < count; i++) {
59
+ const isShortLast = isText && count > 1 && i === count - 1 && !this.width;
60
+ lines.push(h("span", { part: "line", class: { 'bs-skeleton__line': true, [`bs-skeleton__line--${this.variant}`]: true, 'bs-skeleton__line--short': isShortLast }, style: style }));
61
+ }
62
+ const hasLabel = !!this.label;
63
+ return (h("span", { key: 'dc80e4fbb6d9da6387f5bb674595469e7566ce2c', part: "container", class: { 'bs-skeleton': true, 'bs-skeleton--animated': this.animated, [`bs-skeleton--${this.variant}`]: true }, role: hasLabel ? 'status' : undefined, "aria-label": hasLabel ? this.label : undefined, "aria-hidden": hasLabel ? undefined : 'true' }, lines));
64
+ }
65
+ static get is() { return "bs-skeleton"; }
66
+ static get encapsulation() { return "shadow"; }
67
+ static get originalStyleUrls() {
68
+ return {
69
+ "$": ["bs-skeleton.css"]
70
+ };
71
+ }
72
+ static get styleUrls() {
73
+ return {
74
+ "$": ["bs-skeleton.css"]
75
+ };
76
+ }
77
+ static get properties() {
78
+ return {
79
+ "variant": {
80
+ "type": "string",
81
+ "mutable": false,
82
+ "complexType": {
83
+ "original": "BsSkeletonVariant",
84
+ "resolved": "\"circle\" | \"rect\" | \"text\"",
85
+ "references": {
86
+ "BsSkeletonVariant": {
87
+ "location": "local",
88
+ "path": "/home/runner/work/eg-brandsync-storybook/eg-brandsync-storybook/packages/wc/src/components/bs-skeleton/bs-skeleton.tsx",
89
+ "id": "src/components/bs-skeleton/bs-skeleton.tsx::BsSkeletonVariant"
90
+ }
91
+ }
92
+ },
93
+ "required": false,
94
+ "optional": false,
95
+ "docs": {
96
+ "tags": [],
97
+ "text": "Shape of the placeholder."
98
+ },
99
+ "getter": false,
100
+ "setter": false,
101
+ "reflect": false,
102
+ "attribute": "variant",
103
+ "defaultValue": "'text'"
104
+ },
105
+ "width": {
106
+ "type": "string",
107
+ "mutable": false,
108
+ "complexType": {
109
+ "original": "string",
110
+ "resolved": "string",
111
+ "references": {}
112
+ },
113
+ "required": false,
114
+ "optional": true,
115
+ "docs": {
116
+ "tags": [],
117
+ "text": "Any CSS length (e.g. `200px`, `50%`). Falls back to `--bs-skeleton-width`. For `circle`, if\nonly one of `width`/`height` is set the other matches it."
118
+ },
119
+ "getter": false,
120
+ "setter": false,
121
+ "reflect": false,
122
+ "attribute": "width"
123
+ },
124
+ "height": {
125
+ "type": "string",
126
+ "mutable": false,
127
+ "complexType": {
128
+ "original": "string",
129
+ "resolved": "string",
130
+ "references": {}
131
+ },
132
+ "required": false,
133
+ "optional": true,
134
+ "docs": {
135
+ "tags": [],
136
+ "text": "Any CSS length. Falls back to the variant's default height custom property."
137
+ },
138
+ "getter": false,
139
+ "setter": false,
140
+ "reflect": false,
141
+ "attribute": "height"
142
+ },
143
+ "lines": {
144
+ "type": "number",
145
+ "mutable": false,
146
+ "complexType": {
147
+ "original": "number",
148
+ "resolved": "number",
149
+ "references": {}
150
+ },
151
+ "required": false,
152
+ "optional": false,
153
+ "docs": {
154
+ "tags": [],
155
+ "text": "Number of text lines (`variant=\"text\"` only). The last line of a multi-line block is shorter.\nValues below 1 are treated as 1."
156
+ },
157
+ "getter": false,
158
+ "setter": false,
159
+ "reflect": false,
160
+ "attribute": "lines",
161
+ "defaultValue": "1"
162
+ },
163
+ "animated": {
164
+ "type": "boolean",
165
+ "mutable": false,
166
+ "complexType": {
167
+ "original": "boolean",
168
+ "resolved": "boolean",
169
+ "references": {}
170
+ },
171
+ "required": false,
172
+ "optional": false,
173
+ "docs": {
174
+ "tags": [],
175
+ "text": "Whether the placeholder pulses. Disabled automatically under `prefers-reduced-motion`."
176
+ },
177
+ "getter": false,
178
+ "setter": false,
179
+ "reflect": false,
180
+ "attribute": "animated",
181
+ "defaultValue": "true"
182
+ },
183
+ "label": {
184
+ "type": "string",
185
+ "mutable": false,
186
+ "complexType": {
187
+ "original": "string",
188
+ "resolved": "string",
189
+ "references": {}
190
+ },
191
+ "required": false,
192
+ "optional": true,
193
+ "docs": {
194
+ "tags": [],
195
+ "text": "When set, the placeholder gets `role=\"status\"` and this as its `aria-label`; otherwise it is\n`aria-hidden=\"true\"`."
196
+ },
197
+ "getter": false,
198
+ "setter": false,
199
+ "reflect": false,
200
+ "attribute": "label"
201
+ }
202
+ };
203
+ }
204
+ }