@brandsync/wc 1.13.0 → 1.15.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 (361) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/REFERENCE.md +108 -0
  3. package/custom-elements.json +910 -13
  4. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  5. package/dist/brandsync-wc/{p-9d660c03.entry.js → p-0f97fe35.entry.js} +1 -1
  6. package/dist/brandsync-wc/{p-ab07c9b5.entry.js → p-1b4c0971.entry.js} +1 -1
  7. package/dist/brandsync-wc/{p-694fe468.entry.js → p-1bf8fbbb.entry.js} +1 -1
  8. package/dist/brandsync-wc/{p-b6ac1b50.entry.js → p-1ca8b01e.entry.js} +1 -1
  9. package/dist/brandsync-wc/{p-47cd19aa.entry.js → p-23379d7c.entry.js} +1 -1
  10. package/dist/brandsync-wc/{p-95f034fc.entry.js → p-2e285364.entry.js} +1 -1
  11. package/dist/brandsync-wc/{p-3f6682f8.entry.js → p-3488c4fc.entry.js} +1 -1
  12. package/dist/brandsync-wc/{p-e1b7bea7.entry.js → p-34b0c048.entry.js} +1 -1
  13. package/dist/brandsync-wc/p-36fe783a.entry.js +1 -0
  14. package/dist/brandsync-wc/{p-8184d7de.entry.js → p-38ac9aad.entry.js} +1 -1
  15. package/dist/brandsync-wc/{p-4ea9b6a1.entry.js → p-3c21d0bf.entry.js} +1 -1
  16. package/dist/brandsync-wc/{p-6e923ebc.entry.js → p-401b3d3d.entry.js} +1 -1
  17. package/dist/brandsync-wc/p-45986ad4.entry.js +1 -0
  18. package/dist/brandsync-wc/{p-ed5c2d97.entry.js → p-4ca40386.entry.js} +1 -1
  19. package/dist/brandsync-wc/{p-9125632c.entry.js → p-4ed00786.entry.js} +1 -1
  20. package/dist/brandsync-wc/{p-bee30626.entry.js → p-538d5b58.entry.js} +1 -1
  21. package/dist/brandsync-wc/{p-fb4d0093.entry.js → p-54f9529f.entry.js} +1 -1
  22. package/dist/brandsync-wc/{p-1b5cc9b8.entry.js → p-5a45ef51.entry.js} +1 -1
  23. package/dist/brandsync-wc/{p-ce16f038.entry.js → p-5ed1f45e.entry.js} +1 -1
  24. package/dist/brandsync-wc/{p-10290c41.entry.js → p-65fa1b21.entry.js} +1 -1
  25. package/dist/brandsync-wc/{p-4054a944.entry.js → p-6cb21302.entry.js} +1 -1
  26. package/dist/brandsync-wc/{p-53362609.entry.js → p-6df48031.entry.js} +1 -1
  27. package/dist/brandsync-wc/p-769c5b4a.entry.js +1 -0
  28. package/dist/brandsync-wc/{p-07966676.entry.js → p-7a072e64.entry.js} +1 -1
  29. package/dist/brandsync-wc/p-7b3518b8.entry.js +1 -0
  30. package/dist/brandsync-wc/{p-658532b7.entry.js → p-86774165.entry.js} +1 -1
  31. package/dist/brandsync-wc/{p-7e24dbd7.entry.js → p-87d44938.entry.js} +1 -1
  32. package/dist/brandsync-wc/{p-4ea435a6.entry.js → p-89ea6366.entry.js} +1 -1
  33. package/dist/brandsync-wc/{p-d64cae57.entry.js → p-912629c6.entry.js} +1 -1
  34. package/dist/brandsync-wc/p-9beeb30c.entry.js +1 -0
  35. package/dist/brandsync-wc/{p-23cc532f.entry.js → p-a56bc608.entry.js} +1 -1
  36. package/dist/brandsync-wc/{p-9b58c0c5.entry.js → p-abfa43f5.entry.js} +1 -1
  37. package/dist/brandsync-wc/{p-cceb8484.entry.js → p-ac9472ec.entry.js} +1 -1
  38. package/dist/brandsync-wc/{p-f8d47004.entry.js → p-b6081bba.entry.js} +1 -1
  39. package/dist/brandsync-wc/{p-b0b2e525.entry.js → p-b663ee67.entry.js} +1 -1
  40. package/dist/brandsync-wc/{p-e0504a4b.entry.js → p-b67a0c8f.entry.js} +1 -1
  41. package/dist/brandsync-wc/{p-86028548.entry.js → p-b9c0b481.entry.js} +1 -1
  42. package/dist/brandsync-wc/{p-fa6b9750.entry.js → p-b9c9bcba.entry.js} +1 -1
  43. package/dist/brandsync-wc/{p-9cf8274a.entry.js → p-baa3d37a.entry.js} +1 -1
  44. package/dist/brandsync-wc/{p-68f0be29.entry.js → p-bc97ece8.entry.js} +1 -1
  45. package/dist/brandsync-wc/p-c25553bc.entry.js +1 -0
  46. package/dist/brandsync-wc/{p-45cb3e6d.entry.js → p-c85fe37b.entry.js} +1 -1
  47. package/dist/brandsync-wc/{p-c3da3080.entry.js → p-cf287ff1.entry.js} +1 -1
  48. package/dist/brandsync-wc/{p-c679b631.entry.js → p-d165a742.entry.js} +1 -1
  49. package/dist/brandsync-wc/{p-f134a502.entry.js → p-d81c4f58.entry.js} +1 -1
  50. package/dist/brandsync-wc/{p-94d435a2.entry.js → p-dcacee29.entry.js} +1 -1
  51. package/dist/brandsync-wc/p-e294f698.entry.js +1 -0
  52. package/dist/brandsync-wc/{p-0e940ee1.entry.js → p-e5f50e93.entry.js} +1 -1
  53. package/dist/brandsync-wc/p-e72dd05e.entry.js +1 -0
  54. package/dist/brandsync-wc/{p-0cb6fc39.entry.js → p-e9b6b30f.entry.js} +1 -1
  55. package/dist/brandsync-wc/{p-fa34fe20.entry.js → p-ed71eb02.entry.js} +1 -1
  56. package/dist/brandsync-wc/{p-e65d286c.entry.js → p-f0be9125.entry.js} +1 -1
  57. package/dist/brandsync-wc/p-f3cc961b.entry.js +1 -0
  58. package/dist/brandsync-wc/{p-6ca1e51b.entry.js → p-f4d1d56e.entry.js} +1 -1
  59. package/dist/cjs/brandsync-wc.cjs.js +1 -1
  60. package/dist/cjs/bs-accordion-group.cjs.entry.js +1 -1
  61. package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +1 -1
  62. package/dist/cjs/bs-ai-greeting.cjs.entry.js +1 -1
  63. package/dist/cjs/bs-ai-thinking.cjs.entry.js +1 -1
  64. package/dist/cjs/bs-app-shell.cjs.entry.js +19 -0
  65. package/dist/cjs/bs-attachment-list.cjs.entry.js +1 -1
  66. package/dist/cjs/bs-breadcrumbs.cjs.entry.js +1 -1
  67. package/dist/cjs/bs-button-skeleton.cjs.entry.js +1 -1
  68. package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +1 -1
  69. package/dist/cjs/bs-chatbot-header.cjs.entry.js +1 -1
  70. package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +1 -1
  71. package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +1 -1
  72. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +1 -1
  73. package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +1 -1
  74. package/dist/cjs/bs-citation-preview.cjs.entry.js +1 -1
  75. package/dist/cjs/bs-container.cjs.entry.js +23 -0
  76. package/dist/cjs/bs-data-table.cjs.entry.js +2 -2
  77. package/dist/cjs/bs-datepicker.cjs.entry.js +1 -1
  78. package/dist/cjs/bs-divider.cjs.entry.js +29 -0
  79. package/dist/cjs/bs-error-page.cjs.entry.js +1 -1
  80. package/dist/cjs/bs-file-upload-item.cjs.entry.js +1 -1
  81. package/dist/cjs/bs-file-upload.cjs.entry.js +1 -1
  82. package/dist/cjs/bs-grid.cjs.entry.js +55 -0
  83. package/dist/cjs/bs-icon-button.cjs.entry.js +1 -1
  84. package/dist/cjs/bs-icon-tile.cjs.entry.js +2 -2
  85. package/dist/cjs/bs-inline-tab.cjs.entry.js +1 -1
  86. package/dist/cjs/bs-input_3.cjs.entry.js +4 -4
  87. package/dist/cjs/bs-message-list.cjs.entry.js +1 -1
  88. package/dist/cjs/bs-message.cjs.entry.js +1 -1
  89. package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +1 -1
  90. package/dist/cjs/bs-navigation-drawer.cjs.entry.js +2 -2
  91. package/dist/cjs/bs-navigation-header.cjs.entry.js +1 -1
  92. package/dist/cjs/bs-pagination.cjs.entry.js +1 -1
  93. package/dist/cjs/bs-popover.cjs.entry.js +1 -1
  94. package/dist/cjs/bs-progress-linear.cjs.entry.js +2 -2
  95. package/dist/cjs/bs-progress.cjs.entry.js +2 -2
  96. package/dist/cjs/bs-qr-code.cjs.entry.js +1 -1
  97. package/dist/cjs/bs-radio.cjs.entry.js +1 -1
  98. package/dist/cjs/bs-session-timeout.cjs.entry.js +1 -1
  99. package/dist/cjs/bs-skeleton.cjs.entry.js +1 -1
  100. package/dist/cjs/bs-slider.cjs.entry.js +1 -1
  101. package/dist/cjs/bs-snackbar.cjs.entry.js +1 -1
  102. package/dist/cjs/bs-source-link.cjs.entry.js +2 -2
  103. package/dist/cjs/bs-spinner.cjs.entry.js +1 -1
  104. package/dist/cjs/bs-split-pane.cjs.entry.js +193 -0
  105. package/dist/cjs/bs-stack.cjs.entry.js +81 -0
  106. package/dist/cjs/bs-stepper-step.cjs.entry.js +1 -1
  107. package/dist/cjs/bs-stepper.cjs.entry.js +1 -1
  108. package/dist/cjs/bs-switch.cjs.entry.js +1 -1
  109. package/dist/cjs/bs-tab_3.cjs.entry.js +3 -3
  110. package/dist/cjs/bs-timepicker.cjs.entry.js +2 -2
  111. package/dist/cjs/bs-toast.cjs.entry.js +1 -1
  112. package/dist/cjs/bs-tooltip-trigger.cjs.entry.js +1 -1
  113. package/dist/cjs/bs-tooltip.cjs.entry.js +1 -1
  114. package/dist/cjs/loader.cjs.js +1 -1
  115. package/dist/collection/collection-manifest.json +6 -0
  116. package/dist/collection/components/bs-accordion-group/bs-accordion-group.js +1 -1
  117. package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -1
  118. package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
  119. package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
  120. package/dist/collection/components/bs-app-shell/bs-app-shell.cmp.test.js +71 -0
  121. package/dist/collection/components/bs-app-shell/bs-app-shell.css +58 -0
  122. package/dist/collection/components/bs-app-shell/bs-app-shell.js +79 -0
  123. package/dist/collection/components/bs-app-shell/bs-app-shell.stories.js +34 -0
  124. package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
  125. package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +1 -1
  126. package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +1 -1
  127. package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
  128. package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -1
  129. package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
  130. package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
  131. package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
  132. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
  133. package/dist/collection/components/bs-checkbox/bs-checkbox-skeleton/bs-checkbox-skeleton.js +1 -1
  134. package/dist/collection/components/bs-citation-preview/bs-citation-preview.js +1 -1
  135. package/dist/collection/components/bs-container/bs-container.cmp.test.js +59 -0
  136. package/dist/collection/components/bs-container/bs-container.css +16 -0
  137. package/dist/collection/components/bs-container/bs-container.js +88 -0
  138. package/dist/collection/components/bs-container/bs-container.stories.js +24 -0
  139. package/dist/collection/components/bs-data-table/bs-data-table.js +2 -2
  140. package/dist/collection/components/bs-datepicker/bs-datepicker.js +1 -1
  141. package/dist/collection/components/bs-divider/bs-divider.cmp.test.js +47 -0
  142. package/dist/collection/components/bs-divider/bs-divider.css +47 -0
  143. package/dist/collection/components/bs-divider/bs-divider.js +147 -0
  144. package/dist/collection/components/bs-divider/bs-divider.stories.js +32 -0
  145. package/dist/collection/components/bs-error-page/bs-error-page.js +1 -1
  146. package/dist/collection/components/bs-file-upload/bs-file-upload.js +1 -1
  147. package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.js +1 -1
  148. package/dist/collection/components/bs-grid/bs-grid.cmp.test.js +58 -0
  149. package/dist/collection/components/bs-grid/bs-grid.css +10 -0
  150. package/dist/collection/components/bs-grid/bs-grid.js +208 -0
  151. package/dist/collection/components/bs-grid/bs-grid.stories.js +38 -0
  152. package/dist/collection/components/bs-icon-tile/bs-icon-tile.js +2 -2
  153. package/dist/collection/components/bs-input/bs-input.js +2 -2
  154. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  155. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  156. package/dist/collection/components/bs-message/bs-message.js +1 -1
  157. package/dist/collection/components/bs-message-list/bs-message-list.js +1 -1
  158. package/dist/collection/components/bs-pagination/bs-pagination.js +1 -1
  159. package/dist/collection/components/bs-popover/bs-popover.js +1 -1
  160. package/dist/collection/components/bs-progress/bs-progress.js +2 -2
  161. package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +2 -2
  162. package/dist/collection/components/bs-qr-code/bs-qr-code.js +1 -1
  163. package/dist/collection/components/bs-radio/bs-radio.js +1 -1
  164. package/dist/collection/components/bs-session-timeout/bs-session-timeout.js +1 -1
  165. package/dist/collection/components/bs-skeleton/bs-skeleton.js +1 -1
  166. package/dist/collection/components/bs-slider/bs-slider.js +1 -1
  167. package/dist/collection/components/bs-snackbar/bs-snackbar.js +1 -1
  168. package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
  169. package/dist/collection/components/bs-spinner/bs-spinner.js +1 -1
  170. package/dist/collection/components/bs-split-pane/bs-split-pane.cmp.test.js +107 -0
  171. package/dist/collection/components/bs-split-pane/bs-split-pane.css +108 -0
  172. package/dist/collection/components/bs-split-pane/bs-split-pane.js +404 -0
  173. package/dist/collection/components/bs-split-pane/bs-split-pane.stories.js +47 -0
  174. package/dist/collection/components/bs-stack/bs-stack.cmp.test.js +113 -0
  175. package/dist/collection/components/bs-stack/bs-stack.css +22 -0
  176. package/dist/collection/components/bs-stack/bs-stack.js +252 -0
  177. package/dist/collection/components/bs-stack/bs-stack.stories.js +36 -0
  178. package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +1 -1
  179. package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
  180. package/dist/collection/components/bs-switch/bs-switch.js +1 -1
  181. package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
  182. package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +1 -1
  183. package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +1 -1
  184. package/dist/collection/components/bs-timepicker/bs-timepicker.js +2 -2
  185. package/dist/collection/components/bs-toast/bs-toast.js +1 -1
  186. package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
  187. package/dist/collection/components/bs-tooltip-trigger/bs-tooltip-trigger.js +1 -1
  188. package/dist/collection/components/bs-whats-new-entry/bs-whats-new-entry.js +1 -1
  189. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +2 -2
  190. package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
  191. package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +1 -1
  192. package/dist/components/bs-accordion-group.js +1 -1
  193. package/dist/components/bs-ai-disclaimer.js +1 -1
  194. package/dist/components/bs-ai-greeting.js +1 -1
  195. package/dist/components/bs-ai-thinking.js +1 -1
  196. package/dist/components/bs-app-shell.d.ts +11 -0
  197. package/dist/components/bs-app-shell.js +1 -0
  198. package/dist/components/bs-attachment-list.js +1 -1
  199. package/dist/components/bs-attachment.js +1 -1
  200. package/dist/components/bs-breadcrumb-overflow.js +1 -1
  201. package/dist/components/bs-breadcrumbs.js +1 -1
  202. package/dist/components/bs-button-skeleton.js +1 -1
  203. package/dist/components/bs-carousel.js +1 -1
  204. package/dist/components/bs-chatbot-feedback.js +1 -1
  205. package/dist/components/bs-chatbot-header.js +1 -1
  206. package/dist/components/bs-chatbot-response-action.js +1 -1
  207. package/dist/components/bs-chatbot-sources-drawer.js +1 -1
  208. package/dist/components/bs-chatbot-suggestion-button.js +1 -1
  209. package/dist/components/bs-checkbox-skeleton.js +1 -1
  210. package/dist/components/bs-citation-preview.js +1 -1
  211. package/dist/components/bs-container.d.ts +11 -0
  212. package/dist/components/bs-container.js +1 -0
  213. package/dist/components/bs-cookie-consent.js +1 -1
  214. package/dist/components/bs-data-table.js +1 -1
  215. package/dist/components/bs-datepicker.js +1 -1
  216. package/dist/components/bs-dialog.js +1 -1
  217. package/dist/components/bs-divider.d.ts +11 -0
  218. package/dist/components/bs-divider.js +1 -0
  219. package/dist/components/bs-error-page.js +1 -1
  220. package/dist/components/bs-file-upload-item.js +1 -1
  221. package/dist/components/bs-file-upload.js +1 -1
  222. package/dist/components/bs-grid.d.ts +11 -0
  223. package/dist/components/bs-grid.js +1 -0
  224. package/dist/components/bs-icon-button.js +1 -1
  225. package/dist/components/bs-icon-tile.js +1 -1
  226. package/dist/components/bs-inline-tab.js +1 -1
  227. package/dist/components/bs-input.js +1 -1
  228. package/dist/components/bs-menu-item.js +1 -1
  229. package/dist/components/bs-menu.js +1 -1
  230. package/dist/components/bs-message-list.js +1 -1
  231. package/dist/components/bs-message.js +1 -1
  232. package/dist/components/bs-navigation-drawer-item.js +1 -1
  233. package/dist/components/bs-navigation-drawer.js +1 -1
  234. package/dist/components/bs-navigation-header.js +1 -1
  235. package/dist/components/bs-onboarding-checklist.js +1 -1
  236. package/dist/components/bs-pagination.js +1 -1
  237. package/dist/components/bs-popover.js +1 -1
  238. package/dist/components/bs-product-tour.js +1 -1
  239. package/dist/components/bs-progress-linear.js +1 -1
  240. package/dist/components/bs-progress.js +1 -1
  241. package/dist/components/bs-qr-code.js +1 -1
  242. package/dist/components/bs-radio.js +1 -1
  243. package/dist/components/bs-session-timeout.js +1 -1
  244. package/dist/components/bs-side-panel.js +1 -1
  245. package/dist/components/bs-skeleton.js +1 -1
  246. package/dist/components/bs-slider.js +1 -1
  247. package/dist/components/bs-snackbar.js +1 -1
  248. package/dist/components/bs-source-link.js +1 -1
  249. package/dist/components/bs-spinner.js +1 -1
  250. package/dist/components/bs-split-pane.d.ts +11 -0
  251. package/dist/components/bs-split-pane.js +1 -0
  252. package/dist/components/bs-stack.d.ts +11 -0
  253. package/dist/components/bs-stack.js +1 -0
  254. package/dist/components/bs-stepper-step.js +1 -1
  255. package/dist/components/bs-stepper.js +1 -1
  256. package/dist/components/bs-switch.js +1 -1
  257. package/dist/components/bs-tab.js +1 -1
  258. package/dist/components/bs-tabs.js +1 -1
  259. package/dist/components/bs-timepicker.js +1 -1
  260. package/dist/components/bs-toast.js +1 -1
  261. package/dist/components/bs-tooltip-trigger.js +1 -1
  262. package/dist/components/bs-tooltip.js +1 -1
  263. package/dist/components/bs-whats-new-entry.js +1 -1
  264. package/dist/components/bs-whats-new.js +1 -1
  265. package/dist/components/{p-CrmEXUwm.js → p-B128GX8H.js} +1 -1
  266. package/dist/components/{p-DfzrJKwN.js → p-B3l4WpgS.js} +1 -1
  267. package/dist/components/{p-Rx4bpeYN.js → p-B80vOwH6.js} +1 -1
  268. package/dist/components/{p-Dqg8l1y6.js → p-Bqe4waKJ.js} +1 -1
  269. package/dist/components/{p-C9jIMBG3.js → p-BsbtyRJV.js} +1 -1
  270. package/dist/components/{p-Bfq5YVOv.js → p-BvYkZcOU.js} +1 -1
  271. package/dist/components/{p-BVhF8cZQ.js → p-ByKcHsj0.js} +1 -1
  272. package/dist/components/{p-owdeCW0M.js → p-ByLUtXxO.js} +1 -1
  273. package/dist/components/p-C7RZ6qZC.js +1 -0
  274. package/dist/components/{p-DpVeeIko.js → p-CK7fiES5.js} +1 -1
  275. package/dist/components/{p-QnTjSed5.js → p-CQjSDdH7.js} +1 -1
  276. package/dist/components/{p-uHvS81XA.js → p-D0KM1R2i.js} +1 -1
  277. package/dist/components/{p-DqXI9V2A.js → p-ElcsxZSh.js} +1 -1
  278. package/dist/components/{p-DAwSBMeM.js → p-GTDI4Ibw.js} +1 -1
  279. package/dist/components/{p-Cu-aeY9t.js → p-Mf1jorXP.js} +1 -1
  280. package/dist/components/{p-C2NR1v3p.js → p-kDJsWjTN.js} +1 -1
  281. package/dist/esm/brandsync-wc.js +1 -1
  282. package/dist/esm/bs-accordion-group.entry.js +1 -1
  283. package/dist/esm/bs-ai-disclaimer.entry.js +1 -1
  284. package/dist/esm/bs-ai-greeting.entry.js +1 -1
  285. package/dist/esm/bs-ai-thinking.entry.js +1 -1
  286. package/dist/esm/bs-app-shell.entry.js +17 -0
  287. package/dist/esm/bs-attachment-list.entry.js +1 -1
  288. package/dist/esm/bs-breadcrumbs.entry.js +1 -1
  289. package/dist/esm/bs-button-skeleton.entry.js +1 -1
  290. package/dist/esm/bs-chatbot-feedback.entry.js +1 -1
  291. package/dist/esm/bs-chatbot-header.entry.js +1 -1
  292. package/dist/esm/bs-chatbot-response-action.entry.js +1 -1
  293. package/dist/esm/bs-chatbot-sources-drawer.entry.js +1 -1
  294. package/dist/esm/bs-chatbot-suggestion-button.entry.js +1 -1
  295. package/dist/esm/bs-checkbox-skeleton.entry.js +1 -1
  296. package/dist/esm/bs-citation-preview.entry.js +1 -1
  297. package/dist/esm/bs-container.entry.js +21 -0
  298. package/dist/esm/bs-data-table.entry.js +2 -2
  299. package/dist/esm/bs-datepicker.entry.js +1 -1
  300. package/dist/esm/bs-divider.entry.js +27 -0
  301. package/dist/esm/bs-error-page.entry.js +1 -1
  302. package/dist/esm/bs-file-upload-item.entry.js +1 -1
  303. package/dist/esm/bs-file-upload.entry.js +1 -1
  304. package/dist/esm/bs-grid.entry.js +53 -0
  305. package/dist/esm/bs-icon-button.entry.js +1 -1
  306. package/dist/esm/bs-icon-tile.entry.js +2 -2
  307. package/dist/esm/bs-inline-tab.entry.js +1 -1
  308. package/dist/esm/bs-input_3.entry.js +4 -4
  309. package/dist/esm/bs-message-list.entry.js +1 -1
  310. package/dist/esm/bs-message.entry.js +1 -1
  311. package/dist/esm/bs-navigation-drawer-item.entry.js +1 -1
  312. package/dist/esm/bs-navigation-drawer.entry.js +2 -2
  313. package/dist/esm/bs-navigation-header.entry.js +1 -1
  314. package/dist/esm/bs-pagination.entry.js +1 -1
  315. package/dist/esm/bs-popover.entry.js +1 -1
  316. package/dist/esm/bs-progress-linear.entry.js +2 -2
  317. package/dist/esm/bs-progress.entry.js +2 -2
  318. package/dist/esm/bs-qr-code.entry.js +1 -1
  319. package/dist/esm/bs-radio.entry.js +1 -1
  320. package/dist/esm/bs-session-timeout.entry.js +1 -1
  321. package/dist/esm/bs-skeleton.entry.js +1 -1
  322. package/dist/esm/bs-slider.entry.js +1 -1
  323. package/dist/esm/bs-snackbar.entry.js +1 -1
  324. package/dist/esm/bs-source-link.entry.js +2 -2
  325. package/dist/esm/bs-spinner.entry.js +1 -1
  326. package/dist/esm/bs-split-pane.entry.js +191 -0
  327. package/dist/esm/bs-stack.entry.js +79 -0
  328. package/dist/esm/bs-stepper-step.entry.js +1 -1
  329. package/dist/esm/bs-stepper.entry.js +1 -1
  330. package/dist/esm/bs-switch.entry.js +1 -1
  331. package/dist/esm/bs-tab_3.entry.js +3 -3
  332. package/dist/esm/bs-timepicker.entry.js +2 -2
  333. package/dist/esm/bs-toast.entry.js +1 -1
  334. package/dist/esm/bs-tooltip-trigger.entry.js +1 -1
  335. package/dist/esm/bs-tooltip.entry.js +1 -1
  336. package/dist/esm/loader.js +1 -1
  337. package/dist/types/components/bs-app-shell/bs-app-shell.cmp.test.d.ts +1 -0
  338. package/dist/types/components/bs-app-shell/bs-app-shell.d.ts +40 -0
  339. package/dist/types/components/bs-app-shell/bs-app-shell.stories.d.ts +11 -0
  340. package/dist/types/components/bs-container/bs-container.cmp.test.d.ts +1 -0
  341. package/dist/types/components/bs-container/bs-container.d.ts +22 -0
  342. package/dist/types/components/bs-container/bs-container.stories.d.ts +15 -0
  343. package/dist/types/components/bs-divider/bs-divider.cmp.test.d.ts +1 -0
  344. package/dist/types/components/bs-divider/bs-divider.d.ts +29 -0
  345. package/dist/types/components/bs-divider/bs-divider.stories.d.ts +16 -0
  346. package/dist/types/components/bs-grid/bs-grid.cmp.test.d.ts +1 -0
  347. package/dist/types/components/bs-grid/bs-grid.d.ts +43 -0
  348. package/dist/types/components/bs-grid/bs-grid.stories.d.ts +18 -0
  349. package/dist/types/components/bs-split-pane/bs-split-pane.cmp.test.d.ts +1 -0
  350. package/dist/types/components/bs-split-pane/bs-split-pane.d.ts +85 -0
  351. package/dist/types/components/bs-split-pane/bs-split-pane.stories.d.ts +15 -0
  352. package/dist/types/components/bs-stack/bs-stack.cmp.test.d.ts +1 -0
  353. package/dist/types/components/bs-stack/bs-stack.d.ts +46 -0
  354. package/dist/types/components/bs-stack/bs-stack.stories.d.ts +18 -0
  355. package/dist/types/components.d.ts +798 -0
  356. package/package.json +1 -1
  357. package/reference.d.ts +18 -0
  358. package/reference.json +286 -0
  359. package/dist/brandsync-wc/p-4bbc4809.entry.js +0 -1
  360. package/dist/brandsync-wc/p-bf8bd386.entry.js +0 -1
  361. package/dist/brandsync-wc/p-cd53bba9.entry.js +0 -1
