@brandsync/wc 0.0.11 → 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 +3388 -598
- package/dist/brandsync-wc/brandsync-wc.css +20 -0
- package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
- package/dist/brandsync-wc/{p-6254dcbe.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-4ca15322.entry.js → p-1900f6ce.entry.js} +1 -1
- package/dist/brandsync-wc/{p-1bf0b2d5.entry.js → p-1adc59be.entry.js} +1 -1
- package/dist/brandsync-wc/p-1c6fa697.entry.js +1 -0
- package/dist/brandsync-wc/{p-8d78171b.entry.js → p-1cf715aa.entry.js} +1 -1
- package/dist/brandsync-wc/{p-84ae4420.entry.js → p-20dbc6a1.entry.js} +1 -1
- package/dist/brandsync-wc/{p-74a4dd91.entry.js → p-23457a21.entry.js} +1 -1
- package/dist/brandsync-wc/p-266f5dde.entry.js +1 -0
- package/dist/brandsync-wc/{p-073e5fee.entry.js → p-2a65aabb.entry.js} +1 -1
- package/dist/brandsync-wc/{p-030a8ba7.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-dd224cb3.entry.js → p-57fdbb76.entry.js} +1 -1
- package/dist/brandsync-wc/{p-8dff4f24.entry.js → p-64e2a7d7.entry.js} +1 -1
- package/dist/brandsync-wc/{p-b174403d.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-c6d330c3.entry.js → p-88a0abee.entry.js} +1 -1
- package/dist/brandsync-wc/p-8b662ee3.entry.js +1 -0
- package/dist/brandsync-wc/{p-41edb0a2.entry.js → p-8ded1eb6.entry.js} +1 -1
- package/dist/brandsync-wc/{p-DP_bvuvB.js → p-DST5-cTx.js} +2 -2
- package/dist/brandsync-wc/p-a5b15061.entry.js +1 -0
- package/dist/brandsync-wc/{p-7a605d98.entry.js → p-aba300a9.entry.js} +1 -1
- package/dist/brandsync-wc/p-b24a980b.entry.js +1 -0
- package/dist/brandsync-wc/p-b289450a.entry.js +1 -0
- package/dist/brandsync-wc/{p-7131d0a1.entry.js → p-b8a2f882.entry.js} +1 -1
- package/dist/brandsync-wc/p-c320b6b4.entry.js +1 -0
- package/dist/brandsync-wc/{p-d1dc2ced.entry.js → p-d4e3ca77.entry.js} +1 -1
- package/dist/brandsync-wc/{p-0b858120.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 +14 -3
- 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-CGrdFg95.js → index-B3sdhEGk.js} +1 -1
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +13 -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 +10 -0
- package/dist/collection/components/bs-checkbox/bs-checkbox.css +7 -1
- package/dist/collection/components/bs-checkbox/bs-checkbox.js +32 -1
- 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.js +1 -1
- 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-D1cYtKyN.js → p-Be1Pfcnm.js} +1 -1
- package/dist/components/{p-B9PrXIl_.js → p-BqYyMGrB.js} +1 -1
- package/dist/components/p-CaWqTQBZ.js +1 -0
- package/dist/components/{p-BUbGEXL7.js → p-DivZLd6i.js} +1 -1
- package/dist/components/{p-D2HDHZjz.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 +14 -3
- 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-DP_bvuvB.js → index-DST5-cTx.js} +1 -1
- 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.d.ts +11 -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 +1842 -53
- package/package.json +1 -1
- package/dist/brandsync-wc/p-2598ca88.entry.js +0 -1
- package/dist/brandsync-wc/p-3c8fbaa8.entry.js +0 -1
- package/dist/brandsync-wc/p-3dd9b814.entry.js +0 -1
- package/dist/brandsync-wc/p-8c302968.entry.js +0 -1
- package/dist/brandsync-wc/p-93e44903.entry.js +0 -1
- package/dist/brandsync-wc/p-aa45d877.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
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { r as registerInstance, c as createEvent, a as getElement, h } from './index-DST5-cTx.js';
|
|
2
|
+
|
|
3
|
+
const bsNavigationDrawerItemCss = () => `:host{display:block;--bs-navigation-drawer-item-gap:var(--bs-spacing-100);--bs-navigation-drawer-item-radius:var(--bs-border-radius-100);--bs-navigation-drawer-item-padding-y:var(--bs-spacing-150);--bs-navigation-drawer-item-padding-x:var(--bs-spacing-100);--bs-navigation-drawer-item-padding-left-nested:var(--bs-spacing-600);--bs-navigation-drawer-item-font-weight:var(--bs-font-weight-medium);--bs-navigation-drawer-item-font-size:var(--bs-font-size-md);--bs-navigation-drawer-item-line-height:var(--bs-line-height-body-md);--bs-navigation-drawer-item-color:var(--bs-text-muted);--bs-navigation-drawer-item-color-selected:var(--bs-text-default);--bs-navigation-drawer-item-color-hover:var(--bs-text-secondary);--bs-navigation-drawer-item-bg-selected:var(--bs-surface-selected);--bs-navigation-drawer-item-bg-hover:var(--bs-surface-hover);--bs-navigation-drawer-item-bg-pressed:var(--bs-surface-pressed);--bs-navigation-drawer-item-bg-focus:var(--bs-surface-focus);--bs-navigation-drawer-item-bg-selected-hover:var(--bs-surface-selected-hover);--bs-navigation-drawer-item-bg-selected-pressed:var(--bs-surface-selected-pressed);--bs-navigation-drawer-item-bg-selected-focus:var(--bs-surface-selected-focus);--bs-navigation-drawer-item-focus-ring-color:var(--bs-border-neutral-focus);--bs-navigation-drawer-item-children-gap:var(--bs-spacing-100);--bs-navigation-drawer-item-collapsed-gap:var(--bs-spacing-100);--bs-navigation-drawer-item-collapsed-padding:var(--bs-spacing-100);--bs-navigation-drawer-item-collapsed-icon-padding-x:var(--bs-spacing-100);--bs-navigation-drawer-item-collapsed-icon-padding-y:var(--bs-spacing-50);--bs-navigation-drawer-item-collapsed-font-size:var(--bs-fontsize-caption-sm);--bs-navigation-drawer-item-collapsed-line-height:var(--bs-line-height-caption-sm)}.bs-navigation-drawer-item__root{display:contents}.bs-navigation-drawer-item{box-sizing:border-box;width:100%;display:flex;align-items:center;gap:var(--bs-navigation-drawer-item-gap);border:none;border-radius:var(--bs-navigation-drawer-item-radius);padding:var(--bs-navigation-drawer-item-padding-y) var(--bs-navigation-drawer-item-padding-x);background:transparent;color:var(--bs-navigation-drawer-item-color);font-family:inherit;font-weight:var(--bs-navigation-drawer-item-font-weight);font-size:var(--bs-navigation-drawer-item-font-size);line-height:calc(var(--bs-navigation-drawer-item-line-height) * 1px);text-align:left;cursor:pointer;transition:color var(--bs-duration-fast) var(--bs-easing-standard), background-color var(--bs-duration-fast) var(--bs-easing-standard)}:host(:not([collapsed])) .bs-navigation-drawer-item:hover:not(.bs-navigation-drawer-item--selected){background:var(--bs-navigation-drawer-item-bg-hover);color:var(--bs-navigation-drawer-item-color-hover)}:host(:not([collapsed])) .bs-navigation-drawer-item:active:not(.bs-navigation-drawer-item--selected){background:var(--bs-navigation-drawer-item-bg-pressed);color:var(--bs-navigation-drawer-item-color-hover)}:host(:not([collapsed])) .bs-navigation-drawer-item:focus-visible:not(.bs-navigation-drawer-item--selected){background:var(--bs-navigation-drawer-item-bg-focus);color:var(--bs-navigation-drawer-item-color-hover)}:host(:not([collapsed])) .bs-navigation-drawer-item--selected:hover{background:var(--bs-navigation-drawer-item-bg-selected-hover)}:host(:not([collapsed])) .bs-navigation-drawer-item--selected:active{background:var(--bs-navigation-drawer-item-bg-selected-pressed)}:host(:not([collapsed])) .bs-navigation-drawer-item--selected:focus-visible{background:var(--bs-navigation-drawer-item-bg-selected-focus)}.bs-navigation-drawer-item:focus-visible{outline:2px solid var(--bs-navigation-drawer-item-focus-ring-color);outline-offset:-2px}.bs-navigation-drawer-item--nested{padding-left:var(--bs-navigation-drawer-item-padding-left-nested)}.bs-navigation-drawer-item--selected{background:var(--bs-navigation-drawer-item-bg-selected);color:var(--bs-navigation-drawer-item-color-selected)}.bs-navigation-drawer-item--selected .bs-navigation-drawer-item__icon--has-content{color:var(--bs-navigation-drawer-item-color-selected)}:host([collapsed]) .bs-navigation-drawer-item{flex-direction:column;justify-content:center;gap:var(--bs-navigation-drawer-item-collapsed-gap);padding:var(--bs-navigation-drawer-item-collapsed-padding);background:transparent}.bs-navigation-drawer-item__icon{display:none;width:24px;height:24px;flex-shrink:0;color:inherit}.bs-navigation-drawer-item__icon--has-content{display:inline-flex;align-items:center;justify-content:center}.bs-navigation-drawer-item__icon ::slotted(svg){width:24px;height:24px}:host([collapsed]) .bs-navigation-drawer-item__icon--has-content{padding:var(--bs-navigation-drawer-item-collapsed-icon-padding-y) var(--bs-navigation-drawer-item-collapsed-icon-padding-x);border-radius:var(--bs-navigation-drawer-item-radius)}:host([collapsed][selected]) .bs-navigation-drawer-item__icon--has-content{background:var(--bs-navigation-drawer-item-bg-selected)}:host([collapsed]:not([selected])) .bs-navigation-drawer-item:hover .bs-navigation-drawer-item__icon--has-content{background:var(--bs-navigation-drawer-item-bg-hover)}:host([collapsed]:not([selected])) .bs-navigation-drawer-item:active .bs-navigation-drawer-item__icon--has-content{background:var(--bs-navigation-drawer-item-bg-pressed)}:host([collapsed]:not([selected])) .bs-navigation-drawer-item:focus-visible .bs-navigation-drawer-item__icon--has-content{background:var(--bs-navigation-drawer-item-bg-focus)}:host([collapsed][selected]) .bs-navigation-drawer-item:hover .bs-navigation-drawer-item__icon--has-content{background:var(--bs-navigation-drawer-item-bg-selected-hover)}:host([collapsed][selected]) .bs-navigation-drawer-item:active .bs-navigation-drawer-item__icon--has-content{background:var(--bs-navigation-drawer-item-bg-selected-pressed)}:host([collapsed][selected]) .bs-navigation-drawer-item:focus-visible .bs-navigation-drawer-item__icon--has-content{background:var(--bs-navigation-drawer-item-bg-selected-focus)}:host([collapsed]:not([selected])) .bs-navigation-drawer-item:hover .bs-navigation-drawer-item__label,:host([collapsed]:not([selected])) .bs-navigation-drawer-item:active .bs-navigation-drawer-item__label,:host([collapsed]:not([selected])) .bs-navigation-drawer-item:focus-visible .bs-navigation-drawer-item__label,:host([collapsed]:not([selected])) .bs-navigation-drawer-item:hover .bs-navigation-drawer-item__icon--has-content,:host([collapsed]:not([selected])) .bs-navigation-drawer-item:active .bs-navigation-drawer-item__icon--has-content,:host([collapsed]:not([selected])) .bs-navigation-drawer-item:focus-visible .bs-navigation-drawer-item__icon--has-content{color:var(--bs-navigation-drawer-item-color-hover)}.bs-navigation-drawer-item__label{flex:1;min-width:0;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host([collapsed]) .bs-navigation-drawer-item__label{flex:none;width:100%;text-align:center;font-size:var(--bs-navigation-drawer-item-collapsed-font-size);line-height:calc(var(--bs-navigation-drawer-item-collapsed-line-height) * 1px)}.bs-navigation-drawer-item__chevron{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;color:inherit;transition:transform var(--bs-duration-fast) var(--bs-easing-standard)}.bs-navigation-drawer-item__chevron svg{width:16px;height:16px}.bs-navigation-drawer-item__chevron--expanded{transform:rotate(180deg)}.bs-navigation-drawer-item__children{display:flex;flex-direction:column;gap:var(--bs-navigation-drawer-item-children-gap)}:host(:not([expanded])) .bs-navigation-drawer-item__children{display:none}:host([collapsed]) .bs-navigation-drawer-item__chevron,:host([collapsed]) .bs-navigation-drawer-item__children{display:none}`;
|
|
4
|
+
|
|
5
|
+
const BsNavigationDrawerItem = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
this.bsSelect = createEvent(this, "bsSelect");
|
|
9
|
+
this.bsToggle = createEvent(this, "bsToggle");
|
|
10
|
+
}
|
|
11
|
+
get el() { return getElement(this); }
|
|
12
|
+
/** Tints the row's background/text to indicate it's the current destination. NOT
|
|
13
|
+
* self-toggling -- see the class doc above for why. Ignored (never applied) when `expandable`
|
|
14
|
+
* is true. Reflected so consumers/CSS can target `bs-navigation-drawer-item[selected]`. */
|
|
15
|
+
selected = false;
|
|
16
|
+
/** Renders this row as a disclosure/group header (trailing chevron, self-toggling `expanded`,
|
|
17
|
+
* `bsToggle` instead of `bsSelect` on click) instead of a plain navigable leaf item. See the
|
|
18
|
+
* class doc above for the full click-behavior split. */
|
|
19
|
+
expandable = false;
|
|
20
|
+
/** Whether an `expandable` row's `children` slot is shown. Mutable and reflected -- clicking an
|
|
21
|
+
* `expandable` row toggles this directly (self-toggling, unlike `selected` above), and CSS
|
|
22
|
+
* shows/hides the `children` slot wrapper based on the reflected attribute. Ignored when
|
|
23
|
+
* `expandable` is false. */
|
|
24
|
+
expanded = false;
|
|
25
|
+
/** Marks this as a child row nested under an `expandable` parent (via `slot="children"`) --
|
|
26
|
+
* deepens the left indent and stops reserving `icon` slot space entirely (Figma's nested rows
|
|
27
|
+
* never have icons). */
|
|
28
|
+
nested = false;
|
|
29
|
+
/**
|
|
30
|
+
* Optional accessible name override. Not required for `collapsed` rows -- unlike an
|
|
31
|
+
* icon-only button, the label caption stays visible (just restyled smaller, under the icon) in
|
|
32
|
+
* that mode per Figma, so the button's default accessible-name computation (its own text
|
|
33
|
+
* content) already works. Set this if you want a fuller/different name than the visible caption
|
|
34
|
+
* (e.g. truncated captions, or matching `bs-switch`/`bs-slider`'s `ariaLabel` convention for
|
|
35
|
+
* consistency).
|
|
36
|
+
*/
|
|
37
|
+
ariaLabel = null;
|
|
38
|
+
/**
|
|
39
|
+
* Switches this row to the compact icon-above-caption column layout used when its parent
|
|
40
|
+
* `bs-navigation-drawer` is `collapsed` (see the class doc above). Reflected so
|
|
41
|
+
* `bs-navigation-drawer-item[collapsed]` is CSS-targetable. Also forces `expandable` rows'
|
|
42
|
+
* chevron and `children` slot to stay hidden regardless of `expanded` -- Figma's collapsed rail
|
|
43
|
+
* never shows a nested tree.
|
|
44
|
+
*/
|
|
45
|
+
collapsed = false;
|
|
46
|
+
/** Fires on click, only when `expandable` is false. See the class doc above. */
|
|
47
|
+
bsSelect;
|
|
48
|
+
/** Fires with the new `expanded` value on click, only when `expandable` is true. See the class
|
|
49
|
+
* doc above. */
|
|
50
|
+
bsToggle;
|
|
51
|
+
/** Tracks whether the `icon` slot has assigned content, so the icon wrapper only reserves
|
|
52
|
+
* layout space when there's actually an icon -- same pattern as `bs-tab`'s `hasIcon`. Not used
|
|
53
|
+
* at all for `nested` rows, which never render an icon wrapper in the first place. */
|
|
54
|
+
hasIcon = false;
|
|
55
|
+
/**
|
|
56
|
+
* Computes the initial `hasIcon` state directly from the host's light DOM children, before
|
|
57
|
+
* first render -- same reasoning as `bs-tab.componentWillLoad`'s identical comment (a slot with
|
|
58
|
+
* zero assigned nodes from the start never fires `slotchange`).
|
|
59
|
+
*/
|
|
60
|
+
componentWillLoad() {
|
|
61
|
+
this.hasIcon = this.hasSlottedContent('icon');
|
|
62
|
+
}
|
|
63
|
+
hasSlottedContent(slotName) {
|
|
64
|
+
return Array.from(this.el.childNodes).some(node => node.nodeType === Node.ELEMENT_NODE && node.getAttribute('slot') === slotName);
|
|
65
|
+
}
|
|
66
|
+
onIconSlotchange = (ev) => {
|
|
67
|
+
this.hasIcon = ev.target.assignedNodes().length > 0;
|
|
68
|
+
};
|
|
69
|
+
onClick = () => {
|
|
70
|
+
if (this.expandable) {
|
|
71
|
+
this.expanded = !this.expanded;
|
|
72
|
+
this.bsToggle.emit(this.expanded);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this.bsSelect.emit();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
render() {
|
|
79
|
+
const rowClasses = [
|
|
80
|
+
'bs-navigation-drawer-item',
|
|
81
|
+
this.selected && !this.expandable ? 'bs-navigation-drawer-item--selected' : '',
|
|
82
|
+
this.nested ? 'bs-navigation-drawer-item--nested' : '',
|
|
83
|
+
]
|
|
84
|
+
.filter(Boolean)
|
|
85
|
+
.join(' ');
|
|
86
|
+
// The `children` slot wrapper is deliberately a SIBLING of the <button>, not nested inside
|
|
87
|
+
// it -- a nested child row's own shadow DOM renders its own real <button>, and putting that
|
|
88
|
+
// inside this row's <button> would produce invalid nested interactive controls (button inside
|
|
89
|
+
// button). Nested buttons also break click handling in practice: a click on the child bubbles
|
|
90
|
+
// through this outer <button> too (it's a real ancestor in the flattened tree), which would
|
|
91
|
+
// incorrectly also toggle this parent row on every child click. Both are wrapped in a
|
|
92
|
+
// `display: contents` container so render() still returns a single root node (this codebase's
|
|
93
|
+
// convention, e.g. bs-input.tsx) without that wrapper affecting layout at all.
|
|
94
|
+
return (h("div", { key: '56087157f61114bbc3eda6ea4ed9c953c6776e7a', class: "bs-navigation-drawer-item__root" }, h("button", { key: '9d7bc98cdcccb4724a7d388209e98c66140d509d', type: "button", part: "item", class: rowClasses, "aria-expanded": this.expandable ? String(this.expanded) : undefined, "aria-label": this.ariaLabel ?? undefined, onClick: this.onClick }, !this.nested && (h("span", { key: 'b071e6437b1394002e3494e533e199399b077d09', part: "icon", class: `bs-navigation-drawer-item__icon ${this.hasIcon ? 'bs-navigation-drawer-item__icon--has-content' : ''}` }, h("slot", { key: 'bacc7cf8105454457bd90ca563fd93ab202477af', name: "icon", onSlotchange: this.onIconSlotchange }))), h("span", { key: '373e0875b1a68f5c02fe0473a1ff9a322d2dd9eb', part: "label", class: "bs-navigation-drawer-item__label" }, h("slot", { key: '0ba908c6abe37b35a72bd4e99491e828a7b27661' })), this.expandable && (h("span", { key: '025af7ea24428581f3a7e89642d09638ebeb1734', part: "chevron", class: `bs-navigation-drawer-item__chevron ${this.expanded ? 'bs-navigation-drawer-item__chevron--expanded' : ''}` }, h(ChevronDownIcon, { key: '270f60521effe7a06d4720caa6392a6a76cf5d94' })))), this.expandable && (h("span", { key: '4108f797246cc31029c9a7379d6da6a70ec0dba8', part: "children", class: "bs-navigation-drawer-item__children" }, h("slot", { key: 'b09f6e81f28fff754f46d2e750fa791e63f8cfe3', name: "children" })))));
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
// 16x16 native viewBox (not a 24x24 icon scaled down) -- authored directly at display size, per
|
|
98
|
+
// the class doc's note on this being the author's choice between the two options offered.
|
|
99
|
+
const ChevronDownIcon = () => (h("svg", { viewBox: "0 0 16 16", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("path", { d: "M4 6L8 10L12 6", stroke: "currentColor", "stroke-width": "1.5", "stroke-linecap": "round", "stroke-linejoin": "round" })));
|
|
100
|
+
BsNavigationDrawerItem.style = bsNavigationDrawerItemCss();
|
|
101
|
+
|
|
102
|
+
export { BsNavigationDrawerItem as bs_navigation_drawer_item };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { r as registerInstance, c as createEvent, a as getElement, h } from './index-DST5-cTx.js';
|
|
2
|
+
|
|
3
|
+
const bsNavigationDrawerCss = () => `:host{display:block;--bs-navigation-drawer-bg:var(--bs-surface-base);--bs-navigation-drawer-border:var(--bs-border-neutral-container);--bs-navigation-drawer-padding-y:var(--bs-spacing-300);--bs-navigation-drawer-padding-left:var(--bs-spacing-300);--bs-navigation-drawer-padding-right:var(--bs-spacing-200);--bs-navigation-drawer-gap:var(--bs-spacing-300);--bs-navigation-drawer-width:280px;--bs-navigation-drawer-title-font-family:var(--bs-typography-font-family-heading);--bs-navigation-drawer-title-font-weight:var(--bs-font-weight-bold);--bs-navigation-drawer-title-font-size:var(--bs-font-size-md);--bs-navigation-drawer-title-line-height:var(--bs-line-height-heading-h6);--bs-navigation-drawer-title-color:var(--bs-text-default);--bs-navigation-drawer-collapse-size:48px;--bs-navigation-drawer-collapse-radius:var(--bs-border-radius-100);--bs-navigation-drawer-collapse-hover:var(--bs-color-neutral-container);--bs-navigation-drawer-collapse-pressed:var(--bs-color-neutral-container-pressed);--bs-navigation-drawer-collapse-icon:var(--bs-icon-default);--bs-navigation-drawer-items-gap:var(--bs-spacing-100);--bs-navigation-drawer-collapsed-width:96px;--bs-navigation-drawer-search-trigger-size:44px;--bs-navigation-drawer-search-trigger-bg:var(--bs-color-neutral-container);--bs-navigation-drawer-search-trigger-border:var(--bs-border-neutral-container);--bs-navigation-drawer-search-trigger-icon:var(--bs-icon-default)}.bs-navigation-drawer{box-sizing:border-box;display:flex;flex-direction:column;gap:var(--bs-navigation-drawer-gap);width:var(--bs-navigation-drawer-width);height:100%;background:var(--bs-navigation-drawer-bg);border-right:1px solid var(--bs-navigation-drawer-border);padding:var(--bs-navigation-drawer-padding-y) var(--bs-navigation-drawer-padding-right) var(--bs-navigation-drawer-padding-y) var(--bs-navigation-drawer-padding-left);font-family:inherit;transition:width var(--bs-duration-fast) var(--bs-easing-standard), padding var(--bs-duration-fast) var(--bs-easing-standard)}:host([collapsed]) .bs-navigation-drawer{width:var(--bs-navigation-drawer-collapsed-width);padding-left:0;padding-right:0;align-items:center}.bs-navigation-drawer__logo{flex-shrink:0;display:flex;align-items:center}.bs-navigation-drawer__logo--mark{display:none}:host([collapsed]) .bs-navigation-drawer__logo--full{display:none}:host([collapsed]) .bs-navigation-drawer__logo--mark{display:flex}.bs-navigation-drawer__title-row{flex-shrink:0;display:flex;align-items:center;gap:var(--bs-navigation-drawer-gap)}.bs-navigation-drawer__title{flex:1;min-width:0;font-family:var(--bs-navigation-drawer-title-font-family);font-weight:var(--bs-navigation-drawer-title-font-weight);font-size:var(--bs-navigation-drawer-title-font-size);line-height:calc(var(--bs-navigation-drawer-title-line-height) * 1px);color:var(--bs-navigation-drawer-title-color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host([collapsed]) .bs-navigation-drawer__title{display:none}.bs-navigation-drawer__collapse{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:var(--bs-navigation-drawer-collapse-size);height:var(--bs-navigation-drawer-collapse-size);border:none;border-radius:var(--bs-navigation-drawer-collapse-radius);padding:0;background:transparent;color:var(--bs-navigation-drawer-collapse-icon);cursor:pointer;transition:background-color var(--bs-duration-fast) var(--bs-easing-standard)}.bs-navigation-drawer__collapse svg{width:24px;height:24px}.bs-navigation-drawer__collapse:hover{background:var(--bs-navigation-drawer-collapse-hover)}.bs-navigation-drawer__collapse:active{background:var(--bs-navigation-drawer-collapse-pressed)}.bs-navigation-drawer__collapse:focus-visible{outline:2px solid var(--bs-border-neutral-focus);outline-offset:2px}.bs-navigation-drawer__search{flex-shrink:0;width:100%}:host([collapsed]) .bs-navigation-drawer__search{display:none}.bs-navigation-drawer__search-trigger{display:none;flex-shrink:0;align-items:center;justify-content:center;box-sizing:border-box;width:var(--bs-navigation-drawer-search-trigger-size);height:var(--bs-navigation-drawer-search-trigger-size);border:1px solid var(--bs-navigation-drawer-search-trigger-border);border-radius:var(--bs-navigation-drawer-collapse-radius);background:var(--bs-navigation-drawer-search-trigger-bg);color:var(--bs-navigation-drawer-search-trigger-icon);cursor:pointer;transition:background-color var(--bs-duration-fast) var(--bs-easing-standard)}.bs-navigation-drawer__search-trigger svg{width:24px;height:24px}.bs-navigation-drawer__search-trigger:focus-visible{outline:2px solid var(--bs-border-neutral-focus);outline-offset:2px}:host([collapsed]) .bs-navigation-drawer__search-trigger{display:inline-flex}.bs-navigation-drawer__items{flex:1;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:var(--bs-navigation-drawer-items-gap);scrollbar-width:none}.bs-navigation-drawer__items::-webkit-scrollbar{display:none}`;
|
|
4
|
+
|
|
5
|
+
const BsNavigationDrawer = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
this.bsCollapse = createEvent(this, "bsCollapse");
|
|
9
|
+
this.bsSearchClick = createEvent(this, "bsSearchClick");
|
|
10
|
+
}
|
|
11
|
+
get el() { return getElement(this); }
|
|
12
|
+
/** Heading text shown next to the collapse toggle, and used as the `<nav>` landmark's
|
|
13
|
+
* `aria-label` (so the landmark keeps a name even when `collapsed` hides the visible text). */
|
|
14
|
+
heading = 'Main Menu';
|
|
15
|
+
/** Whether this drawer can be collapsed at all. `false` renders no collapse toggle/chevron --
|
|
16
|
+
* a "fixed" side nav (Carbon's terminology: a `Fixed Side Nav` never collapses, as opposed to a
|
|
17
|
+
* rail-capable one) that's always fully expanded. `collapsed` is ignored while this is `false`. */
|
|
18
|
+
collapsible = true;
|
|
19
|
+
/** Narrows the drawer to a 96px icon-only rail (Figma node 8028:135374). Mutable and reflected
|
|
20
|
+
* -- clicking the collapse toggle toggles this directly (self-toggling, see the class doc above
|
|
21
|
+
* for why), and this component keeps every direct-child `bs-navigation-drawer-item`'s own
|
|
22
|
+
* `collapsed` prop synced to match (see `syncItemsCollapsed`). */
|
|
23
|
+
collapsed = false;
|
|
24
|
+
/** Fires with the new `collapsed` value when the collapse toggle button is clicked. */
|
|
25
|
+
bsCollapse;
|
|
26
|
+
/** Fires when the compact search-trigger button (shown instead of the `search` slot while
|
|
27
|
+
* `collapsed`) is clicked -- e.g. to open a full search overlay. This component has no
|
|
28
|
+
* visibility into what the `search` slot actually contains, so it can't drive a real search
|
|
29
|
+
* itself once shrunk to icon size. */
|
|
30
|
+
bsSearchClick;
|
|
31
|
+
/** Forwarded straight to both internal `bs-logo` elements' own `background` prop. Defaults to
|
|
32
|
+
* `"auto"`, which follows the ambient `[data-theme="dark"]` state automatically (see `bs-logo`'s
|
|
33
|
+
* own docs) -- so if this drawer ends up on a dark surface via the normal theming mechanism, the
|
|
34
|
+
* logo switches to its dedicated dark-background asset with no wiring needed. Set
|
|
35
|
+
* `"light"`/`"dark"` explicitly only if you've overridden `--bs-navigation-drawer-bg` to
|
|
36
|
+
* something dark yourself *without* setting `[data-theme="dark"]`, and need to pin the logo
|
|
37
|
+
* regardless of theme. Has no visible effect on the `variant="mark"` logo shown while
|
|
38
|
+
* `collapsed` (see `bs-logo`'s own docs -- there's only one real designed mark asset, it's
|
|
39
|
+
* background-agnostic). */
|
|
40
|
+
logoBackground = 'auto';
|
|
41
|
+
onCollapsedChange(collapsed) {
|
|
42
|
+
this.syncItemsCollapsed(collapsed);
|
|
43
|
+
}
|
|
44
|
+
componentDidLoad() {
|
|
45
|
+
this.syncItemsCollapsed(this.collapsed);
|
|
46
|
+
}
|
|
47
|
+
/** Keeps every direct-child `bs-navigation-drawer-item`'s `collapsed` prop in sync with this
|
|
48
|
+
* component's own -- same direct-children-prop-sync approach `bs-tabs` uses for `selected`
|
|
49
|
+
* across its `bs-tab` children. Only direct children (top-level items): Figma's collapsed rail
|
|
50
|
+
* never shows nested/expanded children in the first place (see bs-navigation-drawer-item.css's
|
|
51
|
+
* `:host([collapsed])` rule forcing those hidden), so there's nothing to sync on them. */
|
|
52
|
+
syncItemsCollapsed(collapsed) {
|
|
53
|
+
const items = this.el.querySelectorAll(':scope > bs-navigation-drawer-item');
|
|
54
|
+
items.forEach(item => {
|
|
55
|
+
item.collapsed = collapsed;
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
onCollapseClick = () => {
|
|
59
|
+
this.collapsed = !this.collapsed;
|
|
60
|
+
this.bsCollapse.emit(this.collapsed);
|
|
61
|
+
};
|
|
62
|
+
onSearchTriggerClick = () => {
|
|
63
|
+
this.bsSearchClick.emit();
|
|
64
|
+
};
|
|
65
|
+
render() {
|
|
66
|
+
return (h("nav", { key: '643a802cfef5b124603056ca409c67e5e9fa0561', class: "bs-navigation-drawer", "aria-label": this.heading }, h("div", { key: '31384937f95737b961aa4f1cb0b535fc78c8fcfd', part: "logo", class: "bs-navigation-drawer__logo bs-navigation-drawer__logo--full" }, h("bs-logo", { key: '834c8a1a031072803815085036ea6b8a744012a2', variant: "full", background: this.logoBackground })), h("div", { key: '50b877188cea0fce86959517f1e14eb4f6869923', part: "logo", class: "bs-navigation-drawer__logo bs-navigation-drawer__logo--mark" }, h("bs-logo", { key: '64b66e3e221d9641026009e0b7b0a0bbdf7b946a', variant: "mark", background: this.logoBackground })), h("div", { key: 'a7634d178a491940cb43ceca3dd93aa83539a316', class: "bs-navigation-drawer__title-row" }, h("span", { key: 'fc018e4474f3a38f96538be9064da6b472193b3f', part: "title", class: "bs-navigation-drawer__title" }, this.heading), this.collapsible && (h("button", { key: '516e28aba1e037b74ac616fbc8f293c0cef9da1a', type: "button", part: "collapse", class: "bs-navigation-drawer__collapse", "aria-label": this.collapsed ? 'Expand' : 'Collapse', "aria-pressed": this.collapsed ? 'true' : 'false', onClick: this.onCollapseClick }, h(CaretLeftIcon, { key: 'fba23fed9c12283360bd89dddee6248ec45c98fb' })))), h("div", { key: '29279ec0051d495810f177a194f8dc6f3c649f90', part: "search", class: "bs-navigation-drawer__search" }, h("slot", { key: '6eef2761d887ddc776132327c8343626071fc3b3', name: "search" })), h("button", { key: '4ee9e0ca46ca85b17394466b452cba29c0e528cc', type: "button", part: "search-trigger", class: "bs-navigation-drawer__search-trigger", "aria-label": "Search", onClick: this.onSearchTriggerClick }, h(SearchIcon, { key: '844c581c6ea6c496718866150e24415f746daa36' })), h("div", { key: '3f7f3c6bb4eae12aa87c732fbc4da6d5b3a87e40', part: "items", class: "bs-navigation-drawer__items" }, h("slot", { key: '20833d282601ea298a39ead5b928155e2db33a97' }))));
|
|
67
|
+
}
|
|
68
|
+
static get watchers() { return {
|
|
69
|
+
"collapsed": [{
|
|
70
|
+
"onCollapsedChange": 0
|
|
71
|
+
}]
|
|
72
|
+
}; }
|
|
73
|
+
};
|
|
74
|
+
// Same inline-icon-helper-function pattern as bs-chatbot-header.tsx's NewChatIcon/ExpandIcon/etc.
|
|
75
|
+
const CaretLeftIcon = () => (h("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("path", { d: "M15 18L9 12L15 6", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" })));
|
|
76
|
+
const SearchIcon = () => (h("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("circle", { cx: "11", cy: "11", r: "7", stroke: "currentColor", "stroke-width": "2" }), h("path", { d: "M16.5 16.5L21 21", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" })));
|
|
77
|
+
BsNavigationDrawer.style = bsNavigationDrawerCss();
|
|
78
|
+
|
|
79
|
+
export { BsNavigationDrawer as bs_navigation_drawer };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { r as registerInstance, h } from './index-DST5-cTx.js';
|
|
2
|
+
|
|
3
|
+
const bsNavigationHeaderCss = () => `:host{display:block;--bs-navigation-header-bg:var(--bs-surface-base);--bs-navigation-header-border:var(--bs-border-default);--bs-navigation-header-padding-top:var(--bs-spacing-200);--bs-navigation-header-padding-bottom:var(--bs-spacing-100);--bs-navigation-header-padding-x:var(--bs-margin-fluid);--bs-navigation-header-max-width:1920px;--bs-navigation-header-item-gap:calc(var(--bs-navigation-header-gap) * 1px);--bs-navigation-header-slot-gap:var(--bs-spacing-100);--bs-navigation-header-skip-link-bg:var(--bs-surface-action);--bs-navigation-header-skip-link-color:var(--bs-text-inverse)}.bs-navigation-header{box-sizing:border-box;position:relative;display:flex;align-items:center;width:100%;max-width:var(--bs-navigation-header-max-width);background:var(--bs-navigation-header-bg);border-bottom:1px solid var(--bs-navigation-header-border);padding:var(--bs-navigation-header-padding-top) var(--bs-navigation-header-padding-x) var(--bs-navigation-header-padding-bottom)}.bs-navigation-header__skip-link{position:absolute;top:var(--bs-spacing-100);left:-9999px;z-index:1;padding:var(--bs-spacing-100) var(--bs-spacing-200);border-radius:var(--bs-border-radius-100);background:var(--bs-navigation-header-skip-link-bg);color:var(--bs-navigation-header-skip-link-color);font-size:var(--bs-font-size-sm);text-decoration:underline}.bs-navigation-header__skip-link:focus{left:var(--bs-navigation-header-padding-x)}.bs-navigation-header--default,.bs-navigation-header--with-navigation-drawer{gap:var(--bs-navigation-header-item-gap)}.bs-navigation-header__logo{flex-shrink:0;display:flex;align-items:center}.bs-navigation-header--center .bs-navigation-header__logo{flex:1 0 0;min-width:0}.bs-navigation-header__left{display:flex;align-items:center;gap:var(--bs-navigation-header-slot-gap);flex-shrink:0}.bs-navigation-header__right{display:flex;align-items:center;justify-content:flex-end;gap:var(--bs-navigation-header-slot-gap);flex:1 0 0;min-width:0}`;
|
|
4
|
+
|
|
5
|
+
const BsNavigationHeader = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
}
|
|
9
|
+
/** Controls whether the logo renders and how the `left`/`right` slots are laid out -- see the
|
|
10
|
+
* class doc above for the three variants' exact behavior. */
|
|
11
|
+
alignment = 'default';
|
|
12
|
+
/** Accessible label for the header landmark, useful when a page has more than one `<header>`
|
|
13
|
+
* (e.g. this one plus a page-specific sub-header) and screen reader users need to tell them
|
|
14
|
+
* apart in the landmarks list. */
|
|
15
|
+
ariaLabel = null;
|
|
16
|
+
/**
|
|
17
|
+
* Fragment/URL to jump to when the "Skip to main content" link is activated (e.g.
|
|
18
|
+
* `#main-content`, matching an id on your page's main landmark). Unset by default -- the link
|
|
19
|
+
* is opt-in rather than pointing at a guessed default id, since a skip link to a target that
|
|
20
|
+
* doesn't exist on the consumer's page is worse than no skip link at all (it silently does
|
|
21
|
+
* nothing when activated). Set this to the same id your page's `<main>` (or equivalent) already
|
|
22
|
+
* has to enable it.
|
|
23
|
+
*/
|
|
24
|
+
skipToContentHref = null;
|
|
25
|
+
/** Link text for the skip-to-content link. Only rendered when `skipToContentHref` is set. */
|
|
26
|
+
skipToContentLabel = 'Skip to main content';
|
|
27
|
+
/** Forwarded straight to the internal `bs-logo`'s own `background` prop. Defaults to `"auto"`,
|
|
28
|
+
* which follows the ambient `[data-theme="dark"]` state automatically (see `bs-logo`'s own
|
|
29
|
+
* docs) -- so if this bar ends up on a dark surface via the normal theming mechanism, the logo
|
|
30
|
+
* switches to its dedicated dark-background asset with no wiring needed. Set `"light"`/`"dark"`
|
|
31
|
+
* explicitly only if you've overridden `--bs-navigation-header-bg` to something dark yourself
|
|
32
|
+
* *without* setting `[data-theme="dark"]`, and need to pin the logo regardless of theme. */
|
|
33
|
+
logoBackground = 'auto';
|
|
34
|
+
render() {
|
|
35
|
+
const showLogo = this.alignment !== 'with-navigation-drawer';
|
|
36
|
+
const rootClasses = `bs-navigation-header bs-navigation-header--${this.alignment}`;
|
|
37
|
+
return (h("header", { key: 'e106c295d18a32638e8b2e8179264da30c6343fd', class: rootClasses, "aria-label": this.ariaLabel ?? undefined }, this.skipToContentHref && (h("a", { key: '9b0aa4f626e2ac17fd02ff35f63861be5cca0a4c', part: "skip-link", class: "bs-navigation-header__skip-link", href: this.skipToContentHref }, this.skipToContentLabel)), showLogo && (h("bs-logo", { key: '079ebb7b6077307cb84dacf5504eeca259c265df', part: "logo", class: "bs-navigation-header__logo", variant: "full", background: this.logoBackground })), h("div", { key: '79fb735078a3d2b200811c4c055b881fb17feb54', part: "left", class: "bs-navigation-header__left" }, h("slot", { key: '8c72405a0adeb158bd6427e9c6afb77950cb1de2', name: "left" })), h("div", { key: '81941860e7e9b2780cc02b3ca9a13c0f0cde00bd', part: "right", class: "bs-navigation-header__right" }, h("slot", { key: 'ceb361449083be06404b862e22d461daa56cd8ca', name: "right" }))));
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
BsNavigationHeader.style = bsNavigationHeaderCss();
|
|
41
|
+
|
|
42
|
+
export { BsNavigationHeader as bs_navigation_header };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { r as registerInstance, c as createEvent, a as getElement, h } from './index-DST5-cTx.js';
|
|
2
|
+
|
|
3
|
+
const bsRadioCss = () => `:host{display:inline-block;--bs-radio-size:var(--bs-spacing-300);--bs-radio-border-width:2px;--bs-radio-state-layer-size:40px;--bs-radio-hit-area-size:48px;--bs-radio-gap:var(--bs-spacing-100)}.bs-radio{position:relative;display:inline-flex;align-items:center;gap:var(--bs-radio-gap);font-family:inherit;cursor:pointer}.bs-radio--disabled{cursor:not-allowed}.bs-radio__input{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;opacity:0;cursor:pointer}.bs-radio__input:disabled{cursor:not-allowed}.bs-radio__hit-area{box-sizing:border-box;position:relative;display:flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--bs-radio-hit-area-size);height:var(--bs-radio-hit-area-size)}.bs-radio__state-layer{box-sizing:border-box;display:flex;align-items:center;justify-content:center;width:var(--bs-radio-state-layer-size);height:var(--bs-radio-state-layer-size);border-radius:50%;background:var(--bs-radio-bg-default)}.bs-radio__circle{box-sizing:border-box;display:flex;align-items:center;justify-content:center;flex-shrink:0;width:var(--bs-radio-size);height:var(--bs-radio-size);border:var(--bs-radio-border-width) solid var(--bs-radio-enabled-border-default);border-radius:50%;background:transparent}.bs-radio__circle--selected{border-color:var(--bs-radio-selected-border-default)}.bs-radio__dot{width:50%;height:50%;border-radius:50%;background:var(--bs-radio-icon-checked)}.bs-radio__input:hover:not(:disabled)~.bs-radio__hit-area .bs-radio__state-layer{background:var(--bs-radio-bg-hover)}.bs-radio__input:hover:not(:disabled)~.bs-radio__hit-area .bs-radio__circle{border-color:var(--bs-radio-enabled-border-hover)}.bs-radio__input:hover:not(:disabled)~.bs-radio__hit-area .bs-radio__circle--selected{border-color:var(--bs-radio-selected-border-hover)}.bs-radio__input:hover:not(:disabled)~.bs-radio__hit-area .bs-radio__circle--selected .bs-radio__dot{background:var(--bs-radio-icon-hover)}.bs-radio__input:focus-visible~.bs-radio__hit-area .bs-radio__state-layer{background:var(--bs-radio-bg-focus);outline:2px solid var(--bs-radio-focus-ring);outline-offset:2px}.bs-radio__input:focus-visible~.bs-radio__hit-area .bs-radio__circle{border-color:var(--bs-radio-enabled-border-focus)}.bs-radio__input:focus-visible~.bs-radio__hit-area .bs-radio__circle--selected{border-color:var(--bs-radio-selected-border-focus)}.bs-radio__input:active:not(:disabled)~.bs-radio__hit-area .bs-radio__state-layer{background:var(--bs-radio-bg-pressed)}.bs-radio__input:active:not(:disabled)~.bs-radio__hit-area .bs-radio__circle{border-color:var(--bs-radio-enabled-border-pressed)}.bs-radio__input:active:not(:disabled)~.bs-radio__hit-area .bs-radio__circle--selected{border-color:var(--bs-radio-selected-border-pressed)}.bs-radio__input:disabled~.bs-radio__hit-area .bs-radio__state-layer{background:var(--bs-radio-bg-disabled)}.bs-radio__input:disabled~.bs-radio__hit-area .bs-radio__circle{border-color:var(--bs-radio-border-disabled)}.bs-radio__input:disabled~.bs-radio__hit-area .bs-radio__circle--selected .bs-radio__dot{background:var(--bs-radio-icon-disabled)}.bs-radio__label{font-size:var(--bs-font-size-md);color:var(--bs-radio-label-default)}.bs-radio--disabled .bs-radio__label{color:var(--bs-radio-label-disabled)}`;
|
|
4
|
+
|
|
5
|
+
const BsRadio = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
this.bsChange = createEvent(this, "bsChange");
|
|
9
|
+
}
|
|
10
|
+
get el() { return getElement(this); }
|
|
11
|
+
/** The native radio input's `name` attribute. Passed straight through to the native input inside.
|
|
12
|
+
* NOTE: because each `bs-radio` renders its own shadow root, native `<input type="radio">`
|
|
13
|
+
* mutual-exclusion grouping (which the HTML spec scopes to a single DOM tree) does NOT extend
|
|
14
|
+
* across separate `bs-radio` instances sharing the same `name` -- checking one will not natively
|
|
15
|
+
* uncheck another. Within a single instance this still behaves like a normal radio input. See
|
|
16
|
+
* bs-radio.mdx's Accessibility section for this known gap; consumers building a group currently
|
|
17
|
+
* need to manage mutual exclusivity themselves (e.g. via `bsChange`) until a `bs-radio-group`
|
|
18
|
+
* wrapper exists. */
|
|
19
|
+
name;
|
|
20
|
+
/** The native radio input's `value` attribute -- read from `event.target.value`, or used when
|
|
21
|
+
* wiring the group up to a form. */
|
|
22
|
+
value;
|
|
23
|
+
/** Whether the radio is checked. Mutable so clicking the label/input sets it directly. */
|
|
24
|
+
checked = false;
|
|
25
|
+
/** Disables the radio: sets the native `disabled` attribute, suppresses hover/focus styling, and
|
|
26
|
+
* prevents toggling. */
|
|
27
|
+
disabled = false;
|
|
28
|
+
/** Emitted with this radio's own `value` when it becomes checked via user interaction. Since
|
|
29
|
+
* native same-`name` grouping doesn't cross shadow-root boundaries (see the `name` prop's doc),
|
|
30
|
+
* a consumer wiring up a group of `bs-radio`s must itself set `checked = false` on the others in
|
|
31
|
+
* response to this event -- there's no automatic un-checking to rely on here. */
|
|
32
|
+
bsChange;
|
|
33
|
+
onChange = (ev) => {
|
|
34
|
+
const checked = ev.target.checked;
|
|
35
|
+
this.checked = checked;
|
|
36
|
+
if (checked) {
|
|
37
|
+
this.bsChange.emit(this.value);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
render() {
|
|
41
|
+
return (h("label", { key: 'da5cdc3a3661ed9d2f10741e46f87cc9beb9dbfd', class: `bs-radio ${this.disabled ? 'bs-radio--disabled' : ''}` }, h("input", { key: '431a861dbbd5ea993272714e5c366eaea3a0bd8d', class: "bs-radio__input", type: "radio", name: this.name, value: this.value, checked: this.checked, disabled: this.disabled, onChange: this.onChange }), h("span", { key: '525d9b9d3d980a70af93a7ee800043ce0ba8d98e', class: "bs-radio__hit-area" }, h("span", { key: '8c19cc4f2eb771fe82d4cb20376563b61da0f69e', class: "bs-radio__state-layer" }, h("span", { key: '33829a5a6c179a8bc3289f4a25fe65ddbcce5c96', part: "circle", class: `bs-radio__circle ${this.checked ? 'bs-radio__circle--selected' : ''}` }, this.checked && h("span", { key: '36fc0fa7d46a6bd32879c83a3d084afb282fd39d', part: "dot", class: "bs-radio__dot" })))), h("span", { key: 'efc3e222bae86289767794a23ede57b349567238', part: "label", class: "bs-radio__label" }, h("slot", { key: 'd4842d16ecade0d79572bf53a37549f017f846dd' }))));
|
|
42
|
+
}
|
|
43
|
+
static get delegatesFocus() { return true; }
|
|
44
|
+
};
|
|
45
|
+
BsRadio.style = bsRadioCss();
|
|
46
|
+
|
|
47
|
+
export { BsRadio as bs_radio };
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import { r as registerInstance, c as createEvent, a as getElement, h } from './index-DST5-cTx.js';
|
|
2
|
+
|
|
3
|
+
const bsSliderCss = () => `:host{display:block;--bs-slider-gap:var(--bs-spacing-100);--bs-slider-label-color:var(--bs-text-default);--bs-slider-label-color-disabled:var(--bs-text-muted);--bs-slider-label-font-weight:var(--bs-font-weight-semibold);--bs-slider-track-height:var(--bs-spacing-50);--bs-slider-track-radius:var(--bs-border-radius-full);--bs-slider-track-bg:var(--bs-surface-container);--bs-slider-track-bg-disabled:var(--bs-surface-action-disabled);--bs-slider-fill-bg:var(--bs-surface-action);--bs-slider-fill-bg-disabled:var(--bs-surface-on-action-disabled);--bs-slider-knob-hit-size:var(--bs-spacing-600);--bs-slider-knob-size:var(--bs-spacing-300);--bs-slider-knob-bg:var(--bs-surface-action);--bs-slider-knob-color-disabled:var(--bs-surface-on-action-disabled);--bs-slider-focus-ring-color:var(--bs-border-primary-focus);--bs-slider-focus-ring-gap-color:var(--bs-surface-base);--bs-slider-tick-bg:var(--bs-surface-inset);--bs-slider-tooltip-bg:var(--bs-surface-inverse);--bs-slider-tooltip-color:var(--bs-text-inverse);--bs-slider-tooltip-radius:var(--bs-border-radius-50);--bs-slider-field-width:56px;--bs-slider-field-border:var(--bs-input-border-default);--bs-slider-field-bg:var(--bs-input-bg-default);--bs-slider-field-radius:var(--bs-border-radius-100);--bs-slider-field-text:var(--bs-input-text);--bs-slider-field-text-disabled:var(--bs-text-on-disabled);--bs-slider-bound-color:var(--bs-text-default);--bs-slider-bound-color-disabled:var(--bs-text-on-disabled)}.bs-slider{display:flex;flex-direction:column;gap:var(--bs-slider-gap);font-family:inherit}.bs-slider__label{font-size:var(--bs-font-size-sm);font-weight:var(--bs-slider-label-font-weight);color:var(--bs-slider-label-color)}.bs-slider--disabled .bs-slider__label{color:var(--bs-slider-label-color-disabled);font-weight:normal}.bs-slider__header{display:flex;align-items:center;justify-content:space-between;gap:var(--bs-slider-gap)}.bs-slider__value-fields{display:flex;align-items:center;gap:var(--bs-spacing-100)}.bs-slider__row{display:flex;align-items:center;gap:var(--bs-slider-gap)}.bs-slider__bound{color:var(--bs-slider-bound-color);font-size:var(--bs-font-size-md);flex-shrink:0}.bs-slider--disabled .bs-slider__bound{color:var(--bs-slider-bound-color-disabled)}.bs-slider__separator{color:var(--bs-slider-field-text);flex-shrink:0}.bs-slider--disabled .bs-slider__separator{color:var(--bs-slider-field-text-disabled)}.bs-slider__field{box-sizing:border-box;display:flex;align-items:center;gap:var(--bs-spacing-25);flex-shrink:0;width:var(--bs-slider-field-width);border:1px solid var(--bs-slider-field-border);border-radius:var(--bs-slider-field-radius);background:var(--bs-slider-field-bg);padding:var(--bs-spacing-50) var(--bs-spacing-100)}.bs-slider--disabled .bs-slider__field{cursor:not-allowed}.bs-slider__field-input{flex:1;min-width:0;border:none;outline:none;padding:0;background:transparent;color:var(--bs-slider-field-text);font-size:var(--bs-font-size-sm);font-family:inherit;text-align:left;-moz-appearance:textfield}.bs-slider__field-suffix{flex-shrink:0;color:var(--bs-slider-field-text);font-size:var(--bs-font-size-sm)}.bs-slider--disabled .bs-slider__field-suffix{color:var(--bs-slider-field-text-disabled)}.bs-slider__field-input::-webkit-outer-spin-button,.bs-slider__field-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.bs-slider__field-input:disabled{color:var(--bs-slider-field-text-disabled);cursor:not-allowed}.bs-slider__track-wrapper{position:relative;flex:1;min-width:0;height:var(--bs-slider-knob-hit-size);display:flex;align-items:center}.bs-slider__track{position:relative;width:100%;height:var(--bs-slider-track-height);border-radius:var(--bs-slider-track-radius);background:var(--bs-slider-track-bg);overflow:visible;pointer-events:none}.bs-slider--disabled .bs-slider__track{background:var(--bs-slider-track-bg-disabled)}.bs-slider__track-fill{position:absolute;top:0;bottom:0;left:var(--bs-slider-fill-start, 0%);right:calc(100% - var(--bs-slider-fill-end, 0%));border-radius:var(--bs-slider-track-radius);background:var(--bs-slider-fill-bg)}.bs-slider--disabled .bs-slider__track-fill{background:var(--bs-slider-fill-bg-disabled)}.bs-slider__ticks{position:absolute;top:50%;left:0;width:100%;height:0;display:flex;justify-content:space-between;transform:translateY(-50%);pointer-events:none}.bs-slider__tick{width:2px;height:var(--bs-spacing-50);background:var(--bs-slider-tick-bg)}.bs-slider__tick--hidden{opacity:0}.bs-slider__input{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;appearance:none;background:transparent;cursor:pointer}.bs-slider--disabled .bs-slider__input{cursor:not-allowed}.bs-slider__input::-webkit-slider-runnable-track{background:transparent}.bs-slider__input::-moz-range-track{background:transparent}.bs-slider__input::-webkit-slider-thumb{appearance:none;box-sizing:border-box;width:var(--bs-slider-knob-size);height:var(--bs-slider-knob-size);border-radius:var(--bs-border-radius-full);border:none;background:var(--bs-slider-knob-bg);cursor:pointer}.bs-slider__input::-moz-range-thumb{box-sizing:border-box;width:var(--bs-slider-knob-size);height:var(--bs-slider-knob-size);border-radius:var(--bs-border-radius-full);border:none;background:var(--bs-slider-knob-bg);cursor:pointer}.bs-slider--disabled .bs-slider__input::-webkit-slider-thumb{cursor:not-allowed;background:var(--bs-slider-knob-color-disabled)}.bs-slider--disabled .bs-slider__input::-moz-range-thumb{cursor:not-allowed;background:var(--bs-slider-knob-color-disabled)}.bs-slider__input--start,.bs-slider__input--end{pointer-events:none}.bs-slider__input--start::-webkit-slider-thumb,.bs-slider__input--end::-webkit-slider-thumb{pointer-events:auto}.bs-slider__input--start::-moz-range-thumb,.bs-slider__input--end::-moz-range-thumb{pointer-events:auto}.bs-slider__input:focus-visible::-webkit-slider-thumb,.bs-slider__input:active::-webkit-slider-thumb{box-shadow:0 0 0 2px var(--bs-slider-focus-ring-gap-color), 0 0 0 4px var(--bs-slider-focus-ring-color)}.bs-slider__input:focus-visible::-moz-range-thumb,.bs-slider__input:active::-moz-range-thumb{box-shadow:0 0 0 2px var(--bs-slider-focus-ring-gap-color), 0 0 0 4px var(--bs-slider-focus-ring-color)}.bs-slider__tooltip{position:absolute;bottom:calc(50% + 38px);transform:translateX(-50%);padding:var(--bs-spacing-25) var(--bs-spacing-100);background:var(--bs-slider-tooltip-bg);color:var(--bs-slider-tooltip-color);border-radius:var(--bs-slider-tooltip-radius);font-size:var(--bs-font-size-xs);white-space:nowrap;opacity:0;pointer-events:none;transition:opacity 0.1s ease}.bs-slider__tooltip::after{content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);width:8px;height:8px;background:var(--bs-slider-tooltip-bg);clip-path:polygon(50% 100%, 0% 0%, 100% 0%)}.bs-slider__input:focus-visible~.bs-slider__tooltip,.bs-slider__input:active~.bs-slider__tooltip{opacity:1}.bs-slider__input--start:focus-visible~.bs-slider__tooltip--end,.bs-slider__input--start:active~.bs-slider__tooltip--end,.bs-slider__input--end:focus-visible~.bs-slider__tooltip--start,.bs-slider__input--end:active~.bs-slider__tooltip--start{opacity:0}`;
|
|
4
|
+
|
|
5
|
+
const BsSlider = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
this.bsChange = createEvent(this, "bsChange");
|
|
9
|
+
this.bsRangeChange = createEvent(this, "bsRangeChange");
|
|
10
|
+
}
|
|
11
|
+
get el() { return getElement(this); }
|
|
12
|
+
/** Which slider shape to render. `range` uses two thumbs (`valueStart`/`valueEnd`); `default`
|
|
13
|
+
* and `segmented` use one thumb (`value`). `segmented` additionally draws `segments` tick marks
|
|
14
|
+
* along the track. */
|
|
15
|
+
type = 'default';
|
|
16
|
+
/** Shows/hides the "Label" text and editable percentage field(s) above the track, and the
|
|
17
|
+
* static min/max bound labels flanking it. When `false`, only the bare track (and its
|
|
18
|
+
* knob/knobs) renders. */
|
|
19
|
+
showLabel = true;
|
|
20
|
+
/** Label text shown above the track when `showLabel` is set. */
|
|
21
|
+
label = 'Label';
|
|
22
|
+
/** Minimum selectable value, for all `type`s. */
|
|
23
|
+
min = 0;
|
|
24
|
+
/** Maximum selectable value, for all `type`s. */
|
|
25
|
+
max = 100;
|
|
26
|
+
/** Step size between selectable values. For `type="segmented"`, the effective step is derived
|
|
27
|
+
* from `(max - min) / segments` instead, so the thumb always snaps to a tick. */
|
|
28
|
+
step = 1;
|
|
29
|
+
/** Current value for `type="default"`/`type="segmented"`. Ignored for `type="range"` -- use
|
|
30
|
+
* `valueStart`/`valueEnd` instead. Mutable so dragging the thumb updates it directly. */
|
|
31
|
+
value = 0;
|
|
32
|
+
/** Lower thumb's value for `type="range"`. Defaults to `min` when unset. Mutable so dragging the
|
|
33
|
+
* thumb updates it directly. */
|
|
34
|
+
valueStart;
|
|
35
|
+
/** Upper thumb's value for `type="range"`. Defaults to `max` when unset. Mutable so dragging the
|
|
36
|
+
* thumb updates it directly. */
|
|
37
|
+
valueEnd;
|
|
38
|
+
/** Number of equal divisions marked by tick lines along the track, for `type="segmented"` only.
|
|
39
|
+
* The first tick (at the very start of the track) is rendered with `opacity: 0` to keep the
|
|
40
|
+
* tick spacing math consistent while not visually doubling up with the track's own start edge --
|
|
41
|
+
* this matches the design spec, not a bug. */
|
|
42
|
+
segments = 10;
|
|
43
|
+
/** Disables the slider: sets the native `disabled` attribute on the range input(s), suppresses
|
|
44
|
+
* hover/focus/drag styling and the value tooltip, and prevents interaction. */
|
|
45
|
+
disabled = false;
|
|
46
|
+
/**
|
|
47
|
+
* Accessible name for the slider's native range input(s). Required whenever `showLabel` is
|
|
48
|
+
* `false` (a bare track with no visible "Label" text) -- without it, the internal native
|
|
49
|
+
* `<input>` has no accessible name at all. Setting `aria-label` directly on the `<bs-slider>`
|
|
50
|
+
* host does NOT work for this: that attribute stays on the light-DOM host and is never forwarded
|
|
51
|
+
* into the shadow DOM by the browser. Same pattern/reasoning as `bs-switch`'s and `bs-checkbox`'s
|
|
52
|
+
* identical `ariaLabel` prop. For `type="range"`, this labels the lower-bound thumb; the
|
|
53
|
+
* upper-bound thumb gets `"${ariaLabel} end"` (or `"End value"` when `ariaLabel` is unset).
|
|
54
|
+
*/
|
|
55
|
+
ariaLabel = null;
|
|
56
|
+
/** Emitted when `value` changes via user interaction (dragging the thumb, or committing the
|
|
57
|
+
* value field), with the new value. Only fires for `type="default"`/`type="segmented"`. */
|
|
58
|
+
bsChange;
|
|
59
|
+
/** Emitted when `valueStart`/`valueEnd` changes via user interaction, with both current values.
|
|
60
|
+
* Only fires for `type="range"`. */
|
|
61
|
+
bsRangeChange;
|
|
62
|
+
get effectiveValueStart() {
|
|
63
|
+
return this.valueStart ?? this.min;
|
|
64
|
+
}
|
|
65
|
+
get effectiveValueEnd() {
|
|
66
|
+
return this.valueEnd ?? this.max;
|
|
67
|
+
}
|
|
68
|
+
/** Effective step for the native range input(s): `step` as-is, except for `type="segmented"`,
|
|
69
|
+
* where it's derived from `segments` so the thumb always lands on a tick. */
|
|
70
|
+
get effectiveStep() {
|
|
71
|
+
if (this.type === 'segmented' && this.segments > 0) {
|
|
72
|
+
return (this.max - this.min) / this.segments;
|
|
73
|
+
}
|
|
74
|
+
return this.step;
|
|
75
|
+
}
|
|
76
|
+
clamp(n) {
|
|
77
|
+
if (Number.isNaN(n))
|
|
78
|
+
return this.min;
|
|
79
|
+
return Math.min(this.max, Math.max(this.min, n));
|
|
80
|
+
}
|
|
81
|
+
percent(value) {
|
|
82
|
+
if (this.max === this.min)
|
|
83
|
+
return 0;
|
|
84
|
+
return ((value - this.min) / (this.max - this.min)) * 100;
|
|
85
|
+
}
|
|
86
|
+
onInputChange = (ev) => {
|
|
87
|
+
if (this.disabled)
|
|
88
|
+
return;
|
|
89
|
+
const next = this.clamp(parseFloat(ev.target.value));
|
|
90
|
+
this.value = next;
|
|
91
|
+
this.bsChange.emit(next);
|
|
92
|
+
};
|
|
93
|
+
clampPercent(n) {
|
|
94
|
+
if (Number.isNaN(n))
|
|
95
|
+
return 0;
|
|
96
|
+
return Math.min(100, Math.max(0, n));
|
|
97
|
+
}
|
|
98
|
+
/** Converts an edited percentage (0-100, from the header field) back to a raw value in
|
|
99
|
+
* min/max units. */
|
|
100
|
+
fromPercent(pct) {
|
|
101
|
+
return this.min + (this.clampPercent(pct) / 100) * (this.max - this.min);
|
|
102
|
+
}
|
|
103
|
+
onPercentFieldChange = (ev) => {
|
|
104
|
+
if (this.disabled)
|
|
105
|
+
return;
|
|
106
|
+
const next = this.clamp(this.fromPercent(parseFloat(ev.target.value)));
|
|
107
|
+
this.value = next;
|
|
108
|
+
this.bsChange.emit(next);
|
|
109
|
+
};
|
|
110
|
+
onStartInputChange = (ev) => {
|
|
111
|
+
if (this.disabled)
|
|
112
|
+
return;
|
|
113
|
+
let next = this.clamp(parseFloat(ev.target.value));
|
|
114
|
+
next = Math.min(next, this.effectiveValueEnd);
|
|
115
|
+
this.valueStart = next;
|
|
116
|
+
this.bsRangeChange.emit({ start: next, end: this.effectiveValueEnd });
|
|
117
|
+
};
|
|
118
|
+
onEndInputChange = (ev) => {
|
|
119
|
+
if (this.disabled)
|
|
120
|
+
return;
|
|
121
|
+
let next = this.clamp(parseFloat(ev.target.value));
|
|
122
|
+
next = Math.max(next, this.effectiveValueStart);
|
|
123
|
+
this.valueEnd = next;
|
|
124
|
+
this.bsRangeChange.emit({ start: this.effectiveValueStart, end: next });
|
|
125
|
+
};
|
|
126
|
+
onStartPercentFieldChange = (ev) => {
|
|
127
|
+
if (this.disabled)
|
|
128
|
+
return;
|
|
129
|
+
let next = this.clamp(this.fromPercent(parseFloat(ev.target.value)));
|
|
130
|
+
next = Math.min(next, this.effectiveValueEnd);
|
|
131
|
+
this.valueStart = next;
|
|
132
|
+
this.bsRangeChange.emit({ start: next, end: this.effectiveValueEnd });
|
|
133
|
+
};
|
|
134
|
+
onEndPercentFieldChange = (ev) => {
|
|
135
|
+
if (this.disabled)
|
|
136
|
+
return;
|
|
137
|
+
let next = this.clamp(this.fromPercent(parseFloat(ev.target.value)));
|
|
138
|
+
next = Math.max(next, this.effectiveValueStart);
|
|
139
|
+
this.valueEnd = next;
|
|
140
|
+
this.bsRangeChange.emit({ start: this.effectiveValueStart, end: next });
|
|
141
|
+
};
|
|
142
|
+
/** The editable field shown top-right (or as a pair for `type="range"`), displaying/editing
|
|
143
|
+
* the thumb's position as a rounded 0-100 percentage of min/max -- not the raw value -- per
|
|
144
|
+
* the Figma spec (every state screenshot shows this field suffixed "%", matching the same
|
|
145
|
+
* percentage the tooltip shows while dragging). */
|
|
146
|
+
renderPercentField(percentValue, onChange, ariaLabel) {
|
|
147
|
+
return (h("span", { part: "field", class: "bs-slider__field" }, h("input", { type: "number", class: "bs-slider__field-input", value: Math.round(this.clampPercent(percentValue)), min: 0, max: 100, disabled: this.disabled, "aria-label": ariaLabel, onChange: onChange }), h("span", { class: "bs-slider__field-suffix", "aria-hidden": "true" }, "%")));
|
|
148
|
+
}
|
|
149
|
+
renderSegmentedTicks() {
|
|
150
|
+
if (this.type !== 'segmented' || this.segments <= 0)
|
|
151
|
+
return null;
|
|
152
|
+
// segments+1 ticks (both track ends plus every division), per the Figma spec -- the first
|
|
153
|
+
// tick is invisible (opacity: 0) so the spacing math stays consistent even though it would
|
|
154
|
+
// otherwise sit right on top of the track's own start edge.
|
|
155
|
+
const tickCount = this.segments + 1;
|
|
156
|
+
return (h("div", { class: "bs-slider__ticks", "aria-hidden": "true" }, Array.from({ length: tickCount }).map((_, i) => (h("span", { class: `bs-slider__tick ${i === 0 ? 'bs-slider__tick--hidden' : ''}` })))));
|
|
157
|
+
}
|
|
158
|
+
renderSingleThumb() {
|
|
159
|
+
const fillEnd = this.percent(this.value);
|
|
160
|
+
return (h("div", { class: "bs-slider__track-wrapper", style: { '--bs-slider-fill-start': '0%', '--bs-slider-fill-end': `${fillEnd}%` } }, h("div", { part: "track", class: "bs-slider__track" }, h("div", { part: "fill", class: "bs-slider__track-fill" }), this.renderSegmentedTicks()), h("input", { type: "range", part: "control", class: "bs-slider__input", min: this.min, max: this.max, step: this.effectiveStep, value: this.value, disabled: this.disabled, "aria-label": this.ariaLabel ?? undefined, "aria-labelledby": !this.ariaLabel && this.showLabel ? 'bs-slider-label' : undefined, onInput: this.onInputChange, onChange: this.onInputChange }), h("span", { class: "bs-slider__tooltip", part: "tooltip", style: { left: `${fillEnd}%` }, "aria-hidden": "true" }, Math.round(this.percent(this.value)), "%")));
|
|
161
|
+
}
|
|
162
|
+
renderRangeThumbs() {
|
|
163
|
+
const start = this.effectiveValueStart;
|
|
164
|
+
const end = this.effectiveValueEnd;
|
|
165
|
+
const fillStart = this.percent(start);
|
|
166
|
+
const fillEnd = this.percent(end);
|
|
167
|
+
// Two thumbs can't be done with a single native <input type="range"> -- the CSS spec only
|
|
168
|
+
// gives a range input one thumb. This is the well-known dual-range-slider pattern instead:
|
|
169
|
+
// two overlapping native range inputs, each with a fully transparent track (only their thumb
|
|
170
|
+
// is visible/interactive -- see bs-slider.css's pointer-events rules), plus a separate
|
|
171
|
+
// absolutely-positioned div for the "filled" segment between them.
|
|
172
|
+
//
|
|
173
|
+
// Both inputs sit at the same z-index by default, except whichever thumb is in the upper half
|
|
174
|
+
// of the track gets a higher z-index -- without that, once the two thumbs are close together
|
|
175
|
+
// near one end, only the topmost one is reachable by click, and the topmost one is always the
|
|
176
|
+
// one rendered last (the end thumb) unless we compensate.
|
|
177
|
+
const startOnTop = this.percent(start) > 50;
|
|
178
|
+
return (h("div", { class: "bs-slider__track-wrapper", style: { '--bs-slider-fill-start': `${fillStart}%`, '--bs-slider-fill-end': `${fillEnd}%` } }, h("div", { part: "track", class: "bs-slider__track" }, h("div", { part: "fill", class: "bs-slider__track-fill" })), h("input", { type: "range", part: "control", class: "bs-slider__input bs-slider__input--start", style: { zIndex: startOnTop ? '4' : '3' }, min: this.min, max: this.max, step: this.step, value: start, disabled: this.disabled, "aria-label": this.ariaLabel ?? 'Start value', onInput: this.onStartInputChange, onChange: this.onStartInputChange }), h("input", { type: "range", part: "control", class: "bs-slider__input bs-slider__input--end", style: { zIndex: startOnTop ? '3' : '4' }, min: this.min, max: this.max, step: this.step, value: end, disabled: this.disabled, "aria-label": this.ariaLabel ? `${this.ariaLabel} end` : 'End value', onInput: this.onEndInputChange, onChange: this.onEndInputChange }), h("span", { class: "bs-slider__tooltip bs-slider__tooltip--start", part: "tooltip", style: { left: `${fillStart}%` }, "aria-hidden": "true" }, Math.round(this.percent(start)), "%"), h("span", { class: "bs-slider__tooltip bs-slider__tooltip--end", part: "tooltip", style: { left: `${fillEnd}%` }, "aria-hidden": "true" }, Math.round(this.percent(end)), "%")));
|
|
179
|
+
}
|
|
180
|
+
render() {
|
|
181
|
+
const isRange = this.type === 'range';
|
|
182
|
+
const rootClasses = ['bs-slider', this.disabled ? 'bs-slider--disabled' : ''].filter(Boolean).join(' ');
|
|
183
|
+
return (h("div", { key: '85529486524fc9859b4b1706a69e70f46537ab77', class: rootClasses }, this.showLabel && (h("div", { key: '4871263c05627057e838478048caed54554db6fc', class: "bs-slider__header" }, h("span", { key: '91ef26112441bdd1bdc7b4b0d1653c81db88bf4a', id: "bs-slider-label", part: "label", class: "bs-slider__label" }, this.label), isRange ? (h("span", { class: "bs-slider__value-fields" }, this.renderPercentField(this.percent(this.effectiveValueStart), this.onStartPercentFieldChange, this.ariaLabel ?? 'Start value'), h("span", { class: "bs-slider__separator" }, "\u2013"), this.renderPercentField(this.percent(this.effectiveValueEnd), this.onEndPercentFieldChange, this.ariaLabel ? `${this.ariaLabel} end` : 'End value'))) : (this.renderPercentField(this.percent(this.value), this.onPercentFieldChange, this.ariaLabel ? `${this.ariaLabel} value` : 'Value')))), h("div", { key: '336901d2c9195c4415fce9fe9c683c51b652feb8', class: "bs-slider__row" }, this.showLabel && (h("span", { key: '49330dd4efe29c2f4d27ded8a5ed812b5a98d6af', part: "bound", class: "bs-slider__bound" }, this.min)), isRange ? this.renderRangeThumbs() : this.renderSingleThumb(), this.showLabel && (h("span", { key: '6daa487800d4303d2d43c7d526bd457d3caddf7f', part: "bound", class: "bs-slider__bound" }, this.max)))));
|
|
184
|
+
}
|
|
185
|
+
static get delegatesFocus() { return true; }
|
|
186
|
+
};
|
|
187
|
+
BsSlider.style = bsSliderCss();
|
|
188
|
+
|
|
189
|
+
export { BsSlider as bs_slider };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as registerInstance, c as createEvent, h } from './index-
|
|
1
|
+
import { r as registerInstance, c as createEvent, h } from './index-DST5-cTx.js';
|
|
2
2
|
|
|
3
3
|
const bsSourceLinkCss = () => `:host{display:block;--bs-source-link-radius:var(--bs-border-radius-150);--bs-source-link-padding:var(--bs-spacing-150);--bs-source-link-gap:var(--bs-spacing-50);--bs-source-link-icon-gap:var(--bs-spacing-75);--bs-source-link-hover:var(--bs-surface-hover);--bs-source-link-pressed:var(--bs-surface-pressed);--bs-source-link-focus:var(--bs-border-neutral-focus);--bs-source-link-filename-color:var(--bs-text-default);--bs-source-link-meta-color:var(--bs-text-secondary);--bs-source-link-icon-color:var(--bs-icon-default);--bs-source-link-dot-color:var(--bs-text-secondary)}.bs-source-link{box-sizing:border-box;display:flex;align-items:center;gap:var(--bs-source-link-gap);width:100%;padding:var(--bs-source-link-padding);background:none;border:none;border-radius:var(--bs-source-link-radius);font-family:inherit;text-align:left;text-decoration:none;cursor:pointer;transition:background-color var(--bs-duration-fast) var(--bs-easing-standard)}.bs-source-link:hover,.bs-source-link:focus-visible{background:var(--bs-source-link-hover)}.bs-source-link:active{background:var(--bs-source-link-pressed)}.bs-source-link:focus-visible{outline:2px solid var(--bs-source-link-focus);outline-offset:1px}.bs-source-link__icon{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:16px;height:16px;color:var(--bs-source-link-icon-color)}.bs-source-link__left{display:flex;flex:1 0 0;flex-direction:column;gap:2px;min-width:0}.bs-source-link__filename-row{display:flex;align-items:center;gap:var(--bs-source-link-icon-gap);width:100%}.bs-source-link__filename{margin:0;overflow:hidden;color:var(--bs-source-link-filename-color);font-size:var(--bs-font-size-md);font-weight:var(--bs-font-weight-semibold);line-height:var(--bs-line-height-normal);text-overflow:ellipsis;white-space:nowrap}.bs-source-link__meta{display:flex;align-items:center;gap:var(--bs-spacing-50);padding-left:22px}.bs-source-link__source,.bs-source-link__version{color:var(--bs-source-link-meta-color);font-size:var(--bs-font-size-sm);line-height:var(--bs-line-height-normal);white-space:nowrap}.bs-source-link__dot{width:4px;height:4px;border-radius:50%;background:var(--bs-source-link-dot-color);flex-shrink:0}.bs-source-link__arrow{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:24px;height:24px;color:var(--bs-source-link-icon-color)}`;
|
|
4
4
|
|
|
@@ -24,8 +24,8 @@ const BsSourceLink = class {
|
|
|
24
24
|
};
|
|
25
25
|
render() {
|
|
26
26
|
const inner = [
|
|
27
|
-
h("span", { key: '
|
|
28
|
-
h("span", { key: '
|
|
27
|
+
h("span", { key: '79756193e545c7bc24f6df3aa25a644294933536', class: "bs-source-link__left" }, h("span", { key: 'e3aee2ee301d383149f242ee40d681a75782a4b2', class: "bs-source-link__filename-row" }, h("span", { key: '6cc1a0f55f54a0cca0f2ca305c2f8566e3016243', part: "icon", class: "bs-source-link__icon" }, h("slot", { key: 'b61ee4c11179ce958dbc5f3eb4cf1f3a0ff90c26', name: "icon" }, h(FileTextIcon, { key: '2d94ec22dade078f3828e8d0d64adb984716fb00' }))), h("p", { key: 'a727c77f11c68b61b0307d31dd9c79e811a75406', part: "filename", class: "bs-source-link__filename" }, this.fileName)), h("span", { key: 'bec3857211075ce8ce4ff33c649ee6370b6039f5', class: "bs-source-link__meta" }, this.sourceName && (h("span", { key: '5ca4e697485e1f82d8375afe48b2ab13380efe40', part: "source", class: "bs-source-link__source" }, this.sourceName)), this.sourceName && this.version && h("span", { key: '4a69cae984e34e5329750bd19c868c9b0a83da28', class: "bs-source-link__dot", "aria-hidden": "true" }), this.version && (h("span", { key: '8abd2c99dcea7b95bc7d79d24c1ba1f6fdd10436', part: "version", class: "bs-source-link__version" }, this.version)))),
|
|
28
|
+
h("span", { key: 'c5ff90d23096ab0cc70f6f906b8d04d29498e735', part: "arrow", class: "bs-source-link__arrow", "aria-hidden": "true" }, h(ArrowUpRightIcon, { key: '2bfc3acc65b7d9401c30999f4dd0adbf15f8a8d3' })),
|
|
29
29
|
];
|
|
30
30
|
return this.href ? (h("a", { class: "bs-source-link", href: this.href, target: this.target, rel: "noopener noreferrer", onClick: this.onClick }, inner)) : (h("button", { type: "button", class: "bs-source-link", onClick: this.onClick }, inner));
|
|
31
31
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { r as registerInstance, c as createEvent, a as getElement, h } from './index-DST5-cTx.js';
|
|
2
|
+
|
|
3
|
+
const bsSwitchCss = () => `:host{display:inline-block;--bs-switch-radius:var(--bs-border-radius-full);--bs-switch-padding:var(--bs-spacing-25);--bs-switch-gap:var(--bs-spacing-100);--bs-switch-track-width-md:36px;--bs-switch-track-height-md:20px;--bs-switch-track-width-lg:48px;--bs-switch-track-height-lg:28px;--bs-switch-knob-size-md:16px;--bs-switch-knob-size-lg:24px;--bs-switch-border-width:1px;--bs-switch-track-bg:var(--bs-switch-track-bg-default);--bs-switch-track-bg-checked:var(--bs-switch-track-bg-checked-default);--bs-switch-track-bg-checked-focus:var(--bs-switch-track-bg-checked-focused);--bs-switch-track-border:var(--bs-switch-track-border-default);--bs-switch-focus-ring-color:var(--bs-switch-track-border-focus);--bs-switch-knob-bg:var(--bs-switch-thumb-bg-default);--bs-switch-knob-bg-hover:var(--bs-switch-thumb-bg-hover);--bs-switch-knob-bg-checked:var(--bs-switch-thumb-bg-checked);--bs-switch-knob-bg-disabled:var(--bs-switch-thumb-bg-disabled);--bs-switch-label-color:var(--bs-text-default);--bs-switch-label-color-disabled:var(--bs-text-on-disabled)}.bs-switch{position:relative;display:inline-flex;align-items:center;gap:var(--bs-switch-gap);font-family:inherit;cursor:pointer}.bs-switch--disabled{cursor:not-allowed}.bs-switch__input{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;opacity:0;cursor:pointer}.bs-switch__input:disabled{cursor:not-allowed}.bs-switch__track{box-sizing:border-box;position:relative;display:flex;align-items:center;justify-content:flex-start;flex-shrink:0;padding:var(--bs-switch-padding);border:var(--bs-switch-border-width) solid var(--bs-switch-track-border);border-radius:var(--bs-switch-radius);background:var(--bs-switch-track-bg);transition:background-color 0.15s ease, border-color 0.15s ease}.bs-switch__track--md{width:var(--bs-switch-track-width-md);height:var(--bs-switch-track-height-md)}.bs-switch__track--lg{width:var(--bs-switch-track-width-lg);height:var(--bs-switch-track-height-lg)}.bs-switch__track--checked{justify-content:flex-end;background:var(--bs-switch-track-bg-checked)}.bs-switch__knob{box-sizing:border-box;border-radius:var(--bs-border-radius-full);background:var(--bs-switch-knob-bg);transition:background-color 0.15s ease}.bs-switch__knob--md{width:var(--bs-switch-knob-size-md);height:var(--bs-switch-knob-size-md)}.bs-switch__knob--lg{width:var(--bs-switch-knob-size-lg);height:var(--bs-switch-knob-size-lg)}.bs-switch__track--checked .bs-switch__knob{background:var(--bs-switch-knob-bg-checked)}.bs-switch__input:hover:not(:disabled)~.bs-switch__track{background:var(--bs-switch-track-bg-hover);border-color:var(--bs-switch-track-border-hover)}.bs-switch__input:hover:not(:disabled)~.bs-switch__track .bs-switch__knob{background:var(--bs-switch-knob-bg-hover)}.bs-switch__input:hover:not(:disabled)~.bs-switch__track--checked{background:var(--bs-switch-track-bg-checked-hover)}.bs-switch__input:focus-visible~.bs-switch__track{border-color:var(--bs-switch-track-border-hover);outline:2px solid var(--bs-switch-focus-ring-color);outline-offset:2px}.bs-switch__input:focus-visible~.bs-switch__track--checked{background:var(--bs-switch-track-bg-checked-focus)}.bs-switch__track--disabled{background:var(--bs-switch-track-bg-disabled);border-color:var(--bs-switch-track-border)}.bs-switch__track--disabled.bs-switch__track--checked{background:var(--bs-switch-track-bg-disabled)}.bs-switch__knob--disabled{background:var(--bs-switch-knob-bg-disabled)}.bs-switch__label{font-size:var(--bs-font-size-md);color:var(--bs-switch-label-color)}.bs-switch--disabled .bs-switch__label{color:var(--bs-switch-label-color-disabled)}`;
|
|
4
|
+
|
|
5
|
+
const BsSwitch = class {
|
|
6
|
+
constructor(hostRef) {
|
|
7
|
+
registerInstance(this, hostRef);
|
|
8
|
+
this.bsChange = createEvent(this, "bsChange");
|
|
9
|
+
}
|
|
10
|
+
get el() { return getElement(this); }
|
|
11
|
+
/** Sizing scale. Controls the track's width/height and the knob's diameter. */
|
|
12
|
+
size = 'lg';
|
|
13
|
+
/** Whether the switch is on. Mutable so clicking the label/input toggles it directly, and
|
|
14
|
+
* reflected so consumers can target `bs-switch[checked]` via CSS. */
|
|
15
|
+
checked = false;
|
|
16
|
+
/** Disables the switch: sets the native `disabled` attribute, suppresses hover/focus styling,
|
|
17
|
+
* and prevents toggling. */
|
|
18
|
+
disabled = false;
|
|
19
|
+
/**
|
|
20
|
+
* Accessible name for the switch. Required whenever the default (label) slot is empty (e.g. a
|
|
21
|
+
* bare "enabled" switch in a table row) -- without it, the internal native `<input>` has no
|
|
22
|
+
* accessible name at all. Setting `aria-label` directly on the `<bs-switch>` host does NOT
|
|
23
|
+
* work for this: that attribute stays on the light-DOM host and is never forwarded into the
|
|
24
|
+
* shadow DOM by the browser, so the actual focusable element (the native `<input>` inside) stays
|
|
25
|
+
* nameless. This prop exists specifically to bridge that gap -- same pattern as `bs-button`'s and
|
|
26
|
+
* `bs-checkbox`'s identical `ariaLabel` prop, both of which explicitly bind it onto their own
|
|
27
|
+
* internal focusable element for the same reason.
|
|
28
|
+
*/
|
|
29
|
+
ariaLabel = null;
|
|
30
|
+
/** Emitted when the checked state changes via user interaction, with the new `checked` value. */
|
|
31
|
+
bsChange;
|
|
32
|
+
onChange = (ev) => {
|
|
33
|
+
const checked = ev.target.checked;
|
|
34
|
+
this.checked = checked;
|
|
35
|
+
this.bsChange.emit(checked);
|
|
36
|
+
};
|
|
37
|
+
render() {
|
|
38
|
+
const trackClasses = [
|
|
39
|
+
'bs-switch__track',
|
|
40
|
+
`bs-switch__track--${this.size}`,
|
|
41
|
+
this.checked ? 'bs-switch__track--checked' : '',
|
|
42
|
+
this.disabled ? 'bs-switch__track--disabled' : '',
|
|
43
|
+
]
|
|
44
|
+
.filter(Boolean)
|
|
45
|
+
.join(' ');
|
|
46
|
+
const knobClasses = ['bs-switch__knob', `bs-switch__knob--${this.size}`, this.disabled ? 'bs-switch__knob--disabled' : '']
|
|
47
|
+
.filter(Boolean)
|
|
48
|
+
.join(' ');
|
|
49
|
+
return (h("label", { key: '4e5e5005cddacfaa695aae4023aefdae68330d8e', class: `bs-switch ${this.disabled ? 'bs-switch--disabled' : ''}` }, h("input", { key: '8adf2a272b1c9c757543b32f635f2129b4990cf1', class: "bs-switch__input", type: "checkbox", role: "switch", checked: this.checked, disabled: this.disabled, "aria-checked": String(this.checked), "aria-label": this.ariaLabel, onChange: this.onChange }), h("span", { key: '2766916d51d0281bac341f636d99ee81f6c31564', part: "track", class: trackClasses }, h("span", { key: 'ec0f7d008cd34d575271dbdde1d34771a6095932', part: "knob", class: knobClasses })), h("span", { key: 'b28bace70e76c37163abcbc74c4fba2156f6da5d', part: "label", class: "bs-switch__label" }, h("slot", { key: '57c58faa8c6711fff5aa03eb559520ef31f531c6' }))));
|
|
50
|
+
}
|
|
51
|
+
static get delegatesFocus() { return true; }
|
|
52
|
+
};
|
|
53
|
+
BsSwitch.style = bsSwitchCss();
|
|
54
|
+
|
|
55
|
+
export { BsSwitch as bs_switch };
|