@brandsync/wc 1.6.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +1302 -90
- package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
- package/dist/brandsync-wc/{p-387ed85f.entry.js → p-002d258d.entry.js} +1 -1
- package/dist/brandsync-wc/{p-e35249c4.entry.js → p-03b08508.entry.js} +1 -1
- package/dist/brandsync-wc/{p-db46376b.entry.js → p-051d3064.entry.js} +1 -1
- package/dist/brandsync-wc/{p-c054f493.entry.js → p-05c7de28.entry.js} +1 -1
- package/dist/brandsync-wc/{p-639946e7.entry.js → p-062cfa34.entry.js} +1 -1
- package/dist/brandsync-wc/p-0e39b9cc.entry.js +1 -0
- package/dist/brandsync-wc/{p-9fb8848c.entry.js → p-114d2fd8.entry.js} +1 -1
- package/dist/brandsync-wc/{p-ef68f29b.entry.js → p-153da845.entry.js} +1 -1
- package/dist/brandsync-wc/{p-6754dfa9.entry.js → p-1c0db4d6.entry.js} +1 -1
- package/dist/brandsync-wc/{p-4a1a5d6e.entry.js → p-1f7208cb.entry.js} +1 -1
- package/dist/brandsync-wc/{p-43617f2e.entry.js → p-235ae012.entry.js} +1 -1
- package/dist/brandsync-wc/{p-2700a63e.entry.js → p-275072dd.entry.js} +1 -1
- package/dist/brandsync-wc/p-2891d40b.entry.js +1 -0
- package/dist/brandsync-wc/p-29027559.entry.js +1 -0
- package/dist/brandsync-wc/p-2e7a1082.entry.js +1 -0
- package/dist/brandsync-wc/{p-604553a0.entry.js → p-3176d1d3.entry.js} +1 -1
- package/dist/brandsync-wc/p-33e44094.entry.js +1 -0
- package/dist/brandsync-wc/p-360452c2.entry.js +1 -0
- package/dist/brandsync-wc/p-3ec74d35.entry.js +1 -0
- package/dist/brandsync-wc/p-4574a707.entry.js +1 -0
- package/dist/brandsync-wc/p-4e5dcaff.entry.js +1 -0
- package/dist/brandsync-wc/p-612cf79c.entry.js +1 -0
- package/dist/brandsync-wc/p-61c1a2a3.entry.js +1 -0
- package/dist/brandsync-wc/{p-11224cab.entry.js → p-6331de9c.entry.js} +1 -1
- package/dist/brandsync-wc/{p-d03eba2b.entry.js → p-652d4068.entry.js} +1 -1
- package/dist/brandsync-wc/{p-a603a13a.entry.js → p-6bf2f116.entry.js} +1 -1
- package/dist/brandsync-wc/{p-9b72cc12.entry.js → p-70f64b25.entry.js} +1 -1
- package/dist/brandsync-wc/{p-44bfdd4b.entry.js → p-7b00dd36.entry.js} +1 -1
- package/dist/brandsync-wc/p-7c94e6ae.entry.js +1 -0
- package/dist/brandsync-wc/p-835a8dc7.entry.js +1 -0
- package/dist/brandsync-wc/{p-0aca5f0e.entry.js → p-8ee0153b.entry.js} +1 -1
- package/dist/brandsync-wc/{p-bb77098b.entry.js → p-9f65f998.entry.js} +1 -1
- package/dist/brandsync-wc/p-9f8852a0.entry.js +1 -0
- package/dist/brandsync-wc/{p-DuyFft7h.js → p-AgoOSYvW.js} +2 -2
- package/dist/brandsync-wc/{p-a8e2a2b2.entry.js → p-a09e157f.entry.js} +1 -1
- package/dist/brandsync-wc/p-a0d5a620.entry.js +1 -0
- package/dist/brandsync-wc/{p-525504c2.entry.js → p-a5feaad4.entry.js} +1 -1
- package/dist/brandsync-wc/{p-cbaa19ab.entry.js → p-a92eec48.entry.js} +1 -1
- package/dist/brandsync-wc/{p-57e1dc35.entry.js → p-ae978c9a.entry.js} +1 -1
- package/dist/brandsync-wc/{p-f2ce9a1f.entry.js → p-bbcc47b0.entry.js} +1 -1
- package/dist/brandsync-wc/{p-fcd4ec60.entry.js → p-bc69a96c.entry.js} +1 -1
- package/dist/brandsync-wc/{p-80cf96ff.entry.js → p-be2c1740.entry.js} +1 -1
- package/dist/brandsync-wc/p-bf53ad52.entry.js +1 -0
- package/dist/brandsync-wc/p-c10d2529.entry.js +1 -0
- package/dist/brandsync-wc/{p-abda1d69.entry.js → p-c4de155c.entry.js} +1 -1
- package/dist/brandsync-wc/p-c7f4c114.entry.js +1 -0
- package/dist/brandsync-wc/{p-52d5f6a9.entry.js → p-cfcf3f0a.entry.js} +1 -1
- package/dist/brandsync-wc/p-de7c946d.entry.js +1 -0
- package/dist/brandsync-wc/{p-a8cdf449.entry.js → p-e9b43754.entry.js} +1 -1
- package/dist/brandsync-wc/{p-c5011746.entry.js → p-ee7da23d.entry.js} +1 -1
- package/dist/brandsync-wc/{p-4bff9b4b.entry.js → p-f006d962.entry.js} +1 -1
- package/dist/brandsync-wc/p-f074f94e.entry.js +1 -0
- package/dist/brandsync-wc/p-f7d47c17.entry.js +1 -0
- package/dist/brandsync-wc/{p-7609221f.entry.js → p-fc58c663.entry.js} +1 -1
- package/dist/brandsync-wc/{p-a3a4d541.entry.js → p-fddc7bd1.entry.js} +1 -1
- package/dist/cjs/brandsync-wc.cjs.js +2 -2
- package/dist/cjs/bs-accordion.cjs.entry.js +2 -2
- package/dist/cjs/bs-ai-disclaimer.cjs.entry.js +2 -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 +3 -3
- package/dist/cjs/bs-attachment.cjs.entry.js +2 -2
- package/dist/cjs/bs-avatar.cjs.entry.js +1 -1
- package/dist/cjs/bs-badge.cjs.entry.js +1 -1
- package/dist/cjs/bs-breadcrumb-overflow.cjs.entry.js +2 -2
- package/dist/cjs/bs-breadcrumb.cjs.entry.js +1 -1
- package/dist/cjs/bs-breadcrumbs.cjs.entry.js +2 -2
- package/dist/cjs/bs-button-skeleton.cjs.entry.js +2 -2
- package/dist/cjs/bs-button.cjs.entry.js +23 -4
- package/dist/cjs/bs-card.cjs.entry.js +2 -2
- package/dist/cjs/bs-carousel.cjs.entry.js +196 -0
- package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +3 -3
- package/dist/cjs/bs-chatbot-header.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +3 -3
- 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-skeleton.cjs.entry.js +2 -2
- package/dist/cjs/bs-checkbox.cjs.entry.js +48 -3
- package/dist/cjs/bs-chip-filter.cjs.entry.js +3 -3
- package/dist/cjs/bs-chip-informative.cjs.entry.js +3 -3
- package/dist/cjs/bs-chip-input.cjs.entry.js +3 -3
- package/dist/cjs/bs-composer-status-banner.cjs.entry.js +2 -2
- package/dist/cjs/bs-composer.cjs.entry.js +2 -2
- package/dist/cjs/bs-data-table.cjs.entry.js +4 -4
- package/dist/cjs/bs-dialog.cjs.entry.js +2 -2
- package/dist/cjs/bs-file-upload-item.cjs.entry.js +85 -0
- package/dist/cjs/bs-file-upload.cjs.entry.js +110 -0
- package/dist/cjs/bs-icon-button.cjs.entry.js +22 -3
- package/dist/cjs/bs-inline-tab.cjs.entry.js +7 -3
- package/dist/cjs/bs-input.cjs.entry.js +69 -5
- package/dist/cjs/bs-logo.cjs.entry.js +1 -1
- package/dist/cjs/bs-menu-item.cjs.entry.js +2 -2
- package/dist/cjs/bs-menu.cjs.entry.js +25 -3
- package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +2 -2
- package/dist/cjs/bs-navigation-drawer.cjs.entry.js +2 -2
- package/dist/cjs/bs-navigation-header.cjs.entry.js +2 -2
- package/dist/cjs/bs-pagination.cjs.entry.js +2 -2
- package/dist/cjs/bs-progress-linear.cjs.entry.js +8 -3
- package/dist/cjs/bs-progress.cjs.entry.js +8 -3
- package/dist/cjs/bs-radio.cjs.entry.js +81 -12
- package/dist/cjs/bs-slider.cjs.entry.js +54 -2
- package/dist/cjs/bs-snackbar.cjs.entry.js +2 -2
- package/dist/cjs/bs-source-link.cjs.entry.js +4 -4
- package/dist/cjs/bs-stepper-step.cjs.entry.js +3 -3
- package/dist/cjs/bs-stepper.cjs.entry.js +3 -2
- package/dist/cjs/bs-switch.cjs.entry.js +36 -3
- package/dist/cjs/bs-tab.cjs.entry.js +7 -3
- package/dist/cjs/bs-tabs.cjs.entry.js +51 -2
- package/dist/cjs/bs-toast.cjs.entry.js +2 -2
- package/dist/cjs/bs-tooltip.cjs.entry.js +2 -2
- package/dist/cjs/{index-D7e6DfLV.js → index-kk9YXF2S.js} +43 -5
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +3 -0
- package/dist/collection/components/bs-a11y.cmp.test.js +54 -0
- package/dist/collection/components/bs-accordion/bs-accordion.cmp.test.js +5 -0
- package/dist/collection/components/bs-accordion/bs-accordion.css +5 -5
- package/dist/collection/components/bs-ai-disclaimer/bs-ai-disclaimer.js +1 -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 +1 -1
- package/dist/collection/components/bs-attachment-list/bs-attachment-list.css +1 -1
- package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
- package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.css +1 -1
- package/dist/collection/components/bs-breadcrumb/bs-breadcrumbs/bs-breadcrumbs.js +1 -1
- package/dist/collection/components/bs-button/bs-button/bs-button.css +17 -10
- package/dist/collection/components/bs-button/bs-button/bs-button.js +16 -3
- package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +16 -3
- package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
- package/dist/collection/components/bs-card/bs-card.css +4 -0
- package/dist/collection/components/bs-carousel/bs-carousel.cmp.test.js +198 -0
- package/dist/collection/components/bs-carousel/bs-carousel.css +107 -0
- package/dist/collection/components/bs-carousel/bs-carousel.js +531 -0
- package/dist/collection/components/bs-carousel/bs-carousel.stories.js +68 -0
- package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.css +1 -1
- 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.css +3 -3
- 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-skeleton/bs-checkbox-skeleton.js +1 -1
- package/dist/collection/components/bs-checkbox/bs-checkbox.css +8 -1
- package/dist/collection/components/bs-checkbox/bs-checkbox.js +100 -2
- package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.css +4 -4
- package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.js +1 -1
- package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.css +4 -4
- package/dist/collection/components/bs-chip/bs-chip-informative/bs-chip-informative.js +1 -1
- package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.css +5 -5
- package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.js +1 -1
- package/dist/collection/components/bs-composer/bs-composer.js +1 -1
- package/dist/collection/components/bs-composer-status-banner/bs-composer-status-banner.js +1 -1
- package/dist/collection/components/bs-data-table/bs-data-table.css +1 -1
- package/dist/collection/components/bs-data-table/bs-data-table.js +2 -2
- package/dist/collection/components/bs-dialog/bs-dialog.css +5 -1
- package/dist/collection/components/bs-file-upload/bs-file-upload.cmp.test.js +119 -0
- package/dist/collection/components/bs-file-upload/bs-file-upload.css +139 -0
- package/dist/collection/components/bs-file-upload/bs-file-upload.js +342 -0
- package/dist/collection/components/bs-file-upload/bs-file-upload.stories.js +116 -0
- package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.cmp.test.js +115 -0
- package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.css +154 -0
- package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.js +329 -0
- package/dist/collection/components/bs-file-upload-item/bs-file-upload-item.stories.js +54 -0
- package/dist/collection/components/bs-form-association.cmp.test.js +172 -0
- package/dist/collection/components/bs-input/bs-input.css +10 -4
- package/dist/collection/components/bs-input/bs-input.js +82 -4
- package/dist/collection/components/bs-keyboard-nav.cmp.test.js +100 -0
- package/dist/collection/components/bs-menu/bs-menu.css +4 -0
- package/dist/collection/components/bs-menu/bs-menu.js +33 -1
- package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
- package/dist/collection/components/bs-pagination/bs-pagination.js +1 -1
- package/dist/collection/components/bs-progress/bs-progress.js +27 -2
- package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +27 -2
- package/dist/collection/components/bs-radio/bs-radio.cmp.test.js +4 -10
- package/dist/collection/components/bs-radio/bs-radio.css +7 -1
- package/dist/collection/components/bs-radio/bs-radio.js +92 -14
- package/dist/collection/components/bs-radio/bs-radio.stories.js +1 -10
- package/dist/collection/components/bs-slider/bs-slider.js +68 -2
- package/dist/collection/components/bs-snackbar/bs-snackbar.js +1 -1
- package/dist/collection/components/bs-source-link/bs-source-link.css +2 -2
- package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
- package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +3 -2
- package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.css +3 -3
- package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
- package/dist/collection/components/bs-switch/bs-switch.css +10 -1
- package/dist/collection/components/bs-switch/bs-switch.js +69 -2
- package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.css +2 -2
- package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +24 -1
- package/dist/collection/components/bs-tab/bs-tab/bs-tab.css +2 -2
- package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +24 -1
- package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +57 -1
- package/dist/collection/components/bs-toast/bs-toast.js +1 -1
- package/dist/collection/components/bs-tooltip/bs-tooltip.js +1 -1
- package/dist/collection/components/forms/forms.stories.js +63 -0
- package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.js +1 -1
- package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer-item/bs-navigation-drawer-item.js +1 -1
- package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +1 -1
- package/dist/collection/test/helpers/conventions.js +46 -0
- package/dist/collection/test/helpers/conventions.unit.test.js +38 -0
- package/dist/components/bs-accordion.js +1 -1
- 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-avatar.js +1 -1
- package/dist/components/bs-badge.js +1 -1
- package/dist/components/bs-breadcrumb-overflow.js +1 -1
- package/dist/components/bs-breadcrumb.js +1 -1
- package/dist/components/bs-breadcrumbs.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-carousel.d.ts +11 -0
- package/dist/components/bs-carousel.js +1 -0
- 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-skeleton.js +1 -1
- package/dist/components/bs-checkbox.js +1 -1
- package/dist/components/bs-chip-filter.js +1 -1
- package/dist/components/bs-chip-informative.js +1 -1
- package/dist/components/bs-chip-input.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-dialog.js +1 -1
- package/dist/components/bs-file-upload-item.d.ts +11 -0
- package/dist/components/bs-file-upload-item.js +1 -0
- package/dist/components/bs-file-upload.d.ts +11 -0
- package/dist/components/bs-file-upload.js +1 -0
- package/dist/components/bs-icon-button.js +1 -1
- package/dist/components/bs-inline-tab.js +1 -1
- package/dist/components/bs-input.js +1 -1
- package/dist/components/bs-logo.js +1 -1
- package/dist/components/bs-menu-item.js +1 -1
- package/dist/components/bs-menu.js +1 -1
- package/dist/components/bs-navigation-drawer-item.js +1 -1
- package/dist/components/bs-navigation-drawer.js +1 -1
- package/dist/components/bs-navigation-header.js +1 -1
- package/dist/components/bs-pagination.js +1 -1
- package/dist/components/bs-progress-linear.js +1 -1
- package/dist/components/bs-progress.js +1 -1
- package/dist/components/bs-radio.js +1 -1
- package/dist/components/bs-slider.js +1 -1
- package/dist/components/bs-snackbar.js +1 -1
- package/dist/components/bs-source-link.js +1 -1
- package/dist/components/bs-stepper-step.js +1 -1
- package/dist/components/bs-stepper.js +1 -1
- package/dist/components/bs-switch.js +1 -1
- package/dist/components/bs-tab.js +1 -1
- package/dist/components/bs-tabs.js +1 -1
- package/dist/components/bs-toast.js +1 -1
- package/dist/components/bs-tooltip.js +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/{p-B8eut73c.js → p-BA3c9Rom.js} +1 -1
- package/dist/components/{p-DIezWdNu.js → p-BfEyD6Ku.js} +1 -1
- package/dist/components/p-BkHYJIyj.js +1 -0
- package/dist/components/p-Buly0d5G.js +1 -0
- package/dist/components/p-CpUHnsq9.js +1 -0
- package/dist/components/p-EtXc94lJ.js +1 -0
- package/dist/components/{p-mnGJPH85.js → p-JYlmcxBn.js} +1 -1
- package/dist/components/{p-BhvV55-6.js → p-R2MlkUzD.js} +1 -1
- package/dist/components/p-wei0Ija2.js +1 -0
- package/dist/esm/brandsync-wc.js +3 -3
- package/dist/esm/bs-accordion.entry.js +2 -2
- package/dist/esm/bs-ai-disclaimer.entry.js +2 -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 +3 -3
- package/dist/esm/bs-attachment.entry.js +2 -2
- package/dist/esm/bs-avatar.entry.js +1 -1
- package/dist/esm/bs-badge.entry.js +1 -1
- package/dist/esm/bs-breadcrumb-overflow.entry.js +2 -2
- package/dist/esm/bs-breadcrumb.entry.js +1 -1
- package/dist/esm/bs-breadcrumbs.entry.js +2 -2
- package/dist/esm/bs-button-skeleton.entry.js +2 -2
- package/dist/esm/bs-button.entry.js +23 -4
- package/dist/esm/bs-card.entry.js +2 -2
- package/dist/esm/bs-carousel.entry.js +194 -0
- package/dist/esm/bs-chatbot-feedback.entry.js +3 -3
- package/dist/esm/bs-chatbot-header.entry.js +2 -2
- package/dist/esm/bs-chatbot-response-action.entry.js +3 -3
- 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-skeleton.entry.js +2 -2
- package/dist/esm/bs-checkbox.entry.js +48 -3
- package/dist/esm/bs-chip-filter.entry.js +3 -3
- package/dist/esm/bs-chip-informative.entry.js +3 -3
- package/dist/esm/bs-chip-input.entry.js +3 -3
- package/dist/esm/bs-composer-status-banner.entry.js +2 -2
- package/dist/esm/bs-composer.entry.js +2 -2
- package/dist/esm/bs-data-table.entry.js +4 -4
- package/dist/esm/bs-dialog.entry.js +2 -2
- package/dist/esm/bs-file-upload-item.entry.js +83 -0
- package/dist/esm/bs-file-upload.entry.js +108 -0
- package/dist/esm/bs-icon-button.entry.js +22 -3
- package/dist/esm/bs-inline-tab.entry.js +7 -3
- package/dist/esm/bs-input.entry.js +69 -5
- package/dist/esm/bs-logo.entry.js +1 -1
- package/dist/esm/bs-menu-item.entry.js +2 -2
- package/dist/esm/bs-menu.entry.js +25 -3
- package/dist/esm/bs-navigation-drawer-item.entry.js +2 -2
- package/dist/esm/bs-navigation-drawer.entry.js +2 -2
- package/dist/esm/bs-navigation-header.entry.js +2 -2
- package/dist/esm/bs-pagination.entry.js +2 -2
- package/dist/esm/bs-progress-linear.entry.js +8 -3
- package/dist/esm/bs-progress.entry.js +8 -3
- package/dist/esm/bs-radio.entry.js +81 -12
- package/dist/esm/bs-slider.entry.js +54 -2
- package/dist/esm/bs-snackbar.entry.js +2 -2
- package/dist/esm/bs-source-link.entry.js +4 -4
- package/dist/esm/bs-stepper-step.entry.js +3 -3
- package/dist/esm/bs-stepper.entry.js +3 -2
- package/dist/esm/bs-switch.entry.js +36 -3
- package/dist/esm/bs-tab.entry.js +7 -3
- package/dist/esm/bs-tabs.entry.js +51 -2
- package/dist/esm/bs-toast.entry.js +2 -2
- package/dist/esm/bs-tooltip.entry.js +2 -2
- package/dist/esm/{index-DuyFft7h.js → index-AgoOSYvW.js} +43 -5
- package/dist/esm/loader.js +3 -3
- package/dist/types/components/bs-a11y.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-button/bs-button/bs-button.d.ts +4 -1
- package/dist/types/components/bs-button/bs-icon-button/bs-icon-button.d.ts +4 -1
- package/dist/types/components/bs-carousel/bs-carousel.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-carousel/bs-carousel.d.ts +101 -0
- package/dist/types/components/bs-carousel/bs-carousel.stories.d.ts +17 -0
- package/dist/types/components/bs-checkbox/bs-checkbox.d.ts +12 -0
- package/dist/types/components/bs-file-upload/bs-file-upload.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-file-upload/bs-file-upload.d.ts +59 -0
- package/dist/types/components/bs-file-upload/bs-file-upload.stories.d.ts +21 -0
- package/dist/types/components/bs-file-upload-item/bs-file-upload-item.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-file-upload-item/bs-file-upload-item.d.ts +58 -0
- package/dist/types/components/bs-file-upload-item/bs-file-upload-item.stories.d.ts +18 -0
- package/dist/types/components/bs-form-association.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-input/bs-input.d.ts +12 -0
- package/dist/types/components/bs-keyboard-nav.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-menu/bs-menu.d.ts +4 -0
- package/dist/types/components/bs-progress/bs-progress.d.ts +5 -0
- package/dist/types/components/bs-progress-linear/bs-progress-linear.d.ts +5 -0
- package/dist/types/components/bs-radio/bs-radio.d.ts +23 -9
- package/dist/types/components/bs-slider/bs-slider.d.ts +9 -0
- package/dist/types/components/bs-switch/bs-switch.d.ts +10 -0
- package/dist/types/components/bs-tab/bs-inline-tab/bs-inline-tab.d.ts +4 -0
- package/dist/types/components/bs-tab/bs-tab/bs-tab.d.ts +4 -0
- package/dist/types/components/bs-tab/bs-tabs/bs-tabs.d.ts +7 -0
- package/dist/types/components/forms/forms.stories.d.ts +6 -0
- package/dist/types/components.d.ts +735 -7
- package/dist/types/test/helpers/conventions.d.ts +21 -0
- package/dist/types/test/helpers/conventions.unit.test.d.ts +1 -0
- package/package.json +2 -1
- package/readme.md +14 -0
- package/dist/brandsync-wc/p-00f733ef.entry.js +0 -1
- package/dist/brandsync-wc/p-18c59979.entry.js +0 -1
- package/dist/brandsync-wc/p-3cb58df8.entry.js +0 -1
- package/dist/brandsync-wc/p-3ed5b215.entry.js +0 -1
- package/dist/brandsync-wc/p-413a1ee0.entry.js +0 -1
- package/dist/brandsync-wc/p-512dafc6.entry.js +0 -1
- package/dist/brandsync-wc/p-57609703.entry.js +0 -1
- package/dist/brandsync-wc/p-6bf8a5bd.entry.js +0 -1
- package/dist/brandsync-wc/p-6c769a1d.entry.js +0 -1
- package/dist/brandsync-wc/p-6d0c054b.entry.js +0 -1
- package/dist/brandsync-wc/p-7b9598d9.entry.js +0 -1
- package/dist/brandsync-wc/p-98021881.entry.js +0 -1
- package/dist/brandsync-wc/p-a96856fd.entry.js +0 -1
- package/dist/brandsync-wc/p-bb68e236.entry.js +0 -1
- package/dist/brandsync-wc/p-cfb49342.entry.js +0 -1
- package/dist/brandsync-wc/p-e2ac61c4.entry.js +0 -1
- package/dist/brandsync-wc/p-f714683d.entry.js +0 -1
- package/dist/brandsync-wc/p-fe778b6b.entry.js +0 -1
- package/dist/components/p-3gs695M6.js +0 -1
- package/dist/components/p-BaxFLlKS.js +0 -1
- package/dist/components/p-DKMMCLxx.js +0 -1
|
@@ -45,6 +45,11 @@ export class BsProgress {
|
|
|
45
45
|
* `indeterminate` never shows a label regardless of this prop, since there's no percentage to
|
|
46
46
|
* show. Defaults to `true`. */
|
|
47
47
|
showLabel = true;
|
|
48
|
+
/** Accessible name for the progress bar (e.g. "Uploading report"). Required for assistive tech --
|
|
49
|
+
* a `role="progressbar"` with no name is an axe-core `aria-progressbar-name` violation. Setting
|
|
50
|
+
* `aria-label` on the host doesn't reach the inner element across the shadow boundary, so this
|
|
51
|
+
* prop binds it directly -- same pattern as `bs-button`'s `ariaLabel`. */
|
|
52
|
+
ariaLabel = null;
|
|
48
53
|
get clampedValue() {
|
|
49
54
|
return Math.min(100, Math.max(0, this.value));
|
|
50
55
|
}
|
|
@@ -64,7 +69,7 @@ export class BsProgress {
|
|
|
64
69
|
const isDeterminate = this.type === 'determinate';
|
|
65
70
|
const value = this.clampedValue;
|
|
66
71
|
const dashOffset = circumference * (1 - value / 100);
|
|
67
|
-
return (h("div", { key: '
|
|
72
|
+
return (h("div", { key: 'add8dfafdbee4eaa9712c6e2ba6ddff6f8f6c47f', part: "container", class: "bs-progress" }, h("div", { key: 'fd89c73aa247fc3770187a45dc4681857e257d4e', class: "bs-progress__box", style: { width: `${diameter}px`, height: `${diameter}px` }, role: "progressbar", "aria-label": this.ariaLabel, "aria-valuemin": isDeterminate ? '0' : undefined, "aria-valuemax": isDeterminate ? '100' : undefined, "aria-valuenow": isDeterminate ? String(value) : undefined, "aria-busy": isDeterminate ? undefined : 'true' }, isDeterminate ? (h("svg", { class: "bs-progress__ring", width: diameter, height: diameter, viewBox: `0 0 ${diameter} ${diameter}` }, h("circle", { part: "track", class: "bs-progress__track", cx: diameter / 2, cy: diameter / 2, r: radius, "stroke-width": this.strokeWidth, fill: "none" }), h("circle", { part: "arc", class: "bs-progress__arc", cx: diameter / 2, cy: diameter / 2, r: radius, "stroke-width": this.strokeWidth, fill: "none", "stroke-linecap": "round", "stroke-dasharray": circumference, "stroke-dashoffset": dashOffset }))) : (
|
|
68
73
|
// Figma's indeterminate ring is a fading "comet tail" (transparent -> solid color),
|
|
69
74
|
// not a flat-colored partial arc -- SVG has no angular/conic gradient primitive, so a
|
|
70
75
|
// CSS conic-gradient (color varying by angle) + a radial-gradient mask (carving the
|
|
@@ -73,7 +78,7 @@ export class BsProgress {
|
|
|
73
78
|
h("div", { part: "arc", class: "bs-progress__spinner", style: {
|
|
74
79
|
'--bs-progress-spinner-stroke-width': `${this.strokeWidth}px`,
|
|
75
80
|
'--bs-progress-spinner-sweep': `${INDETERMINATE_SWEEP_DEGREES}deg`,
|
|
76
|
-
} }))), isDeterminate && this.showLabel && (h("span", { key: '
|
|
81
|
+
} }))), isDeterminate && this.showLabel && (h("span", { key: '9c86dc195204f28c06e05bf09f823241bf9f3a86', part: "label", class: `bs-progress__label bs-progress__label--${this.size}` }, value, "%"))));
|
|
77
82
|
}
|
|
78
83
|
static get is() { return "bs-progress"; }
|
|
79
84
|
static get encapsulation() { return "shadow"; }
|
|
@@ -206,6 +211,26 @@ export class BsProgress {
|
|
|
206
211
|
"reflect": false,
|
|
207
212
|
"attribute": "show-label",
|
|
208
213
|
"defaultValue": "true"
|
|
214
|
+
},
|
|
215
|
+
"ariaLabel": {
|
|
216
|
+
"type": "string",
|
|
217
|
+
"mutable": false,
|
|
218
|
+
"complexType": {
|
|
219
|
+
"original": "string | null",
|
|
220
|
+
"resolved": "string",
|
|
221
|
+
"references": {}
|
|
222
|
+
},
|
|
223
|
+
"required": false,
|
|
224
|
+
"optional": false,
|
|
225
|
+
"docs": {
|
|
226
|
+
"tags": [],
|
|
227
|
+
"text": "Accessible name for the progress bar (e.g. \"Uploading report\"). Required for assistive tech --\na `role=\"progressbar\"` with no name is an axe-core `aria-progressbar-name` violation. Setting\n`aria-label` on the host doesn't reach the inner element across the shadow boundary, so this\nprop binds it directly -- same pattern as `bs-button`'s `ariaLabel`."
|
|
228
|
+
},
|
|
229
|
+
"getter": false,
|
|
230
|
+
"setter": false,
|
|
231
|
+
"reflect": false,
|
|
232
|
+
"attribute": "aria-label",
|
|
233
|
+
"defaultValue": "null"
|
|
209
234
|
}
|
|
210
235
|
};
|
|
211
236
|
}
|
|
@@ -40,19 +40,24 @@ export class BsProgressLinear {
|
|
|
40
40
|
/** Shows the slotted label below the bar. When `false`, or when no content is slotted, the
|
|
41
41
|
* label wrapper isn't rendered at all. Defaults to `true`. */
|
|
42
42
|
showLabel = true;
|
|
43
|
+
/** Accessible name for the progress bar (e.g. "Uploading report"). Required for assistive tech --
|
|
44
|
+
* a `role="progressbar"` with no name is an axe-core `aria-progressbar-name` violation. Setting
|
|
45
|
+
* `aria-label` on the host doesn't reach the inner element across the shadow boundary, so this
|
|
46
|
+
* prop binds it directly -- same pattern as `bs-button`'s `ariaLabel`. */
|
|
47
|
+
ariaLabel = null;
|
|
43
48
|
get clampedValue() {
|
|
44
49
|
return Math.min(100, Math.max(0, this.value));
|
|
45
50
|
}
|
|
46
51
|
render() {
|
|
47
52
|
const isDeterminate = this.type === 'determinate';
|
|
48
53
|
const value = this.clampedValue;
|
|
49
|
-
return (h("div", { key: '
|
|
54
|
+
return (h("div", { key: '279dbb0cd17b9584b500570d58cc09bd91e8a0d7', part: "container", class: "bs-progress-linear" }, h("div", { key: '9299c229184d172f743fb7fb0dce2a9c55a4496f', part: "track", class: `bs-progress-linear__track bs-progress-linear__track--${this.size}`, role: "progressbar", "aria-label": this.ariaLabel, "aria-valuemin": isDeterminate ? '0' : undefined, "aria-valuemax": isDeterminate ? '100' : undefined, "aria-valuenow": isDeterminate ? String(value) : undefined, "aria-busy": isDeterminate ? undefined : 'true' }, isDeterminate ? (h("div", { part: "fill", class: "bs-progress-linear__fill", style: { width: `${value}%` } })) : (
|
|
50
55
|
// Figma's indeterminate bar is a soft "comet" gradient segment (transparent -> blue ->
|
|
51
56
|
// transparent) sliding left-to-right across the track's full width in a loop -- the
|
|
52
57
|
// same fade concept as bs-progress's indeterminate ring's conic-gradient comet tail,
|
|
53
58
|
// but along a straight line via a linear-gradient + `transform: translateX(...)`
|
|
54
59
|
// keyframe animation instead of a rotating conic-gradient.
|
|
55
|
-
h("div", { part: "fill", class: "bs-progress-linear__fill bs-progress-linear__fill--indeterminate" }))), this.showLabel && this.hasLabelContent && (h("span", { key: '
|
|
60
|
+
h("div", { part: "fill", class: "bs-progress-linear__fill bs-progress-linear__fill--indeterminate" }))), this.showLabel && this.hasLabelContent && (h("span", { key: '51a75cae90630fec1d8757d483c239a534385aa7', part: "label", class: "bs-progress-linear__label" }, h("slot", { key: '7e6639ff4f7219cbb3fa09d7c7570268534530b4' })))));
|
|
56
61
|
}
|
|
57
62
|
// The default slot's assigned content lives in the host's light DOM regardless of whether a
|
|
58
63
|
// <slot> is currently rendered in the shadow tree, so this can be computed directly from the
|
|
@@ -180,6 +185,26 @@ export class BsProgressLinear {
|
|
|
180
185
|
"reflect": false,
|
|
181
186
|
"attribute": "show-label",
|
|
182
187
|
"defaultValue": "true"
|
|
188
|
+
},
|
|
189
|
+
"ariaLabel": {
|
|
190
|
+
"type": "string",
|
|
191
|
+
"mutable": false,
|
|
192
|
+
"complexType": {
|
|
193
|
+
"original": "string | null",
|
|
194
|
+
"resolved": "string",
|
|
195
|
+
"references": {}
|
|
196
|
+
},
|
|
197
|
+
"required": false,
|
|
198
|
+
"optional": false,
|
|
199
|
+
"docs": {
|
|
200
|
+
"tags": [],
|
|
201
|
+
"text": "Accessible name for the progress bar (e.g. \"Uploading report\"). Required for assistive tech --\na `role=\"progressbar\"` with no name is an axe-core `aria-progressbar-name` violation. Setting\n`aria-label` on the host doesn't reach the inner element across the shadow boundary, so this\nprop binds it directly -- same pattern as `bs-button`'s `ariaLabel`."
|
|
202
|
+
},
|
|
203
|
+
"getter": false,
|
|
204
|
+
"setter": false,
|
|
205
|
+
"reflect": false,
|
|
206
|
+
"attribute": "aria-label",
|
|
207
|
+
"defaultValue": "null"
|
|
183
208
|
}
|
|
184
209
|
};
|
|
185
210
|
}
|
|
@@ -30,14 +30,9 @@ describe('bs-radio', () => {
|
|
|
30
30
|
expect(input).toEqualAttribute('name', 'fruit');
|
|
31
31
|
expect(input).toEqualAttribute('value', 'apple');
|
|
32
32
|
});
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
// native radio group, so clicking one does not natively uncheck another. This is a real, tested
|
|
37
|
-
// limitation of composing native <input type="radio"> inside separate shadow roots, not a bug in
|
|
38
|
-
// this component -- see bs-radio.mdx's Accessibility section for the documented gap. Within a
|
|
39
|
-
// single instance's own shadow root the native input still behaves like a normal radio input.
|
|
40
|
-
it('same-name bs-radio instances do NOT natively uncheck each other, since each lives in its own shadow root', async () => {
|
|
33
|
+
// Native same-name grouping can't cross each <bs-radio>'s own shadow root, so the component
|
|
34
|
+
// implements mutual exclusion itself (see bs-radio.tsx's `name` prop doc).
|
|
35
|
+
it('same-name bs-radio instances uncheck each other', async () => {
|
|
41
36
|
const { root, waitForChanges } = await render(h("div", null, h("bs-radio", { name: "fruit", value: "apple" }), h("bs-radio", { name: "fruit", value: "banana" })));
|
|
42
37
|
const [first, second] = Array.from(root.querySelectorAll('bs-radio'));
|
|
43
38
|
const firstInput = first.shadowRoot.querySelector('input');
|
|
@@ -48,8 +43,7 @@ describe('bs-radio', () => {
|
|
|
48
43
|
secondInput.click();
|
|
49
44
|
await waitForChanges();
|
|
50
45
|
expect(secondInput.checked).toBe(true);
|
|
51
|
-
|
|
52
|
-
expect(firstInput.checked).toBe(true);
|
|
46
|
+
expect(firstInput.checked).toBe(false);
|
|
53
47
|
});
|
|
54
48
|
describe('disabled', () => {
|
|
55
49
|
it('sets the disabled attribute on the native input', async () => {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
.bs-radio__input {
|
|
35
35
|
position: absolute;
|
|
36
36
|
top: 0;
|
|
37
|
-
|
|
37
|
+
inset-inline-start: 0;
|
|
38
38
|
width: 100%;
|
|
39
39
|
height: 100%;
|
|
40
40
|
margin: 0;
|
|
@@ -162,3 +162,9 @@
|
|
|
162
162
|
.bs-radio--disabled .bs-radio__label {
|
|
163
163
|
color: var(--bs-radio-label-disabled);
|
|
164
164
|
}
|
|
165
|
+
|
|
166
|
+
/* Windows High Contrast: ring and dot in system colors. */
|
|
167
|
+
@media (forced-colors: active) {
|
|
168
|
+
.bs-radio__circle { border: 2px solid ButtonText; forced-color-adjust: none; background: Canvas; }
|
|
169
|
+
.bs-radio__dot { background: Highlight; }
|
|
170
|
+
}
|
|
@@ -22,13 +22,10 @@ import { h } from "@stencil/core";
|
|
|
22
22
|
export class BsRadio {
|
|
23
23
|
el;
|
|
24
24
|
/** The native radio input's `name` attribute. Passed straight through to the native input inside.
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* bs-radio.mdx's Accessibility section for this known gap; consumers building a group currently
|
|
30
|
-
* need to manage mutual exclusivity themselves (e.g. via `bsChange`) until a `bs-radio-group`
|
|
31
|
-
* wrapper exists. */
|
|
25
|
+
* Also the group key: `bs-radio` elements sharing a `name` within the same root (document or
|
|
26
|
+
* shadow root) behave as one radio group -- checking one unchecks the others, arrow keys move
|
|
27
|
+
* between them, and only one is in the tab order. Native grouping can't cross each radio's own
|
|
28
|
+
* shadow root, so this component implements it itself. */
|
|
32
29
|
name;
|
|
33
30
|
/** The native radio input's `value` attribute -- read from `event.target.value`, or used when
|
|
34
31
|
* wiring the group up to a form. */
|
|
@@ -40,9 +37,65 @@ export class BsRadio {
|
|
|
40
37
|
disabled = false;
|
|
41
38
|
/** Emitted with this radio's own `value` when it becomes checked via user interaction. Since
|
|
42
39
|
* native same-`name` grouping doesn't cross shadow-root boundaries (see the `name` prop's doc),
|
|
43
|
-
* a consumer wiring up a group of `bs-radio`s
|
|
44
|
-
* response to this event -- there's no automatic un-checking to rely on here. */
|
|
40
|
+
* a consumer wiring up a group of `bs-radio`s does not need to un-check the others itself. */
|
|
45
41
|
bsChange;
|
|
42
|
+
internals;
|
|
43
|
+
initialChecked = false;
|
|
44
|
+
/** Whether any radio in this group is checked -- drives roving tabindex (an unchecked radio is
|
|
45
|
+
* only tabbable while nothing in its group is checked). */
|
|
46
|
+
groupHasChecked = false;
|
|
47
|
+
/** Other `bs-radio`s sharing this one's `name` within the same root, in DOM order (including
|
|
48
|
+
* this one). */
|
|
49
|
+
groupMembers() {
|
|
50
|
+
if (!this.name)
|
|
51
|
+
return [this.el];
|
|
52
|
+
const root = this.el.getRootNode();
|
|
53
|
+
return Array.from(root.querySelectorAll('bs-radio')).filter(r => r.name === this.name);
|
|
54
|
+
}
|
|
55
|
+
onCheckedChange() {
|
|
56
|
+
this.internals?.setFormValue?.(this.checked ? this.value ?? 'on' : null);
|
|
57
|
+
if (this.checked) {
|
|
58
|
+
this.groupMembers().forEach(r => {
|
|
59
|
+
if (r !== this.el && r.checked)
|
|
60
|
+
r.checked = false;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
this.refreshGroupState();
|
|
64
|
+
}
|
|
65
|
+
onAnyRadioChange() {
|
|
66
|
+
this.refreshGroupState();
|
|
67
|
+
}
|
|
68
|
+
refreshGroupState() {
|
|
69
|
+
this.groupHasChecked = this.groupMembers().some(r => r.checked);
|
|
70
|
+
}
|
|
71
|
+
componentWillLoad() {
|
|
72
|
+
this.initialChecked = this.checked;
|
|
73
|
+
this.internals?.setFormValue?.(this.checked ? this.value ?? 'on' : null);
|
|
74
|
+
}
|
|
75
|
+
componentDidLoad() {
|
|
76
|
+
this.refreshGroupState();
|
|
77
|
+
}
|
|
78
|
+
/** Called by the browser when the surrounding `<form>` is reset. */
|
|
79
|
+
formResetCallback() {
|
|
80
|
+
this.checked = this.initialChecked;
|
|
81
|
+
}
|
|
82
|
+
/** WAI-ARIA radio group pattern: arrows move selection (and focus) to the previous/next enabled
|
|
83
|
+
* radio in the group, wrapping at the ends. */
|
|
84
|
+
onKeyDown = (ev) => {
|
|
85
|
+
const forward = ev.key === 'ArrowRight' || ev.key === 'ArrowDown';
|
|
86
|
+
const backward = ev.key === 'ArrowLeft' || ev.key === 'ArrowUp';
|
|
87
|
+
if (!forward && !backward)
|
|
88
|
+
return;
|
|
89
|
+
const members = this.groupMembers().filter(r => !r.disabled);
|
|
90
|
+
if (members.length < 2)
|
|
91
|
+
return;
|
|
92
|
+
ev.preventDefault();
|
|
93
|
+
const idx = members.indexOf(this.el);
|
|
94
|
+
const next = members[(idx + (forward ? 1 : -1) + members.length) % members.length];
|
|
95
|
+
const input = next.shadowRoot?.querySelector('input');
|
|
96
|
+
input?.click();
|
|
97
|
+
input?.focus();
|
|
98
|
+
};
|
|
46
99
|
onChange = (ev) => {
|
|
47
100
|
const checked = ev.target.checked;
|
|
48
101
|
this.checked = checked;
|
|
@@ -51,11 +104,12 @@ export class BsRadio {
|
|
|
51
104
|
}
|
|
52
105
|
};
|
|
53
106
|
render() {
|
|
54
|
-
return (h("label", { key: '
|
|
107
|
+
return (h("label", { key: '84bfc39d5714d15c45936c8150b9bd7473b79574', class: `bs-radio ${this.disabled ? 'bs-radio--disabled' : ''}` }, h("input", { key: '0a118d5e59f4d33b0411f7be0fba08a706cda298', class: "bs-radio__input", type: "radio", name: this.name, value: this.value, checked: this.checked, disabled: this.disabled, tabIndex: this.checked || !this.groupHasChecked ? 0 : -1, onKeyDown: this.onKeyDown, onChange: this.onChange }), h("span", { key: '889dadd67126819c3d39a5823d48be58a9c71f9f', class: "bs-radio__hit-area" }, h("span", { key: '5bbed4d44bcf4d810693b5912a90855d680540d0', class: "bs-radio__state-layer" }, h("span", { key: '509389527b876127ca456900e3bb4aa21c735f72', part: "circle", class: `bs-radio__circle ${this.checked ? 'bs-radio__circle--selected' : ''}` }, this.checked && h("span", { key: '9a7e335f9646eb72fb06fb0ca9436e763c3ad278', part: "dot", class: "bs-radio__dot" })))), h("span", { key: '2017790d3d99355b4eb93e3659c809df58c61065', part: "label", class: "bs-radio__label" }, h("slot", { key: '199450bb26f7966cdd64b04c78e3015300d793c9' }))));
|
|
55
108
|
}
|
|
56
109
|
static get is() { return "bs-radio"; }
|
|
57
110
|
static get encapsulation() { return "shadow"; }
|
|
58
111
|
static get delegatesFocus() { return true; }
|
|
112
|
+
static get formAssociated() { return true; }
|
|
59
113
|
static get originalStyleUrls() {
|
|
60
114
|
return {
|
|
61
115
|
"$": ["bs-radio.css"]
|
|
@@ -80,11 +134,11 @@ export class BsRadio {
|
|
|
80
134
|
"optional": false,
|
|
81
135
|
"docs": {
|
|
82
136
|
"tags": [],
|
|
83
|
-
"text": "The native radio input's `name` attribute. Passed straight through to the native input inside.\
|
|
137
|
+
"text": "The native radio input's `name` attribute. Passed straight through to the native input inside.\nAlso the group key: `bs-radio` elements sharing a `name` within the same root (document or\nshadow root) behave as one radio group -- checking one unchecks the others, arrow keys move\nbetween them, and only one is in the tab order. Native grouping can't cross each radio's own\nshadow root, so this component implements it itself."
|
|
84
138
|
},
|
|
85
139
|
"getter": false,
|
|
86
140
|
"setter": false,
|
|
87
|
-
"reflect":
|
|
141
|
+
"reflect": true,
|
|
88
142
|
"attribute": "name"
|
|
89
143
|
},
|
|
90
144
|
"value": {
|
|
@@ -142,12 +196,17 @@ export class BsRadio {
|
|
|
142
196
|
},
|
|
143
197
|
"getter": false,
|
|
144
198
|
"setter": false,
|
|
145
|
-
"reflect":
|
|
199
|
+
"reflect": true,
|
|
146
200
|
"attribute": "disabled",
|
|
147
201
|
"defaultValue": "false"
|
|
148
202
|
}
|
|
149
203
|
};
|
|
150
204
|
}
|
|
205
|
+
static get states() {
|
|
206
|
+
return {
|
|
207
|
+
"groupHasChecked": {}
|
|
208
|
+
};
|
|
209
|
+
}
|
|
151
210
|
static get events() {
|
|
152
211
|
return [{
|
|
153
212
|
"method": "bsChange",
|
|
@@ -157,7 +216,7 @@ export class BsRadio {
|
|
|
157
216
|
"composed": true,
|
|
158
217
|
"docs": {
|
|
159
218
|
"tags": [],
|
|
160
|
-
"text": "Emitted with this radio's own `value` when it becomes checked via user interaction. Since\nnative same-`name` grouping doesn't cross shadow-root boundaries (see the `name` prop's doc),\na consumer wiring up a group of `bs-radio`s
|
|
219
|
+
"text": "Emitted with this radio's own `value` when it becomes checked via user interaction. Since\nnative same-`name` grouping doesn't cross shadow-root boundaries (see the `name` prop's doc),\na consumer wiring up a group of `bs-radio`s does not need to un-check the others itself."
|
|
161
220
|
},
|
|
162
221
|
"complexType": {
|
|
163
222
|
"original": "string",
|
|
@@ -167,4 +226,23 @@ export class BsRadio {
|
|
|
167
226
|
}];
|
|
168
227
|
}
|
|
169
228
|
static get elementRef() { return "el"; }
|
|
229
|
+
static get watchers() {
|
|
230
|
+
return [{
|
|
231
|
+
"propName": "checked",
|
|
232
|
+
"methodName": "onCheckedChange"
|
|
233
|
+
}, {
|
|
234
|
+
"propName": "value",
|
|
235
|
+
"methodName": "onCheckedChange"
|
|
236
|
+
}];
|
|
237
|
+
}
|
|
238
|
+
static get listeners() {
|
|
239
|
+
return [{
|
|
240
|
+
"name": "bsChange",
|
|
241
|
+
"method": "onAnyRadioChange",
|
|
242
|
+
"target": "document",
|
|
243
|
+
"capture": false,
|
|
244
|
+
"passive": false
|
|
245
|
+
}];
|
|
246
|
+
}
|
|
247
|
+
static get attachInternalsMemberName() { return "internals"; }
|
|
170
248
|
}
|
|
@@ -35,19 +35,10 @@ export const DisabledChecked = {
|
|
|
35
35
|
name: 'Disabled + checked',
|
|
36
36
|
args: { disabled: true, checked: true },
|
|
37
37
|
};
|
|
38
|
-
// Native same-name radio grouping doesn't extend across separate <bs-radio> instances (each has
|
|
39
|
-
// its own shadow root -- see bs-radio.mdx's Accessibility section), so this story manages mutual
|
|
40
|
-
// exclusivity itself by listening for bsChange and unchecking the siblings.
|
|
41
|
-
const onGroupChange = (ev) => {
|
|
42
|
-
const group = ev.target.closest('[data-radio-group]');
|
|
43
|
-
group?.querySelectorAll('bs-radio').forEach(radio => {
|
|
44
|
-
radio.checked = radio === ev.target;
|
|
45
|
-
});
|
|
46
|
-
};
|
|
47
38
|
export const Group = {
|
|
48
39
|
name: 'Radio group',
|
|
49
40
|
render: () => html `
|
|
50
|
-
<div
|
|
41
|
+
<div role="radiogroup" aria-label="Options" style="display: flex; flex-direction: column; gap: 8px;">
|
|
51
42
|
<bs-radio name="group-story" value="option-1" checked>Option 1</bs-radio>
|
|
52
43
|
<bs-radio name="group-story" value="option-2">Option 2</bs-radio>
|
|
53
44
|
<bs-radio name="group-story" value="option-3">Option 3</bs-radio>
|
|
@@ -32,6 +32,9 @@ export class BsSlider {
|
|
|
32
32
|
* and `segmented` use one thumb (`value`). `segmented` additionally draws `segments` tick marks
|
|
33
33
|
* along the track. */
|
|
34
34
|
type = 'default';
|
|
35
|
+
/** The `name` the value is submitted under in a surrounding `<form>`'s `FormData`. `type="range"`
|
|
36
|
+
* submits two entries under this name: the start value, then the end value. */
|
|
37
|
+
name;
|
|
35
38
|
/** Shows/hides the "Label" text and editable percentage field(s) above the track, and the
|
|
36
39
|
* static min/max bound labels flanking it. When `false`, only the bare track (and its
|
|
37
40
|
* knob/knobs) renders. */
|
|
@@ -78,6 +81,33 @@ export class BsSlider {
|
|
|
78
81
|
/** Emitted when `valueStart`/`valueEnd` changes via user interaction, with both current values.
|
|
79
82
|
* Only fires for `type="range"`. */
|
|
80
83
|
bsRangeChange;
|
|
84
|
+
internals;
|
|
85
|
+
initial = { value: 0, valueStart: undefined, valueEnd: undefined };
|
|
86
|
+
componentWillLoad() {
|
|
87
|
+
this.initial = { value: this.value, valueStart: this.valueStart, valueEnd: this.valueEnd };
|
|
88
|
+
this.syncFormValue();
|
|
89
|
+
}
|
|
90
|
+
syncFormValue() {
|
|
91
|
+
if (!this.internals?.setFormValue)
|
|
92
|
+
return;
|
|
93
|
+
if (this.type === 'range') {
|
|
94
|
+
const data = new FormData();
|
|
95
|
+
if (this.name) {
|
|
96
|
+
data.append(this.name, String(this.effectiveValueStart));
|
|
97
|
+
data.append(this.name, String(this.effectiveValueEnd));
|
|
98
|
+
}
|
|
99
|
+
this.internals.setFormValue(data);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
this.internals.setFormValue(String(this.value));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/** Called by the browser when the surrounding `<form>` is reset. */
|
|
106
|
+
formResetCallback() {
|
|
107
|
+
this.value = this.initial.value;
|
|
108
|
+
this.valueStart = this.initial.valueStart;
|
|
109
|
+
this.valueEnd = this.initial.valueEnd;
|
|
110
|
+
}
|
|
81
111
|
get effectiveValueStart() {
|
|
82
112
|
return this.valueStart ?? this.min;
|
|
83
113
|
}
|
|
@@ -199,11 +229,12 @@ export class BsSlider {
|
|
|
199
229
|
render() {
|
|
200
230
|
const isRange = this.type === 'range';
|
|
201
231
|
const rootClasses = ['bs-slider', this.disabled ? 'bs-slider--disabled' : ''].filter(Boolean).join(' ');
|
|
202
|
-
return (h("div", { key: '
|
|
232
|
+
return (h("div", { key: 'f2db9b3d88d97f4183227dca165e4943586100b7', class: rootClasses }, this.showLabel && (h("div", { key: 'b5898da538670e481c1e0c0120f8ac67fec49ffe', class: "bs-slider__header" }, h("span", { key: '3f0257ee85b18fdce7a51825f9e3005b7c8c8985', 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: '74adbfd1c596cb0de4bf484cd2ffbc2f283d9074', class: "bs-slider__row" }, this.showLabel && (h("span", { key: '334f03095f5246d4156e7853a1b9d3ddcb594f0a', part: "bound", class: "bs-slider__bound" }, this.min)), isRange ? this.renderRangeThumbs() : this.renderSingleThumb(), this.showLabel && (h("span", { key: '5173a19292bd029121cf9412a2087383700ec61b', part: "bound", class: "bs-slider__bound" }, this.max)))));
|
|
203
233
|
}
|
|
204
234
|
static get is() { return "bs-slider"; }
|
|
205
235
|
static get encapsulation() { return "shadow"; }
|
|
206
236
|
static get delegatesFocus() { return true; }
|
|
237
|
+
static get formAssociated() { return true; }
|
|
207
238
|
static get originalStyleUrls() {
|
|
208
239
|
return {
|
|
209
240
|
"$": ["bs-slider.css"]
|
|
@@ -242,6 +273,25 @@ export class BsSlider {
|
|
|
242
273
|
"attribute": "type",
|
|
243
274
|
"defaultValue": "'default'"
|
|
244
275
|
},
|
|
276
|
+
"name": {
|
|
277
|
+
"type": "string",
|
|
278
|
+
"mutable": false,
|
|
279
|
+
"complexType": {
|
|
280
|
+
"original": "string",
|
|
281
|
+
"resolved": "string",
|
|
282
|
+
"references": {}
|
|
283
|
+
},
|
|
284
|
+
"required": false,
|
|
285
|
+
"optional": true,
|
|
286
|
+
"docs": {
|
|
287
|
+
"tags": [],
|
|
288
|
+
"text": "The `name` the value is submitted under in a surrounding `<form>`'s `FormData`. `type=\"range\"`\nsubmits two entries under this name: the start value, then the end value."
|
|
289
|
+
},
|
|
290
|
+
"getter": false,
|
|
291
|
+
"setter": false,
|
|
292
|
+
"reflect": true,
|
|
293
|
+
"attribute": "name"
|
|
294
|
+
},
|
|
245
295
|
"showLabel": {
|
|
246
296
|
"type": "boolean",
|
|
247
297
|
"mutable": false,
|
|
@@ -436,7 +486,7 @@ export class BsSlider {
|
|
|
436
486
|
},
|
|
437
487
|
"getter": false,
|
|
438
488
|
"setter": false,
|
|
439
|
-
"reflect":
|
|
489
|
+
"reflect": true,
|
|
440
490
|
"attribute": "disabled",
|
|
441
491
|
"defaultValue": "false"
|
|
442
492
|
},
|
|
@@ -496,4 +546,20 @@ export class BsSlider {
|
|
|
496
546
|
}];
|
|
497
547
|
}
|
|
498
548
|
static get elementRef() { return "el"; }
|
|
549
|
+
static get watchers() {
|
|
550
|
+
return [{
|
|
551
|
+
"propName": "value",
|
|
552
|
+
"methodName": "syncFormValue"
|
|
553
|
+
}, {
|
|
554
|
+
"propName": "valueStart",
|
|
555
|
+
"methodName": "syncFormValue"
|
|
556
|
+
}, {
|
|
557
|
+
"propName": "valueEnd",
|
|
558
|
+
"methodName": "syncFormValue"
|
|
559
|
+
}, {
|
|
560
|
+
"propName": "type",
|
|
561
|
+
"methodName": "syncFormValue"
|
|
562
|
+
}];
|
|
563
|
+
}
|
|
564
|
+
static get attachInternalsMemberName() { return "internals"; }
|
|
499
565
|
}
|
|
@@ -61,7 +61,7 @@ export class BsSnackbar {
|
|
|
61
61
|
this.bsDismiss.emit();
|
|
62
62
|
};
|
|
63
63
|
render() {
|
|
64
|
-
return (h("div", { key: '
|
|
64
|
+
return (h("div", { key: 'c84de130f993938339fd16d9f534f1da18fe6c0a', part: "container", class: `bs-snackbar bs-snackbar--${this.variant}`, role: "status", "aria-live": this.variant === 'error' ? 'assertive' : 'polite' }, h("div", { key: '0941f900229f6b3208f8268d34b0cde49e4dba22', class: "bs-snackbar__content" }, h("span", { key: 'cf89eff5ea640950573f9b610d6eff46e5d0154e', part: "icon", class: "bs-snackbar__icon", "aria-hidden": "true" }, this.loading ? h("span", { class: "bs-snackbar__spinner" }) : h(CheckCircleIcon, null)), h("span", { key: 'd4ae7e62ecaea7b53962b08d69bae435ecf0a810', part: "message", class: "bs-snackbar__message" }, h("slot", { key: 'a99ec601f27f79f42fc61cd14c0fed742d2fa334' }))), h("div", { key: 'a139c0287e2eacb26ccbd604ff0343bca23eeb5d', class: "bs-snackbar__actions" }, this.actionLabel && (h("bs-button", { key: 'f22c4a63903fdb50da087ab2c38dd076298a12ed', part: "action", variant: ACTION_VARIANT[this.variant], size: "sm", onClick: this.onAction }, this.actionLabel)), h("bs-icon-button", { key: '4cd5c8f367ee71f11dad1f6f47ff1cdf6436a764', part: "close", variant: "subtle", size: "md", ariaLabel: "Dismiss", onClick: this.onDismiss }, h(CloseIcon, { key: 'a52e6af7acf7c95a54aa6cb5237f2b53e30ea601' })))));
|
|
65
65
|
}
|
|
66
66
|
static get is() { return "bs-snackbar"; }
|
|
67
67
|
static get encapsulation() { return "shadow"; }
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
border: none;
|
|
25
25
|
border-radius: var(--bs-source-link-radius);
|
|
26
26
|
font-family: inherit;
|
|
27
|
-
text-align:
|
|
27
|
+
text-align: start;
|
|
28
28
|
text-decoration: none;
|
|
29
29
|
cursor: pointer;
|
|
30
30
|
transition: background-color var(--bs-duration-fast) var(--bs-easing-standard);
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
display: flex;
|
|
85
85
|
align-items: center;
|
|
86
86
|
gap: var(--bs-spacing-50);
|
|
87
|
-
padding-
|
|
87
|
+
padding-inline-start: 22px;
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
.bs-source-link__source,
|
|
@@ -51,8 +51,8 @@ export class BsSourceLink {
|
|
|
51
51
|
};
|
|
52
52
|
render() {
|
|
53
53
|
const inner = [
|
|
54
|
-
h("span", { key: '
|
|
55
|
-
h("span", { key: '
|
|
54
|
+
h("span", { key: '5c6382ad80cc971f302da1d80af089306a612e73', class: "bs-source-link__left" }, h("span", { key: '07c8591469e23fe4304846e9282cea0a9eae3ba2', class: "bs-source-link__filename-row" }, h("span", { key: 'ffdb99816134be212cc4d30ebdbf8dd8bcdc085f', part: "icon", class: "bs-source-link__icon" }, h("slot", { key: '475cd85bcb5caa1d3a82d08318731ef4bdf6cb60', name: "icon" }, h(FileTextIcon, { key: '6915810a89f15b823b2b744d30db5b2cefff8162' }))), h("p", { key: '14facc92c71f91701654ea2ce2f9f2ef4b980c5e', part: "filename", class: "bs-source-link__filename" }, this.fileName)), h("span", { key: 'ecd7080f8bc8ce5d7e169f917aaae275ac7a474e', class: "bs-source-link__meta" }, this.sourceName && (h("span", { key: 'f1697d3e278225b26909ec1c40ce2c4cb51c884b', part: "source", class: "bs-source-link__source" }, this.sourceName)), this.sourceName && this.version && h("span", { key: '8efe25341dc7c68ec9c66b91f5f399c9b8ed659f', class: "bs-source-link__dot", "aria-hidden": "true" }), this.version && (h("span", { key: 'cddd46792f911af65434554e56d1cb72d2b88cae', part: "version", class: "bs-source-link__version" }, this.version)))),
|
|
55
|
+
h("span", { key: '166b5070329771cd7e8f20689e5b257d3f6f1fd0', part: "arrow", class: "bs-source-link__arrow", "aria-hidden": "true" }, h(ArrowUpRightIcon, { key: 'c2a820c6b36ead5f1bbfd74d84c70cb9894c8f1f' })),
|
|
56
56
|
];
|
|
57
57
|
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));
|
|
58
58
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { h } from "@stencil/core";
|
|
1
|
+
import { h, Host } from "@stencil/core";
|
|
2
2
|
/**
|
|
3
3
|
* A sequence of named steps showing overall progress through a multi-step flow (e.g. a checkout,
|
|
4
4
|
* an onboarding wizard) -- each step reads as enabled (not yet reached), current, done, error, or
|
|
@@ -61,7 +61,8 @@ export class BsStepper {
|
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
render() {
|
|
64
|
-
|
|
64
|
+
// role="list" so each bs-stepper-step's role="listitem" has the required parent.
|
|
65
|
+
return (h(Host, { key: 'a9c1838c549b0c3ea9cc145624bc38e9edb32a51', role: "list" }, h("slot", { key: '549a18512ad246b5988008b8d2b6a9142e5380a5', onSlotchange: this.onSlotChange })));
|
|
65
66
|
}
|
|
66
67
|
static get is() { return "bs-stepper"; }
|
|
67
68
|
static get encapsulation() { return "shadow"; }
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
the icon's own right edge to .top's right edge with no positioning assumptions to get wrong. */
|
|
148
148
|
:host(.bs-stepper-step--horizontal) .bs-stepper-step__connector {
|
|
149
149
|
flex: 1 1 auto;
|
|
150
|
-
margin-
|
|
150
|
+
margin-inline-start: var(--bs-stepper-step-gap);
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
:host(.bs-stepper-step--vertical) .bs-stepper-step__connector {
|
|
@@ -218,8 +218,8 @@
|
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
:host(.bs-stepper-step--vertical) .bs-stepper-step__label {
|
|
221
|
-
margin-
|
|
222
|
-
text-align:
|
|
221
|
+
margin-inline-start: var(--bs-stepper-step-gap);
|
|
222
|
+
text-align: start;
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
/* white-space: nowrap -- .label is deliberately narrowed to just the icon's width (see .label's own
|
|
@@ -57,7 +57,7 @@ export class BsStepperStep {
|
|
|
57
57
|
}
|
|
58
58
|
render() {
|
|
59
59
|
const state = this.state;
|
|
60
|
-
return (h(Host, { key: '
|
|
60
|
+
return (h(Host, { key: 'fe270c356f44c25a3a12450eec8e1a7657d4d88f', role: "listitem", class: `bs-stepper-step--${this.direction}` }, h("div", { key: '1bc833a5ca917d141078e3b69e9e455ec8d877ad', class: "bs-stepper-step__top" }, h("span", { key: 'aa91b7e91d600b08c389be456b28f4a65450d72e', part: "icon", class: `bs-stepper-step__icon bs-stepper-step__icon--${state}` }, state === 'current' && h("span", { key: 'e3fee594c97bf9f5d47e1b922bf9adffa1c0d438', class: "bs-stepper-step__icon-dot" }), state === 'done' && h(CheckIcon, { key: '4930e7653d7c81c8fcf18920fdd0a9a0e975eee4' }), state === 'error' && h(ExclamationIcon, { key: 'ca757e769dd4411c987bf5f22b7cda904d9fd067' })), h("span", { key: '2b0621849727e355d4d0944087ff1d9eacb5b5f7', part: "connector", class: "bs-stepper-step__connector", "aria-hidden": "true" }, h("span", { key: '0d08b9591ea2c9a967ebf85dce105f667cb86370', class: "bs-stepper-step__connector-line" }))), h("span", { key: '3bd0490ef190a4e4f33f822383be230e4e20e7dc', part: "label", class: `bs-stepper-step__label bs-stepper-step__label--${state}` }, h("span", { key: 'cf6cb4f72fcf546a954085d125a72548cfe521fe', part: "name", class: "bs-stepper-step__name" }, this.name), this.showDescription && this.description && (h("span", { key: 'b0ef234071983ae8c87d68440e7bfa4a491a35f5', part: "description", class: "bs-stepper-step__description" }, this.description)))));
|
|
61
61
|
}
|
|
62
62
|
static get is() { return "bs-stepper-step"; }
|
|
63
63
|
static get encapsulation() { return "shadow"; }
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
.bs-switch__input {
|
|
86
86
|
position: absolute;
|
|
87
87
|
top: 0;
|
|
88
|
-
|
|
88
|
+
inset-inline-start: 0;
|
|
89
89
|
width: 100%;
|
|
90
90
|
height: 100%;
|
|
91
91
|
margin: 0;
|
|
@@ -194,3 +194,12 @@
|
|
|
194
194
|
.bs-switch--disabled .bs-switch__label {
|
|
195
195
|
color: var(--bs-switch-label-color-disabled);
|
|
196
196
|
}
|
|
197
|
+
|
|
198
|
+
/* Windows High Contrast: track outline + knob in system colors; checked = Highlight. */
|
|
199
|
+
@media (forced-colors: active) {
|
|
200
|
+
.bs-switch__track { border: 2px solid ButtonText; forced-color-adjust: none; background: Canvas; }
|
|
201
|
+
.bs-switch__track--checked { background: Highlight; border-color: Highlight; }
|
|
202
|
+
.bs-switch__knob { background: ButtonText; }
|
|
203
|
+
.bs-switch__track--checked .bs-switch__knob { background: HighlightText; }
|
|
204
|
+
.bs-switch__track--disabled { border-color: GrayText; }
|
|
205
|
+
}
|