@@ -0,0 +1,107 @@
1
+ import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ const mount = (props = {}, panes = 3) => render(h("div", { style: { width: '900px', height: '400px' } }, h("bs-split-pane", { ...props }, h("div", { slot: "pane-1" }, "One"), h("div", { slot: "pane-2" }, "Two"), panes === 3 && h("div", { slot: "pane-3" }, "Three"))));
3
+ const size = (el, axis = 'width') => el.getBoundingClientRect()[axis];
4
+ describe('bs-split-pane', () => {
5
+ it('renders one divider per gap between panes, with separator semantics', async () => {
6
+ const { root } = await mount();
7
+ const split = root.querySelector('bs-split-pane');
8
+ const dividers = split.shadowRoot.querySelectorAll('[part="divider"]');
9
+ expect(dividers.length).toBe(2);
10
+ expect(dividers[0]).toEqualAttribute('role', 'separator');
11
+ expect(dividers[0]).toEqualAttribute('aria-orientation', 'vertical');
12
+ expect(dividers[0]).toEqualAttribute('aria-label', 'Resize panes');
13
+ expect(dividers[0]).toEqualAttribute('tabindex', '0');
14
+ expect(split.shadowRoot.querySelectorAll('[part~="pane"]').length).toBe(3);
15
+ });
16
+ it('follows the filled slots: two panes means one divider', async () => {
17
+ const { root } = await mount({}, 2);
18
+ const split = root.querySelector('bs-split-pane');
19
+ expect(split.shadowRoot.querySelectorAll('[part="divider"]').length).toBe(1);
20
+ });
21
+ it('uses horizontal dividers when vertical', async () => {
22
+ const { root } = await mount({ orientation: 'vertical' });
23
+ const split = root.querySelector('bs-split-pane');
24
+ expect(split.shadowRoot.querySelector('[part="divider"]')).toEqualAttribute('aria-orientation', 'horizontal');
25
+ });
26
+ it('gives the first pane its fixed size and shrinks it to the rail when collapsed', async () => {
27
+ const { root, waitForChanges } = await mount();
28
+ const split = root.querySelector('bs-split-pane');
29
+ const first = split.shadowRoot.querySelector('[part~="pane-1"]');
30
+ expect(Math.round(size(first))).toBe(333);
31
+ split.setAttribute('collapsed', '');
32
+ await waitForChanges();
33
+ expect(Math.round(size(first))).toBe(106);
34
+ });
35
+ it('resizes the first pane with arrow keys and emits bsResize', async () => {
36
+ const { root, waitForChanges } = await mount();
37
+ const split = root.querySelector('bs-split-pane');
38
+ const events = [];
39
+ split.addEventListener('bsResize', (e) => events.push(e.detail));
40
+ const first = split.shadowRoot.querySelector('[part~="pane-1"]');
41
+ const divider = split.shadowRoot.querySelector('[part="divider"]');
42
+ divider.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true, cancelable: true }));
43
+ await waitForChanges();
44
+ expect(Math.round(size(first))).toBe(349);
45
+ divider.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', shiftKey: true, bubbles: true, cancelable: true }));
46
+ await waitForChanges();
47
+ expect(Math.round(size(first))).toBe(285);
48
+ expect(events.length).toBe(2);
49
+ expect(events[1][0]).toBe(285);
50
+ });
51
+ it('clamps to the minimum size with Home', async () => {
52
+ const { root, waitForChanges } = await mount();
53
+ const split = root.querySelector('bs-split-pane');
54
+ const first = split.shadowRoot.querySelector('[part~="pane-1"]');
55
+ const divider = split.shadowRoot.querySelector('[part="divider"]');
56
+ divider.dispatchEvent(new KeyboardEvent('keydown', { key: 'Home', bubbles: true, cancelable: true }));
57
+ await waitForChanges();
58
+ expect(Math.round(size(first))).toBe(96);
59
+ });
60
+ it('resizes by dragging with the pointer', async () => {
61
+ const { root, waitForChanges } = await mount();
62
+ const split = root.querySelector('bs-split-pane');
63
+ const first = split.shadowRoot.querySelector('[part~="pane-1"]');
64
+ const divider = split.shadowRoot.querySelector('[part="divider"]');
65
+ const fire = (type, clientX) => divider.dispatchEvent(new PointerEvent(type, { clientX, pointerId: 1, bubbles: true, cancelable: true }));
66
+ // setPointerCapture throws for synthetic pointer ids; the component only needs the move/up events.
67
+ divider.setPointerCapture = () => { };
68
+ fire('pointerdown', 340);
69
+ fire('pointermove', 440);
70
+ await waitForChanges();
71
+ expect(Math.round(size(first))).toBe(433);
72
+ fire('pointerup', 440);
73
+ await waitForChanges();
74
+ expect(Math.round(size(first))).toBe(433);
75
+ });
76
+ it('toggles collapsed with Enter on the first divider and emits bsCollapsedChange', async () => {
77
+ const { root, waitForChanges } = await mount();
78
+ const split = root.querySelector('bs-split-pane');
79
+ const events = [];
80
+ split.addEventListener('bsCollapsedChange', (e) => events.push(e.detail));
81
+ const divider = split.shadowRoot.querySelector('[part="divider"]');
82
+ divider.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true, cancelable: true }));
83
+ await waitForChanges();
84
+ expect(split.collapsed).toBe(true);
85
+ expect(split).toHaveAttribute('collapsed');
86
+ expect(events).toEqual([true]);
87
+ });
88
+ it('is not focusable and ignores keys when resizable is false', async () => {
89
+ const { root, waitForChanges } = await mount({ resizable: false });
90
+ const split = root.querySelector('bs-split-pane');
91
+ const first = split.shadowRoot.querySelector('[part~="pane-1"]');
92
+ const divider = split.shadowRoot.querySelector('[part="divider"]');
93
+ expect(divider).not.toHaveAttribute('tabindex');
94
+ divider.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true, cancelable: true }));
95
+ await waitForChanges();
96
+ expect(Math.round(size(first))).toBe(333);
97
+ });
98
+ it('follows dark mode: slotted text and panes use the dark tokens', async () => {
99
+ const { root } = await render(h("div", { "data-theme": "dark", style: { width: '600px', height: '300px' } }, h("bs-split-pane", null, h("div", { slot: "pane-1" }, "One"), h("div", { slot: "pane-2" }, "Two"))));
100
+ const split = root.querySelector('bs-split-pane');
101
+ const pane = split.shadowRoot.querySelector('[part~="pane-1"]');
102
+ const container = split.shadowRoot.querySelector('.bs-split-pane');
103
+ expect(getComputedStyle(root.querySelector('[slot="pane-1"]')).color).toBe('rgb(255, 255, 255)');
104
+ expect(getComputedStyle(pane).backgroundColor).not.toBe('rgb(255, 255, 255)');
105
+ expect(getComputedStyle(container).color).toBe('rgb(255, 255, 255)');
106
+ });
107
+ });
@@ -0,0 +1,108 @@
1
+ :host {
2
+ display: block;
3
+ height: 100%;
4
+ min-height: 0;
5
+ --bs-split-pane-radius: var(--bs-border-radius-100);
6
+ --bs-split-pane-bg: var(--bs-surface-base);
7
+ --bs-split-pane-color: var(--bs-text-default);
8
+ /* Pane sizes below are the literal values from the Figma "Split pane" variants (333 / 106). */
9
+ --bs-split-pane-first-size: 333px;
10
+ --bs-split-pane-collapsed-size: 106px;
11
+ --bs-split-pane-min-size: 96px;
12
+ --bs-split-pane-divider-size: var(--bs-spacing-75);
13
+ --bs-split-pane-divider-bg: var(--bs-surface-container);
14
+ --bs-split-pane-divider-thumb: var(--bs-border-neutral-container);
15
+ --bs-split-pane-divider-thumb-active: var(--bs-border-neutral-hover);
16
+ --bs-split-pane-divider-thumb-length: 250px;
17
+ --bs-split-pane-border: var(--bs-border-neutral-container);
18
+ --bs-split-pane-focus-ring: var(--bs-border-neutral-focus);
19
+ }
20
+
21
+ .bs-split-pane {
22
+ box-sizing: border-box;
23
+ display: flex;
24
+ width: 100%;
25
+ height: 100%;
26
+ overflow: clip;
27
+ border-radius: var(--bs-split-pane-radius);
28
+ background: var(--bs-split-pane-bg);
29
+ color: var(--bs-split-pane-color);
30
+ }
31
+
32
+ .bs-split-pane--vertical {
33
+ flex-direction: column;
34
+ }
35
+
36
+ .bs-split-pane__pane {
37
+ box-sizing: border-box;
38
+ min-width: 0;
39
+ min-height: 0;
40
+ overflow: auto;
41
+ background: var(--bs-split-pane-bg);
42
+ }
43
+
44
+ .bs-split-pane--horizontal > .bs-split-pane__pane {
45
+ min-width: min(var(--bs-split-pane-min-size), 100%);
46
+ }
47
+
48
+ .bs-split-pane--vertical > .bs-split-pane__pane {
49
+ min-height: min(var(--bs-split-pane-min-size), 100%);
50
+ }
51
+
52
+ .bs-split-pane__divider {
53
+ position: relative;
54
+ flex: 0 0 var(--bs-split-pane-divider-size);
55
+ display: flex;
56
+ background: var(--bs-split-pane-divider-bg);
57
+ touch-action: none;
58
+ outline: none;
59
+ }
60
+
61
+ .bs-split-pane--horizontal > .bs-split-pane__divider {
62
+ cursor: col-resize;
63
+ flex-direction: column;
64
+ }
65
+
66
+ .bs-split-pane--vertical > .bs-split-pane__divider {
67
+ cursor: row-resize;
68
+ flex-direction: row;
69
+ }
70
+
71
+ .bs-split-pane__divider--static {
72
+ cursor: default;
73
+ pointer-events: none;
74
+ }
75
+
76
+ .bs-split-pane__thumb {
77
+ display: block;
78
+ border-radius: var(--bs-border-radius-full);
79
+ background: var(--bs-split-pane-divider-thumb);
80
+ transition: background-color var(--bs-duration-fast) var(--bs-easing-standard);
81
+ }
82
+
83
+ .bs-split-pane--horizontal > .bs-split-pane__divider > .bs-split-pane__thumb {
84
+ width: 100%;
85
+ height: min(var(--bs-split-pane-divider-thumb-length), 100%);
86
+ }
87
+
88
+ .bs-split-pane--vertical > .bs-split-pane__divider > .bs-split-pane__thumb {
89
+ height: 100%;
90
+ width: min(var(--bs-split-pane-divider-thumb-length), 100%);
91
+ }
92
+
93
+ .bs-split-pane__divider:hover > .bs-split-pane__thumb,
94
+ .bs-split-pane__divider--active > .bs-split-pane__thumb,
95
+ .bs-split-pane__divider:focus-visible > .bs-split-pane__thumb {
96
+ background: var(--bs-split-pane-divider-thumb-active);
97
+ }
98
+
99
+ .bs-split-pane__divider:focus-visible {
100
+ outline: 2px solid var(--bs-split-pane-focus-ring);
101
+ outline-offset: 0;
102
+ }
103
+
104
+ @media (prefers-reduced-motion: reduce) {
105
+ .bs-split-pane__thumb {
106
+ transition: none;
107
+ }
108
+ }
@@ -0,0 +1,404 @@
1
+ import { h } from "@stencil/core";
2
+ const MAX_PANES = 3;
3
+ const DEFAULT_MIN_SIZE = 96;
4
+ /**
5
+ * A resizable layout of two or three panes separated by draggable, keyboard-operable dividers
6
+ * (the WAI-ARIA "window splitter" pattern). Content goes into the named slots `pane-1`, `pane-2`
7
+ * and (optionally) `pane-3`; the pane count follows which slots have content.
8
+ *
9
+ * `orientation="horizontal"` places panes side by side (vertical dividers); `"vertical"` stacks
10
+ * them (horizontal dividers). The first pane has a fixed size (`--bs-split-pane-first-size`) that
11
+ * the user can change by dragging; the last pane absorbs the remaining space. `collapsed` shrinks
12
+ * the first pane to a narrow rail (`--bs-split-pane-collapsed-size`) -- the component reflects the
13
+ * attribute so slotted content can switch to its compact rendering (e.g. icon-only list items).
14
+ *
15
+ * ## When to use
16
+ * - Master/detail layouts: a navigation or list pane next to one or two detail panes.
17
+ *
18
+ * ## When not to use
19
+ * - A temporary overlay panel (use `bs-side-panel`).
20
+ * - A fixed, non-resizable two-column layout (plain CSS grid; or set `resizable="false"` to keep
21
+ * the dividers purely visual).
22
+ *
23
+ * @slot pane-1 - The first pane (the one that collapses).
24
+ * @slot pane-2 - The second pane.
25
+ * @slot pane-3 - Optional third pane.
26
+ * @part container - The flex wrapper around all panes and dividers.
27
+ * @part pane - Every pane wrapper (`pane-1`, `pane-2`, `pane-3` are also exposed as separate parts).
28
+ * @part divider - Every divider (the focusable `role="separator"` element).
29
+ * @part divider-thumb - The visible thumb on a divider.
30
+ * @prop --bs-split-pane-radius - Corner radius of the container. Aliased to `--bs-border-radius-100`.
31
+ * @prop --bs-split-pane-bg - Pane background. Aliased to `--bs-surface-base`.
32
+ * @prop --bs-split-pane-color - Text colour inherited by slotted content. Aliased to `--bs-text-default`.
33
+ * @prop --bs-split-pane-first-size - Initial size of the first pane along the layout axis. Defaults to `333px` (Figma).
34
+ * @prop --bs-split-pane-collapsed-size - Size of the first pane while `collapsed`. Defaults to `106px` (Figma).
35
+ * @prop --bs-split-pane-min-size - Smallest size a resized pane may take. Defaults to `96px`.
36
+ * @prop --bs-split-pane-divider-size - Thickness of a divider. Aliased to `--bs-spacing-75`.
37
+ * @prop --bs-split-pane-divider-bg - Divider track colour. Aliased to `--bs-surface-container`.
38
+ * @prop --bs-split-pane-divider-thumb - Divider thumb colour. Aliased to `--bs-border-neutral-container`.
39
+ * @prop --bs-split-pane-divider-thumb-active - Divider thumb colour on hover, focus and drag. Aliased to `--bs-border-neutral-hover`.
40
+ * @prop --bs-split-pane-divider-thumb-length - Length of the divider thumb. Defaults to `250px` (Figma).
41
+ * @prop --bs-split-pane-border - Border between the first pane and the rest when dividers are not resizable. Aliased to `--bs-border-neutral-container`.
42
+ * @prop --bs-split-pane-focus-ring - Divider focus ring colour. Aliased to `--bs-border-neutral-focus`.
43
+ */
44
+ export class BsSplitPane {
45
+ el;
46
+ /** `horizontal` = panes side by side, `vertical` = panes stacked. */
47
+ orientation = 'horizontal';
48
+ /** Collapses the first pane to a narrow rail. Mutable: the Enter key on the first divider toggles it. */
49
+ collapsed = false;
50
+ /** Whether the dividers can be dragged / operated by keyboard. `false` keeps them as visual separators. */
51
+ resizable = true;
52
+ /** Accessible name of each divider. */
53
+ dividerLabel = 'Resize panes';
54
+ /** Pixels moved per arrow-key press (Shift multiplies by 4). */
55
+ step = 16;
56
+ /** Fires after a resize (pointer release or key press) with the pixel size of every pane except the last. */
57
+ bsResize;
58
+ /** Fires when `collapsed` changes through user interaction. */
59
+ bsCollapsedChange;
60
+ paneCount = 2;
61
+ sizes = [];
62
+ draggingIndex = -1;
63
+ observer;
64
+ dragStart;
65
+ /** Toggles `collapsed` and emits `bsCollapsedChange`. */
66
+ async toggleCollapsed() {
67
+ this.collapsed = !this.collapsed;
68
+ this.bsCollapsedChange.emit(this.collapsed);
69
+ }
70
+ componentWillLoad() {
71
+ this.countPanes();
72
+ }
73
+ connectedCallback() {
74
+ this.observer = new MutationObserver(() => this.countPanes());
75
+ this.observer.observe(this.el, { childList: true, attributes: true, attributeFilter: ['slot'], subtree: false });
76
+ }
77
+ disconnectedCallback() {
78
+ this.observer?.disconnect();
79
+ }
80
+ countPanes() {
81
+ let count = 1;
82
+ for (let i = 1; i <= MAX_PANES; i++) {
83
+ if (this.el.querySelector(`:scope > [slot="pane-${i}"]`))
84
+ count = i;
85
+ }
86
+ this.paneCount = Math.max(count, 1);
87
+ }
88
+ isRtl() {
89
+ return this.orientation === 'horizontal' && getComputedStyle(this.el).direction === 'rtl';
90
+ }
91
+ axisSize(pane) {
92
+ const rect = pane.getBoundingClientRect();
93
+ return this.orientation === 'horizontal' ? rect.width : rect.height;
94
+ }
95
+ minSize() {
96
+ const raw = parseFloat(getComputedStyle(this.el).getPropertyValue('--bs-split-pane-min-size'));
97
+ return Number.isFinite(raw) ? raw : DEFAULT_MIN_SIZE;
98
+ }
99
+ /** Largest size pane `index` may take: leave `minSize` for each pane after it, and the dividers. */
100
+ maxSize(index) {
101
+ const container = this.el.shadowRoot.querySelector('.bs-split-pane');
102
+ const total = this.axisSize(container);
103
+ const dividers = Array.from(container.querySelectorAll('.bs-split-pane__divider'));
104
+ const dividerTotal = dividers.reduce((sum, d) => sum + this.axisSize(d), 0);
105
+ const before = Array.from(container.querySelectorAll('.bs-split-pane__pane'))
106
+ .slice(0, index)
107
+ .reduce((sum, p) => sum + this.axisSize(p), 0);
108
+ const after = (this.paneCount - 1 - index) * this.minSize();
109
+ return Math.max(this.minSize(), total - dividerTotal - before - after);
110
+ }
111
+ paneEl(index) {
112
+ return this.el.shadowRoot.querySelectorAll('.bs-split-pane__pane')[index];
113
+ }
114
+ setSize(index, value) {
115
+ const clamped = Math.min(Math.max(value, this.minSize()), this.maxSize(index));
116
+ const next = this.sizes.slice();
117
+ next[index] = clamped;
118
+ this.sizes = next;
119
+ }
120
+ emitResize() {
121
+ const sizes = [];
122
+ // Prefer the size just committed to state: the DOM hasn't re-rendered yet when this runs.
123
+ for (let i = 0; i < this.paneCount - 1; i++)
124
+ sizes.push(Math.round(this.sizes[i] ?? this.axisSize(this.paneEl(i))));
125
+ this.bsResize.emit(sizes);
126
+ }
127
+ onPointerDown = (index) => (ev) => {
128
+ if (!this.resizable || (index === 0 && this.collapsed))
129
+ return;
130
+ ev.preventDefault();
131
+ ev.currentTarget.setPointerCapture(ev.pointerId);
132
+ this.dragStart = {
133
+ pointer: this.orientation === 'horizontal' ? ev.clientX : ev.clientY,
134
+ size: this.axisSize(this.paneEl(index)),
135
+ index,
136
+ };
137
+ this.draggingIndex = index;
138
+ };
139
+ onPointerMove = (ev) => {
140
+ if (!this.dragStart)
141
+ return;
142
+ const pointer = this.orientation === 'horizontal' ? ev.clientX : ev.clientY;
143
+ const delta = (pointer - this.dragStart.pointer) * (this.isRtl() ? -1 : 1);
144
+ this.setSize(this.dragStart.index, this.dragStart.size + delta);
145
+ };
146
+ onPointerUp = (ev) => {
147
+ if (!this.dragStart)
148
+ return;
149
+ ev.currentTarget.releasePointerCapture?.(ev.pointerId);
150
+ this.dragStart = undefined;
151
+ this.draggingIndex = -1;
152
+ this.emitResize();
153
+ };
154
+ onKeyDown = (index) => (ev) => {
155
+ if (!this.resizable)
156
+ return;
157
+ const horizontal = this.orientation === 'horizontal';
158
+ const grow = horizontal ? (this.isRtl() ? 'ArrowLeft' : 'ArrowRight') : 'ArrowDown';
159
+ const shrink = horizontal ? (this.isRtl() ? 'ArrowRight' : 'ArrowLeft') : 'ArrowUp';
160
+ const amount = this.step * (ev.shiftKey ? 4 : 1);
161
+ const current = this.axisSize(this.paneEl(index));
162
+ let handled = true;
163
+ if (ev.key === 'Enter' && index === 0) {
164
+ void this.toggleCollapsed();
165
+ }
166
+ else if (this.collapsed && index === 0) {
167
+ handled = false;
168
+ }
169
+ else if (ev.key === grow) {
170
+ this.setSize(index, current + amount);
171
+ }
172
+ else if (ev.key === shrink) {
173
+ this.setSize(index, current - amount);
174
+ }
175
+ else if (ev.key === 'Home') {
176
+ this.setSize(index, this.minSize());
177
+ }
178
+ else if (ev.key === 'End') {
179
+ this.setSize(index, this.maxSize(index));
180
+ }
181
+ else {
182
+ handled = false;
183
+ }
184
+ if (!handled)
185
+ return;
186
+ ev.preventDefault();
187
+ this.emitResize();
188
+ };
189
+ paneStyle(index) {
190
+ const last = index === this.paneCount - 1;
191
+ if (index === 0 && this.collapsed && this.paneCount > 1) {
192
+ return { flex: '0 0 var(--bs-split-pane-collapsed-size)' };
193
+ }
194
+ const size = this.sizes[index];
195
+ if (size !== undefined && !last)
196
+ return { flex: `0 0 ${size}px` };
197
+ if (index === 0 && !last)
198
+ return { flex: '0 0 var(--bs-split-pane-first-size)' };
199
+ return { flex: '1 1 0' };
200
+ }
201
+ percentFor(index) {
202
+ const container = this.el.shadowRoot?.querySelector('.bs-split-pane');
203
+ const pane = this.el.shadowRoot?.querySelectorAll('.bs-split-pane__pane')[index];
204
+ if (!container || !pane)
205
+ return 0;
206
+ const total = this.axisSize(container);
207
+ return total ? Math.round((this.axisSize(pane) / total) * 100) : 0;
208
+ }
209
+ render() {
210
+ const dividerOrientation = this.orientation === 'horizontal' ? 'vertical' : 'horizontal';
211
+ const nodes = [];
212
+ for (let i = 0; i < this.paneCount; i++) {
213
+ nodes.push(h("div", { part: `pane pane-${i + 1}`, class: `bs-split-pane__pane bs-split-pane__pane--${i + 1}`, style: this.paneStyle(i) }, h("slot", { name: `pane-${i + 1}` })));
214
+ if (i < this.paneCount - 1) {
215
+ nodes.push(h("div", { part: "divider", class: { 'bs-split-pane__divider': true, 'bs-split-pane__divider--active': this.draggingIndex === i, 'bs-split-pane__divider--static': !this.resizable }, role: "separator", "aria-orientation": dividerOrientation, "aria-label": this.dividerLabel, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": this.percentFor(i), tabindex: this.resizable ? 0 : undefined, onPointerDown: this.onPointerDown(i), onPointerMove: this.onPointerMove, onPointerUp: this.onPointerUp, onPointerCancel: this.onPointerUp, onKeyDown: this.onKeyDown(i) }, h("span", { part: "divider-thumb", class: "bs-split-pane__thumb" })));
216
+ }
217
+ }
218
+ return (h("div", { key: '67d978089645337e56106163c6d6ac38fd6d063c', part: "container", class: `bs-split-pane bs-split-pane--${this.orientation}` }, nodes));
219
+ }
220
+ static get is() { return "bs-split-pane"; }
221
+ static get encapsulation() { return "shadow"; }
222
+ static get originalStyleUrls() {
223
+ return {
224
+ "$": ["bs-split-pane.css"]
225
+ };
226
+ }
227
+ static get styleUrls() {
228
+ return {
229
+ "$": ["bs-split-pane.css"]
230
+ };
231
+ }
232
+ static get properties() {
233
+ return {
234
+ "orientation": {
235
+ "type": "string",
236
+ "mutable": false,
237
+ "complexType": {
238
+ "original": "BsSplitPaneOrientation",
239
+ "resolved": "\"horizontal\" | \"vertical\"",
240
+ "references": {
241
+ "BsSplitPaneOrientation": {
242
+ "location": "local",
243
+ "path": "/home/runner/work/eg-brandsync-storybook/eg-brandsync-storybook/packages/wc/src/components/bs-split-pane/bs-split-pane.tsx",
244
+ "id": "src/components/bs-split-pane/bs-split-pane.tsx::BsSplitPaneOrientation"
245
+ }
246
+ }
247
+ },
248
+ "required": false,
249
+ "optional": false,
250
+ "docs": {
251
+ "tags": [],
252
+ "text": "`horizontal` = panes side by side, `vertical` = panes stacked."
253
+ },
254
+ "getter": false,
255
+ "setter": false,
256
+ "reflect": true,
257
+ "attribute": "orientation",
258
+ "defaultValue": "'horizontal'"
259
+ },
260
+ "collapsed": {
261
+ "type": "boolean",
262
+ "mutable": true,
263
+ "complexType": {
264
+ "original": "boolean",
265
+ "resolved": "boolean",
266
+ "references": {}
267
+ },
268
+ "required": false,
269
+ "optional": false,
270
+ "docs": {
271
+ "tags": [],
272
+ "text": "Collapses the first pane to a narrow rail. Mutable: the Enter key on the first divider toggles it."
273
+ },
274
+ "getter": false,
275
+ "setter": false,
276
+ "reflect": true,
277
+ "attribute": "collapsed",
278
+ "defaultValue": "false"
279
+ },
280
+ "resizable": {
281
+ "type": "boolean",
282
+ "mutable": false,
283
+ "complexType": {
284
+ "original": "boolean",
285
+ "resolved": "boolean",
286
+ "references": {}
287
+ },
288
+ "required": false,
289
+ "optional": false,
290
+ "docs": {
291
+ "tags": [],
292
+ "text": "Whether the dividers can be dragged / operated by keyboard. `false` keeps them as visual separators."
293
+ },
294
+ "getter": false,
295
+ "setter": false,
296
+ "reflect": false,
297
+ "attribute": "resizable",
298
+ "defaultValue": "true"
299
+ },
300
+ "dividerLabel": {
301
+ "type": "string",
302
+ "mutable": false,
303
+ "complexType": {
304
+ "original": "string",
305
+ "resolved": "string",
306
+ "references": {}
307
+ },
308
+ "required": false,
309
+ "optional": false,
310
+ "docs": {
311
+ "tags": [],
312
+ "text": "Accessible name of each divider."
313
+ },
314
+ "getter": false,
315
+ "setter": false,
316
+ "reflect": false,
317
+ "attribute": "divider-label",
318
+ "defaultValue": "'Resize panes'"
319
+ },
320
+ "step": {
321
+ "type": "number",
322
+ "mutable": false,
323
+ "complexType": {
324
+ "original": "number",
325
+ "resolved": "number",
326
+ "references": {}
327
+ },
328
+ "required": false,
329
+ "optional": false,
330
+ "docs": {
331
+ "tags": [],
332
+ "text": "Pixels moved per arrow-key press (Shift multiplies by 4)."
333
+ },
334
+ "getter": false,
335
+ "setter": false,
336
+ "reflect": false,
337
+ "attribute": "step",
338
+ "defaultValue": "16"
339
+ }
340
+ };
341
+ }
342
+ static get states() {
343
+ return {
344
+ "paneCount": {},
345
+ "sizes": {},
346
+ "draggingIndex": {}
347
+ };
348
+ }
349
+ static get events() {
350
+ return [{
351
+ "method": "bsResize",
352
+ "name": "bsResize",
353
+ "bubbles": true,
354
+ "cancelable": true,
355
+ "composed": true,
356
+ "docs": {
357
+ "tags": [],
358
+ "text": "Fires after a resize (pointer release or key press) with the pixel size of every pane except the last."
359
+ },
360
+ "complexType": {
361
+ "original": "number[]",
362
+ "resolved": "number[]",
363
+ "references": {}
364
+ }
365
+ }, {
366
+ "method": "bsCollapsedChange",
367
+ "name": "bsCollapsedChange",
368
+ "bubbles": true,
369
+ "cancelable": true,
370
+ "composed": true,
371
+ "docs": {
372
+ "tags": [],
373
+ "text": "Fires when `collapsed` changes through user interaction."
374
+ },
375
+ "complexType": {
376
+ "original": "boolean",
377
+ "resolved": "boolean",
378
+ "references": {}
379
+ }
380
+ }];
381
+ }
382
+ static get methods() {
383
+ return {
384
+ "toggleCollapsed": {
385
+ "complexType": {
386
+ "signature": "() => Promise<void>",
387
+ "parameters": [],
388
+ "references": {
389
+ "Promise": {
390
+ "location": "global",
391
+ "id": "global::Promise"
392
+ }
393
+ },
394
+ "return": "Promise<void>"
395
+ },
396
+ "docs": {
397
+ "text": "Toggles `collapsed` and emits `bsCollapsedChange`.",
398
+ "tags": []
399
+ }
400
+ }
401
+ };
402
+ }
403
+ static get elementRef() { return "el"; }
404
+ }
@@ -0,0 +1,47 @@
1
+ import { html } from "lit";
2
+ import { componentDescription } from "../../stories-utils";
3
+ const list = html `
4
+ <div style="padding: var(--bs-spacing-300)">
5
+ <strong>Pane title</strong>
6
+ <div>Description</div>
7
+ </div>
8
+ `;
9
+ const detail = (title) => html `
10
+ <div style="padding: var(--bs-spacing-300)">
11
+ <strong>${title}</strong>
12
+ <div>Description</div>
13
+ <p>Title<br /><strong>Details</strong></p>
14
+ <p>Title<br /><strong>Details</strong></p>
15
+ </div>
16
+ `;
17
+ const meta = {
18
+ title: 'Components/bs-split-pane',
19
+ parameters: { docs: { description: { component: componentDescription('bs-split-pane') } } },
20
+ render: args => html `
21
+ <div style="height: 480px; border: 1px solid var(--bs-border-neutral-container)">
22
+ <bs-split-pane orientation=${args.orientation} ?collapsed=${args.collapsed} .resizable=${args.resizable}>
23
+ <div slot="pane-1">${list}</div>
24
+ <div slot="pane-2">${detail('Detail pane')}</div>
25
+ ${args.panes === 3 ? html `<div slot="pane-3">${detail('Second detail pane')}</div>` : ''}
26
+ </bs-split-pane>
27
+ </div>
28
+ `,
29
+ argTypes: {
30
+ orientation: { control: 'inline-radio', options: ['horizontal', 'vertical'] },
31
+ collapsed: { control: 'boolean' },
32
+ resizable: { control: 'boolean' },
33
+ panes: { control: 'inline-radio', options: [2, 3] },
34
+ },
35
+ args: { orientation: 'horizontal', collapsed: false, resizable: true, panes: 3 },
36
+ };
37
+ export default meta;
38
+ export const Horizontal = {};
39
+ export const HorizontalCollapsed = { args: { collapsed: true } };
40
+ export const Vertical = { args: { orientation: 'vertical' } };
41
+ export const TwoPanes = {
42
+ args: {
43
+ panes: 2,
44
+ orientation: 'vertical',
45
+ },
46
+ };
47
+ export const NotResizable = { args: { resizable: false } };