@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
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
import { h } from "@stencil/core";
|
|
2
|
+
/**
|
|
3
|
+
* A carousel that shows a page of slides at a time, with a tracker (dots or numbered blocks) and
|
|
4
|
+
* previous/next controls, and optional auto-advance with a Pause/Play button.
|
|
5
|
+
*
|
|
6
|
+
* Slides are the default slot's direct children (a `bs-card`, an image, anything). The carousel
|
|
7
|
+
* shows `slidesPerView` of them at once, so there are `ceil(slides / slidesPerView)` pages. It
|
|
8
|
+
* manages two things on those slide elements: the `hidden` attribute (off-page slides are hidden,
|
|
9
|
+
* so they leave the tab order and the accessibility tree) and, only when not already set,
|
|
10
|
+
* `role="group"`, `aria-roledescription="slide"` and an `aria-label` of "n of N".
|
|
11
|
+
*
|
|
12
|
+
* Composes `bs-pagination` (`tracker="numbers"`), `bs-icon-button` (previous/next for
|
|
13
|
+
* `tracker="dots"`) and `bs-button` (Pause/Play) rather than re-implementing them.
|
|
14
|
+
*
|
|
15
|
+
* ## When to use
|
|
16
|
+
* - Browsing a set of related items (cards, images, announcements) where only a few fit at once.
|
|
17
|
+
* - Rotating promotional or highlight content, where auto-advance with a Pause control is wanted.
|
|
18
|
+
*
|
|
19
|
+
* ## When not to use
|
|
20
|
+
* - Content users must see in full to complete a task -- hiding it behind paging hurts discovery;
|
|
21
|
+
* lay it out in a list or grid instead.
|
|
22
|
+
* - A strict sequence of steps -- use `bs-stepper`.
|
|
23
|
+
* - Paging through a large, addressable result set -- use `bs-pagination`.
|
|
24
|
+
*
|
|
25
|
+
* @slot - Default slot: the slides. Each direct child is one slide.
|
|
26
|
+
* @part carousel - The outer region (`role="region"`, `aria-roledescription="carousel"`).
|
|
27
|
+
* @part slides - The row holding the visible slides.
|
|
28
|
+
* @part tracker - The row holding the tracker and the Pause/Play button.
|
|
29
|
+
* @part prev - The previous button (`tracker="dots"`).
|
|
30
|
+
* @part next - The next button (`tracker="dots"`).
|
|
31
|
+
* @part dots - The dot group (`tracker="dots"`).
|
|
32
|
+
* @part dot - Each dot (`tracker="dots"`).
|
|
33
|
+
* @part current - The current page's dot (in addition to `dot`).
|
|
34
|
+
* @part pagination - The numbered tracker (`tracker="numbers"`).
|
|
35
|
+
* @part pause - The Pause/Play button (only rendered when `autoplay`).
|
|
36
|
+
*/
|
|
37
|
+
// Note: this component's CSS Custom Properties (--bs-carousel-*) are documented via @prop comments
|
|
38
|
+
// in bs-carousel.css, not here -- Stencil's docs generator only parses @prop out of CSS file
|
|
39
|
+
// comments (see bs-input.tsx's equivalent note).
|
|
40
|
+
export class BsCarousel {
|
|
41
|
+
el;
|
|
42
|
+
/** Which tracker to show under the slides. `dots` is a compact dot row between previous/next
|
|
43
|
+
* buttons (the dots are an indicator, not buttons); `numbers` is a numbered `bs-pagination`
|
|
44
|
+
* where each page can be jumped to directly. */
|
|
45
|
+
tracker = 'dots';
|
|
46
|
+
/** How many slides are visible at once. The tracker counts pages: `ceil(slides / slidesPerView)`. */
|
|
47
|
+
slidesPerView = 3;
|
|
48
|
+
/** The visible page, 1-based (same convention as `bs-pagination`). Mutable so the carousel
|
|
49
|
+
* advances it itself (tracker, previous/next, autoplay). Clamped to the available pages. */
|
|
50
|
+
currentPage = 1;
|
|
51
|
+
/** Auto-advances to the next page every `interval` ms, looping from the last page to the first.
|
|
52
|
+
* Off by default. The Pause/Play button is only rendered when this is set. Auto-advance also
|
|
53
|
+
* stops while the pointer is over the carousel or focus is inside it, and starts paused for
|
|
54
|
+
* users who prefer reduced motion. */
|
|
55
|
+
autoplay = false;
|
|
56
|
+
/** Milliseconds between auto-advances, when `autoplay` is set. */
|
|
57
|
+
interval = 5000;
|
|
58
|
+
/** Whether auto-advance is paused by the user (the Pause/Play button). Mutable and reflected so
|
|
59
|
+
* the state is visible to CSS and settable from outside. Only meaningful with `autoplay`. */
|
|
60
|
+
paused = false;
|
|
61
|
+
/** Accessible name of the carousel region (e.g. "Featured articles"). */
|
|
62
|
+
label = 'Carousel';
|
|
63
|
+
/** Accessible name of the previous button (`tracker="dots"`) -- override for localisation. */
|
|
64
|
+
previousLabel = 'Previous slide';
|
|
65
|
+
/** Accessible name of the next button (`tracker="dots"`) -- override for localisation. */
|
|
66
|
+
nextLabel = 'Next slide';
|
|
67
|
+
/** Label of the Pause/Play button while auto-advance is running. */
|
|
68
|
+
pauseLabel = 'Pause';
|
|
69
|
+
/** Label of the Pause/Play button while auto-advance is paused. */
|
|
70
|
+
playLabel = 'Play';
|
|
71
|
+
/** Fires after the visible page changes via the tracker, previous/next or autoplay, with the
|
|
72
|
+
* new 1-based page. */
|
|
73
|
+
bsPageChange;
|
|
74
|
+
/** Fires when the user toggles the Pause/Play button, with the new `paused` value. */
|
|
75
|
+
bsPauseChange;
|
|
76
|
+
slideCount = 0;
|
|
77
|
+
/** True while the pointer is over the carousel or focus is inside it (auto-advance holds). */
|
|
78
|
+
interacting = false;
|
|
79
|
+
timer;
|
|
80
|
+
get slides() {
|
|
81
|
+
return Array.from(this.el.children).filter(c => !c.hasAttribute('slot'));
|
|
82
|
+
}
|
|
83
|
+
get perView() {
|
|
84
|
+
return Number.isFinite(this.slidesPerView) && this.slidesPerView >= 1 ? Math.floor(this.slidesPerView) : 1;
|
|
85
|
+
}
|
|
86
|
+
get pageCount() {
|
|
87
|
+
return Math.max(1, Math.ceil(this.slideCount / this.perView));
|
|
88
|
+
}
|
|
89
|
+
get page() {
|
|
90
|
+
return Math.min(Math.max(1, Math.floor(this.currentPage) || 1), this.pageCount);
|
|
91
|
+
}
|
|
92
|
+
componentWillLoad() {
|
|
93
|
+
this.slideCount = this.slides.length;
|
|
94
|
+
// @Watch doesn't fire for the initial value, so clamp an out-of-range currentPage here too.
|
|
95
|
+
if (this.currentPage !== this.page)
|
|
96
|
+
this.currentPage = this.page;
|
|
97
|
+
// Honor reduced-motion: a user who asked for less motion shouldn't have content move on its
|
|
98
|
+
// own. They can still start it with the Play button.
|
|
99
|
+
if (this.autoplay && window.matchMedia?.('(prefers-reduced-motion: reduce)').matches) {
|
|
100
|
+
this.paused = true;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
componentDidLoad() {
|
|
104
|
+
this.applySlides();
|
|
105
|
+
this.updateTimer();
|
|
106
|
+
}
|
|
107
|
+
componentDidRender() {
|
|
108
|
+
// Slide visibility depends on page/slidesPerView/slideCount; cheap and idempotent.
|
|
109
|
+
this.applySlides();
|
|
110
|
+
}
|
|
111
|
+
disconnectedCallback() {
|
|
112
|
+
this.stopTimer();
|
|
113
|
+
}
|
|
114
|
+
onCurrentPageChange() {
|
|
115
|
+
// Keep the mutable prop honest if it was set out of range from outside.
|
|
116
|
+
if (this.currentPage !== this.page)
|
|
117
|
+
this.currentPage = this.page;
|
|
118
|
+
}
|
|
119
|
+
updateTimer() {
|
|
120
|
+
this.stopTimer();
|
|
121
|
+
if (this.autoplay && !this.paused && !this.interacting && this.pageCount > 1) {
|
|
122
|
+
this.timer = window.setInterval(() => this.goTo(this.page >= this.pageCount ? 1 : this.page + 1), Math.max(250, this.interval));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
stopTimer() {
|
|
126
|
+
if (this.timer !== undefined) {
|
|
127
|
+
window.clearInterval(this.timer);
|
|
128
|
+
this.timer = undefined;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
onMouseEnter() {
|
|
132
|
+
this.interacting = true;
|
|
133
|
+
}
|
|
134
|
+
onMouseLeave() {
|
|
135
|
+
this.interacting = this.el.matches(':focus-within');
|
|
136
|
+
}
|
|
137
|
+
onFocusIn() {
|
|
138
|
+
this.interacting = true;
|
|
139
|
+
}
|
|
140
|
+
onFocusOut() {
|
|
141
|
+
this.interacting = this.el.matches(':hover');
|
|
142
|
+
}
|
|
143
|
+
goTo(next) {
|
|
144
|
+
const target = Math.min(Math.max(1, next), this.pageCount);
|
|
145
|
+
if (target === this.page)
|
|
146
|
+
return;
|
|
147
|
+
this.currentPage = target;
|
|
148
|
+
this.bsPageChange.emit(target);
|
|
149
|
+
}
|
|
150
|
+
/** Shows only the current page's slides and labels each slide. */
|
|
151
|
+
applySlides() {
|
|
152
|
+
const slides = this.slides;
|
|
153
|
+
const start = (this.page - 1) * this.perView;
|
|
154
|
+
slides.forEach((slide, i) => {
|
|
155
|
+
slide.hidden = i < start || i >= start + this.perView;
|
|
156
|
+
if (!slide.hasAttribute('role'))
|
|
157
|
+
slide.setAttribute('role', 'group');
|
|
158
|
+
if (!slide.hasAttribute('aria-roledescription'))
|
|
159
|
+
slide.setAttribute('aria-roledescription', 'slide');
|
|
160
|
+
if (!slide.hasAttribute('aria-label'))
|
|
161
|
+
slide.setAttribute('aria-label', `${i + 1} of ${slides.length}`);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
onSlotChange = () => {
|
|
165
|
+
this.slideCount = this.slides.length;
|
|
166
|
+
};
|
|
167
|
+
onTogglePause = () => {
|
|
168
|
+
this.paused = !this.paused;
|
|
169
|
+
this.bsPauseChange.emit(this.paused);
|
|
170
|
+
};
|
|
171
|
+
renderPause() {
|
|
172
|
+
if (!this.autoplay)
|
|
173
|
+
return null;
|
|
174
|
+
return (h("bs-button", { part: "pause", variant: "neutral", size: "md", onClick: this.onTogglePause }, this.paused ? h(PlayIcon, null) : h(PauseIcon, null), this.paused ? this.playLabel : this.pauseLabel));
|
|
175
|
+
}
|
|
176
|
+
renderDotsTracker() {
|
|
177
|
+
const page = this.page;
|
|
178
|
+
return [
|
|
179
|
+
h("bs-icon-button", { part: "prev", variant: "subtle", size: "sm", ariaLabel: this.previousLabel, disabled: page <= 1, onClick: () => this.goTo(page - 1) }, h(ChevronLeftIcon, null)),
|
|
180
|
+
h("div", { part: "dots", class: "bs-carousel__dots", "aria-hidden": "true" }, Array.from({ length: this.pageCount }, (_, i) => (h("span", { part: i + 1 === page ? 'dot current' : 'dot', class: `bs-carousel__dot ${i + 1 === page ? 'bs-carousel__dot--active' : ''}` })))),
|
|
181
|
+
h("bs-icon-button", { part: "next", variant: "subtle", size: "sm", ariaLabel: this.nextLabel, disabled: page >= this.pageCount, onClick: () => this.goTo(page + 1) }, h(ChevronRightIcon, null)),
|
|
182
|
+
];
|
|
183
|
+
}
|
|
184
|
+
render() {
|
|
185
|
+
const showTracker = this.pageCount > 1;
|
|
186
|
+
// While auto-advance is actually running, slide changes must not be announced (it would
|
|
187
|
+
// interrupt the user constantly); otherwise announce them politely.
|
|
188
|
+
const rotating = this.autoplay && !this.paused && !this.interacting;
|
|
189
|
+
return (h("section", { key: '4d3a0024b4f407a595769bc3dce7270104a0aeb7', part: "carousel", class: "bs-carousel", role: "region", "aria-roledescription": "carousel", "aria-label": this.label, style: { '--bs-carousel-slides-per-view': String(this.perView) } }, h("div", { key: '7160dbff92ce24112a5ebe54f10cfb4034d29750', part: "slides", class: "bs-carousel__slides", "aria-live": rotating ? 'off' : 'polite' }, h("slot", { key: 'fee4505b4a303719c62f9a7b76bea784ef920a20', onSlotchange: this.onSlotChange })), showTracker && (h("div", { key: 'd70a3780f4d9c00c087d931fb4b50401890a2c38', part: "tracker", class: "bs-carousel__tracker" }, this.tracker === 'numbers' ? (h("bs-pagination", { part: "pagination", totalPages: this.pageCount, currentPage: this.page, onBsPageChange: (ev) => {
|
|
190
|
+
ev.stopPropagation();
|
|
191
|
+
this.goTo(ev.detail);
|
|
192
|
+
} })) : (h("div", { class: "bs-carousel__nav" }, this.renderDotsTracker())), this.renderPause()))));
|
|
193
|
+
}
|
|
194
|
+
static get is() { return "bs-carousel"; }
|
|
195
|
+
static get encapsulation() { return "shadow"; }
|
|
196
|
+
static get originalStyleUrls() {
|
|
197
|
+
return {
|
|
198
|
+
"$": ["bs-carousel.css"]
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
static get styleUrls() {
|
|
202
|
+
return {
|
|
203
|
+
"$": ["bs-carousel.css"]
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
static get properties() {
|
|
207
|
+
return {
|
|
208
|
+
"tracker": {
|
|
209
|
+
"type": "string",
|
|
210
|
+
"mutable": false,
|
|
211
|
+
"complexType": {
|
|
212
|
+
"original": "BsCarouselTracker",
|
|
213
|
+
"resolved": "\"dots\" | \"numbers\"",
|
|
214
|
+
"references": {
|
|
215
|
+
"BsCarouselTracker": {
|
|
216
|
+
"location": "local",
|
|
217
|
+
"path": "/home/runner/work/eg-brandsync-storybook/eg-brandsync-storybook/packages/wc/src/components/bs-carousel/bs-carousel.tsx",
|
|
218
|
+
"id": "src/components/bs-carousel/bs-carousel.tsx::BsCarouselTracker"
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
},
|
|
222
|
+
"required": false,
|
|
223
|
+
"optional": false,
|
|
224
|
+
"docs": {
|
|
225
|
+
"tags": [],
|
|
226
|
+
"text": "Which tracker to show under the slides. `dots` is a compact dot row between previous/next\nbuttons (the dots are an indicator, not buttons); `numbers` is a numbered `bs-pagination`\nwhere each page can be jumped to directly."
|
|
227
|
+
},
|
|
228
|
+
"getter": false,
|
|
229
|
+
"setter": false,
|
|
230
|
+
"reflect": false,
|
|
231
|
+
"attribute": "tracker",
|
|
232
|
+
"defaultValue": "'dots'"
|
|
233
|
+
},
|
|
234
|
+
"slidesPerView": {
|
|
235
|
+
"type": "number",
|
|
236
|
+
"mutable": false,
|
|
237
|
+
"complexType": {
|
|
238
|
+
"original": "number",
|
|
239
|
+
"resolved": "number",
|
|
240
|
+
"references": {}
|
|
241
|
+
},
|
|
242
|
+
"required": false,
|
|
243
|
+
"optional": false,
|
|
244
|
+
"docs": {
|
|
245
|
+
"tags": [],
|
|
246
|
+
"text": "How many slides are visible at once. The tracker counts pages: `ceil(slides / slidesPerView)`."
|
|
247
|
+
},
|
|
248
|
+
"getter": false,
|
|
249
|
+
"setter": false,
|
|
250
|
+
"reflect": false,
|
|
251
|
+
"attribute": "slides-per-view",
|
|
252
|
+
"defaultValue": "3"
|
|
253
|
+
},
|
|
254
|
+
"currentPage": {
|
|
255
|
+
"type": "number",
|
|
256
|
+
"mutable": true,
|
|
257
|
+
"complexType": {
|
|
258
|
+
"original": "number",
|
|
259
|
+
"resolved": "number",
|
|
260
|
+
"references": {}
|
|
261
|
+
},
|
|
262
|
+
"required": false,
|
|
263
|
+
"optional": false,
|
|
264
|
+
"docs": {
|
|
265
|
+
"tags": [],
|
|
266
|
+
"text": "The visible page, 1-based (same convention as `bs-pagination`). Mutable so the carousel\nadvances it itself (tracker, previous/next, autoplay). Clamped to the available pages."
|
|
267
|
+
},
|
|
268
|
+
"getter": false,
|
|
269
|
+
"setter": false,
|
|
270
|
+
"reflect": true,
|
|
271
|
+
"attribute": "current-page",
|
|
272
|
+
"defaultValue": "1"
|
|
273
|
+
},
|
|
274
|
+
"autoplay": {
|
|
275
|
+
"type": "boolean",
|
|
276
|
+
"mutable": false,
|
|
277
|
+
"complexType": {
|
|
278
|
+
"original": "boolean",
|
|
279
|
+
"resolved": "boolean",
|
|
280
|
+
"references": {}
|
|
281
|
+
},
|
|
282
|
+
"required": false,
|
|
283
|
+
"optional": false,
|
|
284
|
+
"docs": {
|
|
285
|
+
"tags": [],
|
|
286
|
+
"text": "Auto-advances to the next page every `interval` ms, looping from the last page to the first.\nOff by default. The Pause/Play button is only rendered when this is set. Auto-advance also\nstops while the pointer is over the carousel or focus is inside it, and starts paused for\nusers who prefer reduced motion."
|
|
287
|
+
},
|
|
288
|
+
"getter": false,
|
|
289
|
+
"setter": false,
|
|
290
|
+
"reflect": false,
|
|
291
|
+
"attribute": "autoplay",
|
|
292
|
+
"defaultValue": "false"
|
|
293
|
+
},
|
|
294
|
+
"interval": {
|
|
295
|
+
"type": "number",
|
|
296
|
+
"mutable": false,
|
|
297
|
+
"complexType": {
|
|
298
|
+
"original": "number",
|
|
299
|
+
"resolved": "number",
|
|
300
|
+
"references": {}
|
|
301
|
+
},
|
|
302
|
+
"required": false,
|
|
303
|
+
"optional": false,
|
|
304
|
+
"docs": {
|
|
305
|
+
"tags": [],
|
|
306
|
+
"text": "Milliseconds between auto-advances, when `autoplay` is set."
|
|
307
|
+
},
|
|
308
|
+
"getter": false,
|
|
309
|
+
"setter": false,
|
|
310
|
+
"reflect": false,
|
|
311
|
+
"attribute": "interval",
|
|
312
|
+
"defaultValue": "5000"
|
|
313
|
+
},
|
|
314
|
+
"paused": {
|
|
315
|
+
"type": "boolean",
|
|
316
|
+
"mutable": true,
|
|
317
|
+
"complexType": {
|
|
318
|
+
"original": "boolean",
|
|
319
|
+
"resolved": "boolean",
|
|
320
|
+
"references": {}
|
|
321
|
+
},
|
|
322
|
+
"required": false,
|
|
323
|
+
"optional": false,
|
|
324
|
+
"docs": {
|
|
325
|
+
"tags": [],
|
|
326
|
+
"text": "Whether auto-advance is paused by the user (the Pause/Play button). Mutable and reflected so\nthe state is visible to CSS and settable from outside. Only meaningful with `autoplay`."
|
|
327
|
+
},
|
|
328
|
+
"getter": false,
|
|
329
|
+
"setter": false,
|
|
330
|
+
"reflect": true,
|
|
331
|
+
"attribute": "paused",
|
|
332
|
+
"defaultValue": "false"
|
|
333
|
+
},
|
|
334
|
+
"label": {
|
|
335
|
+
"type": "string",
|
|
336
|
+
"mutable": false,
|
|
337
|
+
"complexType": {
|
|
338
|
+
"original": "string",
|
|
339
|
+
"resolved": "string",
|
|
340
|
+
"references": {}
|
|
341
|
+
},
|
|
342
|
+
"required": false,
|
|
343
|
+
"optional": false,
|
|
344
|
+
"docs": {
|
|
345
|
+
"tags": [],
|
|
346
|
+
"text": "Accessible name of the carousel region (e.g. \"Featured articles\")."
|
|
347
|
+
},
|
|
348
|
+
"getter": false,
|
|
349
|
+
"setter": false,
|
|
350
|
+
"reflect": false,
|
|
351
|
+
"attribute": "label",
|
|
352
|
+
"defaultValue": "'Carousel'"
|
|
353
|
+
},
|
|
354
|
+
"previousLabel": {
|
|
355
|
+
"type": "string",
|
|
356
|
+
"mutable": false,
|
|
357
|
+
"complexType": {
|
|
358
|
+
"original": "string",
|
|
359
|
+
"resolved": "string",
|
|
360
|
+
"references": {}
|
|
361
|
+
},
|
|
362
|
+
"required": false,
|
|
363
|
+
"optional": false,
|
|
364
|
+
"docs": {
|
|
365
|
+
"tags": [],
|
|
366
|
+
"text": "Accessible name of the previous button (`tracker=\"dots\"`) -- override for localisation."
|
|
367
|
+
},
|
|
368
|
+
"getter": false,
|
|
369
|
+
"setter": false,
|
|
370
|
+
"reflect": false,
|
|
371
|
+
"attribute": "previous-label",
|
|
372
|
+
"defaultValue": "'Previous slide'"
|
|
373
|
+
},
|
|
374
|
+
"nextLabel": {
|
|
375
|
+
"type": "string",
|
|
376
|
+
"mutable": false,
|
|
377
|
+
"complexType": {
|
|
378
|
+
"original": "string",
|
|
379
|
+
"resolved": "string",
|
|
380
|
+
"references": {}
|
|
381
|
+
},
|
|
382
|
+
"required": false,
|
|
383
|
+
"optional": false,
|
|
384
|
+
"docs": {
|
|
385
|
+
"tags": [],
|
|
386
|
+
"text": "Accessible name of the next button (`tracker=\"dots\"`) -- override for localisation."
|
|
387
|
+
},
|
|
388
|
+
"getter": false,
|
|
389
|
+
"setter": false,
|
|
390
|
+
"reflect": false,
|
|
391
|
+
"attribute": "next-label",
|
|
392
|
+
"defaultValue": "'Next slide'"
|
|
393
|
+
},
|
|
394
|
+
"pauseLabel": {
|
|
395
|
+
"type": "string",
|
|
396
|
+
"mutable": false,
|
|
397
|
+
"complexType": {
|
|
398
|
+
"original": "string",
|
|
399
|
+
"resolved": "string",
|
|
400
|
+
"references": {}
|
|
401
|
+
},
|
|
402
|
+
"required": false,
|
|
403
|
+
"optional": false,
|
|
404
|
+
"docs": {
|
|
405
|
+
"tags": [],
|
|
406
|
+
"text": "Label of the Pause/Play button while auto-advance is running."
|
|
407
|
+
},
|
|
408
|
+
"getter": false,
|
|
409
|
+
"setter": false,
|
|
410
|
+
"reflect": false,
|
|
411
|
+
"attribute": "pause-label",
|
|
412
|
+
"defaultValue": "'Pause'"
|
|
413
|
+
},
|
|
414
|
+
"playLabel": {
|
|
415
|
+
"type": "string",
|
|
416
|
+
"mutable": false,
|
|
417
|
+
"complexType": {
|
|
418
|
+
"original": "string",
|
|
419
|
+
"resolved": "string",
|
|
420
|
+
"references": {}
|
|
421
|
+
},
|
|
422
|
+
"required": false,
|
|
423
|
+
"optional": false,
|
|
424
|
+
"docs": {
|
|
425
|
+
"tags": [],
|
|
426
|
+
"text": "Label of the Pause/Play button while auto-advance is paused."
|
|
427
|
+
},
|
|
428
|
+
"getter": false,
|
|
429
|
+
"setter": false,
|
|
430
|
+
"reflect": false,
|
|
431
|
+
"attribute": "play-label",
|
|
432
|
+
"defaultValue": "'Play'"
|
|
433
|
+
}
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
static get states() {
|
|
437
|
+
return {
|
|
438
|
+
"slideCount": {},
|
|
439
|
+
"interacting": {}
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
static get events() {
|
|
443
|
+
return [{
|
|
444
|
+
"method": "bsPageChange",
|
|
445
|
+
"name": "bsPageChange",
|
|
446
|
+
"bubbles": true,
|
|
447
|
+
"cancelable": true,
|
|
448
|
+
"composed": true,
|
|
449
|
+
"docs": {
|
|
450
|
+
"tags": [],
|
|
451
|
+
"text": "Fires after the visible page changes via the tracker, previous/next or autoplay, with the\nnew 1-based page."
|
|
452
|
+
},
|
|
453
|
+
"complexType": {
|
|
454
|
+
"original": "number",
|
|
455
|
+
"resolved": "number",
|
|
456
|
+
"references": {}
|
|
457
|
+
}
|
|
458
|
+
}, {
|
|
459
|
+
"method": "bsPauseChange",
|
|
460
|
+
"name": "bsPauseChange",
|
|
461
|
+
"bubbles": true,
|
|
462
|
+
"cancelable": true,
|
|
463
|
+
"composed": true,
|
|
464
|
+
"docs": {
|
|
465
|
+
"tags": [],
|
|
466
|
+
"text": "Fires when the user toggles the Pause/Play button, with the new `paused` value."
|
|
467
|
+
},
|
|
468
|
+
"complexType": {
|
|
469
|
+
"original": "boolean",
|
|
470
|
+
"resolved": "boolean",
|
|
471
|
+
"references": {}
|
|
472
|
+
}
|
|
473
|
+
}];
|
|
474
|
+
}
|
|
475
|
+
static get elementRef() { return "el"; }
|
|
476
|
+
static get watchers() {
|
|
477
|
+
return [{
|
|
478
|
+
"propName": "currentPage",
|
|
479
|
+
"methodName": "onCurrentPageChange"
|
|
480
|
+
}, {
|
|
481
|
+
"propName": "autoplay",
|
|
482
|
+
"methodName": "updateTimer"
|
|
483
|
+
}, {
|
|
484
|
+
"propName": "paused",
|
|
485
|
+
"methodName": "updateTimer"
|
|
486
|
+
}, {
|
|
487
|
+
"propName": "interval",
|
|
488
|
+
"methodName": "updateTimer"
|
|
489
|
+
}, {
|
|
490
|
+
"propName": "interacting",
|
|
491
|
+
"methodName": "updateTimer"
|
|
492
|
+
}, {
|
|
493
|
+
"propName": "slideCount",
|
|
494
|
+
"methodName": "updateTimer"
|
|
495
|
+
}, {
|
|
496
|
+
"propName": "slidesPerView",
|
|
497
|
+
"methodName": "updateTimer"
|
|
498
|
+
}];
|
|
499
|
+
}
|
|
500
|
+
static get listeners() {
|
|
501
|
+
return [{
|
|
502
|
+
"name": "mouseenter",
|
|
503
|
+
"method": "onMouseEnter",
|
|
504
|
+
"target": undefined,
|
|
505
|
+
"capture": false,
|
|
506
|
+
"passive": true
|
|
507
|
+
}, {
|
|
508
|
+
"name": "mouseleave",
|
|
509
|
+
"method": "onMouseLeave",
|
|
510
|
+
"target": undefined,
|
|
511
|
+
"capture": false,
|
|
512
|
+
"passive": true
|
|
513
|
+
}, {
|
|
514
|
+
"name": "focusin",
|
|
515
|
+
"method": "onFocusIn",
|
|
516
|
+
"target": undefined,
|
|
517
|
+
"capture": false,
|
|
518
|
+
"passive": false
|
|
519
|
+
}, {
|
|
520
|
+
"name": "focusout",
|
|
521
|
+
"method": "onFocusOut",
|
|
522
|
+
"target": undefined,
|
|
523
|
+
"capture": false,
|
|
524
|
+
"passive": false
|
|
525
|
+
}];
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
const ChevronLeftIcon = () => (h("svg", { class: "bs-carousel__chevron", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("path", { d: "M15 18L9 12L15 6", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" })));
|
|
529
|
+
const ChevronRightIcon = () => (h("svg", { class: "bs-carousel__chevron", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("path", { d: "M9 18L15 12L9 6", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" })));
|
|
530
|
+
const PauseIcon = () => (h("svg", { slot: "icon", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("rect", { x: "6", y: "5", width: "4", height: "14", rx: "1", stroke: "currentColor", "stroke-width": "1.5", "stroke-linejoin": "round" }), h("rect", { x: "14", y: "5", width: "4", height: "14", rx: "1", stroke: "currentColor", "stroke-width": "1.5", "stroke-linejoin": "round" })));
|
|
531
|
+
const PlayIcon = () => (h("svg", { slot: "icon", viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true" }, h("path", { d: "M7 5L19 12L7 19V5Z", stroke: "currentColor", "stroke-width": "1.5", "stroke-linejoin": "round" })));
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { html } from "lit";
|
|
2
|
+
import { componentDescription, propDescription } from "../../stories-utils";
|
|
3
|
+
const trackers = ['dots', 'numbers'];
|
|
4
|
+
// Real photos (Unsplash, free-to-use license) -- every ID below was checked to resolve (200,
|
|
5
|
+
// image/jpeg), same approach as bs-card.stories.ts. The Figma frames use a dashed "slot" placeholder
|
|
6
|
+
// that "can be replaced with a card or an image"; this is that image. More slides than photos cycle
|
|
7
|
+
// back through the list.
|
|
8
|
+
const PHOTO_IDS = [
|
|
9
|
+
'photo-1506744038136-46273834b3fb',
|
|
10
|
+
'photo-1469474968028-56623f02e42e',
|
|
11
|
+
'photo-1441974231531-c6227db76b6e',
|
|
12
|
+
'photo-1501785888041-af3ef285b470',
|
|
13
|
+
'photo-1470071459604-3b5ec3a7fe05',
|
|
14
|
+
'photo-1472214103451-9374bd1c798e',
|
|
15
|
+
'photo-1465146344425-f00d5f5c8f07',
|
|
16
|
+
'photo-1426604966848-d7adac402bff',
|
|
17
|
+
'photo-1447752875215-b2761acb3c5d',
|
|
18
|
+
'photo-1433086966358-54859d0ed716',
|
|
19
|
+
'photo-1512917774080-9991f1c4c750',
|
|
20
|
+
'photo-1660496247667-3fb697c396af',
|
|
21
|
+
];
|
|
22
|
+
const slot = (n) => html `
|
|
23
|
+
<img
|
|
24
|
+
src="https://images.unsplash.com/${PHOTO_IDS[(n - 1) % PHOTO_IDS.length]}?fm=jpg&q=80&w=640&h=360&fit=crop&auto=format"
|
|
25
|
+
alt="Landscape photograph ${n}"
|
|
26
|
+
style="display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover; border-radius: var(--bs-border-radius-100);"
|
|
27
|
+
/>
|
|
28
|
+
`;
|
|
29
|
+
const meta = {
|
|
30
|
+
title: 'Components/bs-carousel',
|
|
31
|
+
parameters: { docs: { description: { component: componentDescription('bs-carousel') } } },
|
|
32
|
+
render: args => html `
|
|
33
|
+
<bs-carousel
|
|
34
|
+
tracker=${args.tracker}
|
|
35
|
+
slides-per-view=${args.slidesPerView}
|
|
36
|
+
?autoplay=${args.autoplay}
|
|
37
|
+
interval=${args.interval}
|
|
38
|
+
label=${args.label}
|
|
39
|
+
>
|
|
40
|
+
${Array.from({ length: args.slides }, (_, i) => slot(i + 1))}
|
|
41
|
+
</bs-carousel>
|
|
42
|
+
`,
|
|
43
|
+
argTypes: {
|
|
44
|
+
tracker: { control: { type: 'select' }, options: trackers, description: propDescription('bs-carousel', 'tracker') },
|
|
45
|
+
slidesPerView: { control: { type: 'number', min: 1 }, description: propDescription('bs-carousel', 'slidesPerView') },
|
|
46
|
+
slides: { control: { type: 'number', min: 1 }, description: 'Number of slides rendered in the story (not a prop -- the default slot\'s children).' },
|
|
47
|
+
autoplay: { control: 'boolean', description: propDescription('bs-carousel', 'autoplay') },
|
|
48
|
+
interval: { control: { type: 'number', min: 250, step: 250 }, description: propDescription('bs-carousel', 'interval') },
|
|
49
|
+
label: { control: 'text', description: propDescription('bs-carousel', 'label') },
|
|
50
|
+
},
|
|
51
|
+
args: { tracker: 'dots', slidesPerView: 3, slides: 12, autoplay: true, interval: 5000, label: 'Carousel' },
|
|
52
|
+
};
|
|
53
|
+
export default meta;
|
|
54
|
+
// Dot tracker, 12 slides / 3 per view = 4 pages (the Figma "Carousel marker" frame).
|
|
55
|
+
export const Default = {};
|
|
56
|
+
// Numbered tracker, 15 slides / 3 per view = 5 pages (the Figma "Carousel Number Tracker" frame).
|
|
57
|
+
export const Numbers = {
|
|
58
|
+
name: 'Number tracker',
|
|
59
|
+
args: { tracker: 'numbers', slides: 15 },
|
|
60
|
+
};
|
|
61
|
+
export const NoAutoplay = {
|
|
62
|
+
name: 'Without autoplay',
|
|
63
|
+
args: { autoplay: false },
|
|
64
|
+
};
|
|
65
|
+
export const OneSlideAtATime = {
|
|
66
|
+
name: 'One slide at a time',
|
|
67
|
+
args: { slidesPerView: 1, slides: 5 },
|
|
68
|
+
};
|
|
@@ -123,7 +123,7 @@ export class BsChatbotFeedback {
|
|
|
123
123
|
}
|
|
124
124
|
render() {
|
|
125
125
|
const stars = [1, 2, 3, 4, 5];
|
|
126
|
-
return (h("div", { key: '
|
|
126
|
+
return (h("div", { key: 'a0b98bb7dad05b9b2a03d56f7c1d56a969b8e9c1', class: "bs-chatbot-feedback", role: "region", "aria-label": this.computedHeading() }, h("button", { key: '2a4aae0fd5ac35bf0d399c6d0a2f9a2c8ab11e08', type: "button", part: "close", class: "bs-chatbot-feedback__close", "aria-label": "Close", onClick: this.onCloseClick }, h(CloseIcon, { key: 'fa79bfca02a4b098d5c1695de4ae149f9aef7296' })), h("div", { key: '2f921033f1797610773778dc078b754cd6ce90a2', class: "bs-chatbot-feedback__top" }, h("div", { key: 'a7e86fca322312a90674b8f3ae7250551a56609b', class: "bs-chatbot-feedback__text" }, h("p", { key: 'eff8c54234588b9e990c48c9aa01d72d1f12e4b8', part: "heading", class: "bs-chatbot-feedback__heading" }, this.computedHeading()), h("p", { key: 'a742285c906efd60feb339484af1a7e310b929fb', part: "subtitle", class: "bs-chatbot-feedback__subtitle" }, this.computedSubtitle())), h("div", { key: '700e4903e909bfe6fec476092a84407c84eea5fa', class: "bs-chatbot-feedback__stars", role: "radiogroup", "aria-label": "Rating" }, stars.map(value => (h("button", { type: "button", part: "star", class: "bs-chatbot-feedback__star", role: "radio", "aria-checked": (this.rating >= value).toString(), "aria-label": `${value} star${value > 1 ? 's' : ''}`, disabled: this.submitted, onClick: () => this.onStarClick(value) }, h(StarIcon, { filled: this.rating >= value }))))), !this.submitted && (h("div", { key: '8a00fa2e36f0206725af72814843cc9197e23eaf', class: "bs-chatbot-feedback__field" }, h("label", { key: '49a347d77ee0670c120141b7d5d1faf52a5ff68c', part: "label", class: "bs-chatbot-feedback__label", htmlFor: "bs-chatbot-feedback-comment" }, "Tell us what you think"), h("textarea", { key: 'dbf93923d2e234d20a12d01d826dfaf0d5a3c567', part: "textarea", id: "bs-chatbot-feedback-comment", class: "bs-chatbot-feedback__textarea", placeholder: "e.g.The response was helpful ....", value: this.comment, onInput: this.onCommentInput }))), this.submitted && this.comment && (h("p", { key: 'ca73192186871074989c44ea80c419d0c0765419', part: "comment", class: "bs-chatbot-feedback__comment" }, this.comment))), h("div", { key: '9a244b833310b3e43bbe46833998591482b0dde7', class: "bs-chatbot-feedback__actions" }, !this.submitted && (h("button", { key: '27f8921c9c57bf5b0c1f0e6d7b9e95203b33622a', type: "button", part: "submit", class: "bs-chatbot-feedback__submit", disabled: this.rating === 0, onClick: this.onSubmitClick }, h(SendIcon, { key: '29a7c5b279b82036b5d066b6946ca529e04ee25e' }), "Submit feedback")), h("button", { key: '64676e0e917e0464cf9cfe84b8fecdcb5db26d50', type: "button", part: "new-chat", class: `bs-chatbot-feedback__new-chat ${this.submitted ? 'bs-chatbot-feedback__new-chat--primary' : 'bs-chatbot-feedback__new-chat--outlined'}`, onClick: this.onNewChatClick }, h(EditIcon, { key: '6756913ca0e15a119123d4f78bb7b6c4edc3fd32' }), "Start new chat"))));
|
|
127
127
|
}
|
|
128
128
|
static get is() { return "bs-chatbot-feedback"; }
|
|
129
129
|
static get encapsulation() { return "shadow"; }
|
|
@@ -74,7 +74,7 @@ export class BsChatbotHeader {
|
|
|
74
74
|
this.bsClose.emit();
|
|
75
75
|
};
|
|
76
76
|
render() {
|
|
77
|
-
return (h("div", { key: '
|
|
77
|
+
return (h("div", { key: 'ace9458a7d7a57dd371274deceb493714fc953e2', class: "bs-chatbot-header", role: "banner", "aria-label": this.heading }, h("div", { key: 'a4b4b0c3df647f978f5d473f050d87d6d88fb417', part: "logo", class: "bs-chatbot-header__logo", role: "img", "aria-label": this.heading, innerHTML: GENIE_LOGO_SVG }), h("div", { key: '94ea222a987e644f60d5c1e7f8c3e6f90100dcbf', class: "bs-chatbot-header__actions" }, h("span", { key: '411727c2c8274381cf41a08d9fe99150ff7ce4f7', class: "bs-chatbot-header__tooltip-wrapper" }, h("button", { key: '3fa054ae17e01d61a27c01f59798cfe8dc451e76', type: "button", part: "new-chat", class: "bs-chatbot-header__button", "aria-label": "New chat", onClick: this.onNewChatClick }, h("slot", { key: '4151abddb9737773b8d7c30715e3a226752bc4d7', name: "new-chat-icon" }, h(NewChatIcon, { key: '8c626ad045ad9e501e9d68f42b6811170ef780e9' }))), h("bs-tooltip", { key: 'cf7e1370c68f7ee2480970b628b0f43b5c31e7c2', class: "bs-chatbot-header__tooltip", placement: "top", "aria-hidden": "true" }, "New chat")), h("span", { key: '50de92e37c966442cc8785dd7294a2769aca4cca', class: "bs-chatbot-header__tooltip-wrapper" }, h("button", { key: '37fd0763df000a5a98eb0ce99c3808c4307b3ea6', type: "button", part: "history", class: "bs-chatbot-header__button", "aria-label": "History", onClick: this.onHistoryClick }, h("slot", { key: 'a8751f3d787f24225b8cdd2e12a92e51f46ff759', name: "history-icon" }, h(HistoryIcon, { key: '426227289c53d661ae1c79f33dfca5dc68dfb701' }))), h("bs-tooltip", { key: 'f22b93a3e898b6dad241de7d6d1a1def1e2fd127', class: "bs-chatbot-header__tooltip", placement: "top", "aria-hidden": "true" }, "History")), h("span", { key: 'b7671f7ccc56d59a41a2bbb648ec38c3ae6da071', class: "bs-chatbot-header__tooltip-wrapper" }, h("button", { key: '94b47506fddd5b21b38f6dc63d2e2da76f5bce46', type: "button", part: "expand", class: "bs-chatbot-header__button", "aria-label": this.expanded ? 'Collapse' : 'Expand', "aria-pressed": this.expanded ? 'true' : 'false', onClick: this.onExpandClick }, h("slot", { key: '033e0cf8cab7a62fc562fd9b3a6b39d0a6f45bc1', name: "expand-icon" }, h(ExpandIcon, { key: 'a05f02a22f4faa22704c66ce6705377878bbc63b' }))), h("bs-tooltip", { key: 'b1170cfecb1e28f18aae64053bf053b35c8456dd', class: "bs-chatbot-header__tooltip", placement: "top", "aria-hidden": "true" }, this.expanded ? 'Collapse' : 'Expand')), h("span", { key: '2ec5e1c8e875bf390680dc003325456f8c7304fd', class: "bs-chatbot-header__tooltip-wrapper" }, h("button", { key: '45c7865b57760e8acfb375ab4fab9d76db97d01a', type: "button", part: "close", class: "bs-chatbot-header__button", "aria-label": "Close", onClick: this.onCloseClick }, h("slot", { key: 'dc00d32a101d05c3468f37de7a4d06d5f9f36718', name: "close-icon" }, h(CloseIcon, { key: '63dc3094f4b9a637ebcd68541efc562d091f1e96' }))), h("bs-tooltip", { key: 'f735fcc2cc2a24a9bb58a9f5b479c369b11133c6', class: "bs-chatbot-header__tooltip", placement: "top", "aria-hidden": "true" }, "Close")))));
|
|
78
78
|
}
|
|
79
79
|
static get is() { return "bs-chatbot-header"; }
|
|
80
80
|
static get encapsulation() { return "shadow"; }
|