@brandsync/wc 1.3.0 → 1.5.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 +302 -91
- package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
- package/dist/brandsync-wc/{p-7ea0133f.entry.js → p-1b16b6e4.entry.js} +1 -1
- package/dist/brandsync-wc/{p-5d118af1.entry.js → p-1bfc80c3.entry.js} +1 -1
- package/dist/brandsync-wc/{p-2a7cc40c.entry.js → p-1d094352.entry.js} +1 -1
- package/dist/brandsync-wc/p-27741046.entry.js +1 -0
- package/dist/brandsync-wc/{p-0c8050e8.entry.js → p-2c2057f5.entry.js} +1 -1
- package/dist/brandsync-wc/p-2e8bf5da.entry.js +1 -0
- package/dist/brandsync-wc/{p-a73bfd31.entry.js → p-3145cc00.entry.js} +1 -1
- package/dist/brandsync-wc/{p-d589fa72.entry.js → p-35850bfe.entry.js} +1 -1
- package/dist/brandsync-wc/p-3e4a9f38.entry.js +1 -0
- package/dist/brandsync-wc/p-3f6980bf.entry.js +1 -0
- package/dist/brandsync-wc/p-42f428b0.entry.js +1 -0
- package/dist/brandsync-wc/{p-b2704450.entry.js → p-46957b76.entry.js} +1 -1
- package/dist/brandsync-wc/{p-0d5cc77f.entry.js → p-4df71e00.entry.js} +1 -1
- package/dist/brandsync-wc/{p-72e02bd5.entry.js → p-58969b2b.entry.js} +1 -1
- package/dist/brandsync-wc/{p-0299e8e1.entry.js → p-5ea24f7e.entry.js} +1 -1
- package/dist/brandsync-wc/p-5f233b4e.entry.js +1 -0
- package/dist/brandsync-wc/{p-19c98e13.entry.js → p-692fd5f0.entry.js} +1 -1
- package/dist/brandsync-wc/{p-9ad278f4.entry.js → p-69c76966.entry.js} +1 -1
- package/dist/brandsync-wc/{p-be675b82.entry.js → p-6acdf2e1.entry.js} +1 -1
- package/dist/brandsync-wc/{p-673546bf.entry.js → p-6b62bf53.entry.js} +1 -1
- package/dist/brandsync-wc/{p-23758f81.entry.js → p-6fd1fb04.entry.js} +1 -1
- package/dist/brandsync-wc/{p-29c360f3.entry.js → p-76a37a98.entry.js} +1 -1
- package/dist/brandsync-wc/{p-8b5f4ca7.entry.js → p-83bda5f1.entry.js} +1 -1
- package/dist/brandsync-wc/{p-a16afeaa.entry.js → p-899d24f8.entry.js} +1 -1
- package/dist/brandsync-wc/{p-94266d72.entry.js → p-8f90e906.entry.js} +1 -1
- package/dist/brandsync-wc/{p-5a4db480.entry.js → p-906b4faa.entry.js} +1 -1
- package/dist/brandsync-wc/{p-eae7587e.entry.js → p-943fc6b9.entry.js} +1 -1
- package/dist/brandsync-wc/{p-7de20530.entry.js → p-95e0fb92.entry.js} +1 -1
- package/dist/brandsync-wc/{p-ca74c7d9.entry.js → p-9d5cf289.entry.js} +1 -1
- package/dist/brandsync-wc/{p-CvfB8CQv.js → p-CcPfH1dJ.js} +2 -2
- package/dist/brandsync-wc/{p-04c26826.entry.js → p-a34c7553.entry.js} +1 -1
- package/dist/brandsync-wc/{p-bf4a5b1b.entry.js → p-a55a3d87.entry.js} +1 -1
- package/dist/brandsync-wc/{p-76d391d7.entry.js → p-a64b64f8.entry.js} +1 -1
- package/dist/brandsync-wc/{p-f196642a.entry.js → p-a77a5438.entry.js} +1 -1
- package/dist/brandsync-wc/{p-8acb623e.entry.js → p-a96ec9a1.entry.js} +1 -1
- package/dist/brandsync-wc/p-ac2ccc4b.entry.js +1 -0
- package/dist/brandsync-wc/{p-18e0cff4.entry.js → p-b332fe01.entry.js} +1 -1
- package/dist/brandsync-wc/{p-8ec95da5.entry.js → p-b4211012.entry.js} +1 -1
- package/dist/brandsync-wc/{p-f652d79c.entry.js → p-ba650ca9.entry.js} +1 -1
- package/dist/brandsync-wc/{p-96d1ce21.entry.js → p-c91eb3eb.entry.js} +1 -1
- package/dist/brandsync-wc/{p-bcafba87.entry.js → p-cd90ed34.entry.js} +1 -1
- package/dist/brandsync-wc/{p-7091f130.entry.js → p-d1dfd37d.entry.js} +1 -1
- package/dist/brandsync-wc/{p-e58b1dbb.entry.js → p-d69e5034.entry.js} +1 -1
- package/dist/brandsync-wc/{p-b63362e7.entry.js → p-da6fa359.entry.js} +1 -1
- package/dist/brandsync-wc/p-dadbb3f1.entry.js +1 -0
- package/dist/brandsync-wc/{p-d5d15d9f.entry.js → p-dbd49107.entry.js} +1 -1
- package/dist/brandsync-wc/{p-9f9c1a1d.entry.js → p-dc974a34.entry.js} +1 -1
- package/dist/brandsync-wc/{p-35d98580.entry.js → p-e9a89ea0.entry.js} +1 -1
- package/dist/brandsync-wc/p-eb1c98a5.entry.js +1 -0
- package/dist/brandsync-wc/{p-bd2cc2c6.entry.js → p-f0a6ff05.entry.js} +1 -1
- package/dist/brandsync-wc/{p-39204377.entry.js → p-f4cb1337.entry.js} +1 -1
- package/dist/brandsync-wc/{p-c4a16564.entry.js → p-fd1acc0f.entry.js} +1 -1
- package/dist/cjs/brandsync-wc.cjs.js +2 -2
- package/dist/cjs/bs-accordion.cjs.entry.js +54 -0
- 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 +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 +2 -2
- package/dist/cjs/bs-breadcrumb-overflow.cjs.entry.js +2 -2
- package/dist/cjs/bs-breadcrumb.cjs.entry.js +2 -2
- 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 +3 -3
- package/dist/cjs/bs-card.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-feedback.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-header.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-response-action.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-sources-drawer.cjs.entry.js +2 -2
- package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +2 -2
- package/dist/cjs/bs-checkbox-skeleton.cjs.entry.js +2 -2
- package/dist/cjs/bs-checkbox.cjs.entry.js +2 -2
- package/dist/cjs/bs-chip-filter.cjs.entry.js +10 -6
- 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 +2 -2
- package/dist/cjs/bs-composer.cjs.entry.js +26 -3
- package/dist/cjs/bs-data-table.cjs.entry.js +21 -4
- package/dist/cjs/bs-dialog.cjs.entry.js +1 -1
- package/dist/cjs/bs-icon-button.cjs.entry.js +3 -3
- package/dist/cjs/bs-inline-tab.cjs.entry.js +2 -2
- package/dist/cjs/bs-input.cjs.entry.js +3 -3
- 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 +2 -2
- package/dist/cjs/bs-navigation-drawer-item.cjs.entry.js +2 -2
- package/dist/cjs/bs-navigation-drawer.cjs.entry.js +3 -3
- package/dist/cjs/bs-navigation-header.cjs.entry.js +3 -3
- package/dist/cjs/bs-pagination.cjs.entry.js +2 -2
- package/dist/cjs/bs-progress-linear.cjs.entry.js +3 -3
- package/dist/cjs/bs-progress.cjs.entry.js +3 -3
- package/dist/cjs/bs-radio.cjs.entry.js +2 -2
- package/dist/cjs/bs-slider.cjs.entry.js +2 -2
- package/dist/cjs/bs-snackbar.cjs.entry.js +13 -3
- package/dist/cjs/bs-source-link.cjs.entry.js +3 -3
- package/dist/cjs/bs-stepper-step.cjs.entry.js +2 -2
- package/dist/cjs/bs-stepper.cjs.entry.js +2 -2
- package/dist/cjs/bs-switch.cjs.entry.js +2 -2
- package/dist/cjs/bs-tab.cjs.entry.js +2 -2
- package/dist/cjs/bs-tabs.cjs.entry.js +2 -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-CdAh5BFg.js → index-Bj1mNOtg.js} +17 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/bs-accordion/bs-accordion.cmp.test.js +112 -0
- package/dist/collection/components/bs-accordion/bs-accordion.css +174 -0
- package/dist/collection/components/bs-accordion/bs-accordion.js +203 -0
- package/dist/collection/components/bs-accordion/bs-accordion.stories.js +63 -0
- 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.js +1 -1
- package/dist/collection/components/bs-attachment-list/bs-attachment-list.js +1 -1
- package/dist/collection/components/bs-badge/bs-badge.js +1 -1
- package/dist/collection/components/bs-breadcrumb/bs-breadcrumb/bs-breadcrumb.js +1 -1
- package/dist/collection/components/bs-breadcrumb/bs-breadcrumb-overflow/bs-breadcrumb-overflow.js +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 +15 -5
- package/dist/collection/components/bs-button/bs-button/bs-button.js +1 -1
- package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.css +15 -7
- package/dist/collection/components/bs-button/bs-icon-button/bs-icon-button.js +1 -1
- package/dist/collection/components/bs-button-skeleton/bs-button-skeleton.js +1 -1
- package/dist/collection/components/bs-card/bs-card.js +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.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.js +1 -1
- package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.cmp.test.js +19 -5
- package/dist/collection/components/bs-chip/bs-chip-filter/bs-chip-filter.js +11 -7
- 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.js +1 -1
- package/dist/collection/components/bs-composer/bs-composer.cmp.test.js +44 -0
- package/dist/collection/components/bs-composer/bs-composer.js +29 -6
- 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.cmp.test.js +108 -0
- package/dist/collection/components/bs-data-table/bs-data-table.css +5 -3
- package/dist/collection/components/bs-data-table/bs-data-table.js +40 -2
- package/dist/collection/components/bs-input/bs-input.js +2 -2
- package/dist/collection/components/bs-menu/bs-menu.js +1 -1
- package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
- package/dist/collection/components/bs-pagination/bs-pagination.js +1 -1
- package/dist/collection/components/bs-progress/bs-progress.js +2 -2
- package/dist/collection/components/bs-progress-linear/bs-progress-linear.js +2 -2
- package/dist/collection/components/bs-radio/bs-radio.js +1 -1
- package/dist/collection/components/bs-slider/bs-slider.js +1 -1
- package/dist/collection/components/bs-snackbar/bs-snackbar.cmp.test.js +4 -1
- package/dist/collection/components/bs-snackbar/bs-snackbar.css +8 -155
- package/dist/collection/components/bs-snackbar/bs-snackbar.js +11 -1
- package/dist/collection/components/bs-source-link/bs-source-link.js +2 -2
- package/dist/collection/components/bs-stepper/bs-stepper/bs-stepper.js +1 -1
- package/dist/collection/components/bs-stepper/bs-stepper-step/bs-stepper-step.js +1 -1
- package/dist/collection/components/bs-switch/bs-switch.js +1 -1
- package/dist/collection/components/bs-tab/bs-inline-tab/bs-inline-tab.js +1 -1
- package/dist/collection/components/bs-tab/bs-tab/bs-tab.js +1 -1
- package/dist/collection/components/bs-tab/bs-tabs/bs-tabs.js +1 -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/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.cmp.test.js +6 -0
- package/dist/collection/components/ui-shell/bs-navigation-drawer/bs-navigation-drawer/bs-navigation-drawer.css +43 -1
- 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.css +25 -0
- package/dist/collection/components/ui-shell/bs-navigation-header/bs-navigation-header/bs-navigation-header.js +1 -1
- package/dist/components/bs-accordion.d.ts +11 -0
- package/dist/components/bs-accordion.js +1 -0
- package/dist/components/bs-ai-disclaimer.js +1 -1
- package/dist/components/bs-ai-greeting.js +1 -1
- package/dist/components/bs-ai-thinking.js +1 -1
- package/dist/components/bs-attachment-list.js +1 -1
- package/dist/components/bs-attachment.js +1 -1
- package/dist/components/bs-badge.js +1 -1
- package/dist/components/bs-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-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-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-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/p-Byl-ZwBI.js +1 -0
- package/dist/components/p-D4omPSOU.js +1 -0
- package/dist/components/{p-BIgPiuc-.js → p-DOApNIwD.js} +1 -1
- package/dist/components/{p-BUtz3sub.js → p-Dkv8x1_Z.js} +1 -1
- package/dist/components/{p-Rn1IWs8l.js → p-lvnXqw5g.js} +1 -1
- package/dist/esm/brandsync-wc.js +3 -3
- package/dist/esm/bs-accordion.entry.js +52 -0
- 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 +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 +2 -2
- package/dist/esm/bs-breadcrumb-overflow.entry.js +2 -2
- package/dist/esm/bs-breadcrumb.entry.js +2 -2
- 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 +3 -3
- package/dist/esm/bs-card.entry.js +2 -2
- package/dist/esm/bs-chatbot-feedback.entry.js +2 -2
- package/dist/esm/bs-chatbot-header.entry.js +2 -2
- package/dist/esm/bs-chatbot-response-action.entry.js +2 -2
- package/dist/esm/bs-chatbot-sources-drawer.entry.js +2 -2
- package/dist/esm/bs-chatbot-suggestion-button.entry.js +2 -2
- package/dist/esm/bs-checkbox-skeleton.entry.js +2 -2
- package/dist/esm/bs-checkbox.entry.js +2 -2
- package/dist/esm/bs-chip-filter.entry.js +10 -6
- 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 +2 -2
- package/dist/esm/bs-composer.entry.js +26 -3
- package/dist/esm/bs-data-table.entry.js +21 -4
- package/dist/esm/bs-dialog.entry.js +1 -1
- package/dist/esm/bs-icon-button.entry.js +3 -3
- package/dist/esm/bs-inline-tab.entry.js +2 -2
- package/dist/esm/bs-input.entry.js +3 -3
- 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 +2 -2
- package/dist/esm/bs-navigation-drawer-item.entry.js +2 -2
- package/dist/esm/bs-navigation-drawer.entry.js +3 -3
- package/dist/esm/bs-navigation-header.entry.js +3 -3
- package/dist/esm/bs-pagination.entry.js +2 -2
- package/dist/esm/bs-progress-linear.entry.js +3 -3
- package/dist/esm/bs-progress.entry.js +3 -3
- package/dist/esm/bs-radio.entry.js +2 -2
- package/dist/esm/bs-slider.entry.js +2 -2
- package/dist/esm/bs-snackbar.entry.js +13 -3
- package/dist/esm/bs-source-link.entry.js +3 -3
- package/dist/esm/bs-stepper-step.entry.js +2 -2
- package/dist/esm/bs-stepper.entry.js +2 -2
- package/dist/esm/bs-switch.entry.js +2 -2
- package/dist/esm/bs-tab.entry.js +2 -2
- package/dist/esm/bs-tabs.entry.js +2 -2
- package/dist/esm/bs-toast.entry.js +2 -2
- package/dist/esm/bs-tooltip.entry.js +2 -2
- package/dist/esm/{index-CvfB8CQv.js → index-CcPfH1dJ.js} +17 -0
- package/dist/esm/loader.js +3 -3
- package/dist/types/components/bs-accordion/bs-accordion.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-accordion/bs-accordion.d.ts +51 -0
- package/dist/types/components/bs-accordion/bs-accordion.stories.d.ts +20 -0
- package/dist/types/components/bs-chip/bs-chip-filter/bs-chip-filter.d.ts +7 -2
- package/dist/types/components/bs-composer/bs-composer.d.ts +15 -1
- package/dist/types/components/bs-data-table/bs-data-table.cmp.test.d.ts +1 -0
- package/dist/types/components/bs-data-table/bs-data-table.d.ts +5 -0
- package/dist/types/components.d.ts +133 -6
- package/package.json +1 -1
- package/dist/brandsync-wc/p-00d40aca.entry.js +0 -1
- package/dist/brandsync-wc/p-03676f8a.entry.js +0 -1
- package/dist/brandsync-wc/p-127d698d.entry.js +0 -1
- package/dist/brandsync-wc/p-1780224d.entry.js +0 -1
- package/dist/brandsync-wc/p-35bcb932.entry.js +0 -1
- package/dist/brandsync-wc/p-b2abd8d9.entry.js +0 -1
- package/dist/brandsync-wc/p-cd703364.entry.js +0 -1
- package/dist/brandsync-wc/p-fc9d52d4.entry.js +0 -1
- package/dist/components/p-B8JpGodL.js +0 -1
|
@@ -25,8 +25,10 @@
|
|
|
25
25
|
* @prop --bs-icon-button-subtle-hover: Background, variant="subtle", hover. Aliased to --bs-color-neutral-container.
|
|
26
26
|
* @prop --bs-icon-button-subtle-pressed: Background, variant="subtle", pressed. Aliased to --bs-color-neutral-container-pressed.
|
|
27
27
|
* @prop --bs-icon-button-subtle-focus: Focus ring color, variant="subtle". Aliased to --bs-border-primary-focus.
|
|
28
|
-
* @prop --bs-icon-button-outlined-border: Border color, variant="outlined", default. Aliased to --bs-
|
|
29
|
-
* @prop --bs-icon-button-outlined-border-hover: Border color, variant="outlined", hover
|
|
28
|
+
* @prop --bs-icon-button-outlined-border: Border color, variant="outlined", default. Aliased to --bs-color-primary-default.
|
|
29
|
+
* @prop --bs-icon-button-outlined-border-hover: Border color, variant="outlined", hover. Aliased to --bs-color-primary-hover.
|
|
30
|
+
* @prop --bs-icon-button-outlined-border-pressed: Border color, variant="outlined", pressed. Aliased to --bs-color-primary-pressed.
|
|
31
|
+
* @prop --bs-icon-button-outlined-text-hover: Icon color, variant="outlined", hover/pressed. Aliased to --bs-text-action-hover.
|
|
30
32
|
* @prop --bs-icon-button-outlined-container: Background, variant="outlined", hover/pressed. Aliased to --bs-color-primary-container.
|
|
31
33
|
* @prop --bs-icon-button-outlined-focus: Focus ring color, variant="outlined". Aliased to --bs-border-primary-focus.
|
|
32
34
|
* @prop --bs-icon-button-success-default: Background, variant="success", default. Aliased to --bs-color-success-default.
|
|
@@ -94,8 +96,13 @@
|
|
|
94
96
|
--bs-icon-button-subtle-pressed: var(--bs-color-neutral-container-pressed);
|
|
95
97
|
--bs-icon-button-subtle-focus: var(--bs-border-primary-focus);
|
|
96
98
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
+
/* Verified against Figma node 2842:50233/50230/50227/50224 (bs-button's Style=Outline states) --
|
|
100
|
+
border/text colors step through brand-600 -> 700 -> 800 across enabled -> hover -> pressed,
|
|
101
|
+
matching the fix applied to bs-button's own outlined variant. */
|
|
102
|
+
--bs-icon-button-outlined-border: var(--bs-color-primary-default);
|
|
103
|
+
--bs-icon-button-outlined-border-hover: var(--bs-color-primary-hover);
|
|
104
|
+
--bs-icon-button-outlined-border-pressed: var(--bs-color-primary-pressed);
|
|
105
|
+
--bs-icon-button-outlined-text-hover: var(--bs-text-action-hover);
|
|
99
106
|
--bs-icon-button-outlined-container: var(--bs-color-primary-container);
|
|
100
107
|
--bs-icon-button-outlined-focus: var(--bs-border-primary-focus);
|
|
101
108
|
|
|
@@ -326,16 +333,17 @@
|
|
|
326
333
|
.bs-icon-button--outlined {
|
|
327
334
|
background: transparent;
|
|
328
335
|
color: var(--bs-color-primary-default);
|
|
329
|
-
border:
|
|
336
|
+
border: 1px solid var(--bs-icon-button-outlined-border);
|
|
330
337
|
}
|
|
331
338
|
.bs-icon-button--outlined:hover:not(:disabled) {
|
|
332
339
|
background: var(--bs-icon-button-outlined-container);
|
|
333
340
|
border-color: var(--bs-icon-button-outlined-border-hover);
|
|
341
|
+
color: var(--bs-icon-button-outlined-text-hover);
|
|
334
342
|
}
|
|
335
343
|
.bs-icon-button--outlined:active:not(:disabled) {
|
|
336
344
|
background: var(--bs-icon-button-outlined-container);
|
|
337
|
-
color: var(--bs-
|
|
338
|
-
border-color: var(--bs-icon-button-outlined-border-
|
|
345
|
+
color: var(--bs-icon-button-outlined-text-hover);
|
|
346
|
+
border-color: var(--bs-icon-button-outlined-border-pressed);
|
|
339
347
|
}
|
|
340
348
|
.bs-icon-button--outlined:disabled {
|
|
341
349
|
opacity: var(--bs-opacity-disabled);
|
|
@@ -50,7 +50,7 @@ export class BsIconButton {
|
|
|
50
50
|
*/
|
|
51
51
|
ariaLabel = null;
|
|
52
52
|
render() {
|
|
53
|
-
return (h("button", { key: '
|
|
53
|
+
return (h("button", { key: '86ddd0f1ff23372e205035ac1273a6b90a779855', class: `bs-icon-button bs-icon-button--${this.variant} bs-icon-button--${this.size}`, type: this.type, disabled: this.disabled, "aria-label": this.ariaLabel }, h("span", { key: 'f45944557ce068283c394e6a48fbc0f56087fbd9', part: "icon", class: "bs-icon-button__icon" }, h("slot", { key: 'ed067830c7f465099edbf40401b0e3ec6fb1e1c9' }))));
|
|
54
54
|
}
|
|
55
55
|
static get is() { return "bs-icon-button"; }
|
|
56
56
|
static get encapsulation() { return "shadow"; }
|
|
@@ -25,7 +25,7 @@ export class BsButtonSkeleton {
|
|
|
25
25
|
/** Sizing scale, matching the `bs-button` size it stands in for. */
|
|
26
26
|
size = 'md';
|
|
27
27
|
render() {
|
|
28
|
-
return h("span", { key: '
|
|
28
|
+
return h("span", { key: 'bc4e9d282c745bfacede27fbeae7dfc8ea5d7aed', part: "container", class: `bs-button-skeleton bs-button-skeleton--${this.size}`, role: "status", "aria-label": "Loading" });
|
|
29
29
|
}
|
|
30
30
|
static get is() { return "bs-button-skeleton"; }
|
|
31
31
|
static get encapsulation() { return "shadow"; }
|
|
@@ -34,7 +34,7 @@ export class BsCard {
|
|
|
34
34
|
this.hasImage = ev.target.assignedNodes().length > 0;
|
|
35
35
|
};
|
|
36
36
|
render() {
|
|
37
|
-
return (h("div", { key: '
|
|
37
|
+
return (h("div", { key: '8cad76fa0c75da73579d9c3f0c35bd53e403e206', part: "container", class: `bs-card bs-card--${this.surface}` }, h("div", { key: '0b6c4b4f1917b91c2666fe5a458f4824b2be8a45', part: "image", class: `bs-card__image ${this.hasImage ? 'bs-card__image--visible' : ''}` }, h("slot", { key: 'aa072aab27b633e7f043855d5c9dfdcdd711adcf', name: "image", onSlotchange: this.onImageSlotchange })), h("div", { key: '9c30a8c08fb8c8a312b649358fdc4d666fffeb8d', class: "bs-card__content" }, h("div", { key: '0489dbbbbb3c743d8cabe2722884a3d127cd0dc4', part: "header", class: "bs-card__header" }, h("slot", { key: '43175c6aff3313e8efbedde2e8cb344c023594ea', name: "header" })), h("div", { key: '23d4f29e1786d30ea9b63159287ed7cf139a374a', part: "body", class: "bs-card__body" }, h("slot", { key: '2e3c69ae07711b57e2e825b0ed0bd691d8e9c3b1' })), h("div", { key: 'fb0747f6bf93c25057e84551c2a0b579c7c594d3', part: "footer", class: "bs-card__footer" }, h("slot", { key: '8ef61b947e94412f113f237b55144cc216a6bad5', name: "footer" })))));
|
|
38
38
|
}
|
|
39
39
|
static get is() { return "bs-card"; }
|
|
40
40
|
static get encapsulation() { return "shadow"; }
|
|
@@ -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: '6c5056134f1d6447aeda1ae857061c365fdacb4e', class: "bs-chatbot-feedback", role: "region", "aria-label": this.computedHeading() }, h("button", { key: '8d1e595b3a7967845110a98b3760562b074084e1', type: "button", part: "close", class: "bs-chatbot-feedback__close", "aria-label": "Close", onClick: this.onCloseClick }, h(CloseIcon, { key: '751dd5a8131bedb5746be7ff51c44511ebdda6ca' })), h("div", { key: 'e27641222fb536f8d942d7f0b24a1d0d1b35488d', class: "bs-chatbot-feedback__top" }, h("div", { key: 'f5dc2910630a2062bd470ad18fe15cb8fe50337f', class: "bs-chatbot-feedback__text" }, h("p", { key: '9b2302645703362eb21f864504eb223baeee9baa', part: "heading", class: "bs-chatbot-feedback__heading" }, this.computedHeading()), h("p", { key: 'e1d4790ef748ae54b35c3d8044b52c1bca06388f', part: "subtitle", class: "bs-chatbot-feedback__subtitle" }, this.computedSubtitle())), h("div", { key: '8218bd93c344643644a29669a5ec3c0f01d9f07f', 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: '66dc2fee80c61f23942b05cf0e6f7d37aba0e51c', class: "bs-chatbot-feedback__field" }, h("label", { key: '907d81ab2873fcb8545a1f6e0211ae4470cd47ea', part: "label", class: "bs-chatbot-feedback__label", htmlFor: "bs-chatbot-feedback-comment" }, "Tell us what you think"), h("textarea", { key: 'fbb611bfe9e9cf8ce26c1f6fd2b5cf6f6fe6ae94', 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: 'edd24d5f9ffa0d615af9cf4d61fbc97e8a99e2f5', part: "comment", class: "bs-chatbot-feedback__comment" }, this.comment))), h("div", { key: 'a33f6632072258d658e66826f1a65e6fe15df00d', class: "bs-chatbot-feedback__actions" }, !this.submitted && (h("button", { key: '8fc50735381620c4b93e05d72f2045f3890f6307', type: "button", part: "submit", class: "bs-chatbot-feedback__submit", disabled: this.rating === 0, onClick: this.onSubmitClick }, h(SendIcon, { key: '3fce1f0219ee83a209f0eafa7a427349b6d00d7b' }), "Submit feedback")), h("button", { key: 'f0e4a2cb9115e513506248812ae025772e7b3b2b', 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: '18ed5c41bc2fcfff8ea8505d3c893ae7f9fb3a81' }), "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: '6c7b3f85022255ed23112784225bfa73d3a895dc', class: "bs-chatbot-header", role: "banner", "aria-label": this.heading }, h("div", { key: 'c1352cfd77ffa0086524169f70f539224efdfece', part: "logo", class: "bs-chatbot-header__logo", role: "img", "aria-label": this.heading, innerHTML: GENIE_LOGO_SVG }), h("div", { key: '0fc7a712371d9376cf27255bc8673e3534958f90', class: "bs-chatbot-header__actions" }, h("span", { key: 'ec7e2263549ceadea2cab8d525e79536498c8638', class: "bs-chatbot-header__tooltip-wrapper" }, h("button", { key: 'e18b8a1479e39ac7ffb9296d6937a0ae43ed8085', type: "button", part: "new-chat", class: "bs-chatbot-header__button", "aria-label": "New chat", onClick: this.onNewChatClick }, h("slot", { key: 'b4d2cbc7178fedb8fd913a78d553ff8dd7434629', name: "new-chat-icon" }, h(NewChatIcon, { key: 'b08f81e176c9bd375149953c16ac9015abb45e82' }))), h("bs-tooltip", { key: 'f9ce231519487ecef288ba4cfbb9be6f0c365d13', class: "bs-chatbot-header__tooltip", placement: "top", "aria-hidden": "true" }, "New chat")), h("span", { key: '518d7a9e5b706032c2bcd8b07ba233149d0b91c2', class: "bs-chatbot-header__tooltip-wrapper" }, h("button", { key: '0fe038dd159d5b789c068e8b5897bb7d4ecce13f', type: "button", part: "history", class: "bs-chatbot-header__button", "aria-label": "History", onClick: this.onHistoryClick }, h("slot", { key: '08eafbec56e26a5b1ee031760fe5cb536f8e2dfb', name: "history-icon" }, h(HistoryIcon, { key: 'c7146fda0171aad403c60e85487422f9435ecb5b' }))), h("bs-tooltip", { key: '75472a421f6e7deae9251f8ba8154ed1e27d7561', class: "bs-chatbot-header__tooltip", placement: "top", "aria-hidden": "true" }, "History")), h("span", { key: '80205eed7c1859d9294169340eb32675093cc3b6', class: "bs-chatbot-header__tooltip-wrapper" }, h("button", { key: '50f7bc159d86e96402f1dfcd669d9cb0db47d5db', 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: 'ec985a221f8ad106d9e166fe41b61d12bb76ed1c', name: "expand-icon" }, h(ExpandIcon, { key: '8c2115fda94eb2751fb1d578790217b7791329a4' }))), h("bs-tooltip", { key: 'd81aac0eeab0c95e4255bb996acdfce822e8264d', class: "bs-chatbot-header__tooltip", placement: "top", "aria-hidden": "true" }, this.expanded ? 'Collapse' : 'Expand')), h("span", { key: 'c7400a3de2bf5f094dd54bf1308355d0e0f762a8', class: "bs-chatbot-header__tooltip-wrapper" }, h("button", { key: 'b6b06b62243f7e1058b1f09426e4159fe185c1ad', type: "button", part: "close", class: "bs-chatbot-header__button", "aria-label": "Close", onClick: this.onCloseClick }, h("slot", { key: '407db5c670302391b0196716de157b6cdaeb029f', name: "close-icon" }, h(CloseIcon, { key: '2593ea028a266cb7a9cc55ead8d1888cb491cf05' }))), h("bs-tooltip", { key: 'b230b5107c88e56f4e695f2d8b065208affe3fd2', 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"; }
|
|
@@ -105,7 +105,7 @@ export class BsChatbotResponseAction {
|
|
|
105
105
|
};
|
|
106
106
|
render() {
|
|
107
107
|
const hasSources = !!this.sourcesCount && this.sourcesCount > 0;
|
|
108
|
-
return (h("div", { key: '
|
|
108
|
+
return (h("div", { key: '111e7a42e8fc38d4fd5a816cdfded9eaaa854411', class: "bs-chatbot-response-action" }, h("button", { key: 'def8fd139a1e29cf5410c00227e0f3daa713fe71', type: "button", part: "like", class: "bs-chatbot-response-action__button", "aria-label": "Like", onClick: this.onLikeClick }, h("slot", { key: '78e5c9b817fe4828e2a52cd49474d54400a8e930', name: "like-icon" }, h(ThumbsUpIcon, { key: 'e74d4efb615839af2a1b5b1a0fe739c37f0830ed' }))), h("button", { key: '19a4569619e2f9bcc4058622f5534d5aff1be914', type: "button", part: "dislike", class: "bs-chatbot-response-action__button", "aria-label": "Dislike", onClick: this.onDislikeClick }, h("slot", { key: '0f6fab436dc26c3cd019934cbb99073c0cd2176f', name: "dislike-icon" }, h(ThumbsDownIcon, { key: '000bae3349daf25dd7f2af3b0848461158452e58' }))), h("button", { key: '92e013b636bf8d6a0d316b998e01acb3039f283a', type: "button", part: "copy", class: "bs-chatbot-response-action__button", "aria-label": "Copy", onClick: this.onCopyClick }, h("slot", { key: 'd575f671a480dae59bbefb0a255209a537b24f4d', name: "copy-icon" }, h(CopyIcon, { key: 'becca3443cdd1a6245d84b806f9186da8756bef8' }))), h("button", { key: '3e48fb0dbef6c181fbc1e4800f079786f38f7294', type: "button", part: "regenerate", class: "bs-chatbot-response-action__button", "aria-label": "Regenerate", onClick: this.onRegenerateClick }, h("slot", { key: '2bf713515b8503186d4d17e47ad0a7baf424be00', name: "regenerate-icon" }, h(RegenerateIcon, { key: '86f25451600b70f5d8e7148f5ee46c9c8fda4674' }))), h("div", { key: '3815f620d0ee123aeb23e99d664d40aae2168616', class: "bs-chatbot-response-action__menu-wrapper" }, h("button", { key: 'f53c9236453217611a1b3b3ee195ad9e5d5079e0', type: "button", part: "menu", class: "bs-chatbot-response-action__button", "aria-label": "More options", "aria-haspopup": "menu", "aria-expanded": this.menuOpen ? 'true' : 'false', onClick: this.onMenuClick }, h("slot", { key: 'ac264f44c88115a8dc5d52a5c149ac0981ee0177', name: "menu-icon" }, h(MenuIcon, { key: '66c03b5a3cf26d1f8aebbe93d10ea90ed61277bf' }))), this.menuOpen && (h("div", { key: '004fd6280505e156ff0353714e4d36e3b7273d5e', class: "bs-chatbot-response-action__menu-popup" }, h("slot", { key: '33e54635fe65fe4fb52a0bbd642c822e5a50e9a6', name: "menu" })))), hasSources && (h("button", { key: 'da4095a96f3920f2723f1b84be98f8b31ba55f5a', type: "button", part: "sources", class: "bs-chatbot-response-action__sources", onClick: this.onSourcesClick }, h("slot", { key: 'a7c526dcbfb1037c66830602b0457db0d3f160a1', name: "sources-icon" }, h(SourcesIcon, { key: '4e76ba5f77ddf3ad438f4b537e06caddb0adf613' })), h("span", { key: 'c648b364219f65b63c2abd325a4112c581906b31', class: "bs-chatbot-response-action__sources-label" }, this.sourcesCount, " ", this.sourcesCount === 1 ? 'source' : 'sources')))));
|
|
109
109
|
}
|
|
110
110
|
static get is() { return "bs-chatbot-response-action"; }
|
|
111
111
|
static get encapsulation() { return "shadow"; }
|
|
@@ -57,7 +57,7 @@ export class BsChatbotSourcesDrawer {
|
|
|
57
57
|
};
|
|
58
58
|
render() {
|
|
59
59
|
const displayCount = this.count ?? this.slottedCount;
|
|
60
|
-
return (h("div", { key: '
|
|
60
|
+
return (h("div", { key: '42d5d4160e8c2cac61d124f9359d2f6996658ce1', class: "bs-chatbot-sources-drawer", role: "region", "aria-label": this.heading }, h("div", { key: '81d4a4bef6bdc625d7bcfe57f4338fc97c0403ca', class: "bs-chatbot-sources-drawer__header" }, h("div", { key: 'db44bbebef2b2c59ae1a6755d6dd68ea55b81196', class: "bs-chatbot-sources-drawer__title-group" }, h("h2", { key: '573c29a65b188805621f8eb35d2489987d05451b', part: "heading", class: "bs-chatbot-sources-drawer__heading" }, this.heading), displayCount > 0 && (h("span", { key: '24a009a10e789ea33ad2603dad89ed590564e92b', part: "count", class: "bs-chatbot-sources-drawer__count" }, displayCount))), h("button", { key: '1ba25a50ca7a7910fcac94ff10eeb1a694e2ddd5', type: "button", part: "collapse", class: "bs-chatbot-sources-drawer__collapse", "aria-label": "Collapse sources", onClick: this.onCollapseClick }, h("slot", { key: '7ccaf79b7d19ecf3f6871787a75110304d1a5237', name: "collapse-icon" }, h(CaretRightIcon, { key: 'fde18a59c4e7a9436fe4b1044ae7272eb7ee4d5a' })))), h("div", { key: 'aa70054cb4da766d19f4c646a71bcb4e0d2b4195', part: "list", class: "bs-chatbot-sources-drawer__list" }, h("slot", { key: 'd2bef9a375eccda347f9e26942bb4f33a689933f', onSlotchange: this.onSlotchange }))));
|
|
61
61
|
}
|
|
62
62
|
static get is() { return "bs-chatbot-sources-drawer"; }
|
|
63
63
|
static get encapsulation() { return "shadow"; }
|
package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js
CHANGED
|
@@ -45,7 +45,7 @@ export class BsChatbotSuggestionButton {
|
|
|
45
45
|
this.bsSelect.emit();
|
|
46
46
|
};
|
|
47
47
|
render() {
|
|
48
|
-
return (h("button", { key: '
|
|
48
|
+
return (h("button", { key: 'fe0298f0e80e18da93468635ab1263a243700fe9', type: "button", part: "button", class: "bs-chatbot-suggestion-button", disabled: this.disabled, onClick: this.onClick }, h("slot", { key: '0fcc15a4165b0e2c7b990adbb061d2fb54378c82' })));
|
|
49
49
|
}
|
|
50
50
|
static get is() { return "bs-chatbot-suggestion-button"; }
|
|
51
51
|
static get encapsulation() { return "shadow"; }
|
|
@@ -33,7 +33,7 @@ export class BsCheckboxSkeleton {
|
|
|
33
33
|
* (unusual) default `bs-checkbox` itself uses. */
|
|
34
34
|
size = 'lg';
|
|
35
35
|
render() {
|
|
36
|
-
return (h("span", { key: '
|
|
36
|
+
return (h("span", { key: '50a436a6ede8ae40310191029037b3be08981fba', part: "container", class: "bs-checkbox-skeleton", role: "status", "aria-label": "Loading" }, h("span", { key: 'f76fc56bb1e6fea2bd6a4fc41c336930c2b23044', part: "box", class: `bs-checkbox-skeleton__box bs-checkbox-skeleton__box--${this.size}` }), h("span", { key: 'd80b2ac1c5b9eba7a8b150a0e344909a46b18c39', part: "label", class: "bs-checkbox-skeleton__label" })));
|
|
37
37
|
}
|
|
38
38
|
static get is() { return "bs-checkbox-skeleton"; }
|
|
39
39
|
static get encapsulation() { return "shadow"; }
|
|
@@ -92,7 +92,7 @@ export class BsCheckbox {
|
|
|
92
92
|
]
|
|
93
93
|
.filter(Boolean)
|
|
94
94
|
.join(' ');
|
|
95
|
-
return (h("label", { key: '
|
|
95
|
+
return (h("label", { key: '0c4ef7d5dc0c10a76382a25f503e50a9698f74b0', class: `bs-checkbox ${this.disabled ? 'bs-checkbox--disabled' : ''}` }, h("input", { key: '1bcbe7899e41e5c4bb1a09602eec0f852ae4a2e7', ref: el => (this.inputEl = el), class: "bs-checkbox__input", type: "checkbox", checked: this.checked, disabled: this.disabled, "aria-checked": this.indeterminate ? 'mixed' : String(this.checked), "aria-label": this.ariaLabel, onChange: this.onChange }), h("span", { key: 'e7f5d9b4374aa6c718a76353a6671878564d366e', part: "box", class: boxClasses }, showIcon && (h("svg", { key: 'c73163dcba81418174924221259b1ab37cb0a2e8', part: "icon", class: "bs-checkbox__icon", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true" }, this.indeterminate ? (h("path", { d: "M3 8H13", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round" })) : (h("path", { d: "M3 8.5L6.2 11.5L13 4.5", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }))))), h("span", { key: '3511affcb7f222032c726591a6f35c15cbcb3225', part: "label", class: "bs-checkbox__label" }, h("slot", { key: '1103d622b8d1295d9e82a63660cb6ab0939c6edf' }))));
|
|
96
96
|
}
|
|
97
97
|
static get is() { return "bs-checkbox"; }
|
|
98
98
|
static get encapsulation() { return "shadow"; }
|
|
@@ -13,20 +13,35 @@ describe('bs-chip-filter', () => {
|
|
|
13
13
|
expect(button).toEqualAttribute('aria-pressed', 'true');
|
|
14
14
|
expect(button).toHaveClass('bs-chip-filter--selected');
|
|
15
15
|
});
|
|
16
|
-
it('clicking
|
|
16
|
+
it('clicking emits bsChange with the requested new value, without mutating selected itself', async () => {
|
|
17
17
|
const { root, waitForChanges, spyOnEvent } = await render(h("bs-chip-filter", null, "Label"));
|
|
18
18
|
const bsChangeSpy = spyOnEvent('bsChange');
|
|
19
19
|
const button = root.shadowRoot.querySelector('button');
|
|
20
20
|
button.click();
|
|
21
21
|
await waitForChanges();
|
|
22
|
-
expect(root.selected).toBe(true);
|
|
23
22
|
expect(bsChangeSpy).toHaveReceivedEventTimes(1);
|
|
24
23
|
expect(bsChangeSpy).toHaveReceivedEventDetail(true);
|
|
24
|
+
// The chip is controlled: it never flips its own `selected` prop on click.
|
|
25
|
+
expect(root.selected).toBe(false);
|
|
26
|
+
});
|
|
27
|
+
it('is a controlled component: if the parent does not update selected in response to bsChange, the chip stays at its current prop value', async () => {
|
|
28
|
+
const { root, waitForChanges, spyOnEvent } = await render(h("bs-chip-filter", { selected: false }, "Label"));
|
|
29
|
+
const bsChangeSpy = spyOnEvent('bsChange');
|
|
30
|
+
const button = root.shadowRoot.querySelector('button');
|
|
25
31
|
button.click();
|
|
26
32
|
await waitForChanges();
|
|
33
|
+
// Event requests the change...
|
|
34
|
+
expect(bsChangeSpy).toHaveReceivedEventDetail(true);
|
|
35
|
+
// ...but since the "parent" never updated the selected prop (simulating a rejected change),
|
|
36
|
+
// the chip's rendered/visual state must still match the prop, not drift into its own truth.
|
|
27
37
|
expect(root.selected).toBe(false);
|
|
28
|
-
expect(
|
|
29
|
-
expect(
|
|
38
|
+
expect(button).toEqualAttribute('aria-pressed', 'false');
|
|
39
|
+
expect(button).not.toHaveClass('bs-chip-filter--selected');
|
|
40
|
+
// Only an explicit prop update (what a real controlled parent would do) changes the display.
|
|
41
|
+
root.selected = true;
|
|
42
|
+
await waitForChanges();
|
|
43
|
+
expect(button).toEqualAttribute('aria-pressed', 'true');
|
|
44
|
+
expect(button).toHaveClass('bs-chip-filter--selected');
|
|
30
45
|
});
|
|
31
46
|
describe('disabled', () => {
|
|
32
47
|
it('sets the disabled attribute on the native button', async () => {
|
|
@@ -40,7 +55,6 @@ describe('bs-chip-filter', () => {
|
|
|
40
55
|
const button = root.shadowRoot.querySelector('button');
|
|
41
56
|
button.click();
|
|
42
57
|
await waitForChanges();
|
|
43
|
-
expect(root.selected).toBe(false);
|
|
44
58
|
expect(bsChangeSpy).toHaveReceivedEventTimes(0);
|
|
45
59
|
});
|
|
46
60
|
});
|
|
@@ -24,8 +24,13 @@ export class BsChipFilter {
|
|
|
24
24
|
/** Sizing scale. Controls the chip's height only -- icon size, gap, and font size stay
|
|
25
25
|
* constant across sizes, matching the Figma spec exactly. */
|
|
26
26
|
size = 'lg';
|
|
27
|
-
/** Whether the chip reads as toggled on.
|
|
28
|
-
*
|
|
27
|
+
/** Whether the chip reads as toggled on. This is the single source of truth for the chip's
|
|
28
|
+
* visual state -- a controlled component, like a controlled `<input>`. Clicking the chip never
|
|
29
|
+
* mutates this prop itself; it only emits `bsChange` with the requested new value. If the
|
|
30
|
+
* consumer doesn't update `selected` in response (e.g. their own validation rejects the
|
|
31
|
+
* change), the chip's rendering stays exactly as `selected` says, rather than drifting into
|
|
32
|
+
* some internally-tracked truth. Reflected so consumers can target
|
|
33
|
+
* `bs-chip-filter[selected]` via CSS. */
|
|
29
34
|
selected = false;
|
|
30
35
|
/** Shows a trailing dropdown caret, signaling this chip opens a menu of further options.
|
|
31
36
|
* Purely a visual affordance -- wire up the actual menu (e.g. `bs-menu`) yourself. */
|
|
@@ -57,8 +62,7 @@ export class BsChipFilter {
|
|
|
57
62
|
this.hasIcon = ev.target.assignedNodes().length > 0;
|
|
58
63
|
};
|
|
59
64
|
onClick = () => {
|
|
60
|
-
this.
|
|
61
|
-
this.bsChange.emit(this.selected);
|
|
65
|
+
this.bsChange.emit(!this.selected);
|
|
62
66
|
};
|
|
63
67
|
render() {
|
|
64
68
|
// Matches the four Icon x Dropdown combinations verified against Figma (node 1905:9151):
|
|
@@ -66,7 +70,7 @@ export class BsChipFilter {
|
|
|
66
70
|
// label-only edge gets more -- except when NEITHER edge has a glyph, where both edges use a
|
|
67
71
|
// third, larger value rather than the label-only one (see bs-chip-filter.css's own comment).
|
|
68
72
|
const paddingVariant = this.hasIcon && this.dropdown ? 'icon-dropdown' : this.hasIcon ? 'icon-only' : this.dropdown ? 'dropdown-only' : 'text-only';
|
|
69
|
-
return (h("button", { key: '
|
|
73
|
+
return (h("button", { key: '4cc3cc573ec2a0f742a5ba5e76a8f5dee7eb0997', type: "button", class: `bs-chip-filter bs-chip-filter--${this.size} bs-chip-filter--${paddingVariant} ${this.selected ? 'bs-chip-filter--selected' : ''}`, disabled: this.disabled, "aria-pressed": String(this.selected), "aria-label": this.ariaLabel, onClick: this.onClick }, h("span", { key: '6767cb949257461abde1872ef35d5551fe86017b', part: "icon", class: `bs-chip-filter__icon ${this.hasIcon ? 'bs-chip-filter__icon--visible' : ''}` }, h("slot", { key: 'a106df348c1078bbd73c062d6217d3467327664a', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: 'bf1007a48f1bdfa2ddcf5df9eddee84b276f3494', part: "label", class: "bs-chip-filter__label" }, h("slot", { key: '1f23a2853946b770f76683dae314263cc4f3c5b2' })), this.dropdown && (h("span", { key: '483fb2cabd9dfc930fa44ee626a4532f5fec4cc3', part: "caret", class: "bs-chip-filter__caret", "aria-hidden": "true" }, h(ChevronDownIcon, { key: '8197912443813d3d3e7c705e303301a993bb2ce1' })))));
|
|
70
74
|
}
|
|
71
75
|
static get is() { return "bs-chip-filter"; }
|
|
72
76
|
static get encapsulation() { return "shadow"; }
|
|
@@ -111,7 +115,7 @@ export class BsChipFilter {
|
|
|
111
115
|
},
|
|
112
116
|
"selected": {
|
|
113
117
|
"type": "boolean",
|
|
114
|
-
"mutable":
|
|
118
|
+
"mutable": false,
|
|
115
119
|
"complexType": {
|
|
116
120
|
"original": "boolean",
|
|
117
121
|
"resolved": "boolean",
|
|
@@ -121,7 +125,7 @@ export class BsChipFilter {
|
|
|
121
125
|
"optional": false,
|
|
122
126
|
"docs": {
|
|
123
127
|
"tags": [],
|
|
124
|
-
"text": "Whether the chip reads as toggled on.
|
|
128
|
+
"text": "Whether the chip reads as toggled on. This is the single source of truth for the chip's\nvisual state -- a controlled component, like a controlled `<input>`. Clicking the chip never\nmutates this prop itself; it only emits `bsChange` with the requested new value. If the\nconsumer doesn't update `selected` in response (e.g. their own validation rejects the\nchange), the chip's rendering stays exactly as `selected` says, rather than drifting into\nsome internally-tracked truth. Reflected so consumers can target\n`bs-chip-filter[selected]` via CSS."
|
|
125
129
|
},
|
|
126
130
|
"getter": false,
|
|
127
131
|
"setter": false,
|
|
@@ -44,7 +44,7 @@ export class BsChipInformative {
|
|
|
44
44
|
};
|
|
45
45
|
render() {
|
|
46
46
|
const paddingVariant = this.hasIcon ? 'icon' : 'text';
|
|
47
|
-
return (h(Host, { key: '
|
|
47
|
+
return (h(Host, { key: '099676c8f874c17836d65797d10683fa1184043b', class: `bs-chip-informative bs-chip-informative--${this.color} bs-chip-informative--${this.size} bs-chip-informative--${paddingVariant}` }, h("span", { key: 'ff570bf489c3a8ea8350bc550e720bfcdc5d4bdf', part: "icon", class: `bs-chip-informative__icon ${this.hasIcon ? 'bs-chip-informative__icon--visible' : ''}` }, h("slot", { key: '170e80a2665111b2a6212088b58a7c2c1008110a', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: 'd87cd059d67b8d56d04bc7e9f39d3ab497e49f8a', part: "label", class: "bs-chip-informative__label" }, h("slot", { key: '983e6f32115957222a078f91683bc5f59aefe185' }))));
|
|
48
48
|
}
|
|
49
49
|
static get is() { return "bs-chip-informative"; }
|
|
50
50
|
static get encapsulation() { return "shadow"; }
|
|
@@ -77,7 +77,7 @@ export class BsChipInput {
|
|
|
77
77
|
};
|
|
78
78
|
render() {
|
|
79
79
|
const paddingVariant = this.hasIcon ? 'icon' : 'text';
|
|
80
|
-
return (h(Host, { key: '
|
|
80
|
+
return (h(Host, { key: '3e0b49c24f5f2c696c4b28fbdddf3abb5cbb54f4', class: `bs-chip-input bs-chip-input--${this.size} bs-chip-input--${paddingVariant}` }, h("button", { key: '3bb4e5e2cdea9cb828d2f3efe0a1f7e6e199ea13', type: "button", part: "body", class: "bs-chip-input__body", disabled: this.disabled, "aria-pressed": String(this.selected), onClick: this.onBodyClick }, h("span", { key: 'a8845467b470c0f0bb1f48a588f6b10c34c48aea', part: "icon", class: `bs-chip-input__icon ${this.hasIcon ? 'bs-chip-input__icon--visible' : ''}` }, h("slot", { key: '80f2daa48102e47dff6a1c37f36058f1a7825d0f', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: 'abc1a83bac760ac9cc993cfa46e08b67b543c7e0', part: "label", class: "bs-chip-input__label" }, h("slot", { key: 'cf2914c6ec7096fb4c6182f22457790b6b581da9', onSlotchange: this.onLabelSlotchange }))), h("button", { key: '2db0595805b4c1faf61f8c15c8bede6d5d59d6ae', type: "button", part: "remove", class: "bs-chip-input__remove", disabled: this.disabled, "aria-label": `Remove ${this.labelText}`, onClick: this.onRemoveClick }, h(CloseIcon, { key: '24df652ec4dd9ac7dcdc203d5fd1584e8dd5556c' }))));
|
|
81
81
|
}
|
|
82
82
|
static get is() { return "bs-chip-input"; }
|
|
83
83
|
static get encapsulation() { return "shadow"; }
|
|
@@ -65,6 +65,27 @@ describe('bs-composer', () => {
|
|
|
65
65
|
expect(spy).toHaveReceivedEventTimes(1);
|
|
66
66
|
expect(spy).toHaveReceivedEventDetail('a');
|
|
67
67
|
});
|
|
68
|
+
describe('value prop sync', () => {
|
|
69
|
+
it('keeps the value prop in sync with what was typed, not stuck at the initial value', async () => {
|
|
70
|
+
const { root } = await render(h("bs-composer", null));
|
|
71
|
+
const element = root;
|
|
72
|
+
const textarea = root.shadowRoot.querySelector('textarea');
|
|
73
|
+
textarea.value = 'hello';
|
|
74
|
+
textarea.dispatchEvent(new Event('input', { bubbles: true, composed: true }));
|
|
75
|
+
expect(element.value).toBe('hello');
|
|
76
|
+
});
|
|
77
|
+
it('clears the textarea when value is programmatically reset to "" after the user typed something', async () => {
|
|
78
|
+
const { root, setProps, waitForChanges } = await render(h("bs-composer", null));
|
|
79
|
+
const textarea = root.shadowRoot.querySelector('textarea');
|
|
80
|
+
textarea.value = 'hello';
|
|
81
|
+
textarea.dispatchEvent(new Event('input', { bubbles: true, composed: true }));
|
|
82
|
+
await waitForChanges();
|
|
83
|
+
expect(textarea.value).toBe('hello');
|
|
84
|
+
await setProps({ value: '' });
|
|
85
|
+
await waitForChanges();
|
|
86
|
+
expect(textarea.value).toBe('');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
68
89
|
describe('auto-grow', () => {
|
|
69
90
|
it('grows taller as multi-line content is typed', async () => {
|
|
70
91
|
const { root } = await render(h("bs-composer", null));
|
|
@@ -131,6 +152,22 @@ describe('bs-composer', () => {
|
|
|
131
152
|
root.shadowRoot.querySelector('[part="mic"]').click();
|
|
132
153
|
expect(spy).toHaveReceivedEventTimes(1);
|
|
133
154
|
});
|
|
155
|
+
it('emits bsSubmit when Enter alone is pressed in the text field', async () => {
|
|
156
|
+
const { root, spyOnEvent } = await render(h("bs-composer", { state: "idle" }));
|
|
157
|
+
const spy = spyOnEvent('bsSubmit');
|
|
158
|
+
const textarea = root.shadowRoot.querySelector('textarea');
|
|
159
|
+
textarea.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true, composed: true, cancelable: true }));
|
|
160
|
+
expect(spy).toHaveReceivedEventTimes(1);
|
|
161
|
+
});
|
|
162
|
+
it('does not emit bsSubmit and inserts a newline when Shift+Enter is pressed', async () => {
|
|
163
|
+
const { root, spyOnEvent } = await render(h("bs-composer", { state: "idle" }));
|
|
164
|
+
const spy = spyOnEvent('bsSubmit');
|
|
165
|
+
const textarea = root.shadowRoot.querySelector('textarea');
|
|
166
|
+
const ev = new KeyboardEvent('keydown', { key: 'Enter', shiftKey: true, bubbles: true, composed: true, cancelable: true });
|
|
167
|
+
textarea.dispatchEvent(ev);
|
|
168
|
+
expect(spy.length).toBe(0);
|
|
169
|
+
expect(ev.defaultPrevented).toBe(false);
|
|
170
|
+
});
|
|
134
171
|
});
|
|
135
172
|
describe('state="generating"', () => {
|
|
136
173
|
it('shows an enabled action button and emits bsStop (not bsSubmit) on click', async () => {
|
|
@@ -195,4 +232,11 @@ describe('bs-composer', () => {
|
|
|
195
232
|
const { root } = await render(h("bs-composer", { state: "idle" }));
|
|
196
233
|
expect(root.shadowRoot.querySelector('.bs-composer__waveform')).toBeNull();
|
|
197
234
|
});
|
|
235
|
+
it('reflects the state prop to a host attribute', async () => {
|
|
236
|
+
const { root, setProps, waitForChanges } = await render(h("bs-composer", { state: "idle" }));
|
|
237
|
+
expect(root).toEqualAttribute('state', 'idle');
|
|
238
|
+
await setProps({ state: 'recording' });
|
|
239
|
+
await waitForChanges();
|
|
240
|
+
expect(root).toEqualAttribute('state', 'recording');
|
|
241
|
+
});
|
|
198
242
|
});
|
|
@@ -77,12 +77,21 @@ export class BsComposer {
|
|
|
77
77
|
* The field is a `<textarea>` (not a single-line `<input>`) that grows with its content, up to
|
|
78
78
|
* `--bs-composer-input-max-lines` (10 by default) -- beyond that it scrolls internally instead
|
|
79
79
|
* of growing further. Setting `value` as a prop (not just typing) also re-triggers the resize,
|
|
80
|
-
* so e.g. programmatically clearing the field after submit correctly shrinks it back down.
|
|
80
|
+
* so e.g. programmatically clearing the field after submit correctly shrinks it back down.
|
|
81
|
+
*
|
|
82
|
+
* Mutable: kept in sync with the real `<textarea>`'s content on every keystroke (see `onInput`),
|
|
83
|
+
* not pushed one-way from the outside only. Without this, typing alone never updates this prop,
|
|
84
|
+
* so a consumer re-setting `value` to e.g. `''` after the user had typed something would be a
|
|
85
|
+
* no-op (same as the never-updated internal value) and silently fail to clear the field. */
|
|
81
86
|
value = '';
|
|
82
87
|
/**
|
|
83
88
|
* Which of the four mutually-exclusive composer states to render: `idle` (send, enabled),
|
|
84
89
|
* `generating` (stop, while the AI is responding), `disabled` (send, but not interactive), or
|
|
85
90
|
* `recording` (voice input in progress -- shows a waveform and a confirm action).
|
|
91
|
+
*
|
|
92
|
+
* Reflects to a `state` attribute on the host, so a consumer can target a specific state from
|
|
93
|
+
* outside via a CSS attribute selector (e.g. `bs-composer[state="recording"]`) or by querying
|
|
94
|
+
* for it in JS, the same way `bs-input`'s `open` prop reflects.
|
|
86
95
|
*/
|
|
87
96
|
state = 'idle';
|
|
88
97
|
/**
|
|
@@ -145,9 +154,23 @@ export class BsComposer {
|
|
|
145
154
|
};
|
|
146
155
|
onInput = (ev) => {
|
|
147
156
|
const value = ev.target.value;
|
|
157
|
+
// Keep the `value` prop in sync with what was actually typed -- see `value`'s doc comment for
|
|
158
|
+
// why this is required for an external `value` prop change (e.g. clearing after submit) to
|
|
159
|
+
// reliably take effect afterwards.
|
|
160
|
+
this.value = value;
|
|
148
161
|
this.resizeInput();
|
|
149
162
|
this.bsInput.emit(value);
|
|
150
163
|
};
|
|
164
|
+
/** Enter alone sends (re-using the exact same per-state action the primary button's own click
|
|
165
|
+
* handler performs), Shift+Enter inserts a normal newline -- standard chat-composer convention.
|
|
166
|
+
* No-ops while `disabled` (the native `disabled` attribute already blocks all input, but this
|
|
167
|
+
* guards the emit here too, for symmetry with the action button's own disabled check). */
|
|
168
|
+
onInputKeydown = (ev) => {
|
|
169
|
+
if (ev.key !== 'Enter' || ev.shiftKey || this.state === 'disabled')
|
|
170
|
+
return;
|
|
171
|
+
ev.preventDefault();
|
|
172
|
+
this.onActionClick();
|
|
173
|
+
};
|
|
151
174
|
onAttachClick = () => {
|
|
152
175
|
this.bsAttach.emit();
|
|
153
176
|
};
|
|
@@ -183,7 +206,7 @@ export class BsComposer {
|
|
|
183
206
|
const placeholder = this.placeholder ?? DEFAULT_PLACEHOLDERS[this.variant];
|
|
184
207
|
const disabled = this.state === 'disabled';
|
|
185
208
|
const recording = this.state === 'recording';
|
|
186
|
-
return (h("div", { key: '
|
|
209
|
+
return (h("div", { key: '80b15558a6c64dad187e5f83ff969f0ce738c959', class: `bs-composer bs-composer--${this.state} bs-composer--${this.variant}` }, h("div", { key: 'e29e99d27f37a1ed12d5a648615fe904aab3d850', part: "attachments", class: `bs-composer__attachments-row ${this.hasAttachments ? 'bs-composer__attachments-row--visible' : ''}` }, h("slot", { key: '3b83ae56fceeed1221beab79a739ee59cb35db71', name: "attachments", onSlotchange: this.onAttachmentsSlotchange })), h("div", { key: 'aa087015ad3a0ecec2f5fd7142633e12a00fc2cc', class: "bs-composer__text-row" }, h("textarea", { key: '695417d0ea46dd9016a27f967bb1ac4cff28531e', ref: el => (this.inputEl = el), part: "input", class: "bs-composer__input", rows: 1, value: this.value, placeholder: placeholder, disabled: disabled, "aria-label": this.ariaLabel, onInput: this.onInput, onKeyDown: this.onInputKeydown })), h("div", { key: '3087c098baef6f6a5886b23e2c6e54b71dce6923', class: "bs-composer__controls-row" }, h("button", { key: '75c132d161e468a999c72a96c88356473e760650', type: "button", part: "attach", class: "bs-composer__attach", "aria-label": "Attach", onClick: this.onAttachClick }, h(PlusIcon, { key: 'c7ff05366636234093b94a3e6f8980772444c546' })), recording ? (h("span", { class: "bs-composer__waveform", "aria-hidden": "true" }, WAVEFORM_BAR_HEIGHTS.map(height => (h("span", { class: "bs-composer__waveform-bar", style: { '--bs-composer-bar-height': `${height}px` } }))))) : (h("span", { class: "bs-composer__spacer" })), h("button", { key: '5aadfaad74e8fa0c612be85a79a8ecaff851f06b', type: "button", part: "mic", class: `bs-composer__mic ${recording ? 'bs-composer__mic--recording' : ''}`, "aria-label": recording ? 'Stop recording' : 'Start voice input', disabled: disabled, onClick: this.onMicClick }, recording ? h(StopIcon, null) : h(MicIcon, null)), h("button", { key: '1c7922626005c71fdef12adb12d7413c983df7d7', type: "button", part: "action", class: `bs-composer__action bs-composer__action--${this.state}`, "aria-label": this.actionLabel(), disabled: disabled, onClick: this.onActionClick }, this.renderActionIcon()), h("slot", { key: 'd38d63ecf9dd3c7ce7df06cec854ff5ae92b1077', name: "actions-end" }))));
|
|
187
210
|
}
|
|
188
211
|
static get is() { return "bs-composer"; }
|
|
189
212
|
static get encapsulation() { return "shadow"; }
|
|
@@ -247,7 +270,7 @@ export class BsComposer {
|
|
|
247
270
|
},
|
|
248
271
|
"value": {
|
|
249
272
|
"type": "string",
|
|
250
|
-
"mutable":
|
|
273
|
+
"mutable": true,
|
|
251
274
|
"complexType": {
|
|
252
275
|
"original": "string",
|
|
253
276
|
"resolved": "string",
|
|
@@ -257,7 +280,7 @@ export class BsComposer {
|
|
|
257
280
|
"optional": false,
|
|
258
281
|
"docs": {
|
|
259
282
|
"tags": [],
|
|
260
|
-
"text": "Current text value. Native `input` events don't cross the Shadow DOM boundary, so this\ncomponent re-dispatches them as a `bsInput` custom event instead.\n\nThe field is a `<textarea>` (not a single-line `<input>`) that grows with its content, up to\n`--bs-composer-input-max-lines` (10 by default) -- beyond that it scrolls internally instead\nof growing further. Setting `value` as a prop (not just typing) also re-triggers the resize,\nso e.g. programmatically clearing the field after submit correctly shrinks it back down."
|
|
283
|
+
"text": "Current text value. Native `input` events don't cross the Shadow DOM boundary, so this\ncomponent re-dispatches them as a `bsInput` custom event instead.\n\nThe field is a `<textarea>` (not a single-line `<input>`) that grows with its content, up to\n`--bs-composer-input-max-lines` (10 by default) -- beyond that it scrolls internally instead\nof growing further. Setting `value` as a prop (not just typing) also re-triggers the resize,\nso e.g. programmatically clearing the field after submit correctly shrinks it back down.\n\nMutable: kept in sync with the real `<textarea>`'s content on every keystroke (see `onInput`),\nnot pushed one-way from the outside only. Without this, typing alone never updates this prop,\nso a consumer re-setting `value` to e.g. `''` after the user had typed something would be a\nno-op (same as the never-updated internal value) and silently fail to clear the field."
|
|
261
284
|
},
|
|
262
285
|
"getter": false,
|
|
263
286
|
"setter": false,
|
|
@@ -283,11 +306,11 @@ export class BsComposer {
|
|
|
283
306
|
"optional": false,
|
|
284
307
|
"docs": {
|
|
285
308
|
"tags": [],
|
|
286
|
-
"text": "Which of the four mutually-exclusive composer states to render: `idle` (send, enabled),\n`generating` (stop, while the AI is responding), `disabled` (send, but not interactive), or\n`recording` (voice input in progress -- shows a waveform and a confirm action)."
|
|
309
|
+
"text": "Which of the four mutually-exclusive composer states to render: `idle` (send, enabled),\n`generating` (stop, while the AI is responding), `disabled` (send, but not interactive), or\n`recording` (voice input in progress -- shows a waveform and a confirm action).\n\nReflects to a `state` attribute on the host, so a consumer can target a specific state from\noutside via a CSS attribute selector (e.g. `bs-composer[state=\"recording\"]`) or by querying\nfor it in JS, the same way `bs-input`'s `open` prop reflects."
|
|
287
310
|
},
|
|
288
311
|
"getter": false,
|
|
289
312
|
"setter": false,
|
|
290
|
-
"reflect":
|
|
313
|
+
"reflect": true,
|
|
291
314
|
"attribute": "state",
|
|
292
315
|
"defaultValue": "'idle'"
|
|
293
316
|
},
|
|
@@ -106,7 +106,7 @@ export class BsComposerStatusBanner {
|
|
|
106
106
|
return this.type === 'error' || this.type === 'warning' ? h(WarningIcon, null) : h(ClockIcon, null);
|
|
107
107
|
}
|
|
108
108
|
render() {
|
|
109
|
-
return (h("div", { key: '
|
|
109
|
+
return (h("div", { key: '237f3ec194ddb9057b1b0773e4a8062a9e58f457', role: this.roleForType(), class: `bs-composer-status-banner bs-composer-status-banner--${this.type}` }, h("div", { key: '6a1fadb9f08f2ce383216a750743321383528649', class: "bs-composer-status-banner__message-group" }, this.showIcon && (h("span", { key: '54dc45c13ab939249e66754389323d857d191bb5', part: "icon", class: "bs-composer-status-banner__icon" }, h("slot", { key: '023ee815d57914a9f46b39b5253229e3a89c1f2d', name: "icon" }, this.renderDefaultIcon()))), h("p", { key: '3bf23bc657922338767dcc63da4236469ff2c3f0', part: "message", class: "bs-composer-status-banner__message" }, this.message)), this.showButton && (h("button", { key: 'efb2fcc8eb96388b395275c39021fa718f08ae2b', type: "button", part: "action", class: "bs-composer-status-banner__action", onClick: this.onActionClick }, this.actionLabel)), this.allowClose && (h("button", { key: 'f97e8fba154e5bcc7e9778b2f31f136ca81a7d94', type: "button", part: "close", class: "bs-composer-status-banner__close", "aria-label": "Dismiss", onClick: this.onCloseClick }, h(CloseIcon, { key: 'eb56b6b6a2fddac3e13eac6db129f0da3572e8ec' })))));
|
|
110
110
|
}
|
|
111
111
|
static get is() { return "bs-composer-status-banner"; }
|
|
112
112
|
static get encapsulation() { return "shadow"; }
|