@brandsync/wc 1.7.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 +201 -13
- 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-819a3dae.entry.js → p-03b08508.entry.js} +1 -1
- package/dist/brandsync-wc/{p-fde5e9f1.entry.js → p-051d3064.entry.js} +1 -1
- package/dist/brandsync-wc/{p-f243683f.entry.js → p-05c7de28.entry.js} +1 -1
- package/dist/brandsync-wc/{p-2d6955d6.entry.js → p-062cfa34.entry.js} +1 -1
- package/dist/brandsync-wc/p-0e39b9cc.entry.js +1 -0
- package/dist/brandsync-wc/{p-538cc08e.entry.js → p-114d2fd8.entry.js} +1 -1
- package/dist/brandsync-wc/{p-70e035ed.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-d06543a5.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-a36a0e6a.entry.js → p-3176d1d3.entry.js} +1 -1
- package/dist/brandsync-wc/{p-0d86c22d.entry.js → p-33e44094.entry.js} +1 -1
- package/dist/brandsync-wc/{p-e427bbda.entry.js → p-360452c2.entry.js} +1 -1
- 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-61db6ce2.entry.js → p-61c1a2a3.entry.js} +1 -1
- package/dist/brandsync-wc/{p-85c70f6d.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-9c1be2a0.entry.js → p-6bf2f116.entry.js} +1 -1
- package/dist/brandsync-wc/{p-c3a28a89.entry.js → p-70f64b25.entry.js} +1 -1
- package/dist/brandsync-wc/{p-06e9b45d.entry.js → p-7b00dd36.entry.js} +1 -1
- package/dist/brandsync-wc/{p-13e4966c.entry.js → p-7c94e6ae.entry.js} +1 -1
- package/dist/brandsync-wc/p-835a8dc7.entry.js +1 -0
- package/dist/brandsync-wc/{p-77433277.entry.js → p-8ee0153b.entry.js} +1 -1
- package/dist/brandsync-wc/{p-e1069ba9.entry.js → p-9f65f998.entry.js} +1 -1
- package/dist/brandsync-wc/{p-b2dc9886.entry.js → p-9f8852a0.entry.js} +1 -1
- package/dist/brandsync-wc/{p-DuyFft7h.js → p-AgoOSYvW.js} +2 -2
- package/dist/brandsync-wc/{p-fba01c96.entry.js → p-a09e157f.entry.js} +1 -1
- package/dist/brandsync-wc/{p-55e6438c.entry.js → p-a0d5a620.entry.js} +1 -1
- package/dist/brandsync-wc/{p-8b2ab522.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-3eab22a5.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-30d6a6d0.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-8b57f606.entry.js → p-c4de155c.entry.js} +1 -1
- package/dist/brandsync-wc/p-c7f4c114.entry.js +1 -0
- package/dist/brandsync-wc/{p-c197cc95.entry.js → p-cfcf3f0a.entry.js} +1 -1
- package/dist/brandsync-wc/{p-f8f03334.entry.js → p-de7c946d.entry.js} +1 -1
- package/dist/brandsync-wc/{p-600b5434.entry.js → p-e9b43754.entry.js} +1 -1
- package/dist/brandsync-wc/{p-d25b7b74.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-7ed5670e.entry.js → p-f7d47c17.entry.js} +1 -1
- package/dist/brandsync-wc/{p-f518f486.entry.js → p-fc58c663.entry.js} +1 -1
- package/dist/brandsync-wc/{p-be14f99f.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 +1 -1
- package/dist/cjs/bs-ai-greeting.cjs.entry.js +1 -1
- package/dist/cjs/bs-ai-thinking.cjs.entry.js +1 -1
- package/dist/cjs/bs-attachment-list.cjs.entry.js +2 -2
- 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 +1 -1
- package/dist/cjs/bs-button-skeleton.cjs.entry.js +1 -1
- 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 +1 -1
- package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-header.cjs.entry.js +1 -1
- package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +1 -1
- package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +1 -1
- package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +1 -1
- package/dist/cjs/bs-checkbox.cjs.entry.js +48 -3
- package/dist/cjs/bs-chip-filter.cjs.entry.js +2 -2
- package/dist/cjs/bs-chip-informative.cjs.entry.js +2 -2
- package/dist/cjs/bs-chip-input.cjs.entry.js +2 -2
- package/dist/cjs/bs-composer-status-banner.cjs.entry.js +1 -1
- package/dist/cjs/bs-composer.cjs.entry.js +1 -1
- package/dist/cjs/bs-data-table.cjs.entry.js +2 -2
- package/dist/cjs/bs-dialog.cjs.entry.js +2 -2
- package/dist/cjs/bs-file-upload-item.cjs.entry.js +1 -1
- package/dist/cjs/bs-file-upload.cjs.entry.js +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/cjs/bs-pagination.cjs.entry.js +1 -1
- package/dist/cjs/bs-progress-linear.cjs.entry.js +1 -1
- 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 +1 -1
- package/dist/cjs/bs-source-link.cjs.entry.js +2 -2
- package/dist/cjs/bs-stepper-step.cjs.entry.js +2 -2
- 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 +1 -1
- 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/components/bs-a11y.cmp.test.js +54 -0
- package/dist/collection/components/bs-accordion/bs-accordion.css +5 -5
- 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-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.css +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-card/bs-card.css +4 -0
- package/dist/collection/components/bs-chatbot-feedback/bs-chatbot-feedback.css +1 -1
- package/dist/collection/components/bs-chatbot-response-action/bs-chatbot-response-action.css +3 -3
- 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-informative/bs-chip-informative.css +4 -4
- package/dist/collection/components/bs-chip/bs-chip-input/bs-chip-input.css +5 -5
- package/dist/collection/components/bs-data-table/bs-data-table.css +1 -1
- package/dist/collection/components/bs-dialog/bs-dialog.css +5 -1
- 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-progress/bs-progress.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-source-link/bs-source-link.css +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-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-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/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.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-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.js +1 -1
- package/dist/components/bs-file-upload.js +1 -1
- 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-LYvoWZt4.js → p-BA3c9Rom.js} +1 -1
- package/dist/components/{p-Dqt-Qp4W.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-BxFJ74fI.js → p-EtXc94lJ.js} +1 -1
- 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-Dx8gAOVC.js → p-wei0Ija2.js} +1 -1
- 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 +1 -1
- package/dist/esm/bs-ai-greeting.entry.js +1 -1
- package/dist/esm/bs-ai-thinking.entry.js +1 -1
- package/dist/esm/bs-attachment-list.entry.js +2 -2
- 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 +1 -1
- package/dist/esm/bs-button-skeleton.entry.js +1 -1
- 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 +1 -1
- package/dist/esm/bs-chatbot-feedback.entry.js +2 -2
- package/dist/esm/bs-chatbot-header.entry.js +1 -1
- package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
- package/dist/esm/bs-chatbot-sources-drawer.entry.js +1 -1
- package/dist/esm/bs-chatbot-suggestion-button.entry.js +1 -1
- package/dist/esm/bs-checkbox-skeleton.entry.js +1 -1
- package/dist/esm/bs-checkbox.entry.js +48 -3
- package/dist/esm/bs-chip-filter.entry.js +2 -2
- package/dist/esm/bs-chip-informative.entry.js +2 -2
- package/dist/esm/bs-chip-input.entry.js +2 -2
- package/dist/esm/bs-composer-status-banner.entry.js +1 -1
- package/dist/esm/bs-composer.entry.js +1 -1
- package/dist/esm/bs-data-table.entry.js +2 -2
- package/dist/esm/bs-dialog.entry.js +2 -2
- package/dist/esm/bs-file-upload-item.entry.js +1 -1
- package/dist/esm/bs-file-upload.entry.js +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/esm/bs-pagination.entry.js +1 -1
- package/dist/esm/bs-progress-linear.entry.js +1 -1
- 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 +1 -1
- package/dist/esm/bs-source-link.entry.js +2 -2
- package/dist/esm/bs-stepper-step.entry.js +2 -2
- 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 +1 -1
- 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-checkbox/bs-checkbox.d.ts +12 -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-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 +141 -7
- package/package.json +1 -1
- package/readme.md +14 -0
- package/dist/brandsync-wc/p-18021c05.entry.js +0 -1
- package/dist/brandsync-wc/p-1c8160c2.entry.js +0 -1
- package/dist/brandsync-wc/p-21c14465.entry.js +0 -1
- package/dist/brandsync-wc/p-27100489.entry.js +0 -1
- package/dist/brandsync-wc/p-309f920e.entry.js +0 -1
- package/dist/brandsync-wc/p-4b0938a5.entry.js +0 -1
- package/dist/brandsync-wc/p-5312b6a5.entry.js +0 -1
- package/dist/brandsync-wc/p-777a9dbf.entry.js +0 -1
- package/dist/brandsync-wc/p-a96856fd.entry.js +0 -1
- package/dist/brandsync-wc/p-b0634051.entry.js +0 -1
- package/dist/brandsync-wc/p-bcee3d60.entry.js +0 -1
- package/dist/brandsync-wc/p-e61efe4d.entry.js +0 -1
- package/dist/brandsync-wc/p-f14bda01.entry.js +0 -1
- package/dist/components/p-BaxFLlKS.js +0 -1
- package/dist/components/p-DI5GgSqL.js +0 -1
- package/dist/components/p-v4T0qPVn.js +0 -1
|
@@ -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
|
}
|
|
@@ -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,
|
|
@@ -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
|
|
@@ -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
|
+
}
|
|
@@ -20,6 +20,12 @@ import { h } from "@stencil/core";
|
|
|
20
20
|
// bs-switch.css, not here.
|
|
21
21
|
export class BsSwitch {
|
|
22
22
|
el;
|
|
23
|
+
internals;
|
|
24
|
+
initialChecked = false;
|
|
25
|
+
/** The `name` the value is submitted under in a surrounding `<form>`'s `FormData`. */
|
|
26
|
+
name;
|
|
27
|
+
/** The value submitted when on (native checkbox default: `"on"`). */
|
|
28
|
+
value = 'on';
|
|
23
29
|
/** Sizing scale. Controls the track's width/height and the knob's diameter. */
|
|
24
30
|
size = 'lg';
|
|
25
31
|
/** Whether the switch is on. Mutable so clicking the label/input toggles it directly, and
|
|
@@ -41,6 +47,17 @@ export class BsSwitch {
|
|
|
41
47
|
ariaLabel = null;
|
|
42
48
|
/** Emitted when the checked state changes via user interaction, with the new `checked` value. */
|
|
43
49
|
bsChange;
|
|
50
|
+
syncFormValue() {
|
|
51
|
+
this.internals?.setFormValue?.(this.checked ? this.value : null);
|
|
52
|
+
}
|
|
53
|
+
/** Called by the browser when the surrounding `<form>` is reset. */
|
|
54
|
+
formResetCallback() {
|
|
55
|
+
this.checked = this.initialChecked;
|
|
56
|
+
}
|
|
57
|
+
componentWillLoad() {
|
|
58
|
+
this.initialChecked = this.checked;
|
|
59
|
+
this.syncFormValue();
|
|
60
|
+
}
|
|
44
61
|
onChange = (ev) => {
|
|
45
62
|
const checked = ev.target.checked;
|
|
46
63
|
this.checked = checked;
|
|
@@ -58,11 +75,12 @@ export class BsSwitch {
|
|
|
58
75
|
const knobClasses = ['bs-switch__knob', `bs-switch__knob--${this.size}`, this.disabled ? 'bs-switch__knob--disabled' : '']
|
|
59
76
|
.filter(Boolean)
|
|
60
77
|
.join(' ');
|
|
61
|
-
return (h("label", { key: '
|
|
78
|
+
return (h("label", { key: '37466aa7ca1b18c07b92bd7855fd974d62ad5845', class: `bs-switch ${this.disabled ? 'bs-switch--disabled' : ''}` }, h("input", { key: 'f4e0073dd9a322692003593385da04a9289ea848', 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: 'f8cbdb6bb25964ba79e9cb09d82beab0c3946a14', part: "track", class: trackClasses }, h("span", { key: '7e8598698e08a95d1ada9829264df99abd507d81', part: "knob", class: knobClasses })), h("span", { key: '11d464eaf95f555f3874524adc5fb2373b1fd056', part: "label", class: "bs-switch__label" }, h("slot", { key: '2409cb732d23f613c2595fa62e9fd7539bb2041e' }))));
|
|
62
79
|
}
|
|
63
80
|
static get is() { return "bs-switch"; }
|
|
64
81
|
static get encapsulation() { return "shadow"; }
|
|
65
82
|
static get delegatesFocus() { return true; }
|
|
83
|
+
static get formAssociated() { return true; }
|
|
66
84
|
static get originalStyleUrls() {
|
|
67
85
|
return {
|
|
68
86
|
"$": ["bs-switch.css"]
|
|
@@ -75,6 +93,45 @@ export class BsSwitch {
|
|
|
75
93
|
}
|
|
76
94
|
static get properties() {
|
|
77
95
|
return {
|
|
96
|
+
"name": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"mutable": false,
|
|
99
|
+
"complexType": {
|
|
100
|
+
"original": "string",
|
|
101
|
+
"resolved": "string",
|
|
102
|
+
"references": {}
|
|
103
|
+
},
|
|
104
|
+
"required": false,
|
|
105
|
+
"optional": true,
|
|
106
|
+
"docs": {
|
|
107
|
+
"tags": [],
|
|
108
|
+
"text": "The `name` the value is submitted under in a surrounding `<form>`'s `FormData`."
|
|
109
|
+
},
|
|
110
|
+
"getter": false,
|
|
111
|
+
"setter": false,
|
|
112
|
+
"reflect": true,
|
|
113
|
+
"attribute": "name"
|
|
114
|
+
},
|
|
115
|
+
"value": {
|
|
116
|
+
"type": "string",
|
|
117
|
+
"mutable": false,
|
|
118
|
+
"complexType": {
|
|
119
|
+
"original": "string",
|
|
120
|
+
"resolved": "string",
|
|
121
|
+
"references": {}
|
|
122
|
+
},
|
|
123
|
+
"required": false,
|
|
124
|
+
"optional": false,
|
|
125
|
+
"docs": {
|
|
126
|
+
"tags": [],
|
|
127
|
+
"text": "The value submitted when on (native checkbox default: `\"on\"`)."
|
|
128
|
+
},
|
|
129
|
+
"getter": false,
|
|
130
|
+
"setter": false,
|
|
131
|
+
"reflect": false,
|
|
132
|
+
"attribute": "value",
|
|
133
|
+
"defaultValue": "'on'"
|
|
134
|
+
},
|
|
78
135
|
"size": {
|
|
79
136
|
"type": "string",
|
|
80
137
|
"mutable": false,
|
|
@@ -137,7 +194,7 @@ export class BsSwitch {
|
|
|
137
194
|
},
|
|
138
195
|
"getter": false,
|
|
139
196
|
"setter": false,
|
|
140
|
-
"reflect":
|
|
197
|
+
"reflect": true,
|
|
141
198
|
"attribute": "disabled",
|
|
142
199
|
"defaultValue": "false"
|
|
143
200
|
},
|
|
@@ -182,4 +239,14 @@ export class BsSwitch {
|
|
|
182
239
|
}];
|
|
183
240
|
}
|
|
184
241
|
static get elementRef() { return "el"; }
|
|
242
|
+
static get watchers() {
|
|
243
|
+
return [{
|
|
244
|
+
"propName": "checked",
|
|
245
|
+
"methodName": "syncFormValue"
|
|
246
|
+
}, {
|
|
247
|
+
"propName": "value",
|
|
248
|
+
"methodName": "syncFormValue"
|
|
249
|
+
}];
|
|
250
|
+
}
|
|
251
|
+
static get attachInternalsMemberName() { return "internals"; }
|
|
185
252
|
}
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
.bs-inline-tab--has-icon {
|
|
79
79
|
padding-top: var(--bs-inline-tab-padding-y);
|
|
80
80
|
padding-bottom: var(--bs-inline-tab-padding-y);
|
|
81
|
-
padding-
|
|
82
|
-
padding-
|
|
81
|
+
padding-inline-start: var(--bs-inline-tab-padding-left-with-icon);
|
|
82
|
+
padding-inline-end: var(--bs-inline-tab-padding-right-with-icon);
|
|
83
83
|
gap: var(--bs-inline-tab-gap);
|
|
84
84
|
}
|
|
85
85
|
|
|
@@ -48,6 +48,10 @@ export class BsInlineTab {
|
|
|
48
48
|
* violation). Stencil reflects this camelCase prop to the `aria-label` HTML attribute
|
|
49
49
|
* automatically, same as `bs-tab`'s identical prop. */
|
|
50
50
|
ariaLabel = null;
|
|
51
|
+
/** Set by a parent `bs-tabs` to implement roving tabindex (only one tab in the group is in the
|
|
52
|
+
* Tab order; arrow keys move between them). Left `undefined` for a standalone tab, which stays
|
|
53
|
+
* a normal tab stop. */
|
|
54
|
+
tabbable;
|
|
51
55
|
/** Tracks whether the `icon` slot has assigned content. */
|
|
52
56
|
hasIcon = false;
|
|
53
57
|
/** Tracks whether the default (label) slot has assigned content. */
|
|
@@ -86,7 +90,7 @@ export class BsInlineTab {
|
|
|
86
90
|
};
|
|
87
91
|
render() {
|
|
88
92
|
const iconOnly = this.hasIcon && !this.hasLabel;
|
|
89
|
-
return (h("button", { key: '
|
|
93
|
+
return (h("button", { key: '72a2298b0dff31e192dc679ee153d1d87e6a8723', type: "button", part: "tab", role: "tab", class: `bs-inline-tab ${this.selected ? 'bs-inline-tab--selected' : ''} ${this.disabled ? 'bs-inline-tab--disabled' : ''} ${iconOnly ? 'bs-inline-tab--icon-only' : ''} ${this.hasIcon ? 'bs-inline-tab--has-icon' : ''}`, disabled: this.disabled, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel, tabIndex: this.tabbable === undefined ? undefined : this.tabbable ? 0 : -1, onClick: this.onClick }, h("span", { key: '25679b5cfc3bfec29f91b12f6180048429706b86', part: "icon", class: `bs-inline-tab__icon ${this.hasIcon ? 'bs-inline-tab__icon--has-content' : ''}` }, h("slot", { key: 'f5c996ae38a4e5ace60c8b1145dfb64114097600', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: '101ac663fa1b05e3f4f2faaaff865e02ecbd4e90', part: "label", class: `bs-inline-tab__label ${this.hasLabel ? 'bs-inline-tab__label--has-content' : ''}` }, h("slot", { key: 'a705183b26ad7d7ad3e286939b256cfbafb78580', onSlotchange: this.onLabelSlotchange }))));
|
|
90
94
|
}
|
|
91
95
|
static get is() { return "bs-inline-tab"; }
|
|
92
96
|
static get encapsulation() { return "shadow"; }
|
|
@@ -161,6 +165,25 @@ export class BsInlineTab {
|
|
|
161
165
|
"reflect": false,
|
|
162
166
|
"attribute": "aria-label",
|
|
163
167
|
"defaultValue": "null"
|
|
168
|
+
},
|
|
169
|
+
"tabbable": {
|
|
170
|
+
"type": "boolean",
|
|
171
|
+
"mutable": false,
|
|
172
|
+
"complexType": {
|
|
173
|
+
"original": "boolean",
|
|
174
|
+
"resolved": "boolean",
|
|
175
|
+
"references": {}
|
|
176
|
+
},
|
|
177
|
+
"required": false,
|
|
178
|
+
"optional": true,
|
|
179
|
+
"docs": {
|
|
180
|
+
"tags": [],
|
|
181
|
+
"text": "Set by a parent `bs-tabs` to implement roving tabindex (only one tab in the group is in the\nTab order; arrow keys move between them). Left `undefined` for a standalone tab, which stays\na normal tab stop."
|
|
182
|
+
},
|
|
183
|
+
"getter": false,
|
|
184
|
+
"setter": false,
|
|
185
|
+
"reflect": false,
|
|
186
|
+
"attribute": "tabbable"
|
|
164
187
|
}
|
|
165
188
|
};
|
|
166
189
|
}
|
|
@@ -207,8 +207,8 @@
|
|
|
207
207
|
enabled/selected/hover state above sets its background. */
|
|
208
208
|
.bs-tab__indicator {
|
|
209
209
|
position: absolute;
|
|
210
|
-
|
|
211
|
-
|
|
210
|
+
inset-inline-start: var(--bs-tab-padding-x);
|
|
211
|
+
inset-inline-end: var(--bs-tab-padding-x);
|
|
212
212
|
bottom: 0;
|
|
213
213
|
height: 2px;
|
|
214
214
|
background: transparent;
|
|
@@ -53,6 +53,10 @@ export class BsTab {
|
|
|
53
53
|
* violation). Stencil reflects this camelCase prop to the `aria-label` HTML attribute
|
|
54
54
|
* automatically, same as `bs-button`'s identical prop. */
|
|
55
55
|
ariaLabel = null;
|
|
56
|
+
/** Set by a parent `bs-tabs` to implement roving tabindex (only one tab in the group is in the
|
|
57
|
+
* Tab order; arrow keys move between them). Left `undefined` for a standalone tab, which stays
|
|
58
|
+
* a normal tab stop. */
|
|
59
|
+
tabbable;
|
|
56
60
|
/** Tracks whether the `icon` slot has assigned content. */
|
|
57
61
|
hasIcon = false;
|
|
58
62
|
/** Tracks whether the default (label) slot has assigned content. */
|
|
@@ -99,7 +103,7 @@ export class BsTab {
|
|
|
99
103
|
const iconOnly = this.hasIcon && !this.hasLabel;
|
|
100
104
|
const vertical = this.hasIcon && this.hasLabel && this.iconPosition === 'top';
|
|
101
105
|
const showBadge = this.hasBadge && !iconOnly && !vertical;
|
|
102
|
-
return (h("button", { key: '
|
|
106
|
+
return (h("button", { key: '368a2f20536d169e06e47500dcca4d6a54f17dde', type: "button", part: "tab", role: "tab", class: `bs-tab ${this.selected ? 'bs-tab--selected' : ''} ${this.disabled ? 'bs-tab--disabled' : ''} ${iconOnly ? 'bs-tab--icon-only' : ''} ${vertical ? 'bs-tab--vertical' : ''}`, disabled: this.disabled, "aria-selected": String(this.selected), "aria-disabled": this.disabled ? 'true' : undefined, "aria-label": this.ariaLabel, tabIndex: this.tabbable === undefined ? undefined : this.tabbable ? 0 : -1, onClick: this.onClick }, h("span", { key: '3b22e92a5d6bca27c0b12b6f80ef29af06bcc564', part: "icon", class: `bs-tab__icon ${this.hasIcon ? 'bs-tab__icon--has-content' : ''}` }, h("slot", { key: 'd75cb8cc85547a8c6a8be3bca3fc82a61d3cfa38', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: '43ff4feb2425f1b0dd9485f323b1886b42e10a32', part: "label", class: `bs-tab__label ${this.hasLabel ? 'bs-tab__label--has-content' : ''}` }, h("slot", { key: '74a0af9a35043faa3baa2415c3b4a204f5745155', onSlotchange: this.onLabelSlotchange })), h("span", { key: '22b5c4671b7a7c93abffae5a34a4e3bb600d8ed3', part: "badge", class: `bs-tab__badge ${showBadge ? 'bs-tab__badge--has-content' : ''}` }, h("slot", { key: '17b123826ca4b78ff00b89d3a0944e1d805ad4fe', name: "badge", onSlotchange: this.onBadgeSlotchange })), h("span", { key: 'd51f23caa9d0fd0abddd37c7394994e1ffef0586', part: "indicator", class: "bs-tab__indicator" })));
|
|
103
107
|
}
|
|
104
108
|
static get is() { return "bs-tab"; }
|
|
105
109
|
static get encapsulation() { return "shadow"; }
|
|
@@ -200,6 +204,25 @@ export class BsTab {
|
|
|
200
204
|
"reflect": false,
|
|
201
205
|
"attribute": "aria-label",
|
|
202
206
|
"defaultValue": "null"
|
|
207
|
+
},
|
|
208
|
+
"tabbable": {
|
|
209
|
+
"type": "boolean",
|
|
210
|
+
"mutable": false,
|
|
211
|
+
"complexType": {
|
|
212
|
+
"original": "boolean",
|
|
213
|
+
"resolved": "boolean",
|
|
214
|
+
"references": {}
|
|
215
|
+
},
|
|
216
|
+
"required": false,
|
|
217
|
+
"optional": true,
|
|
218
|
+
"docs": {
|
|
219
|
+
"tags": [],
|
|
220
|
+
"text": "Set by a parent `bs-tabs` to implement roving tabindex (only one tab in the group is in the\nTab order; arrow keys move between them). Left `undefined` for a standalone tab, which stays\na normal tab stop."
|
|
221
|
+
},
|
|
222
|
+
"getter": false,
|
|
223
|
+
"setter": false,
|
|
224
|
+
"reflect": false,
|
|
225
|
+
"attribute": "tabbable"
|
|
203
226
|
}
|
|
204
227
|
};
|
|
205
228
|
}
|
|
@@ -47,10 +47,54 @@ export class BsTabs {
|
|
|
47
47
|
tabs.forEach(tab => {
|
|
48
48
|
tab.selected = tab === ev.target;
|
|
49
49
|
});
|
|
50
|
+
this.syncRovingTabindex();
|
|
51
|
+
}
|
|
52
|
+
componentDidLoad() {
|
|
53
|
+
this.syncRovingTabindex();
|
|
54
|
+
}
|
|
55
|
+
syncRovingTabindex() {
|
|
56
|
+
const tabs = this.tabs();
|
|
57
|
+
const anySelected = tabs.some(t => t.selected);
|
|
58
|
+
const firstEnabled = tabs.find(t => !t.disabled);
|
|
59
|
+
tabs.forEach(t => {
|
|
60
|
+
t.tabbable = anySelected ? t.selected : t === firstEnabled;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
tabs() {
|
|
64
|
+
return Array.from(this.el.querySelectorAll(':scope > bs-tab, :scope > bs-inline-tab'));
|
|
65
|
+
}
|
|
66
|
+
/** WAI-ARIA tabs pattern (automatic activation): arrows move focus *and* selection to the
|
|
67
|
+
* previous/next enabled tab (wrapping), Home/End jump to the first/last. Arrow axis follows
|
|
68
|
+
* `orientation`; in RTL the horizontal arrows are mirrored. */
|
|
69
|
+
onKeyDown(ev) {
|
|
70
|
+
const vertical = this.orientation === 'vertical';
|
|
71
|
+
const rtl = getComputedStyle(this.el).direction === 'rtl';
|
|
72
|
+
const prevKey = vertical ? 'ArrowUp' : rtl ? 'ArrowRight' : 'ArrowLeft';
|
|
73
|
+
const nextKey = vertical ? 'ArrowDown' : rtl ? 'ArrowLeft' : 'ArrowRight';
|
|
74
|
+
if (![prevKey, nextKey, 'Home', 'End'].includes(ev.key))
|
|
75
|
+
return;
|
|
76
|
+
const enabled = this.tabs().filter(t => !t.disabled);
|
|
77
|
+
const current = enabled.findIndex(t => t === ev.target || t.contains(ev.target));
|
|
78
|
+
if (current === -1 || enabled.length === 0)
|
|
79
|
+
return;
|
|
80
|
+
ev.preventDefault();
|
|
81
|
+
let nextIdx = current;
|
|
82
|
+
if (ev.key === nextKey)
|
|
83
|
+
nextIdx = (current + 1) % enabled.length;
|
|
84
|
+
else if (ev.key === prevKey)
|
|
85
|
+
nextIdx = (current - 1 + enabled.length) % enabled.length;
|
|
86
|
+
else if (ev.key === 'Home')
|
|
87
|
+
nextIdx = 0;
|
|
88
|
+
else
|
|
89
|
+
nextIdx = enabled.length - 1;
|
|
90
|
+
const target = enabled[nextIdx];
|
|
91
|
+
const button = target.shadowRoot?.querySelector('button');
|
|
92
|
+
button?.focus();
|
|
93
|
+
button?.click();
|
|
50
94
|
}
|
|
51
95
|
render() {
|
|
52
96
|
const vertical = this.orientation === 'vertical';
|
|
53
|
-
return (h("div", { key: '
|
|
97
|
+
return (h("div", { key: '81b3b46d54d4acc074b0c59d0da5e3e971e7b62e', part: "tablist", role: "tablist", "aria-orientation": this.orientation, class: `bs-tabs bs-tabs--${this.type} ${vertical ? 'bs-tabs--vertical' : ''}` }, h("slot", { key: 'ba296a99062629de3e331cd7de1ebc41548c77f9', onSlotchange: () => this.syncRovingTabindex() })));
|
|
54
98
|
}
|
|
55
99
|
static get is() { return "bs-tabs"; }
|
|
56
100
|
static get encapsulation() { return "shadow"; }
|
|
@@ -121,6 +165,12 @@ export class BsTabs {
|
|
|
121
165
|
};
|
|
122
166
|
}
|
|
123
167
|
static get elementRef() { return "el"; }
|
|
168
|
+
static get watchers() {
|
|
169
|
+
return [{
|
|
170
|
+
"propName": "orientation",
|
|
171
|
+
"methodName": "syncRovingTabindex"
|
|
172
|
+
}];
|
|
173
|
+
}
|
|
124
174
|
static get listeners() {
|
|
125
175
|
return [{
|
|
126
176
|
"name": "bsSelect",
|
|
@@ -128,6 +178,12 @@ export class BsTabs {
|
|
|
128
178
|
"target": undefined,
|
|
129
179
|
"capture": false,
|
|
130
180
|
"passive": false
|
|
181
|
+
}, {
|
|
182
|
+
"name": "keydown",
|
|
183
|
+
"method": "onKeyDown",
|
|
184
|
+
"target": undefined,
|
|
185
|
+
"capture": false,
|
|
186
|
+
"passive": false
|
|
131
187
|
}];
|
|
132
188
|
}
|
|
133
189
|
}
|
|
@@ -42,7 +42,7 @@ export class BsTooltip {
|
|
|
42
42
|
*/
|
|
43
43
|
placement = 'top';
|
|
44
44
|
render() {
|
|
45
|
-
return (h("div", { key: '
|
|
45
|
+
return (h("div", { key: 'b7c2ee57db3a4e36cdd106d78f0f8d54c45a04c6', class: "bs-tooltip" }, h("span", { key: '22b738a760e9967233052ce4540c77da4ac9563e', part: "arrow", class: "bs-tooltip__arrow" }), h("div", { key: '69a8b07711478e699be4c8151d9f7dfd2e4e0bf4', part: "bubble", class: "bs-tooltip__bubble" }, h("slot", { key: 'b32c75a06582b8e8f99b973889450e9100b75323' }))));
|
|
46
46
|
}
|
|
47
47
|
static get is() { return "bs-tooltip"; }
|
|
48
48
|
static get encapsulation() { return "shadow"; }
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { html } from "lit";
|
|
2
|
+
// Live examples for the Forms guide (forms.mdx). Not a component -- it shows how the
|
|
3
|
+
// form-associated controls behave inside a plain native <form>.
|
|
4
|
+
// Prints exactly what the browser would send, so the story shows the real FormData rather than a
|
|
5
|
+
// mocked-up result.
|
|
6
|
+
const showFormData = (ev) => {
|
|
7
|
+
ev.preventDefault();
|
|
8
|
+
const form = ev.currentTarget;
|
|
9
|
+
const out = form.parentElement?.querySelector('pre');
|
|
10
|
+
if (!out)
|
|
11
|
+
return;
|
|
12
|
+
const lines = [];
|
|
13
|
+
new FormData(form).forEach((value, key) => lines.push(`${key} = ${JSON.stringify(value)}`));
|
|
14
|
+
out.textContent = lines.length ? lines.join('\n') : '(no entries)';
|
|
15
|
+
};
|
|
16
|
+
const meta = {
|
|
17
|
+
title: 'Guides/Forms',
|
|
18
|
+
parameters: { layout: 'padded' },
|
|
19
|
+
};
|
|
20
|
+
export default meta;
|
|
21
|
+
const output = html `<pre style="margin: 16px 0 0; padding: 12px; background: #f4f4f4; color: #111; border-radius: 4px; min-height: 3em;">
|
|
22
|
+
Submit to see the FormData…</pre
|
|
23
|
+
>`;
|
|
24
|
+
export const Default = {
|
|
25
|
+
render: () => html `
|
|
26
|
+
<div style="max-width: 420px;">
|
|
27
|
+
<form @submit=${showFormData} style="display: flex; flex-direction: column; gap: 16px;">
|
|
28
|
+
<bs-input name="email" type="email" label="Email" required></bs-input>
|
|
29
|
+
<bs-input name="notes" type="textarea" label="Notes"></bs-input>
|
|
30
|
+
<div role="radiogroup" aria-label="Plan" style="display: flex; flex-direction: column; gap: 8px;">
|
|
31
|
+
<bs-radio name="plan" value="free" checked>Free</bs-radio>
|
|
32
|
+
<bs-radio name="plan" value="pro">Pro</bs-radio>
|
|
33
|
+
</div>
|
|
34
|
+
<bs-checkbox name="terms" value="accepted" required>I accept the terms</bs-checkbox>
|
|
35
|
+
<bs-switch name="alerts" checked>Email alerts</bs-switch>
|
|
36
|
+
<bs-slider name="volume" label="Volume" value="40" aria-label="Volume"></bs-slider>
|
|
37
|
+
<div style="display: flex; gap: 8px;">
|
|
38
|
+
<bs-button type="submit">Submit</bs-button>
|
|
39
|
+
<bs-button type="reset" variant="outlined">Reset</bs-button>
|
|
40
|
+
</div>
|
|
41
|
+
</form>
|
|
42
|
+
${output}
|
|
43
|
+
</div>
|
|
44
|
+
`,
|
|
45
|
+
};
|
|
46
|
+
// Required fields: submitting with an empty required bs-input or an unchecked required bs-checkbox is
|
|
47
|
+
// blocked by the browser (requestSubmit runs validation), and the form reports invalid.
|
|
48
|
+
export const Validation = {
|
|
49
|
+
render: () => html `
|
|
50
|
+
<div style="max-width: 420px;">
|
|
51
|
+
<form
|
|
52
|
+
@submit=${showFormData}
|
|
53
|
+
@invalid=${(ev) => ev.preventDefault()}
|
|
54
|
+
style="display: flex; flex-direction: column; gap: 16px;"
|
|
55
|
+
>
|
|
56
|
+
<bs-input name="name" label="Name" required></bs-input>
|
|
57
|
+
<bs-checkbox name="terms" required>I accept the terms</bs-checkbox>
|
|
58
|
+
<bs-button type="submit">Submit (blocked until valid)</bs-button>
|
|
59
|
+
</form>
|
|
60
|
+
${output}
|
|
61
|
+
</div>
|
|
62
|
+
`,
|
|
63
|
+
};
|
|
@@ -117,7 +117,7 @@ export class BsNavigationDrawer {
|
|
|
117
117
|
this.bsSearchClick.emit();
|
|
118
118
|
};
|
|
119
119
|
render() {
|
|
120
|
-
return (h("nav", { key: '
|
|
120
|
+
return (h("nav", { key: '8be5fb4e45d6919408ff7057b963c2d95281b470', class: "bs-navigation-drawer", "aria-label": this.heading }, this.showLogo && (h("div", { key: 'f66ec1272c4c226d1a67fb7321b1247c3be54fb1', part: "logo", class: "bs-navigation-drawer__logo bs-navigation-drawer__logo--full" }, h("bs-logo", { key: '88cddd1d8696f895b33dd141bc2f5bfd3bd260b4', variant: "full", background: this.logoBackground }))), this.showLogo && (h("div", { key: '89b4efebeac6b934cbdd6cf3d25caaf5a36c86e8', part: "logo", class: "bs-navigation-drawer__logo bs-navigation-drawer__logo--mark" }, h("bs-logo", { key: '4f9ef53f8a02d9bb21b134e6a73caf28d9e864fc', variant: "mark", background: this.logoBackground }))), h("div", { key: '841040ad4770b0590ce632db1ce7122766c27ef6', class: "bs-navigation-drawer__title-row" }, h("span", { key: '857e9420aae428b44c2086bec5a2b4205a3dda04', part: "title", class: "bs-navigation-drawer__title" }, this.heading), this.collapsible && (h("button", { key: 'c109b6f3b54268cf729e114a249864fbd57203cc', 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: 'e46c9d2569b59e76398772d7a48e7a02d6b36ba3' })))), h("div", { key: '88031f0fd6cffb8480f2a086efb93a9d6418b4fc', part: "search", class: "bs-navigation-drawer__search" }, h("slot", { key: 'c86cb8c32f754fe81d91b76d8e1a352f9de5b31b', name: "search" })), h("button", { key: '90ade94c988aac8a1b2c855da7b193167b4eeee6', type: "button", part: "search-trigger", class: "bs-navigation-drawer__search-trigger", "aria-label": "Search", onClick: this.onSearchTriggerClick }, h(SearchIcon, { key: 'ff02c6f7f07de15b98bc5799914756e2245e36b9' })), h("div", { key: '41203613ef27dba8768c2755b8653d17c65d02c6', part: "items", class: "bs-navigation-drawer__items" }, h("slot", { key: 'd120d4a7477e748f5be81a5af742bfa558bf00bd' }))));
|
|
121
121
|
}
|
|
122
122
|
static get is() { return "bs-navigation-drawer"; }
|
|
123
123
|
static get encapsulation() { return "shadow"; }
|
|
@@ -131,7 +131,7 @@ export class BsNavigationDrawerItem {
|
|
|
131
131
|
// incorrectly also toggle this parent row on every child click. Both are wrapped in a
|
|
132
132
|
// `display: contents` container so render() still returns a single root node (this codebase's
|
|
133
133
|
// convention, e.g. bs-input.tsx) without that wrapper affecting layout at all.
|
|
134
|
-
return (h("div", { key: '
|
|
134
|
+
return (h("div", { key: 'ff4a72a5d5c8b37fa92ff244398153ca81b7f864', class: "bs-navigation-drawer-item__root" }, h("button", { key: 'f8c1d1e9c72aba5b6012f4f9d7fdc5956b919dff', 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: 'cf46152a1d7e0f4783a3ee29fd9eb7ae2a566c68', part: "icon", class: `bs-navigation-drawer-item__icon ${this.hasIcon ? 'bs-navigation-drawer-item__icon--has-content' : ''}` }, h("slot", { key: '32a1ea999456bf584bebf03e73aab3e7c01281cc', name: "icon", onSlotchange: this.onIconSlotchange }))), h("span", { key: '496a7d21f7a3878bd58fd4bdbb978b3bde40f588', part: "label", class: "bs-navigation-drawer-item__label" }, h("slot", { key: '3b1d65cd36d19c3714174a3a05a1b68ec3910042' })), this.expandable && (h("span", { key: '041b8fc587482288c4adf7b023edc7b7057a2fda', part: "chevron", class: `bs-navigation-drawer-item__chevron ${this.expanded ? 'bs-navigation-drawer-item__chevron--expanded' : ''}` }, h(ChevronDownIcon, { key: '0957e9218a1360b35726ee346e1e3718eb1b3eff' })))), this.expandable && (h("span", { key: 'df4d3384410c6eaffd7e42aa17380740710db0ad', part: "children", class: "bs-navigation-drawer-item__children" }, h("slot", { key: '273844338141f5429aa7b53f55a06fca4293fa2a', name: "children" })))));
|
|
135
135
|
}
|
|
136
136
|
static get is() { return "bs-navigation-drawer-item"; }
|
|
137
137
|
static get encapsulation() { return "shadow"; }
|