@brandsync/wc 0.0.10 → 0.0.12
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.
- package/custom-elements.json +3584 -508
- package/dist/brandsync-wc/brandsync-wc.css +20 -0
- package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
- package/dist/brandsync-wc/{p-b1e1b2d6.entry.js → p-09aa03d1.entry.js} +1 -1
- package/dist/brandsync-wc/p-0eee5477.entry.js +1 -0
- package/dist/brandsync-wc/p-0fa017ce.entry.js +1 -0
- package/dist/brandsync-wc/p-12ec9e92.entry.js +1 -0
- package/dist/brandsync-wc/{p-3dacae70.entry.js → p-1900f6ce.entry.js} +1 -1
- package/dist/brandsync-wc/{p-575ce905.entry.js → p-1adc59be.entry.js} +1 -1
- package/dist/brandsync-wc/p-1c6fa697.entry.js +1 -0
- package/dist/brandsync-wc/{p-dd747a12.entry.js → p-1cf715aa.entry.js} +1 -1
- package/dist/brandsync-wc/{p-8a78d6ea.entry.js → p-20dbc6a1.entry.js} +1 -1
- package/dist/brandsync-wc/{p-a34f460d.entry.js → p-23457a21.entry.js} +1 -1
- package/dist/brandsync-wc/p-266f5dde.entry.js +1 -0
- package/dist/brandsync-wc/p-2a65aabb.entry.js +1 -0
- package/dist/brandsync-wc/{p-8d12ed96.entry.js → p-2c51d738.entry.js} +1 -1
- package/dist/brandsync-wc/p-3b31f7c7.entry.js +1 -0
- package/dist/brandsync-wc/p-46ddc8e1.entry.js +1 -0
- package/dist/brandsync-wc/p-56c66448.entry.js +1 -0
- package/dist/brandsync-wc/{p-18af02df.entry.js → p-57fdbb76.entry.js} +1 -1
- package/dist/brandsync-wc/{p-7776b57b.entry.js → p-64e2a7d7.entry.js} +1 -1
- package/dist/brandsync-wc/{p-805644e4.entry.js → p-6e854e92.entry.js} +1 -1
- package/dist/brandsync-wc/p-72a33f88.entry.js +1 -0
- package/dist/brandsync-wc/p-8049f9f2.entry.js +1 -0
- package/dist/brandsync-wc/{p-d682675e.entry.js → p-88a0abee.entry.js} +1 -1
- package/dist/brandsync-wc/p-8b662ee3.entry.js +1 -0
- package/dist/brandsync-wc/{p-94ed898a.entry.js → p-8ded1eb6.entry.js} +1 -1
- package/dist/brandsync-wc/{p-nLORuTUY.js → p-DST5-cTx.js} +2 -2
- package/dist/brandsync-wc/p-a5b15061.entry.js +1 -0
- package/dist/brandsync-wc/{p-30a0e168.entry.js → p-aba300a9.entry.js} +1 -1
- package/dist/brandsync-wc/p-b24a980b.entry.js +1 -0
- package/dist/brandsync-wc/{p-96f374be.entry.js → p-b289450a.entry.js} +1 -1
- package/dist/brandsync-wc/{p-880ea3f8.entry.js → p-b8a2f882.entry.js} +1 -1
- package/dist/brandsync-wc/p-c320b6b4.entry.js +1 -0
- package/dist/brandsync-wc/{p-1515498e.entry.js → p-d4e3ca77.entry.js} +1 -1
- package/dist/brandsync-wc/{p-ce0914a7.entry.js → p-dd09d335.entry.js} +1 -1
- package/dist/brandsync-wc/p-ef8522b5.entry.js +1 -0
- package/dist/brandsync-wc/p-f04db1b0.entry.js +1 -0
- package/dist/cjs/brandsync-wc.cjs.js +2 -2
- package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +3 -2
- package/dist/cjs/bs-ai-greeting.cjs.entry.js +2 -2
- package/dist/cjs/bs-ai-thinking.cjs.entry.js +2 -2
- package/dist/cjs/bs-attachment-list.cjs.entry.js +2 -2
- package/dist/cjs/bs-attachment.cjs.entry.js +3 -3
- package/dist/cjs/bs-badge.cjs.entry.js +1 -1
- package/dist/cjs/bs-button-skeleton.cjs.entry.js +2 -2
- package/dist/cjs/bs-button.cjs.entry.js +3 -3
- package/dist/cjs/bs-card.cjs.entry.js +1 -1
- package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-header.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +2 -2
- package/dist/cjs/bs-checkbox.cjs.entry.js +94 -0
- package/dist/cjs/bs-composer-status-banner.cjs.entry.js +14 -2
- package/dist/cjs/bs-composer.cjs.entry.js +37 -4
- package/dist/cjs/bs-data-table.cjs.entry.js +3 -3
- package/dist/cjs/bs-icon-button.cjs.entry.js +40 -0
- package/dist/cjs/bs-inline-tab.cjs.entry.js +69 -0
- package/dist/cjs/bs-input.cjs.entry.js +3 -3
- package/dist/cjs/bs-logo.cjs.entry.js +165 -0
- package/dist/cjs/bs-menu_2.cjs.entry.js +3 -3
- package/dist/cjs/bs-modal.cjs.entry.js +1 -1
- package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +104 -0
- package/dist/cjs/bs-navigation-drawer.cjs.entry.js +81 -0
- package/dist/cjs/bs-navigation-header.cjs.entry.js +44 -0
- package/dist/cjs/bs-radio.cjs.entry.js +49 -0
- package/dist/cjs/bs-slider.cjs.entry.js +191 -0
- package/dist/cjs/bs-source-link.cjs.entry.js +3 -3
- package/dist/cjs/bs-switch.cjs.entry.js +57 -0
- package/dist/cjs/bs-tab.cjs.entry.js +80 -0
- package/dist/cjs/bs-tabs.cjs.entry.js +39 -0
- package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
- package/dist/cjs/{index-CVh-sqA_.js → index-B3sdhEGk.js} +74 -2
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +14 -2
- package/dist/collection/components/bs-ai-chatbot/bs-ai-chatbot.stories.js +26 -11
- package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +2 -1
- package/dist/collection/components/bs-ai-greeting/bs-ai-greeting.js +1 -1
- package/dist/collection/components/bs-ai-thinking/bs-ai-thinking.js +1 -1
- package/dist/collection/components/bs-attachment/bs-attachment.css +12 -33
- package/dist/collection/components/bs-attachment/bs-attachment.js +4 -10
- package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
- package/dist/collection/components/bs-button/{bs-button.cmp.test.js → bs-button/bs-button.cmp.test.js} +26 -0
- package/dist/collection/components/bs-button/{bs-button.css → bs-button/bs-button.css} +57 -6
- package/dist/collection/components/bs-button/{bs-button.js → bs-button/bs-button.js} +10 -5
- package/dist/collection/components/bs-button/{bs-button.stories.js → bs-button/bs-button.stories.js} +2 -27
- package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.cmp.test.js +83 -0
- package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.css +346 -0
- package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +185 -0
- package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.stories.js +74 -0
- package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +3 -3
- package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.js +1 -1
- package/dist/collection/components/bs-chatbot-header/bs-chatbot-header.js +1 -1
- package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.js +1 -1
- package/dist/collection/components/bs-chatbot-sources-drawer/bs-chatbot-sources-drawer.js +1 -1
- package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +1 -1
- package/dist/collection/components/bs-checkbox/bs-checkbox.cmp.test.js +117 -0
- package/dist/collection/components/bs-checkbox/bs-checkbox.css +199 -0
- package/dist/collection/components/bs-checkbox/bs-checkbox.js +265 -0
- package/dist/collection/components/bs-checkbox/bs-checkbox.stories.js +65 -0
- package/dist/collection/components/bs-composer/bs-composer.cmp.test.js +48 -7
- package/dist/collection/components/bs-composer/bs-composer.css +15 -0
- package/dist/collection/components/bs-composer/bs-composer.js +38 -4
- package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.cmp.test.js +47 -1
- package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +20 -1
- package/dist/collection/components/bs-data-table/bs-data-table.js +2 -2
- package/dist/collection/components/bs-input/bs-input.js +2 -2
- package/dist/collection/components/bs-logo/brandsync-logo-full-dark.js +44 -0
- package/dist/collection/components/bs-logo/brandsync-logo-full-light.js +40 -0
- package/dist/collection/components/bs-logo/brandsync-logo-mark.js +17 -0
- package/dist/collection/components/bs-logo/bs-logo.cmp.test.js +113 -0
- package/dist/collection/components/bs-logo/bs-logo.css +79 -0
- package/dist/collection/components/bs-logo/bs-logo.js +193 -0
- package/dist/collection/components/bs-logo/bs-logo.stories.js +69 -0
- package/dist/collection/components/bs-menu/bs-menu.js +1 -1
- package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
- package/dist/collection/components/bs-radio/bs-radio.cmp.test.js +76 -0
- package/dist/collection/components/bs-radio/bs-radio.css +164 -0
- package/dist/collection/components/bs-radio/bs-radio.js +170 -0
- package/dist/collection/components/bs-radio/bs-radio.stories.js +56 -0
- package/dist/collection/components/bs-slider/bs-slider.cmp.test.js +139 -0
- package/dist/collection/components/bs-slider/bs-slider.css +409 -0
- package/dist/collection/components/bs-slider/bs-slider.js +499 -0
- package/dist/collection/components/bs-slider/bs-slider.stories.js +70 -0
- package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
- package/dist/collection/components/bs-switch/bs-switch.cmp.test.js +71 -0
- package/dist/collection/components/bs-switch/bs-switch.css +196 -0
- package/dist/collection/components/bs-switch/bs-switch.js +185 -0
- package/dist/collection/components/bs-switch/bs-switch.stories.js +60 -0
- package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.cmp.test.js +104 -0
- package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.css +163 -0
- package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +192 -0
- package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.stories.js +95 -0
- package/dist/collection/components/bs-tab/bs-tab/bs-tab.cmp.test.js +120 -0
- package/dist/collection/components/bs-tab/bs-tab/bs-tab.css +216 -0
- package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +232 -0
- package/dist/collection/components/bs-tab/bs-tab/bs-tab.stories.js +138 -0
- package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.cmp.test.js +61 -0
- package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.css +39 -0
- package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +133 -0
- package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.stories.js +39 -0
- package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
- package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.js +131 -0
- package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.css +257 -0
- package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +253 -0
- package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.js +202 -0
- package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.cmp.test.js +172 -0
- package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.css +325 -0
- package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +314 -0
- package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.stories.js +78 -0
- package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.cmp.test.js +77 -0
- package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.css +106 -0
- package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +188 -0
- package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.js +189 -0
- package/dist/components/bs-ai-disclaimer.js +1 -1
- package/dist/components/bs-ai-greeting.js +1 -1
- package/dist/components/bs-ai-thinking.js +1 -1
- package/dist/components/bs-attachment-list.js +1 -1
- package/dist/components/bs-attachment.js +1 -1
- package/dist/components/bs-badge.js +1 -1
- package/dist/components/bs-button-skeleton.js +1 -1
- package/dist/components/bs-button.js +1 -1
- package/dist/components/bs-card.js +1 -1
- package/dist/components/bs-chatbot-feedback.js +1 -1
- package/dist/components/bs-chatbot-header.js +1 -1
- package/dist/components/bs-chatbot-response-action.js +1 -1
- package/dist/components/bs-chatbot-sources-drawer.js +1 -1
- package/dist/components/bs-chatbot-suggestion-button.js +1 -1
- package/dist/components/bs-checkbox.d.ts +11 -0
- package/dist/components/bs-checkbox.js +1 -0
- package/dist/components/bs-composer-status-banner.js +1 -1
- package/dist/components/bs-composer.js +1 -1
- package/dist/components/bs-data-table.js +1 -1
- package/dist/components/bs-icon-button.d.ts +11 -0
- package/dist/components/bs-icon-button.js +1 -0
- package/dist/components/bs-inline-tab.d.ts +11 -0
- package/dist/components/bs-inline-tab.js +1 -0
- package/dist/components/bs-input.js +1 -1
- package/dist/components/bs-logo.d.ts +11 -0
- package/dist/components/bs-logo.js +1 -0
- package/dist/components/bs-menu-item.js +1 -1
- package/dist/components/bs-menu.js +1 -1
- package/dist/components/bs-modal.js +1 -1
- package/dist/components/bs-navigation-drawer-item.d.ts +11 -0
- package/dist/components/bs-navigation-drawer-item.js +1 -0
- package/dist/components/bs-navigation-drawer.d.ts +11 -0
- package/dist/components/bs-navigation-drawer.js +1 -0
- package/dist/components/bs-navigation-header.d.ts +11 -0
- package/dist/components/bs-navigation-header.js +1 -0
- package/dist/components/bs-radio.d.ts +11 -0
- package/dist/components/bs-radio.js +1 -0
- package/dist/components/bs-slider.d.ts +11 -0
- package/dist/components/bs-slider.js +1 -0
- package/dist/components/bs-source-link.js +1 -1
- package/dist/components/bs-switch.d.ts +11 -0
- package/dist/components/bs-switch.js +1 -0
- package/dist/components/bs-tab.d.ts +11 -0
- package/dist/components/bs-tab.js +1 -0
- package/dist/components/bs-tabs.d.ts +11 -0
- package/dist/components/bs-tabs.js +1 -0
- package/dist/components/bs-tooltip.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/p-BAOJc0V0.js +1 -0
- package/dist/components/{p-BpvhHQSw.js → p-Be1Pfcnm.js} +1 -1
- package/dist/components/{p-Cz2nfz2j.js → p-BqYyMGrB.js} +1 -1
- package/dist/components/p-CaWqTQBZ.js +1 -0
- package/dist/components/{p-DndQiCMP.js → p-DivZLd6i.js} +1 -1
- package/dist/components/{p-DHbUF0g6.js → p-xfx69LQx.js} +1 -1
- package/dist/esm/brandsync-wc.js +3 -3
- package/dist/esm/bs-ai-disclaimer.entry.js +3 -2
- package/dist/esm/bs-ai-greeting.entry.js +2 -2
- package/dist/esm/bs-ai-thinking.entry.js +2 -2
- package/dist/esm/bs-attachment-list.entry.js +2 -2
- package/dist/esm/bs-attachment.entry.js +3 -3
- package/dist/esm/bs-badge.entry.js +1 -1
- package/dist/esm/bs-button-skeleton.entry.js +2 -2
- package/dist/esm/bs-button.entry.js +3 -3
- package/dist/esm/bs-card.entry.js +1 -1
- package/dist/esm/bs-chatbot-feedback.entry.js +2 -2
- package/dist/esm/bs-chatbot-header.entry.js +2 -2
- package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
- package/dist/esm/bs-chatbot-sources-drawer.entry.js +2 -2
- package/dist/esm/bs-chatbot-suggestion-button.entry.js +2 -2
- package/dist/esm/bs-checkbox.entry.js +92 -0
- package/dist/esm/bs-composer-status-banner.entry.js +14 -2
- package/dist/esm/bs-composer.entry.js +37 -4
- package/dist/esm/bs-data-table.entry.js +3 -3
- package/dist/esm/bs-icon-button.entry.js +38 -0
- package/dist/esm/bs-inline-tab.entry.js +67 -0
- package/dist/esm/bs-input.entry.js +3 -3
- package/dist/esm/bs-logo.entry.js +163 -0
- package/dist/esm/bs-menu_2.entry.js +3 -3
- package/dist/esm/bs-modal.entry.js +1 -1
- package/dist/esm/bs-navigation-drawer-item.entry.js +102 -0
- package/dist/esm/bs-navigation-drawer.entry.js +79 -0
- package/dist/esm/bs-navigation-header.entry.js +42 -0
- package/dist/esm/bs-radio.entry.js +47 -0
- package/dist/esm/bs-slider.entry.js +189 -0
- package/dist/esm/bs-source-link.entry.js +3 -3
- package/dist/esm/bs-switch.entry.js +55 -0
- package/dist/esm/bs-tab.entry.js +78 -0
- package/dist/esm/bs-tabs.entry.js +37 -0
- package/dist/esm/bs-tooltip.entry.js +2 -2
- package/dist/esm/{index-nLORuTUY.js → index-DST5-cTx.js} +74 -2
- package/dist/esm/loader.js +3 -3
- package/dist/types/components/bs-attachment/bs-attachment.d.ts +3 -9
- package/dist/types/components/bs-button/{bs-button.d.ts → bs-button/bs-button.d.ts} +5 -0
- package/dist/types/components/bs-button/{bs-button.stories.d.ts → bs-button/bs-button.stories.d.ts} +0 -2
- package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.d.ts +51 -0
- package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.stories.d.ts +16 -0
- package/dist/types/components/bs-button-skeleton/bs-button-skeleton.d.ts +1 -1
- package/dist/types/components/bs-button-skeleton/bs-button-skeleton.stories.d.ts +1 -1
- package/dist/types/components/bs-checkbox/bs-checkbox.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-checkbox/bs-checkbox.d.ts +64 -0
- package/dist/types/components/bs-checkbox/bs-checkbox.stories.d.ts +23 -0
- package/dist/types/components/bs-composer/bs-composer.d.ts +26 -2
- package/dist/types/components/bs-composer-status-banner/bs-composer-status-banner.d.ts +14 -0
- package/dist/types/components/bs-logo/brandsync-logo-full-dark.d.ts +1 -0
- package/dist/types/components/bs-logo/brandsync-logo-full-light.d.ts +1 -0
- package/dist/types/components/bs-logo/brandsync-logo-mark.d.ts +1 -0
- package/dist/types/components/bs-logo/bs-logo.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-logo/bs-logo.d.ts +73 -0
- package/dist/types/components/bs-logo/bs-logo.stories.d.ts +17 -0
- package/dist/types/components/bs-radio/bs-radio.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-radio/bs-radio.d.ts +45 -0
- package/dist/types/components/bs-radio/bs-radio.stories.d.ts +16 -0
- package/dist/types/components/bs-slider/bs-slider.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-slider/bs-slider.d.ts +109 -0
- package/dist/types/components/bs-slider/bs-slider.stories.d.ts +24 -0
- package/dist/types/components/bs-switch/bs-switch.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-switch/bs-switch.d.ts +45 -0
- package/dist/types/components/bs-switch/bs-switch.stories.d.ts +17 -0
- package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.d.ts +65 -0
- package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.stories.d.ts +22 -0
- package/dist/types/components/bs-tab/bs-tab/bs-tab.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-tab/bs-tab/bs-tab.d.ts +74 -0
- package/dist/types/components/bs-tab/bs-tab/bs-tab.stories.d.ts +30 -0
- package/dist/types/components/bs-tab/bs-tabs/bs-tabs.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-tab/bs-tabs/bs-tabs.d.ts +45 -0
- package/dist/types/components/bs-tab/bs-tabs/bs-tabs.stories.d.ts +13 -0
- package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.d.ts +1 -0
- package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.d.ts +96 -0
- package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.stories.d.ts +16 -0
- package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.cmp.test.d.ts +1 -0
- package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.d.ts +103 -0
- package/dist/types/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.stories.d.ts +20 -0
- package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.cmp.test.d.ts +1 -0
- package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.d.ts +60 -0
- package/dist/types/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.stories.d.ts +21 -0
- package/dist/types/components.d.ts +1973 -49
- package/package.json +1 -1
- package/dist/brandsync-wc/p-0d64ea40.entry.js +0 -1
- package/dist/brandsync-wc/p-16a54578.entry.js +0 -1
- package/dist/brandsync-wc/p-bc72439a.entry.js +0 -1
- package/dist/brandsync-wc/p-dad4a92c.entry.js +0 -1
- package/dist/brandsync-wc/p-eb4d87f0.entry.js +0 -1
- /package/dist/types/components/bs-button/{bs-button.cmp.test.d.ts → bs-button/bs-button.cmp.test.d.ts} +0 -0
|
@@ -23,18 +23,32 @@ const PANEL_STYLE = `
|
|
|
23
23
|
background: var(--bs-surface-base);
|
|
24
24
|
font-family: var(--bs-typography-font-family-body), sans-serif;
|
|
25
25
|
`;
|
|
26
|
+
// Page padding per the Genie Chatbot pattern spec (16px left/right, 24px top/bottom -- not a flat
|
|
27
|
+
// 16px on every side). No uniform \`gap\` here: the user-bubble-to-AI-response spacing below is a
|
|
28
|
+
// distinct, much larger value (40px) than any other spacing within a single AI turn, so it's set
|
|
29
|
+
// explicitly per-element instead of via one flex gap.
|
|
26
30
|
const TRANSCRIPT_STYLE = `
|
|
27
31
|
flex: 1;
|
|
28
32
|
min-height: 0;
|
|
29
33
|
overflow-y: auto;
|
|
30
34
|
display: flex;
|
|
31
35
|
flex-direction: column;
|
|
32
|
-
|
|
33
|
-
padding: var(--bs-spacing-200);
|
|
36
|
+
padding: var(--bs-spacing-300) var(--bs-spacing-200);
|
|
34
37
|
`;
|
|
38
|
+
// The gap from a user's message bubble to the AI's response that follows it, per the Genie
|
|
39
|
+
// Chatbot pattern spec's conversationWindow.userBubbleToAiResponsePx (40px) -- deliberately much
|
|
40
|
+
// larger than ordinary internal spacing (e.g. the 4px gap between an AI response's own text and
|
|
41
|
+
// its action row below).
|
|
42
|
+
const AI_RESPONSE_GAP_STYLE = `margin-top: var(--bs-spacing-500);`;
|
|
43
|
+
// margin: 0 on both -- these render as <p> tags, and this Storybook environment has no CSS reset
|
|
44
|
+
// zeroing the browser's default <p> margin (~1em top/bottom). Left unset, that default margin
|
|
45
|
+
// silently added to the intentional 40px user-bubble-to-AI-response gap (AI_RESPONSE_GAP_STYLE
|
|
46
|
+
// above), measuring 56px instead of the spec's 40px -- confirmed via getBoundingClientRect before
|
|
47
|
+
// this fix.
|
|
35
48
|
const USER_BUBBLE_STYLE = `
|
|
36
49
|
align-self: flex-end;
|
|
37
50
|
max-width: 80%;
|
|
51
|
+
margin: 0;
|
|
38
52
|
padding: var(--bs-spacing-100) var(--bs-spacing-150);
|
|
39
53
|
border-radius: var(--bs-border-radius-150);
|
|
40
54
|
background: var(--bs-color-primary-container);
|
|
@@ -44,6 +58,7 @@ const USER_BUBBLE_STYLE = `
|
|
|
44
58
|
`;
|
|
45
59
|
const AI_RESPONSE_STYLE = `
|
|
46
60
|
max-width: 100%;
|
|
61
|
+
margin: 0;
|
|
47
62
|
color: var(--bs-text-default);
|
|
48
63
|
font-size: var(--bs-font-size-md);
|
|
49
64
|
line-height: 1.5;
|
|
@@ -62,7 +77,7 @@ export const EmptyState = {
|
|
|
62
77
|
</div>
|
|
63
78
|
</div>
|
|
64
79
|
<bs-composer aria-label="Message" style="margin: var(--bs-spacing-100) var(--bs-spacing-200) 0;"></bs-composer>
|
|
65
|
-
<bs-ai-disclaimer style="padding: var(--bs-spacing-
|
|
80
|
+
<bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
|
|
66
81
|
</div>
|
|
67
82
|
`,
|
|
68
83
|
};
|
|
@@ -73,7 +88,7 @@ export const ActiveConversation = {
|
|
|
73
88
|
<bs-chatbot-header heading="Genie"></bs-chatbot-header>
|
|
74
89
|
<div style=${TRANSCRIPT_STYLE}>
|
|
75
90
|
<p style=${USER_BUBBLE_STYLE}>How do I submit a ByggSøk application?</p>
|
|
76
|
-
<div style="display: flex; flex-direction: column; gap: var(--bs-spacing-50);">
|
|
91
|
+
<div style="${AI_RESPONSE_GAP_STYLE} display: flex; flex-direction: column; gap: var(--bs-spacing-50);">
|
|
77
92
|
<p style=${AI_RESPONSE_STYLE}>
|
|
78
93
|
You can submit a ByggSøk application through the municipal portal. Log in with your ID, select "New
|
|
79
94
|
application", and attach your building plans before submitting for review.
|
|
@@ -82,7 +97,7 @@ export const ActiveConversation = {
|
|
|
82
97
|
</div>
|
|
83
98
|
</div>
|
|
84
99
|
<bs-composer aria-label="Message" style="margin: var(--bs-spacing-100) var(--bs-spacing-200) 0;"></bs-composer>
|
|
85
|
-
<bs-ai-disclaimer style="padding: var(--bs-spacing-
|
|
100
|
+
<bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
|
|
86
101
|
</div>
|
|
87
102
|
`,
|
|
88
103
|
};
|
|
@@ -93,10 +108,10 @@ export const Thinking = {
|
|
|
93
108
|
<bs-chatbot-header heading="Genie"></bs-chatbot-header>
|
|
94
109
|
<div style=${TRANSCRIPT_STYLE}>
|
|
95
110
|
<p style=${USER_BUBBLE_STYLE}>How do I submit a ByggSøk application?</p>
|
|
96
|
-
<bs-ai-thinking label="Retrieving sources"></bs-ai-thinking>
|
|
111
|
+
<bs-ai-thinking label="Retrieving sources" style=${AI_RESPONSE_GAP_STYLE}></bs-ai-thinking>
|
|
97
112
|
</div>
|
|
98
113
|
<bs-composer aria-label="Message" state="generating" style="margin: var(--bs-spacing-100) var(--bs-spacing-200) 0;"></bs-composer>
|
|
99
|
-
<bs-ai-disclaimer style="padding: var(--bs-spacing-
|
|
114
|
+
<bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
|
|
100
115
|
</div>
|
|
101
116
|
`,
|
|
102
117
|
};
|
|
@@ -107,7 +122,7 @@ export const WithSourcesDrawerOpen = {
|
|
|
107
122
|
<bs-chatbot-header heading="Genie"></bs-chatbot-header>
|
|
108
123
|
<div style=${TRANSCRIPT_STYLE}>
|
|
109
124
|
<p style=${USER_BUBBLE_STYLE}>How do I submit a ByggSøk application?</p>
|
|
110
|
-
<div style="display: flex; flex-direction: column; gap: var(--bs-spacing-50);">
|
|
125
|
+
<div style="${AI_RESPONSE_GAP_STYLE} display: flex; flex-direction: column; gap: var(--bs-spacing-50);">
|
|
111
126
|
<p style=${AI_RESPONSE_STYLE}>
|
|
112
127
|
You can submit a ByggSøk application through the municipal portal. Log in with your ID, select "New
|
|
113
128
|
application", and attach your building plans before submitting for review.
|
|
@@ -116,7 +131,7 @@ export const WithSourcesDrawerOpen = {
|
|
|
116
131
|
</div>
|
|
117
132
|
</div>
|
|
118
133
|
<bs-composer aria-label="Message" style="margin: var(--bs-spacing-100) var(--bs-spacing-200) 0;"></bs-composer>
|
|
119
|
-
<bs-ai-disclaimer style="padding: var(--bs-spacing-
|
|
134
|
+
<bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
|
|
120
135
|
|
|
121
136
|
<!-- Backdrop -->
|
|
122
137
|
<div style="position: absolute; inset: 0; background: rgba(33, 38, 46, 0.32);"></div>
|
|
@@ -152,7 +167,7 @@ export const UploadingAttachments = {
|
|
|
152
167
|
</bs-attachment-list>
|
|
153
168
|
</bs-composer>
|
|
154
169
|
</div>
|
|
155
|
-
<bs-ai-disclaimer style="padding: var(--bs-spacing-
|
|
170
|
+
<bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
|
|
156
171
|
</div>
|
|
157
172
|
`,
|
|
158
173
|
};
|
|
@@ -174,7 +189,7 @@ export const SendFailed = {
|
|
|
174
189
|
></bs-composer-status-banner>
|
|
175
190
|
<bs-composer aria-label="Message"></bs-composer>
|
|
176
191
|
</div>
|
|
177
|
-
<bs-ai-disclaimer style="padding: var(--bs-spacing-
|
|
192
|
+
<bs-ai-disclaimer style="padding: var(--bs-spacing-150) 0 var(--bs-spacing-100);">AI can make mistakes. Please verify important information.</bs-ai-disclaimer>
|
|
178
193
|
</div>
|
|
179
194
|
`,
|
|
180
195
|
};
|
|
@@ -24,7 +24,8 @@ import { h } from "@stencil/core";
|
|
|
24
24
|
*/
|
|
25
25
|
export class BsAiDisclaimer {
|
|
26
26
|
render() {
|
|
27
|
-
|
|
27
|
+
https: //images.unsplash.com/photo-1512917774080-9991f1c4c750?w=200&h=200&fit=crop
|
|
28
|
+
return (h("div", { key: 'c1215e28befb6e10d60deb9ef777269e3b8a2a49', class: "bs-ai-disclaimer" }, h("p", { key: 'c01f55b4cb73131f79af6cea3636224317fd8f5b', part: "text", class: "bs-ai-disclaimer__text" }, h("slot", { key: '99d3b3ae67d32a3df261bfcc3df39ee39d66ad40' }))));
|
|
28
29
|
}
|
|
29
30
|
static get is() { return "bs-ai-disclaimer"; }
|
|
30
31
|
static get encapsulation() { return "shadow"; }
|
|
@@ -43,7 +43,7 @@ export class BsAiGreeting {
|
|
|
43
43
|
const subtext = this.productName
|
|
44
44
|
? `How can I help you with ${this.productName} today?`
|
|
45
45
|
: 'How can I help you today?';
|
|
46
|
-
return (h("div", { key: '
|
|
46
|
+
return (h("div", { key: '4b7c40e6429fd65c0eeae87da40bf87165ba9738', class: "bs-ai-greeting" }, h("div", { key: '8d17a9a1c700e7b6e73daece822c2a857b6b9f25', part: "heading", class: "bs-ai-greeting__heading" }, h("p", { key: '225cf177b61377dbe44c9873629d547c42ba045c', class: "bs-ai-greeting__heading-line" }, "Hi. I'm ", this.assistantName, ","), h("p", { key: 'ed9ddd9d099c3515fb1b58006dc57a0bf45c5a6e', class: "bs-ai-greeting__heading-line" }, "your AI assistant.")), h("p", { key: '3c52a083f6c2a52120e01bec0c54846bc470e631', part: "subtext", class: "bs-ai-greeting__subtext" }, subtext)));
|
|
47
47
|
}
|
|
48
48
|
static get is() { return "bs-ai-greeting"; }
|
|
49
49
|
static get encapsulation() { return "shadow"; }
|
|
@@ -29,7 +29,7 @@ export class BsAiThinking {
|
|
|
29
29
|
/** The status text shown next to the icon, e.g. "Retrieving", "Thinking", "Searching". */
|
|
30
30
|
label = 'Thinking';
|
|
31
31
|
render() {
|
|
32
|
-
return (h("div", { key: '
|
|
32
|
+
return (h("div", { key: '2b55697271a1986fca26cd48167608a734ddfcc0', class: "bs-ai-thinking", role: "status", "aria-live": "polite" }, h("img", { key: '900ecba3dc8cd2f925180a9347ecd42db79159ea', part: "icon", class: "bs-ai-thinking__icon", src: GENIE_MARK_ICON, alt: "", "aria-hidden": "true" }), h("span", { key: 'f2f4a35fcdef3111192ca4816a89b1746e3f74a0', part: "label", class: "bs-ai-thinking__label" }, this.label)));
|
|
33
33
|
}
|
|
34
34
|
static get is() { return "bs-ai-thinking"; }
|
|
35
35
|
static get encapsulation() { return "shadow"; }
|
|
@@ -7,10 +7,6 @@
|
|
|
7
7
|
--bs-attachment-filename-color: var(--bs-text-default);
|
|
8
8
|
--bs-attachment-badge-bg-pdf: var(--bs-badge-bg-error);
|
|
9
9
|
--bs-attachment-badge-bg-document: var(--bs-badge-bg-info);
|
|
10
|
-
--bs-attachment-remove-bg: var(--bs-button-neutral-container);
|
|
11
|
-
--bs-attachment-remove-hover: var(--bs-button-neutral-hover);
|
|
12
|
-
--bs-attachment-remove-pressed: var(--bs-button-neutral-pressed);
|
|
13
|
-
--bs-attachment-remove-focus: var(--bs-border-neutral-focus);
|
|
14
10
|
}
|
|
15
11
|
|
|
16
12
|
.bs-attachment {
|
|
@@ -98,35 +94,23 @@
|
|
|
98
94
|
background: var(--bs-attachment-badge-bg-document);
|
|
99
95
|
}
|
|
100
96
|
|
|
101
|
-
/* --- Remove button ---
|
|
97
|
+
/* --- Remove button ---
|
|
98
|
+
bs-icon-button owns its own background/color/radius/hover/pressed/focus styling internally
|
|
99
|
+
(variant="neutral" size="xs") -- this component only positions it (absolute, top-right corner)
|
|
100
|
+
and drives the hover/focus-revealed opacity, both external layout concerns bs-icon-button
|
|
101
|
+
itself has no opinion on. */
|
|
102
102
|
|
|
103
103
|
.bs-attachment__remove {
|
|
104
|
-
box-sizing: border-box;
|
|
105
104
|
position: absolute;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
height: 20px;
|
|
113
|
-
padding: 0;
|
|
114
|
-
background: var(--bs-attachment-remove-bg);
|
|
115
|
-
border: none;
|
|
116
|
-
border-radius: var(--bs-border-radius-50);
|
|
117
|
-
color: var(--bs-icon-default);
|
|
118
|
-
cursor: pointer;
|
|
105
|
+
/* Verified against Figma node 2513:32843 (EG Genie UI Kit v1.0): the remove button's own 32x32
|
|
106
|
+
hit-target box sits flush at the thumbnail's top-right corner (top:0, right:0), with the
|
|
107
|
+
*visible* 16px button centered inside it (8px inset on every side) -- so the visible button's
|
|
108
|
+
real offset from the thumbnail's corner is 8px, not 4px. */
|
|
109
|
+
top: var(--bs-spacing-100);
|
|
110
|
+
right: var(--bs-spacing-100);
|
|
119
111
|
opacity: 0;
|
|
120
112
|
pointer-events: none;
|
|
121
|
-
transition:
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
.bs-attachment__remove:hover {
|
|
125
|
-
background: var(--bs-attachment-remove-hover);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
.bs-attachment__remove:active {
|
|
129
|
-
background: var(--bs-attachment-remove-pressed);
|
|
113
|
+
transition: opacity var(--bs-duration-fast) var(--bs-easing-standard);
|
|
130
114
|
}
|
|
131
115
|
|
|
132
116
|
.bs-attachment:hover .bs-attachment__remove,
|
|
@@ -135,11 +119,6 @@
|
|
|
135
119
|
pointer-events: auto;
|
|
136
120
|
}
|
|
137
121
|
|
|
138
|
-
.bs-attachment__remove:focus-visible {
|
|
139
|
-
outline: 2px solid var(--bs-attachment-remove-focus);
|
|
140
|
-
outline-offset: 1px;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
122
|
/* --- Spinner --- */
|
|
144
123
|
|
|
145
124
|
.bs-attachment__spinner {
|
|
@@ -2,7 +2,9 @@ import { h } from "@stencil/core";
|
|
|
2
2
|
/**
|
|
3
3
|
* A single file attachment preview for `bs-composer` -- an image thumbnail, or a filename card
|
|
4
4
|
* with a colored file-type badge (PDF/Document), with an optional upload-in-progress spinner and
|
|
5
|
-
* a hover/focus-revealed remove button
|
|
5
|
+
* a hover/focus-revealed remove button (a `bs-icon-button` with `size="xs"` `variant="neutral"` --
|
|
6
|
+
* the same 16x16px compact tier `bs-icon-button` documents as meant for exactly this kind of
|
|
7
|
+
* chip/tag "remove" control).
|
|
6
8
|
*
|
|
7
9
|
* ## When to use
|
|
8
10
|
* - Rendered by the consuming app for each file a user has attached to a Genie AI chat message,
|
|
@@ -27,14 +29,6 @@ import { h } from "@stencil/core";
|
|
|
27
29
|
* @prop --bs-attachment-badge-bg-pdf - PDF badge background. Aliased to `--bs-badge-bg-error`.
|
|
28
30
|
* @prop --bs-attachment-badge-bg-document - Document badge background. Aliased to
|
|
29
31
|
* `--bs-badge-bg-info`.
|
|
30
|
-
* @prop --bs-attachment-remove-bg - Remove button (neutral icon button) default background.
|
|
31
|
-
* Aliased to `--bs-button-neutral-container`.
|
|
32
|
-
* @prop --bs-attachment-remove-hover - Remove button hover background. Aliased to
|
|
33
|
-
* `--bs-button-neutral-hover`.
|
|
34
|
-
* @prop --bs-attachment-remove-pressed - Remove button active/pressed background. Aliased to
|
|
35
|
-
* `--bs-button-neutral-pressed`.
|
|
36
|
-
* @prop --bs-attachment-remove-focus - Remove button focus outline color. Aliased to
|
|
37
|
-
* `--bs-border-neutral-focus`.
|
|
38
32
|
*/
|
|
39
33
|
export class BsAttachment {
|
|
40
34
|
/** Which kind of attachment preview to render. */
|
|
@@ -56,7 +50,7 @@ export class BsAttachment {
|
|
|
56
50
|
};
|
|
57
51
|
render() {
|
|
58
52
|
const isImage = this.type === 'image';
|
|
59
|
-
return (h("div", { key: '
|
|
53
|
+
return (h("div", { key: '54b6d63b3e3fa98e5ec10444253b145080facc97', class: { 'bs-attachment': true, 'bs-attachment--loading': this.loading }, "aria-busy": this.loading ? 'true' : 'false' }, isImage ? this.renderImage() : this.renderCard(), this.removable && (h("bs-icon-button", { key: 'bc0c6cd660a361886447f38b56578a2271384e99', part: "remove", class: "bs-attachment__remove", size: "xs", variant: "neutral", ariaLabel: `Remove attachment: ${this.fileName}`, onClick: this.onRemoveClick }, h(CloseIcon, { key: 'fc932382233dfe20c46666705f1c79540bc08d35' })))));
|
|
60
54
|
}
|
|
61
55
|
renderImage() {
|
|
62
56
|
return (h("div", { part: "thumbnail", class: "bs-attachment__thumbnail" }, h("img", { class: "bs-attachment__image", src: this.imageSrc, alt: this.imageAlt }), this.loading && h(Spinner, { class: "bs-attachment__spinner bs-attachment__spinner--overlay", size: 16 })));
|
|
@@ -58,7 +58,7 @@ export class BsAttachmentList {
|
|
|
58
58
|
this.canScrollRight = row.scrollWidth - row.clientWidth - row.scrollLeft > 1;
|
|
59
59
|
};
|
|
60
60
|
render() {
|
|
61
|
-
return (h("div", { key: '
|
|
61
|
+
return (h("div", { key: 'f63adb537ce78135dfaa7d530a55829636ae318b', class: "bs-attachment-list" }, h("div", { key: '2cdd3a578f03db580b0a06088e6b27ed7ac8b06f', part: "row", class: "bs-attachment-list__row", ref: el => (this.row = el), onScroll: this.onScroll, role: "group", "aria-label": this.ariaLabel, tabIndex: 0 }, h("slot", { key: '8095ab8ad53cee9f357360dd1dd1c4cad4a4d513', onSlotchange: this.onSlotchange })), this.canScrollRight && h("div", { key: 'd09bb07a31bc780709f69838556434dc22b0544c', part: "fade", class: "bs-attachment-list__fade", "aria-hidden": "true" })));
|
|
62
62
|
}
|
|
63
63
|
static get is() { return "bs-attachment-list"; }
|
|
64
64
|
static get encapsulation() { return "shadow"; }
|
|
@@ -78,4 +78,30 @@ describe('bs-button', () => {
|
|
|
78
78
|
const button = root.shadowRoot.querySelector('button');
|
|
79
79
|
expect(button).toHaveClass('bs-button--icon-only');
|
|
80
80
|
});
|
|
81
|
+
describe('asymmetric padding for icon + label layouts', () => {
|
|
82
|
+
it('applies bs-button--has-icon (not bs-button--has-end-icon) with a leading icon and a label', async () => {
|
|
83
|
+
const { root } = await render(h("bs-button", null, h("svg", { slot: "icon", viewBox: "0 0 16 16" }), "Click me"));
|
|
84
|
+
const button = root.shadowRoot.querySelector('button');
|
|
85
|
+
expect(button).toHaveClass('bs-button--has-icon');
|
|
86
|
+
expect(button).not.toHaveClass('bs-button--has-end-icon');
|
|
87
|
+
});
|
|
88
|
+
it('applies bs-button--has-end-icon (not bs-button--has-icon) with a trailing icon and a label', async () => {
|
|
89
|
+
const { root } = await render(h("bs-button", null, "Next", h("svg", { slot: "end-icon", viewBox: "0 0 16 16" })));
|
|
90
|
+
const button = root.shadowRoot.querySelector('button');
|
|
91
|
+
expect(button).toHaveClass('bs-button--has-end-icon');
|
|
92
|
+
expect(button).not.toHaveClass('bs-button--has-icon');
|
|
93
|
+
});
|
|
94
|
+
it('applies neither class for an icon-only button (padding stays 0 via bs-button--icon-only)', async () => {
|
|
95
|
+
const { root } = await render(h("bs-button", { ariaLabel: "Delete" }, h("svg", { slot: "icon", viewBox: "0 0 16 16" })));
|
|
96
|
+
const button = root.shadowRoot.querySelector('button');
|
|
97
|
+
expect(button).not.toHaveClass('bs-button--has-icon');
|
|
98
|
+
expect(button).not.toHaveClass('bs-button--has-end-icon');
|
|
99
|
+
});
|
|
100
|
+
it('applies neither class for a plain text-only button', async () => {
|
|
101
|
+
const { root } = await render(h("bs-button", null, "Click me"));
|
|
102
|
+
const button = root.shadowRoot.querySelector('button');
|
|
103
|
+
expect(button).not.toHaveClass('bs-button--has-icon');
|
|
104
|
+
expect(button).not.toHaveClass('bs-button--has-end-icon');
|
|
105
|
+
});
|
|
106
|
+
});
|
|
81
107
|
});
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
--bs-button-height-md: var(--bs-spacing-600);
|
|
5
5
|
--bs-button-height-lg: var(--bs-spacing-700);
|
|
6
6
|
--bs-button-radius: var(--bs-border-radius-100);
|
|
7
|
-
|
|
7
|
+
--bs-button-padding-x-icon-side: var(--bs-spacing-150);
|
|
8
|
+
--bs-button-padding-x-label-side: var(--bs-spacing-250);
|
|
9
|
+
|
|
8
10
|
--bs-button-error-default: var(--bs-color-error-default);
|
|
9
11
|
--bs-button-error-hover: var(--bs-color-error-hover);
|
|
10
12
|
--bs-button-error-focus: var(--bs-border-error-focus);
|
|
@@ -30,6 +32,20 @@
|
|
|
30
32
|
--bs-button-subtle-hover: var(--bs-color-neutral-container);
|
|
31
33
|
--bs-button-subtle-pressed: var(--bs-color-neutral-container-pressed);
|
|
32
34
|
--bs-button-subtle-focus: var(--bs-border-primary-focus);
|
|
35
|
+
/* Verified against Figma node 2842:50178 ("Style=Neutral, States=Enabled"): the neutral variant
|
|
36
|
+
has its own 1px border, unlike every other filled variant here -- previously missing entirely. */
|
|
37
|
+
--bs-button-neutral-border: var(--bs-border-neutral-container);
|
|
38
|
+
--bs-button-neutral-border-hover: var(--bs-border-neutral-container-hover);
|
|
39
|
+
--bs-button-neutral-border-pressed: var(--bs-border-neutral-container-pressed);
|
|
40
|
+
/* Locally overriding the vendored --bs-button-neutral-hover/-pressed tokens (used directly
|
|
41
|
+
below elsewhere in this codebase) -- they alias to --bs-color-neutral-hover (a dark,
|
|
42
|
+
near-black scale meant for on-neutral text/icons, not a container background) and
|
|
43
|
+
--bs-color-primary-pressed (BLUE, not neutral at all) respectively. Verified visually: with
|
|
44
|
+
the vendored values, hover rendered near-black and pressed rendered blue, neither matching the
|
|
45
|
+
light-lavender-family redline. --bs-color-neutral-container-hover/-pressed are the correct
|
|
46
|
+
step family, matching --bs-button-neutral-container (--bs-color-neutral-container) itself. */
|
|
47
|
+
--bs-button-neutral-hover: var(--bs-color-neutral-container-hover);
|
|
48
|
+
--bs-button-neutral-pressed: var(--bs-color-neutral-container-pressed);
|
|
33
49
|
--bs-button-outlined-border: var(--bs-border-primary);
|
|
34
50
|
--bs-button-outlined-border-hover: var(--bs-border-primary-hover);
|
|
35
51
|
--bs-button-outlined-focus: var(--bs-border-primary-focus);
|
|
@@ -44,7 +60,9 @@
|
|
|
44
60
|
border: none;
|
|
45
61
|
border-radius: var(--bs-button-radius);
|
|
46
62
|
font-family: inherit;
|
|
47
|
-
|
|
63
|
+
/* Was semibold, then medium -- both wrong per direct comparison against the live Figma file.
|
|
64
|
+
Every variant's label actually uses the regular weight. */
|
|
65
|
+
font-weight: var(--bs-font-weight-regular);
|
|
48
66
|
cursor: pointer;
|
|
49
67
|
transition: background-color var(--bs-duration-fast, 120ms) var(--bs-easing-standard, ease);
|
|
50
68
|
}
|
|
@@ -66,7 +84,11 @@
|
|
|
66
84
|
|
|
67
85
|
.bs-button--md {
|
|
68
86
|
height: var(--bs-button-height-md);
|
|
69
|
-
|
|
87
|
+
/* Verified against Figma node 2842:50344 (71px-wide frame, 39px-wide "Label" text): horizontal
|
|
88
|
+
padding is spacing/200 (16px) each side, not spacing-400 (32px) -- the previous value was
|
|
89
|
+
roughly double what the redline specifies. sm/lg padding-x weren't independently re-verified
|
|
90
|
+
against their own redlines in this pass. */
|
|
91
|
+
padding: 0 var(--bs-spacing-200);
|
|
70
92
|
font-size: var(--bs-font-size-md);
|
|
71
93
|
}
|
|
72
94
|
|
|
@@ -94,16 +116,20 @@
|
|
|
94
116
|
.bs-button--neutral {
|
|
95
117
|
background: var(--bs-button-neutral-container);
|
|
96
118
|
color: var(--bs-text-default);
|
|
119
|
+
border: 1px solid var(--bs-button-neutral-border);
|
|
97
120
|
}
|
|
98
121
|
.bs-button--neutral:hover:not(:disabled) {
|
|
99
122
|
background: var(--bs-button-neutral-hover);
|
|
123
|
+
border-color: var(--bs-button-neutral-border-hover);
|
|
100
124
|
}
|
|
101
125
|
.bs-button--neutral:active:not(:disabled) {
|
|
102
126
|
background: var(--bs-button-neutral-pressed);
|
|
127
|
+
border-color: var(--bs-button-neutral-border-pressed);
|
|
103
128
|
}
|
|
104
129
|
.bs-button--neutral:disabled {
|
|
105
130
|
background: var(--bs-button-neutral-disabled);
|
|
106
131
|
color: var(--bs-text-on-disabled);
|
|
132
|
+
border-color: var(--bs-button-neutral-border);
|
|
107
133
|
}
|
|
108
134
|
|
|
109
135
|
.bs-button--error {
|
|
@@ -145,7 +171,11 @@
|
|
|
145
171
|
|
|
146
172
|
.bs-button--warning {
|
|
147
173
|
background: var(--bs-button-warning-default);
|
|
148
|
-
|
|
174
|
+
/* --bs-text-default (not --bs-text-on-action, unlike every other colored variant here) failed
|
|
175
|
+
WCAG AA contrast against this background in BOTH themes -- verified: light theme was black
|
|
176
|
+
text on rgb(128,93,0) at 3.49:1 (needs 4.5:1), dark theme was white text on rgb(177,129,0) at
|
|
177
|
+
3.51:1. --bs-text-on-action flips appropriately per theme and passes in both (6.02:1 / 5.99:1). */
|
|
178
|
+
color: var(--bs-text-on-action);
|
|
149
179
|
}
|
|
150
180
|
.bs-button--warning:hover:not(:disabled) {
|
|
151
181
|
background: var(--bs-button-warning-hover);
|
|
@@ -220,12 +250,14 @@
|
|
|
220
250
|
outline-color: var(--bs-button-outlined-focus);
|
|
221
251
|
}
|
|
222
252
|
|
|
253
|
+
/* Gap between icon and label: spacing/xs (4px) per Figma node 2842:50344's state-layer gap, not
|
|
254
|
+
spacing-100 (8px). */
|
|
223
255
|
.bs-button__icon--visible {
|
|
224
|
-
margin-right: var(--bs-spacing-
|
|
256
|
+
margin-right: var(--bs-spacing-50);
|
|
225
257
|
}
|
|
226
258
|
|
|
227
259
|
.bs-button__end-icon--visible {
|
|
228
|
-
margin-left: var(--bs-spacing-
|
|
260
|
+
margin-left: var(--bs-spacing-50);
|
|
229
261
|
}
|
|
230
262
|
|
|
231
263
|
.bs-button__icon ::slotted(*),
|
|
@@ -245,3 +277,22 @@
|
|
|
245
277
|
.bs-button--icon-only .bs-button__end-icon--visible {
|
|
246
278
|
margin-left: 0;
|
|
247
279
|
}
|
|
280
|
+
|
|
281
|
+
/* Verified against a Figma redline for the icon+label layout: the edge next to an icon is
|
|
282
|
+
tighter (spacing/150, 12px) than the plain text-only edge (16px), and the opposite edge -- next
|
|
283
|
+
to just the label, with an icon on the other side pulling the button off-balance -- compensates
|
|
284
|
+
with more padding (spacing/250, 20px), keeping the total horizontal padding budget the same as
|
|
285
|
+
the icon-less button (12+20 = 16+16 = 32px for size="md"). This is deliberately NOT
|
|
286
|
+
size-dependent, same as the icon/label gap above -- neither varies by size in the source spec. */
|
|
287
|
+
.bs-button--has-icon:not(.bs-button--has-end-icon) {
|
|
288
|
+
padding-left: var(--bs-button-padding-x-icon-side);
|
|
289
|
+
padding-right: var(--bs-button-padding-x-label-side);
|
|
290
|
+
}
|
|
291
|
+
.bs-button--has-end-icon:not(.bs-button--has-icon) {
|
|
292
|
+
padding-left: var(--bs-button-padding-x-label-side);
|
|
293
|
+
padding-right: var(--bs-button-padding-x-icon-side);
|
|
294
|
+
}
|
|
295
|
+
.bs-button--has-icon.bs-button--has-end-icon {
|
|
296
|
+
padding-left: var(--bs-button-padding-x-icon-side);
|
|
297
|
+
padding-right: var(--bs-button-padding-x-icon-side);
|
|
298
|
+
}
|
|
@@ -27,6 +27,11 @@ import { h } from "@stencil/core";
|
|
|
27
27
|
* @prop --bs-button-height-sm - Height at `size="sm"`. Aliased to `--bs-spacing-500`.
|
|
28
28
|
* @prop --bs-button-height-md - Height at `size="md"`. Aliased to `--bs-spacing-600`.
|
|
29
29
|
* @prop --bs-button-height-lg - Height at `size="lg"`. Aliased to `--bs-spacing-700`.
|
|
30
|
+
* @prop --bs-button-neutral-border - Border color, `variant="neutral"`, default/disabled. Aliased to `--bs-border-neutral-container`.
|
|
31
|
+
* @prop --bs-button-neutral-border-hover - Border color, `variant="neutral"`, hover. Aliased to `--bs-border-neutral-container-hover`.
|
|
32
|
+
* @prop --bs-button-neutral-border-pressed - Border color, `variant="neutral"`, pressed. Aliased to `--bs-border-neutral-container-pressed`.
|
|
33
|
+
* @prop --bs-button-padding-x-icon-side - Horizontal padding on an edge that's adjacent to a leading/trailing icon (tighter than the plain text-only edge). Aliased to `--bs-spacing-150`.
|
|
34
|
+
* @prop --bs-button-padding-x-label-side - Horizontal padding on the opposite edge, when an icon on the other side needs compensating extra space to keep the button optically balanced. Aliased to `--bs-spacing-250`.
|
|
30
35
|
*/
|
|
31
36
|
export class BsButton {
|
|
32
37
|
el;
|
|
@@ -100,7 +105,7 @@ export class BsButton {
|
|
|
100
105
|
};
|
|
101
106
|
render() {
|
|
102
107
|
const iconOnly = (this.hasIcon || this.hasEndIcon) && !this.hasLabel;
|
|
103
|
-
return (h("button", { key: '
|
|
108
|
+
return (h("button", { key: 'b46975b3006b26aee5f52cead685d78c7cc3e4a6', class: `bs-button bs-button--${this.variant} bs-button--${this.size} ${iconOnly ? 'bs-button--icon-only' : ''} ${this.hasIcon && !iconOnly ? 'bs-button--has-icon' : ''} ${this.hasEndIcon && !iconOnly ? 'bs-button--has-end-icon' : ''}`, type: this.type, disabled: this.disabled, "aria-label": this.ariaLabel }, h("span", { key: 'e763e59c2775c3778208eff1e4e78322867e7e2c', part: "icon", class: `bs-button__icon ${this.hasIcon ? 'bs-button__icon--visible' : ''}` }, h("slot", { key: 'b13b8c375a66a34360de7505ae0b3ea88885b3a7', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: '10c0fb5b04045e33f67b477e7deb6d213f9455de', part: "label", class: "bs-button__label" }, h("slot", { key: 'd8da8023c86f98cc82a934af4618daaa1fe476cc', onSlotchange: this.onLabelSlotchange })), h("span", { key: 'b584dddc6d4e146bdefb2f0223505c0e4aa5b7ed', part: "end-icon", class: `bs-button__end-icon ${this.hasEndIcon ? 'bs-button__end-icon--visible' : ''}` }, h("slot", { key: '960a015fd755d63fe7385b4516cebe33e29e0808', name: "end-icon", onSlotchange: this.onEndIconSlotchange }))));
|
|
104
109
|
}
|
|
105
110
|
static get is() { return "bs-button"; }
|
|
106
111
|
static get encapsulation() { return "shadow"; }
|
|
@@ -126,8 +131,8 @@ export class BsButton {
|
|
|
126
131
|
"references": {
|
|
127
132
|
"BsButtonVariant": {
|
|
128
133
|
"location": "local",
|
|
129
|
-
"path": "/Users/vivka/brandsync-web-components/src/components/bs-button/bs-button.tsx",
|
|
130
|
-
"id": "src/components/bs-button/bs-button.tsx::BsButtonVariant"
|
|
134
|
+
"path": "/Users/vivka/brandsync-web-components/src/components/bs-button/bs-button/bs-button.tsx",
|
|
135
|
+
"id": "src/components/bs-button/bs-button/bs-button.tsx::BsButtonVariant"
|
|
131
136
|
}
|
|
132
137
|
}
|
|
133
138
|
},
|
|
@@ -152,8 +157,8 @@ export class BsButton {
|
|
|
152
157
|
"references": {
|
|
153
158
|
"BsButtonSize": {
|
|
154
159
|
"location": "local",
|
|
155
|
-
"path": "/Users/vivka/brandsync-web-components/src/components/bs-button/bs-button.tsx",
|
|
156
|
-
"id": "src/components/bs-button/bs-button.tsx::BsButtonSize"
|
|
160
|
+
"path": "/Users/vivka/brandsync-web-components/src/components/bs-button/bs-button/bs-button.tsx",
|
|
161
|
+
"id": "src/components/bs-button/bs-button/bs-button.tsx::BsButtonSize"
|
|
157
162
|
}
|
|
158
163
|
}
|
|
159
164
|
},
|
package/dist/collection/components/bs-button/{bs-button.stories.js → bs-button/bs-button.stories.js}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { html } from "lit";
|
|
2
|
-
import { componentDescription, propDescription } from "
|
|
2
|
+
import { componentDescription, propDescription } from "../../../stories-utils";
|
|
3
3
|
const variants = ['primary', 'neutral', 'subtle', 'outlined', 'success', 'warning', 'info', 'error'];
|
|
4
4
|
const sizes = ['sm', 'md', 'lg'];
|
|
5
5
|
const meta = {
|
|
6
|
-
title: 'Components/bs-button',
|
|
6
|
+
title: 'Components/bs-button/bs-button',
|
|
7
7
|
parameters: { docs: { description: { component: componentDescription('bs-button') } } },
|
|
8
8
|
render: args => html `
|
|
9
9
|
<bs-button variant=${args.variant} size=${args.size} type=${args.type} ?disabled=${args.disabled}>
|
|
@@ -86,31 +86,6 @@ export const WithEndIcon = {
|
|
|
86
86
|
</bs-button>
|
|
87
87
|
`,
|
|
88
88
|
};
|
|
89
|
-
export const IconOnly = {
|
|
90
|
-
name: 'Icon-only',
|
|
91
|
-
render: args => html `
|
|
92
|
-
<bs-button variant=${args.variant} size=${args.size} ?disabled=${args.disabled} aria-label="Delete">
|
|
93
|
-
<svg slot="icon" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
|
|
94
|
-
<path
|
|
95
|
-
d="M2 4H14M6 4V2.5C6 2.22386 6.22386 2 6.5 2H9.5C9.77614 2 10 2.22386 10 2.5V4M12.5 4L12 13.5C12 13.7761 11.7761 14 11.5 14H4.5C4.22386 14 4 13.7761 4 13.5L3.5 4"
|
|
96
|
-
stroke="currentColor"
|
|
97
|
-
stroke-width="1.3"
|
|
98
|
-
stroke-linecap="round"
|
|
99
|
-
stroke-linejoin="round"
|
|
100
|
-
/>
|
|
101
|
-
</svg>
|
|
102
|
-
</bs-button>
|
|
103
|
-
`,
|
|
104
|
-
};
|
|
105
|
-
export const LongLabel = {
|
|
106
|
-
name: 'Long label (edge case)',
|
|
107
|
-
args: { label: 'This button has a much longer label than the icon-and-text layout was designed for' },
|
|
108
|
-
render: args => html `
|
|
109
|
-
<div style="max-width: 220px;">
|
|
110
|
-
<bs-button variant=${args.variant} size=${args.size} ?disabled=${args.disabled}> ${args.label} </bs-button>
|
|
111
|
-
</div>
|
|
112
|
-
`,
|
|
113
|
-
};
|
|
114
89
|
export const AllCombinations = {
|
|
115
90
|
name: 'All variant × size × disabled combinations',
|
|
116
91
|
render: () => html `
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { render, h, describe, it, expect } from "@stencil/vitest";
|
|
2
|
+
describe('bs-icon-button', () => {
|
|
3
|
+
it('renders the default icon slot and variant/size classes', async () => {
|
|
4
|
+
const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
5
|
+
const button = root.shadowRoot.querySelector('button');
|
|
6
|
+
expect(button).toHaveClass('bs-icon-button--primary');
|
|
7
|
+
expect(button).toHaveClass('bs-icon-button--md');
|
|
8
|
+
});
|
|
9
|
+
it('applies the disabled attribute to the native button', async () => {
|
|
10
|
+
const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm", disabled: true }, h("svg", { viewBox: "0 0 16 16" })));
|
|
11
|
+
const button = root.shadowRoot.querySelector('button');
|
|
12
|
+
expect(button).toHaveAttribute('disabled');
|
|
13
|
+
});
|
|
14
|
+
it('reflects the variant prop to the internal class', async () => {
|
|
15
|
+
const { root, setProps } = await render(h("bs-icon-button", { ariaLabel: "Confirm", variant: "neutral" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
16
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--neutral');
|
|
17
|
+
await setProps({ variant: 'primary' });
|
|
18
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--primary');
|
|
19
|
+
});
|
|
20
|
+
it('applies the error variant class and reflects on prop change', async () => {
|
|
21
|
+
const { root, setProps } = await render(h("bs-icon-button", { ariaLabel: "Delete", variant: "error" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
22
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--error');
|
|
23
|
+
await setProps({ variant: 'primary' });
|
|
24
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--primary');
|
|
25
|
+
expect(root.shadowRoot.querySelector('button')).not.toHaveClass('bs-icon-button--error');
|
|
26
|
+
});
|
|
27
|
+
it('applies the subtle variant class', async () => {
|
|
28
|
+
const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm", variant: "subtle" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
29
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--subtle');
|
|
30
|
+
});
|
|
31
|
+
it('applies the outlined variant class', async () => {
|
|
32
|
+
const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm", variant: "outlined" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
33
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--outlined');
|
|
34
|
+
});
|
|
35
|
+
it('applies the success variant class and reflects on prop change', async () => {
|
|
36
|
+
const { root, setProps } = await render(h("bs-icon-button", { ariaLabel: "Approve", variant: "success" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
37
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--success');
|
|
38
|
+
await setProps({ variant: 'primary' });
|
|
39
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--primary');
|
|
40
|
+
expect(root.shadowRoot.querySelector('button')).not.toHaveClass('bs-icon-button--success');
|
|
41
|
+
});
|
|
42
|
+
it('applies the warning variant class', async () => {
|
|
43
|
+
const { root } = await render(h("bs-icon-button", { ariaLabel: "Proceed anyway", variant: "warning" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
44
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--warning');
|
|
45
|
+
});
|
|
46
|
+
it('applies the info variant class', async () => {
|
|
47
|
+
const { root } = await render(h("bs-icon-button", { ariaLabel: "View details", variant: "info" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
48
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--info');
|
|
49
|
+
});
|
|
50
|
+
it('applies each size class', async () => {
|
|
51
|
+
const { root, setProps } = await render(h("bs-icon-button", { ariaLabel: "Confirm", size: "sm" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
52
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--sm');
|
|
53
|
+
await setProps({ size: 'lg' });
|
|
54
|
+
expect(root.shadowRoot.querySelector('button')).toHaveClass('bs-icon-button--lg');
|
|
55
|
+
});
|
|
56
|
+
it('renders size="xs" at 16px with an 8px icon and a smaller radius than sm/md/lg', async () => {
|
|
57
|
+
const { root } = await render(h("bs-icon-button", { ariaLabel: "Remove", size: "xs" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
58
|
+
const button = root.shadowRoot.querySelector('button');
|
|
59
|
+
expect(button).toHaveClass('bs-icon-button--xs');
|
|
60
|
+
expect(getComputedStyle(button).width).toBe('16px');
|
|
61
|
+
expect(getComputedStyle(button).height).toBe('16px');
|
|
62
|
+
const icon = root.shadowRoot.querySelector('[part="icon"]');
|
|
63
|
+
expect(getComputedStyle(icon).width).toBe('8px');
|
|
64
|
+
expect(getComputedStyle(icon).height).toBe('8px');
|
|
65
|
+
});
|
|
66
|
+
it('sets aria-label on the inner button from the ariaLabel prop', async () => {
|
|
67
|
+
const { root } = await render(h("bs-icon-button", { ariaLabel: "Delete" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
68
|
+
const button = root.shadowRoot.querySelector('button');
|
|
69
|
+
expect(button).toEqualAttribute('aria-label', 'Delete');
|
|
70
|
+
});
|
|
71
|
+
it('renders the native button type from the type prop', async () => {
|
|
72
|
+
const { root } = await render(h("bs-icon-button", { ariaLabel: "Submit", type: "submit" }, h("svg", { viewBox: "0 0 16 16" })));
|
|
73
|
+
const button = root.shadowRoot.querySelector('button');
|
|
74
|
+
expect(button).toEqualAttribute('type', 'submit');
|
|
75
|
+
});
|
|
76
|
+
it('renders the slotted icon content inside part="icon"', async () => {
|
|
77
|
+
const { root } = await render(h("bs-icon-button", { ariaLabel: "Confirm" }, h("svg", { class: "my-icon", viewBox: "0 0 16 16" })));
|
|
78
|
+
const iconWrapper = root.shadowRoot.querySelector('[part="icon"]');
|
|
79
|
+
expect(iconWrapper).not.toBeNull();
|
|
80
|
+
expect(iconWrapper.querySelector('slot')).not.toBeNull();
|
|
81
|
+
expect(root.querySelector('svg.my-icon')).not.toBeNull();
|
|
82
|
+
});
|
|
83
|
+
});
|