@brandsync/wc 0.0.5 → 0.0.6

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.
Files changed (36) hide show
  1. package/custom-elements.json +74 -0
  2. package/dist/brandsync-wc/brandsync-wc.esm.js +1 -1
  3. package/dist/brandsync-wc/{p-0ded3be8.entry.js → p-4a0da8e9.entry.js} +1 -1
  4. package/dist/brandsync-wc/{p-300eea85.entry.js → p-4d999a8d.entry.js} +1 -1
  5. package/dist/brandsync-wc/{p-cdbad27a.entry.js → p-518b02bf.entry.js} +1 -1
  6. package/dist/brandsync-wc/p-6648d251.entry.js +1 -0
  7. package/dist/cjs/brandsync-wc.cjs.js +1 -1
  8. package/dist/cjs/bs-chatbot-suggestion-button.cjs.entry.js +25 -0
  9. package/dist/cjs/bs-input.cjs.entry.js +2 -2
  10. package/dist/cjs/bs-menu-item.cjs.entry.js +1 -1
  11. package/dist/cjs/bs-menu.cjs.entry.js +1 -1
  12. package/dist/cjs/loader.cjs.js +1 -1
  13. package/dist/collection/collection-manifest.json +1 -0
  14. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.cmp.test.js +24 -0
  15. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.css +57 -0
  16. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js +104 -0
  17. package/dist/collection/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.stories.js +30 -0
  18. package/dist/collection/components/bs-input/bs-input.js +2 -2
  19. package/dist/collection/components/bs-menu/bs-menu.js +1 -1
  20. package/dist/collection/components/bs-menu-item/bs-menu-item.js +1 -1
  21. package/dist/components/bs-chatbot-suggestion-button.d.ts +11 -0
  22. package/dist/components/bs-chatbot-suggestion-button.js +1 -0
  23. package/dist/components/bs-input.js +1 -1
  24. package/dist/components/bs-menu-item.js +1 -1
  25. package/dist/components/bs-menu.js +1 -1
  26. package/dist/esm/brandsync-wc.js +1 -1
  27. package/dist/esm/bs-chatbot-suggestion-button.entry.js +23 -0
  28. package/dist/esm/bs-input.entry.js +2 -2
  29. package/dist/esm/bs-menu-item.entry.js +1 -1
  30. package/dist/esm/bs-menu.entry.js +1 -1
  31. package/dist/esm/loader.js +1 -1
  32. package/dist/types/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.cmp.test.d.ts +1 -0
  33. package/dist/types/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.d.ts +46 -0
  34. package/dist/types/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.stories.d.ts +10 -0
  35. package/dist/types/components.d.ts +169 -0
  36. package/package.json +2 -1
@@ -737,6 +737,80 @@
737
737
  }
738
738
  ]
739
739
  },
740
+ {
741
+ "kind": "javascript-module",
742
+ "path": "src/components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.tsx",
743
+ "declarations": [
744
+ {
745
+ "kind": "class",
746
+ "customElement": true,
747
+ "tagName": "bs-chatbot-suggestion-button",
748
+ "name": "BsChatbotSuggestionButton",
749
+ "description": "A pill-shaped clickable suggestion chip for a Genie AI chat panel (e.g. \"How can I help you?\").\n\nOne instance renders one chip -- to show several suggestion prompts side by side, render\nmultiple `bs-chatbot-suggestion-button` elements inside a plain flex-wrap container; this\nlibrary doesn't ship a separate list/group component for that since a `<div>` with\n`flex-wrap: wrap` is sufficient.\n\n## When to use\n- Quick-reply/starter prompts shown above or alongside `bs-composer` in a Genie AI chat panel.\n\n## When not to use\n- As a general-purpose button -- use `bs-button` instead, this component's pill shape and\n tonal color treatment are specific to Genie chat suggestion prompts.",
750
+ "attributes": [
751
+ {
752
+ "name": "disabled",
753
+ "description": "Disables the button and applies a reduced-opacity treatment.",
754
+ "type": {
755
+ "text": "boolean"
756
+ },
757
+ "default": "false",
758
+ "fieldName": "disabled"
759
+ }
760
+ ],
761
+ "members": [
762
+ {
763
+ "kind": "field",
764
+ "name": "disabled",
765
+ "description": "Disables the button and applies a reduced-opacity treatment.",
766
+ "type": {
767
+ "text": "boolean"
768
+ },
769
+ "default": "false",
770
+ "readonly": true,
771
+ "attribute": "disabled"
772
+ }
773
+ ],
774
+ "events": [
775
+ {
776
+ "name": "bsSelect",
777
+ "description": "Fires when the button is clicked.",
778
+ "type": {
779
+ "text": "CustomEvent<void>"
780
+ }
781
+ }
782
+ ],
783
+ "slots": [
784
+ {
785
+ "name": "",
786
+ "description": "Default slot: the suggestion's label text."
787
+ }
788
+ ],
789
+ "cssParts": [
790
+ {
791
+ "name": "button",
792
+ "description": "The button element."
793
+ }
794
+ ]
795
+ }
796
+ ],
797
+ "exports": [
798
+ {
799
+ "kind": "js",
800
+ "name": "BsChatbotSuggestionButton",
801
+ "declaration": {
802
+ "name": "BsChatbotSuggestionButton"
803
+ }
804
+ },
805
+ {
806
+ "kind": "custom-element-definition",
807
+ "name": "bs-chatbot-suggestion-button",
808
+ "declaration": {
809
+ "name": "BsChatbotSuggestionButton"
810
+ }
811
+ }
812
+ ]
813
+ },
740
814
  {
741
815
  "kind": "javascript-module",
742
816
  "path": "src/components/bs-composer/bs-composer.tsx",
@@ -1 +1 @@
1
- import{p as e,g as a,b as o}from"./p-nLORuTUY.js";export{s as setNonce}from"./p-nLORuTUY.js";(()=>{const a=import.meta.url,s={};return""!==a&&(s.resourcesUrl=new URL(".",a).href),e(s)})().then((async e=>(await a(),o([["p-ab5cc7af",[[769,"bs-badge",{variant:[1]}]]],["p-2742ecef",[[785,"bs-button",{variant:[1],size:[1],disabled:[4],type:[1],ariaLabel:[1,"aria-label"],hasIcon:[32],hasEndIcon:[32],hasLabel:[32]}]]],["p-27288299",[[513,"bs-button-skeleton",{size:[1]}]]],["p-cfc3421b",[[769,"bs-card",{surface:[1]}]]],["p-b24c455f",[[769,"bs-chatbot-header",{heading:[1],expanded:[1540]}]]],["p-1dc6d7f5",[[769,"bs-chatbot-response-action",{sourcesCount:[2,"sources-count"],menuOpen:[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["p-6c1fa4da",[[785,"bs-composer",{variant:[1],placeholder:[1],value:[1],state:[1],ariaLabel:[1,"aria-label"]}]]],["p-9e5d2211",[[513,"bs-data-table",{columns:[16],rows:[16],sortColumn:[1,"sort-column"],sortDirection:[1,"sort-direction"],selectable:[4],cellRenderer:[16],selectedIds:[32]}]]],["p-0ded3be8",[[529,"bs-input",{value:[1],type:[1],label:[1],placeholder:[1],description:[1],error:[1],disabled:[4]}]]],["p-300eea85",[[257,"bs-menu"]]],["p-cdbad27a",[[769,"bs-menu-item",{hasIcon:[32]}]]],["p-880ea3f8",[[769,"bs-modal",{open:[1540],heading:[1],size:[1],hasFooter:[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]]],e))));
1
+ import{p as e,g as a,b as o}from"./p-nLORuTUY.js";export{s as setNonce}from"./p-nLORuTUY.js";(()=>{const a=import.meta.url,s={};return""!==a&&(s.resourcesUrl=new URL(".",a).href),e(s)})().then((async e=>(await a(),o([["p-ab5cc7af",[[769,"bs-badge",{variant:[1]}]]],["p-2742ecef",[[785,"bs-button",{variant:[1],size:[1],disabled:[4],type:[1],ariaLabel:[1,"aria-label"],hasIcon:[32],hasEndIcon:[32],hasLabel:[32]}]]],["p-27288299",[[513,"bs-button-skeleton",{size:[1]}]]],["p-cfc3421b",[[769,"bs-card",{surface:[1]}]]],["p-b24c455f",[[769,"bs-chatbot-header",{heading:[1],expanded:[1540]}]]],["p-1dc6d7f5",[[769,"bs-chatbot-response-action",{sourcesCount:[2,"sources-count"],menuOpen:[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["p-6648d251",[[769,"bs-chatbot-suggestion-button",{disabled:[4]}]]],["p-6c1fa4da",[[785,"bs-composer",{variant:[1],placeholder:[1],value:[1],state:[1],ariaLabel:[1,"aria-label"]}]]],["p-9e5d2211",[[513,"bs-data-table",{columns:[16],rows:[16],sortColumn:[1,"sort-column"],sortDirection:[1,"sort-direction"],selectable:[4],cellRenderer:[16],selectedIds:[32]}]]],["p-4a0da8e9",[[529,"bs-input",{value:[1],type:[1],label:[1],placeholder:[1],description:[1],error:[1],disabled:[4]}]]],["p-4d999a8d",[[257,"bs-menu"]]],["p-518b02bf",[[769,"bs-menu-item",{hasIcon:[32]}]]],["p-880ea3f8",[[769,"bs-modal",{open:[1540],heading:[1],size:[1],hasFooter:[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]]],e))));
@@ -1 +1 @@
1
- import{r,c as s,h as t}from"./p-nLORuTUY.js";const i=class{constructor(t){r(this,t),this.bsInput=s(this,"bsInput"),this.bsChange=s(this,"bsChange")}value="";type="text";label;placeholder;description;error;disabled=!1;bsInput;bsChange;onInput=r=>{this.bsInput.emit(r.target.value)};onChange=r=>{this.bsChange.emit(r.target.value)};render(){return t("div",{key:"df12d3d7af1bdc0e0e536e6c635ee406e4043b4f",class:"bs-input "+(this.error?"bs-input--error":"")},this.label&&t("label",{key:"2e4f867d17ab691a1df1b0b5b2964c0e1e986a91",part:"label",class:"bs-input__label",htmlFor:"control"},this.label),t("input",{key:"a078574a5ffad9eafea791cf5866ac123c4d5f56",id:"control",part:"control",class:"bs-input__control",type:this.type,value:this.value,placeholder:this.placeholder,disabled:this.disabled,"aria-describedby":this.error||this.description?"description-or-error":void 0,"aria-invalid":this.error?"true":void 0,onInput:this.onInput,onChange:this.onChange}),this.error?t("span",{id:"description-or-error",part:"error",class:"bs-input__error"},this.error):this.description?t("span",{id:"description-or-error",part:"description",class:"bs-input__description"},this.description):null)}static get delegatesFocus(){return!0}};i.style=":host{display:block}.bs-input{display:flex;flex-direction:column;gap:var(--bs-spacing-100);font-family:inherit}.bs-input__label{font-size:var(--bs-font-size-sm);font-weight:var(--bs-font-weight-medium);color:var(--bs-input-label)}.bs-input__control{height:var(--bs-spacing-600);padding:0 var(--bs-spacing-300);border:1px solid var(--bs-input-border-default);border-radius:var(--bs-border-radius-100);background:var(--bs-input-bg-default);color:var(--bs-input-text);font-size:var(--bs-font-size-md);font-family:inherit}.bs-input__control::placeholder{color:var(--bs-input-placeholder)}.bs-input__control:hover:not(:disabled){border-color:var(--bs-input-border-hover)}.bs-input__control:focus-visible{outline:none;border-color:var(--bs-input-border-focus)}.bs-input__control:disabled{background:var(--bs-input-bg-disabled);color:var(--bs-input-text-disabled);cursor:not-allowed}.bs-input--error .bs-input__control{border-color:var(--bs-input-border-error)}.bs-input--error .bs-input__label{color:var(--bs-input-label)}.bs-input__description{font-size:var(--bs-font-size-xs);color:var(--bs-input-description)}.bs-input__error{font-size:var(--bs-font-size-xs);color:var(--bs-input-error)}";export{i as bs_input}
1
+ import{r,c as s,h as t}from"./p-nLORuTUY.js";const i=class{constructor(t){r(this,t),this.bsInput=s(this,"bsInput"),this.bsChange=s(this,"bsChange")}value="";type="text";label;placeholder;description;error;disabled=!1;bsInput;bsChange;onInput=r=>{this.bsInput.emit(r.target.value)};onChange=r=>{this.bsChange.emit(r.target.value)};render(){return t("div",{key:"571583a0d1181a2e307ba86679003c6cc37e4e63",class:"bs-input "+(this.error?"bs-input--error":"")},this.label&&t("label",{key:"0a6c34ad8de3227e1264af649c1ac227e64c67bd",part:"label",class:"bs-input__label",htmlFor:"control"},this.label),t("input",{key:"de46e2c3272735160ca1773abf6fd270d042cfdd",id:"control",part:"control",class:"bs-input__control",type:this.type,value:this.value,placeholder:this.placeholder,disabled:this.disabled,"aria-describedby":this.error||this.description?"description-or-error":void 0,"aria-invalid":this.error?"true":void 0,onInput:this.onInput,onChange:this.onChange}),this.error?t("span",{id:"description-or-error",part:"error",class:"bs-input__error"},this.error):this.description?t("span",{id:"description-or-error",part:"description",class:"bs-input__description"},this.description):null)}static get delegatesFocus(){return!0}};i.style=":host{display:block}.bs-input{display:flex;flex-direction:column;gap:var(--bs-spacing-100);font-family:inherit}.bs-input__label{font-size:var(--bs-font-size-sm);font-weight:var(--bs-font-weight-medium);color:var(--bs-input-label)}.bs-input__control{height:var(--bs-spacing-600);padding:0 var(--bs-spacing-300);border:1px solid var(--bs-input-border-default);border-radius:var(--bs-border-radius-100);background:var(--bs-input-bg-default);color:var(--bs-input-text);font-size:var(--bs-font-size-md);font-family:inherit}.bs-input__control::placeholder{color:var(--bs-input-placeholder)}.bs-input__control:hover:not(:disabled){border-color:var(--bs-input-border-hover)}.bs-input__control:focus-visible{outline:none;border-color:var(--bs-input-border-focus)}.bs-input__control:disabled{background:var(--bs-input-bg-disabled);color:var(--bs-input-text-disabled);cursor:not-allowed}.bs-input--error .bs-input__control{border-color:var(--bs-input-border-error)}.bs-input--error .bs-input__label{color:var(--bs-input-label)}.bs-input__description{font-size:var(--bs-font-size-xs);color:var(--bs-input-description)}.bs-input__error{font-size:var(--bs-font-size-xs);color:var(--bs-input-error)}";export{i as bs_input}
@@ -1 +1 @@
1
- import{r as s,h as a}from"./p-nLORuTUY.js";const e=class{constructor(a){s(this,a)}render(){return a("div",{key:"d4eee73bfffd1fcfd8f057e394a53fea4688748b",part:"list",class:"bs-menu",role:"menu"},a("slot",{key:"866189bfabc2798ce37b8f0f6141143d4c49081e"}))}};e.style=":host{display:block;--bs-menu-bg:var(--bs-surface-raised);--bs-menu-radius:var(--bs-border-radius-100);--bs-menu-padding-y:var(--bs-spacing-50);--bs-menu-gap:var(--bs-spacing-50);--bs-menu-shadow:var(--bs-shadow-sm)}.bs-menu{box-sizing:border-box;display:flex;flex-direction:column;gap:var(--bs-menu-gap);background:var(--bs-menu-bg);border-radius:var(--bs-menu-radius);padding:var(--bs-menu-padding-y) 0;box-shadow:var(--bs-menu-shadow);font-family:inherit}";export{e as bs_menu}
1
+ import{r as s,h as a}from"./p-nLORuTUY.js";const e=class{constructor(a){s(this,a)}render(){return a("div",{key:"e5008951228aa528404f810fe9ce90a5ee7298b1",part:"list",class:"bs-menu",role:"menu"},a("slot",{key:"d2e590cf51f626bd22dce58535fbea81291f9068"}))}};e.style=":host{display:block;--bs-menu-bg:var(--bs-surface-raised);--bs-menu-radius:var(--bs-border-radius-100);--bs-menu-padding-y:var(--bs-spacing-50);--bs-menu-gap:var(--bs-spacing-50);--bs-menu-shadow:var(--bs-shadow-sm)}.bs-menu{box-sizing:border-box;display:flex;flex-direction:column;gap:var(--bs-menu-gap);background:var(--bs-menu-bg);border-radius:var(--bs-menu-radius);padding:var(--bs-menu-padding-y) 0;box-shadow:var(--bs-menu-shadow);font-family:inherit}";export{e as bs_menu}
@@ -1 +1 @@
1
- import{r as e,c as n,h as s}from"./p-nLORuTUY.js";const i=class{constructor(s){e(this,s),this.bsSelect=n(this,"bsSelect")}hasIcon=!1;bsSelect;onIconSlotchange=e=>{this.hasIcon=e.target.assignedNodes().length>0};onClick=()=>{this.bsSelect.emit()};render(){return s("button",{key:"4d0e94afadd487e2ec44c0c6b416c27eb8f1a5f4",type:"button",part:"item",role:"menuitem",class:"bs-menu-item",onClick:this.onClick},s("span",{key:"a436154aaddddadc3944049597a87a2b52eb61cb",part:"icon",class:"bs-menu-item__icon "+(this.hasIcon?"bs-menu-item__icon--has-content":"")},s("slot",{key:"50ad9c1b78bc8ea55219ad7692d7ef7fa7e48189",name:"icon",onSlotchange:this.onIconSlotchange})),s("span",{key:"b3d1ee83556f10de5ad08d6f212ebfd9531dd54e",part:"label",class:"bs-menu-item__label"},s("slot",{key:"5fe02e9b2407c4fd9eaf699caec9ecc9c0e25575"})))}};i.style=":host{display:block;--bs-menu-item-radius:var(--bs-border-radius-100);--bs-menu-item-padding-y:var(--bs-spacing-100);--bs-menu-item-padding-x:var(--bs-spacing-150);--bs-menu-item-gap:var(--bs-spacing-100);--bs-menu-item-hover:var(--bs-color-neutral-container);--bs-menu-item-pressed:var(--bs-color-neutral-container-pressed);--bs-menu-item-icon-color:var(--bs-icon-default);--bs-menu-item-color:var(--bs-text-muted);--bs-menu-item-font-size:var(--bs-font-size-md);--bs-menu-item-line-height:var(--bs-line-height-body-md)}.bs-menu-item{box-sizing:border-box;display:flex;align-items:center;width:100%;height:48px;border:none;cursor:pointer;background:transparent;color:var(--bs-menu-item-color);font-family:inherit;border-radius:var(--bs-menu-item-radius);padding:var(--bs-menu-item-padding-y) var(--bs-menu-item-padding-x);gap:var(--bs-menu-item-gap);transition:background-color var(--bs-duration-fast) var(--bs-easing-standard)}.bs-menu-item:focus-visible{outline:2px solid var(--bs-border-neutral-focus);outline-offset:2px}.bs-menu-item:hover{background:var(--bs-menu-item-hover)}.bs-menu-item:active{background:var(--bs-menu-item-pressed)}.bs-menu-item__icon{display:none;width:24px;height:24px;flex-shrink:0;color:var(--bs-menu-item-icon-color)}.bs-menu-item__icon--has-content{display:inline-flex;align-items:center;justify-content:center}.bs-menu-item__icon ::slotted(svg){width:24px;height:24px}.bs-menu-item__label{font-size:var(--bs-menu-item-font-size);line-height:calc(var(--bs-menu-item-line-height) * 1px);white-space:nowrap}";export{i as bs_menu_item}
1
+ import{r as e,c as n,h as s}from"./p-nLORuTUY.js";const i=class{constructor(s){e(this,s),this.bsSelect=n(this,"bsSelect")}hasIcon=!1;bsSelect;onIconSlotchange=e=>{this.hasIcon=e.target.assignedNodes().length>0};onClick=()=>{this.bsSelect.emit()};render(){return s("button",{key:"0fbb5f8802a2866794682b90a850d5455c86d69e",type:"button",part:"item",role:"menuitem",class:"bs-menu-item",onClick:this.onClick},s("span",{key:"810cd5b7bebf0f0f411a956fa13357b4bc3b18ae",part:"icon",class:"bs-menu-item__icon "+(this.hasIcon?"bs-menu-item__icon--has-content":"")},s("slot",{key:"683105e1dd44932ac0b569d57eccc3fb54dc1497",name:"icon",onSlotchange:this.onIconSlotchange})),s("span",{key:"2d0edd4325f535020b04bcea93db47ef60d33127",part:"label",class:"bs-menu-item__label"},s("slot",{key:"b7ca912d7ec3b5ac3a78f09eb03b8d6b0f96cc2e"})))}};i.style=":host{display:block;--bs-menu-item-radius:var(--bs-border-radius-100);--bs-menu-item-padding-y:var(--bs-spacing-100);--bs-menu-item-padding-x:var(--bs-spacing-150);--bs-menu-item-gap:var(--bs-spacing-100);--bs-menu-item-hover:var(--bs-color-neutral-container);--bs-menu-item-pressed:var(--bs-color-neutral-container-pressed);--bs-menu-item-icon-color:var(--bs-icon-default);--bs-menu-item-color:var(--bs-text-muted);--bs-menu-item-font-size:var(--bs-font-size-md);--bs-menu-item-line-height:var(--bs-line-height-body-md)}.bs-menu-item{box-sizing:border-box;display:flex;align-items:center;width:100%;height:48px;border:none;cursor:pointer;background:transparent;color:var(--bs-menu-item-color);font-family:inherit;border-radius:var(--bs-menu-item-radius);padding:var(--bs-menu-item-padding-y) var(--bs-menu-item-padding-x);gap:var(--bs-menu-item-gap);transition:background-color var(--bs-duration-fast) var(--bs-easing-standard)}.bs-menu-item:focus-visible{outline:2px solid var(--bs-border-neutral-focus);outline-offset:2px}.bs-menu-item:hover{background:var(--bs-menu-item-hover)}.bs-menu-item:active{background:var(--bs-menu-item-pressed)}.bs-menu-item__icon{display:none;width:24px;height:24px;flex-shrink:0;color:var(--bs-menu-item-icon-color)}.bs-menu-item__icon--has-content{display:inline-flex;align-items:center;justify-content:center}.bs-menu-item__icon ::slotted(svg){width:24px;height:24px}.bs-menu-item__label{font-size:var(--bs-menu-item-font-size);line-height:calc(var(--bs-menu-item-line-height) * 1px);white-space:nowrap}";export{i as bs_menu_item}
@@ -0,0 +1 @@
1
+ import{r as t,c as o,h as s}from"./p-nLORuTUY.js";const b=class{constructor(s){t(this,s),this.bsSelect=o(this,"bsSelect")}disabled=!1;bsSelect;onClick=()=>{this.bsSelect.emit()};render(){return s("button",{key:"e19ad1fd5e95f84f6bff54cbc326e78f70ef3677",type:"button",part:"button",class:"bs-chatbot-suggestion-button",disabled:this.disabled,onClick:this.onClick},s("slot",{key:"4048fb336d69f0ca78e50ea9d5cba52921906966"}))}};b.style=":host{display:inline-block;--bs-chatbot-suggestion-button-radius:var(--bs-border-radius-full);--bs-chatbot-suggestion-button-border-color:var(--bs-border-primary);--bs-chatbot-suggestion-button-bg-default:var(--bs-color-primary-container);--bs-chatbot-suggestion-button-bg-hover:var(--bs-color-primary-container-hover);--bs-chatbot-suggestion-button-bg-pressed:var(--bs-brand-200);--bs-chatbot-suggestion-button-bg-focus:var(--bs-color-primary-container-hover);--bs-chatbot-suggestion-button-text-default:var(--bs-text-action);--bs-chatbot-suggestion-button-text-hover:var(--bs-text-action-hover);--bs-chatbot-suggestion-button-focus-ring-color:var(--bs-border-primary-focus)}.bs-chatbot-suggestion-button{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;height:40px;min-width:80px;padding:var(--bs-spacing-100) var(--bs-spacing-200);border:var(--bs-border-width-thin) solid var(--bs-chatbot-suggestion-button-border-color);border-radius:var(--bs-chatbot-suggestion-button-radius);background:var(--bs-chatbot-suggestion-button-bg-default);color:var(--bs-chatbot-suggestion-button-text-default);font-family:inherit;font-size:var(--bs-font-size-md);line-height:calc(var(--bs-line-height-body-md) * 1px);text-align:center;cursor:pointer;transition:background-color var(--bs-duration-fast) var(--bs-easing-standard)}.bs-chatbot-suggestion-button:hover:not(:disabled){background:var(--bs-chatbot-suggestion-button-bg-hover);color:var(--bs-chatbot-suggestion-button-text-hover)}.bs-chatbot-suggestion-button:active:not(:disabled){background:var(--bs-chatbot-suggestion-button-bg-pressed);color:var(--bs-chatbot-suggestion-button-text-hover)}.bs-chatbot-suggestion-button:focus-visible{background:var(--bs-chatbot-suggestion-button-bg-focus);color:var(--bs-chatbot-suggestion-button-text-hover);outline:var(--bs-border-width-medium) solid var(--bs-chatbot-suggestion-button-focus-ring-color);outline-offset:3px}.bs-chatbot-suggestion-button:disabled{opacity:var(--bs-opacity-disabled);cursor:not-allowed}";export{b as bs_chatbot_suggestion_button}
@@ -18,7 +18,7 @@ var patchBrowser = () => {
18
18
 
19
19
  patchBrowser().then(async (options) => {
20
20
  await index.globalScripts();
21
- return index.bootstrapLazy([["bs-badge.cjs",[[769,"bs-badge",{"variant":[1]}]]],["bs-button.cjs",[[785,"bs-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasEndIcon":[32],"hasLabel":[32]}]]],["bs-button-skeleton.cjs",[[513,"bs-button-skeleton",{"size":[1]}]]],["bs-card.cjs",[[769,"bs-card",{"surface":[1]}]]],["bs-chatbot-header.cjs",[[769,"bs-chatbot-header",{"heading":[1],"expanded":[1540]}]]],["bs-chatbot-response-action.cjs",[[769,"bs-chatbot-response-action",{"sourcesCount":[2,"sources-count"],"menuOpen":[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["bs-composer.cjs",[[785,"bs-composer",{"variant":[1],"placeholder":[1],"value":[1],"state":[1],"ariaLabel":[1,"aria-label"]}]]],["bs-data-table.cjs",[[513,"bs-data-table",{"columns":[16],"rows":[16],"sortColumn":[1,"sort-column"],"sortDirection":[1,"sort-direction"],"selectable":[4],"cellRenderer":[16],"selectedIds":[32]}]]],["bs-input.cjs",[[529,"bs-input",{"value":[1],"type":[1],"label":[1],"placeholder":[1],"description":[1],"error":[1],"disabled":[4]}]]],["bs-menu.cjs",[[257,"bs-menu"]]],["bs-menu-item.cjs",[[769,"bs-menu-item",{"hasIcon":[32]}]]],["bs-modal.cjs",[[769,"bs-modal",{"open":[1540],"heading":[1],"size":[1],"hasFooter":[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]]], options);
21
+ return index.bootstrapLazy([["bs-badge.cjs",[[769,"bs-badge",{"variant":[1]}]]],["bs-button.cjs",[[785,"bs-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasEndIcon":[32],"hasLabel":[32]}]]],["bs-button-skeleton.cjs",[[513,"bs-button-skeleton",{"size":[1]}]]],["bs-card.cjs",[[769,"bs-card",{"surface":[1]}]]],["bs-chatbot-header.cjs",[[769,"bs-chatbot-header",{"heading":[1],"expanded":[1540]}]]],["bs-chatbot-response-action.cjs",[[769,"bs-chatbot-response-action",{"sourcesCount":[2,"sources-count"],"menuOpen":[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["bs-chatbot-suggestion-button.cjs",[[769,"bs-chatbot-suggestion-button",{"disabled":[4]}]]],["bs-composer.cjs",[[785,"bs-composer",{"variant":[1],"placeholder":[1],"value":[1],"state":[1],"ariaLabel":[1,"aria-label"]}]]],["bs-data-table.cjs",[[513,"bs-data-table",{"columns":[16],"rows":[16],"sortColumn":[1,"sort-column"],"sortDirection":[1,"sort-direction"],"selectable":[4],"cellRenderer":[16],"selectedIds":[32]}]]],["bs-input.cjs",[[529,"bs-input",{"value":[1],"type":[1],"label":[1],"placeholder":[1],"description":[1],"error":[1],"disabled":[4]}]]],["bs-menu.cjs",[[257,"bs-menu"]]],["bs-menu-item.cjs",[[769,"bs-menu-item",{"hasIcon":[32]}]]],["bs-modal.cjs",[[769,"bs-modal",{"open":[1540],"heading":[1],"size":[1],"hasFooter":[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]]], options);
22
22
  });
23
23
 
24
24
  exports.setNonce = index.setNonce;
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var index = require('./index-CVh-sqA_.js');
4
+
5
+ const bsChatbotSuggestionButtonCss = () => `:host{display:inline-block;--bs-chatbot-suggestion-button-radius:var(--bs-border-radius-full);--bs-chatbot-suggestion-button-border-color:var(--bs-border-primary);--bs-chatbot-suggestion-button-bg-default:var(--bs-color-primary-container);--bs-chatbot-suggestion-button-bg-hover:var(--bs-color-primary-container-hover);--bs-chatbot-suggestion-button-bg-pressed:var(--bs-brand-200);--bs-chatbot-suggestion-button-bg-focus:var(--bs-color-primary-container-hover);--bs-chatbot-suggestion-button-text-default:var(--bs-text-action);--bs-chatbot-suggestion-button-text-hover:var(--bs-text-action-hover);--bs-chatbot-suggestion-button-focus-ring-color:var(--bs-border-primary-focus)}.bs-chatbot-suggestion-button{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;height:40px;min-width:80px;padding:var(--bs-spacing-100) var(--bs-spacing-200);border:var(--bs-border-width-thin) solid var(--bs-chatbot-suggestion-button-border-color);border-radius:var(--bs-chatbot-suggestion-button-radius);background:var(--bs-chatbot-suggestion-button-bg-default);color:var(--bs-chatbot-suggestion-button-text-default);font-family:inherit;font-size:var(--bs-font-size-md);line-height:calc(var(--bs-line-height-body-md) * 1px);text-align:center;cursor:pointer;transition:background-color var(--bs-duration-fast) var(--bs-easing-standard)}.bs-chatbot-suggestion-button:hover:not(:disabled){background:var(--bs-chatbot-suggestion-button-bg-hover);color:var(--bs-chatbot-suggestion-button-text-hover)}.bs-chatbot-suggestion-button:active:not(:disabled){background:var(--bs-chatbot-suggestion-button-bg-pressed);color:var(--bs-chatbot-suggestion-button-text-hover)}.bs-chatbot-suggestion-button:focus-visible{background:var(--bs-chatbot-suggestion-button-bg-focus);color:var(--bs-chatbot-suggestion-button-text-hover);outline:var(--bs-border-width-medium) solid var(--bs-chatbot-suggestion-button-focus-ring-color);outline-offset:3px}.bs-chatbot-suggestion-button:disabled{opacity:var(--bs-opacity-disabled);cursor:not-allowed}`;
6
+
7
+ const BsChatbotSuggestionButton = class {
8
+ constructor(hostRef) {
9
+ index.registerInstance(this, hostRef);
10
+ this.bsSelect = index.createEvent(this, "bsSelect");
11
+ }
12
+ /** Disables the button and applies a reduced-opacity treatment. */
13
+ disabled = false;
14
+ /** Fires when the button is clicked. */
15
+ bsSelect;
16
+ onClick = () => {
17
+ this.bsSelect.emit();
18
+ };
19
+ render() {
20
+ return (index.h("button", { key: 'e19ad1fd5e95f84f6bff54cbc326e78f70ef3677', type: "button", part: "button", class: "bs-chatbot-suggestion-button", disabled: this.disabled, onClick: this.onClick }, index.h("slot", { key: '4048fb336d69f0ca78e50ea9d5cba52921906966' })));
21
+ }
22
+ };
23
+ BsChatbotSuggestionButton.style = bsChatbotSuggestionButtonCss();
24
+
25
+ exports.bs_chatbot_suggestion_button = BsChatbotSuggestionButton;
@@ -30,10 +30,10 @@ const BsInput = class {
30
30
  this.bsChange.emit(value);
31
31
  };
32
32
  render() {
33
- return (index.h("div", { key: 'df12d3d7af1bdc0e0e536e6c635ee406e4043b4f', class: `bs-input ${this.error ? 'bs-input--error' : ''}` }, this.label && (
33
+ return (index.h("div", { key: '571583a0d1181a2e307ba86679003c6cc37e4e63', class: `bs-input ${this.error ? 'bs-input--error' : ''}` }, this.label && (
34
34
  // "control" is a fixed id, not a generated one -- safe because Shadow DOM scopes ids
35
35
  // to this instance's own shadow root, so it can never collide with another bs-input.
36
- index.h("label", { key: '2e4f867d17ab691a1df1b0b5b2964c0e1e986a91', part: "label", class: "bs-input__label", htmlFor: "control" }, this.label)), index.h("input", { key: 'a078574a5ffad9eafea791cf5866ac123c4d5f56', id: "control", part: "control", class: "bs-input__control", type: this.type, value: this.value, placeholder: this.placeholder, disabled: this.disabled, "aria-describedby": this.error || this.description ? 'description-or-error' : undefined, "aria-invalid": this.error ? 'true' : undefined, onInput: this.onInput, onChange: this.onChange }), this.error ? (index.h("span", { id: "description-or-error", part: "error", class: "bs-input__error" }, this.error)) : this.description ? (index.h("span", { id: "description-or-error", part: "description", class: "bs-input__description" }, this.description)) : null));
36
+ index.h("label", { key: '0a6c34ad8de3227e1264af649c1ac227e64c67bd', part: "label", class: "bs-input__label", htmlFor: "control" }, this.label)), index.h("input", { key: 'de46e2c3272735160ca1773abf6fd270d042cfdd', id: "control", part: "control", class: "bs-input__control", type: this.type, value: this.value, placeholder: this.placeholder, disabled: this.disabled, "aria-describedby": this.error || this.description ? 'description-or-error' : undefined, "aria-invalid": this.error ? 'true' : undefined, onInput: this.onInput, onChange: this.onChange }), this.error ? (index.h("span", { id: "description-or-error", part: "error", class: "bs-input__error" }, this.error)) : this.description ? (index.h("span", { id: "description-or-error", part: "description", class: "bs-input__description" }, this.description)) : null));
37
37
  }
38
38
  static get delegatesFocus() { return true; }
39
39
  };
@@ -21,7 +21,7 @@ const BsMenuItem = class {
21
21
  this.bsSelect.emit();
22
22
  };
23
23
  render() {
24
- return (index.h("button", { key: '4d0e94afadd487e2ec44c0c6b416c27eb8f1a5f4', type: "button", part: "item", role: "menuitem", class: "bs-menu-item", onClick: this.onClick }, index.h("span", { key: 'a436154aaddddadc3944049597a87a2b52eb61cb', part: "icon", class: `bs-menu-item__icon ${this.hasIcon ? 'bs-menu-item__icon--has-content' : ''}` }, index.h("slot", { key: '50ad9c1b78bc8ea55219ad7692d7ef7fa7e48189', name: "icon", onSlotchange: this.onIconSlotchange })), index.h("span", { key: 'b3d1ee83556f10de5ad08d6f212ebfd9531dd54e', part: "label", class: "bs-menu-item__label" }, index.h("slot", { key: '5fe02e9b2407c4fd9eaf699caec9ecc9c0e25575' }))));
24
+ return (index.h("button", { key: '0fbb5f8802a2866794682b90a850d5455c86d69e', type: "button", part: "item", role: "menuitem", class: "bs-menu-item", onClick: this.onClick }, index.h("span", { key: '810cd5b7bebf0f0f411a956fa13357b4bc3b18ae', part: "icon", class: `bs-menu-item__icon ${this.hasIcon ? 'bs-menu-item__icon--has-content' : ''}` }, index.h("slot", { key: '683105e1dd44932ac0b569d57eccc3fb54dc1497', name: "icon", onSlotchange: this.onIconSlotchange })), index.h("span", { key: '2d0edd4325f535020b04bcea93db47ef60d33127', part: "label", class: "bs-menu-item__label" }, index.h("slot", { key: 'b7ca912d7ec3b5ac3a78f09eb03b8d6b0f96cc2e' }))));
25
25
  }
26
26
  };
27
27
  BsMenuItem.style = bsMenuItemCss();
@@ -9,7 +9,7 @@ const BsMenu = class {
9
9
  index.registerInstance(this, hostRef);
10
10
  }
11
11
  render() {
12
- return (index.h("div", { key: 'd4eee73bfffd1fcfd8f057e394a53fea4688748b', part: "list", class: "bs-menu", role: "menu" }, index.h("slot", { key: '866189bfabc2798ce37b8f0f6141143d4c49081e' })));
12
+ return (index.h("div", { key: 'e5008951228aa528404f810fe9ce90a5ee7298b1', part: "list", class: "bs-menu", role: "menu" }, index.h("slot", { key: 'd2e590cf51f626bd22dce58535fbea81291f9068' })));
13
13
  }
14
14
  };
15
15
  BsMenu.style = bsMenuCss();
@@ -5,7 +5,7 @@ var index = require('./index-CVh-sqA_.js');
5
5
  const defineCustomElements = async (win, options) => {
6
6
  if (typeof window === 'undefined') return undefined;
7
7
  await index.globalScripts();
8
- return index.bootstrapLazy([["bs-badge.cjs",[[769,"bs-badge",{"variant":[1]}]]],["bs-button.cjs",[[785,"bs-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasEndIcon":[32],"hasLabel":[32]}]]],["bs-button-skeleton.cjs",[[513,"bs-button-skeleton",{"size":[1]}]]],["bs-card.cjs",[[769,"bs-card",{"surface":[1]}]]],["bs-chatbot-header.cjs",[[769,"bs-chatbot-header",{"heading":[1],"expanded":[1540]}]]],["bs-chatbot-response-action.cjs",[[769,"bs-chatbot-response-action",{"sourcesCount":[2,"sources-count"],"menuOpen":[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["bs-composer.cjs",[[785,"bs-composer",{"variant":[1],"placeholder":[1],"value":[1],"state":[1],"ariaLabel":[1,"aria-label"]}]]],["bs-data-table.cjs",[[513,"bs-data-table",{"columns":[16],"rows":[16],"sortColumn":[1,"sort-column"],"sortDirection":[1,"sort-direction"],"selectable":[4],"cellRenderer":[16],"selectedIds":[32]}]]],["bs-input.cjs",[[529,"bs-input",{"value":[1],"type":[1],"label":[1],"placeholder":[1],"description":[1],"error":[1],"disabled":[4]}]]],["bs-menu.cjs",[[257,"bs-menu"]]],["bs-menu-item.cjs",[[769,"bs-menu-item",{"hasIcon":[32]}]]],["bs-modal.cjs",[[769,"bs-modal",{"open":[1540],"heading":[1],"size":[1],"hasFooter":[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]]], options);
8
+ return index.bootstrapLazy([["bs-badge.cjs",[[769,"bs-badge",{"variant":[1]}]]],["bs-button.cjs",[[785,"bs-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasEndIcon":[32],"hasLabel":[32]}]]],["bs-button-skeleton.cjs",[[513,"bs-button-skeleton",{"size":[1]}]]],["bs-card.cjs",[[769,"bs-card",{"surface":[1]}]]],["bs-chatbot-header.cjs",[[769,"bs-chatbot-header",{"heading":[1],"expanded":[1540]}]]],["bs-chatbot-response-action.cjs",[[769,"bs-chatbot-response-action",{"sourcesCount":[2,"sources-count"],"menuOpen":[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["bs-chatbot-suggestion-button.cjs",[[769,"bs-chatbot-suggestion-button",{"disabled":[4]}]]],["bs-composer.cjs",[[785,"bs-composer",{"variant":[1],"placeholder":[1],"value":[1],"state":[1],"ariaLabel":[1,"aria-label"]}]]],["bs-data-table.cjs",[[513,"bs-data-table",{"columns":[16],"rows":[16],"sortColumn":[1,"sort-column"],"sortDirection":[1,"sort-direction"],"selectable":[4],"cellRenderer":[16],"selectedIds":[32]}]]],["bs-input.cjs",[[529,"bs-input",{"value":[1],"type":[1],"label":[1],"placeholder":[1],"description":[1],"error":[1],"disabled":[4]}]]],["bs-menu.cjs",[[257,"bs-menu"]]],["bs-menu-item.cjs",[[769,"bs-menu-item",{"hasIcon":[32]}]]],["bs-modal.cjs",[[769,"bs-modal",{"open":[1540],"heading":[1],"size":[1],"hasFooter":[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]]], options);
9
9
  };
10
10
 
11
11
  exports.setNonce = index.setNonce;
@@ -9,6 +9,7 @@
9
9
  "components/bs-button-skeleton/bs-button-skeleton.js",
10
10
  "components/bs-chatbot-header/bs-chatbot-header.js",
11
11
  "components/bs-chatbot-response-action/bs-chatbot-response-action.js",
12
+ "components/bs-chatbot-suggestion-button/bs-chatbot-suggestion-button.js",
12
13
  "components/bs-input/bs-input.js",
13
14
  "components/bs-menu/bs-menu.js",
14
15
  "components/bs-menu-item/bs-menu-item.js"
@@ -0,0 +1,24 @@
1
+ import { render, h, describe, it, expect } from "@stencil/vitest";
2
+ describe('bs-chatbot-suggestion-button', () => {
3
+ it('renders the default slot label content and the button part', async () => {
4
+ const { root } = await render(h("bs-chatbot-suggestion-button", null, "How can I help you?"));
5
+ expect(root).toHaveTextContent('How can I help you?');
6
+ const button = root.shadowRoot.querySelector('[part="button"]');
7
+ expect(button).not.toBeNull();
8
+ expect(button.tagName).toBe('BUTTON');
9
+ });
10
+ it('emits bsSelect exactly once on a normal click', async () => {
11
+ const { root, spyOnEvent } = await render(h("bs-chatbot-suggestion-button", null, "Suggestion"));
12
+ const selectSpy = spyOnEvent('bsSelect');
13
+ root.shadowRoot.querySelector('[part="button"]').click();
14
+ expect(selectSpy).toHaveReceivedEventTimes(1);
15
+ });
16
+ it('applies the native disabled attribute and does not fire bsSelect on click when disabled', async () => {
17
+ const { root, spyOnEvent } = await render(h("bs-chatbot-suggestion-button", { disabled: true }, "Suggestion"));
18
+ const selectSpy = spyOnEvent('bsSelect');
19
+ const button = root.shadowRoot.querySelector('[part="button"]');
20
+ expect(button.disabled).toBe(true);
21
+ button.click();
22
+ expect(selectSpy.length).toBe(0);
23
+ });
24
+ });
@@ -0,0 +1,57 @@
1
+ :host {
2
+ display: inline-block;
3
+ --bs-chatbot-suggestion-button-radius: var(--bs-border-radius-full);
4
+ --bs-chatbot-suggestion-button-border-color: var(--bs-border-primary);
5
+ --bs-chatbot-suggestion-button-bg-default: var(--bs-color-primary-container);
6
+ --bs-chatbot-suggestion-button-bg-hover: var(--bs-color-primary-container-hover);
7
+ /* No pre-built semantic "container-pressed" token matches this tonal button's lighter pressed
8
+ * shade progression (50 -> 100 -> 200) -- alias the primitive directly, same precedent
9
+ * documented in bs-button.css for its subtle/outlined/success/warning/info variants. */
10
+ --bs-chatbot-suggestion-button-bg-pressed: var(--bs-brand-200);
11
+ --bs-chatbot-suggestion-button-bg-focus: var(--bs-color-primary-container-hover);
12
+ --bs-chatbot-suggestion-button-text-default: var(--bs-text-action);
13
+ --bs-chatbot-suggestion-button-text-hover: var(--bs-text-action-hover);
14
+ --bs-chatbot-suggestion-button-focus-ring-color: var(--bs-border-primary-focus);
15
+ }
16
+
17
+ .bs-chatbot-suggestion-button {
18
+ box-sizing: border-box;
19
+ display: inline-flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ height: 40px;
23
+ min-width: 80px;
24
+ padding: var(--bs-spacing-100) var(--bs-spacing-200);
25
+ border: var(--bs-border-width-thin) solid var(--bs-chatbot-suggestion-button-border-color);
26
+ border-radius: var(--bs-chatbot-suggestion-button-radius);
27
+ background: var(--bs-chatbot-suggestion-button-bg-default);
28
+ color: var(--bs-chatbot-suggestion-button-text-default);
29
+ font-family: inherit;
30
+ font-size: var(--bs-font-size-md);
31
+ line-height: calc(var(--bs-line-height-body-md) * 1px);
32
+ text-align: center;
33
+ cursor: pointer;
34
+ transition: background-color var(--bs-duration-fast) var(--bs-easing-standard);
35
+ }
36
+
37
+ .bs-chatbot-suggestion-button:hover:not(:disabled) {
38
+ background: var(--bs-chatbot-suggestion-button-bg-hover);
39
+ color: var(--bs-chatbot-suggestion-button-text-hover);
40
+ }
41
+
42
+ .bs-chatbot-suggestion-button:active:not(:disabled) {
43
+ background: var(--bs-chatbot-suggestion-button-bg-pressed);
44
+ color: var(--bs-chatbot-suggestion-button-text-hover);
45
+ }
46
+
47
+ .bs-chatbot-suggestion-button:focus-visible {
48
+ background: var(--bs-chatbot-suggestion-button-bg-focus);
49
+ color: var(--bs-chatbot-suggestion-button-text-hover);
50
+ outline: var(--bs-border-width-medium) solid var(--bs-chatbot-suggestion-button-focus-ring-color);
51
+ outline-offset: 3px;
52
+ }
53
+
54
+ .bs-chatbot-suggestion-button:disabled {
55
+ opacity: var(--bs-opacity-disabled);
56
+ cursor: not-allowed;
57
+ }
@@ -0,0 +1,104 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * A pill-shaped clickable suggestion chip for a Genie AI chat panel (e.g. "How can I help you?").
4
+ *
5
+ * One instance renders one chip -- to show several suggestion prompts side by side, render
6
+ * multiple `bs-chatbot-suggestion-button` elements inside a plain flex-wrap container; this
7
+ * library doesn't ship a separate list/group component for that since a `<div>` with
8
+ * `flex-wrap: wrap` is sufficient.
9
+ *
10
+ * ## When to use
11
+ * - Quick-reply/starter prompts shown above or alongside `bs-composer` in a Genie AI chat panel.
12
+ *
13
+ * ## When not to use
14
+ * - As a general-purpose button -- use `bs-button` instead, this component's pill shape and
15
+ * tonal color treatment are specific to Genie chat suggestion prompts.
16
+ *
17
+ * @slot - Default slot: the suggestion's label text.
18
+ * @part button - The button element.
19
+ * @prop --bs-chatbot-suggestion-button-radius - Corner radius. Aliased to `--bs-border-radius-full`.
20
+ * @prop --bs-chatbot-suggestion-button-border-color - Border color. Aliased to `--bs-border-primary`.
21
+ * @prop --bs-chatbot-suggestion-button-bg-default - Background in the default (enabled) state.
22
+ * Aliased to `--bs-color-primary-container`.
23
+ * @prop --bs-chatbot-suggestion-button-bg-hover - Background on hover. Aliased to
24
+ * `--bs-color-primary-container-hover`.
25
+ * @prop --bs-chatbot-suggestion-button-bg-pressed - Background when pressed. Aliased directly to
26
+ * the primitive `--bs-brand-200` -- there's no pre-built semantic "container-pressed" token
27
+ * matching this tonal button's lighter pressed shade progression (50 -> 100 -> 200), so this
28
+ * component aliases one locally (same situation `bs-button.css` documents for its
29
+ * subtle/outlined/success/warning/info variants).
30
+ * @prop --bs-chatbot-suggestion-button-bg-focus - Background when focused. Aliased to
31
+ * `--bs-color-primary-container-hover` (same as hover).
32
+ * @prop --bs-chatbot-suggestion-button-text-default - Text color in the default state. Aliased to
33
+ * `--bs-text-action`.
34
+ * @prop --bs-chatbot-suggestion-button-text-hover - Text color on hover, pressed, and focus.
35
+ * Aliased to `--bs-text-action-hover`.
36
+ * @prop --bs-chatbot-suggestion-button-focus-ring-color - Focus ring color. Aliased to
37
+ * `--bs-border-primary-focus`.
38
+ */
39
+ export class BsChatbotSuggestionButton {
40
+ /** Disables the button and applies a reduced-opacity treatment. */
41
+ disabled = false;
42
+ /** Fires when the button is clicked. */
43
+ bsSelect;
44
+ onClick = () => {
45
+ this.bsSelect.emit();
46
+ };
47
+ render() {
48
+ return (h("button", { key: 'e19ad1fd5e95f84f6bff54cbc326e78f70ef3677', type: "button", part: "button", class: "bs-chatbot-suggestion-button", disabled: this.disabled, onClick: this.onClick }, h("slot", { key: '4048fb336d69f0ca78e50ea9d5cba52921906966' })));
49
+ }
50
+ static get is() { return "bs-chatbot-suggestion-button"; }
51
+ static get encapsulation() { return "shadow"; }
52
+ static get originalStyleUrls() {
53
+ return {
54
+ "$": ["bs-chatbot-suggestion-button.css"]
55
+ };
56
+ }
57
+ static get styleUrls() {
58
+ return {
59
+ "$": ["bs-chatbot-suggestion-button.css"]
60
+ };
61
+ }
62
+ static get properties() {
63
+ return {
64
+ "disabled": {
65
+ "type": "boolean",
66
+ "mutable": false,
67
+ "complexType": {
68
+ "original": "boolean",
69
+ "resolved": "boolean",
70
+ "references": {}
71
+ },
72
+ "required": false,
73
+ "optional": false,
74
+ "docs": {
75
+ "tags": [],
76
+ "text": "Disables the button and applies a reduced-opacity treatment."
77
+ },
78
+ "getter": false,
79
+ "setter": false,
80
+ "reflect": false,
81
+ "attribute": "disabled",
82
+ "defaultValue": "false"
83
+ }
84
+ };
85
+ }
86
+ static get events() {
87
+ return [{
88
+ "method": "bsSelect",
89
+ "name": "bsSelect",
90
+ "bubbles": true,
91
+ "cancelable": true,
92
+ "composed": true,
93
+ "docs": {
94
+ "tags": [],
95
+ "text": "Fires when the button is clicked."
96
+ },
97
+ "complexType": {
98
+ "original": "void",
99
+ "resolved": "void",
100
+ "references": {}
101
+ }
102
+ }];
103
+ }
104
+ }
@@ -0,0 +1,30 @@
1
+ import { html } from "lit";
2
+ import { componentDescription, propDescription } from "../../stories-utils";
3
+ const meta = {
4
+ title: 'Genie AI Components/bs-chatbot-suggestion-button',
5
+ parameters: { docs: { description: { component: componentDescription('bs-chatbot-suggestion-button') } } },
6
+ render: args => html `
7
+ <bs-chatbot-suggestion-button ?disabled=${args.disabled}>${args.label}</bs-chatbot-suggestion-button>
8
+ `,
9
+ argTypes: {
10
+ label: { control: 'text', description: 'Default slot: the suggestion label text.' },
11
+ disabled: { control: 'boolean', description: propDescription('bs-chatbot-suggestion-button', 'disabled') },
12
+ },
13
+ args: {
14
+ label: 'How can I help you?',
15
+ disabled: false,
16
+ },
17
+ };
18
+ export default meta;
19
+ export const Default = {};
20
+ export const SuggestionRow = {
21
+ name: 'Multiple suggestions (flex-wrap row)',
22
+ render: () => html `
23
+ <div style="display: flex; flex-wrap: wrap; gap: 8px; max-width: 420px;">
24
+ <bs-chatbot-suggestion-button>How can I help you?</bs-chatbot-suggestion-button>
25
+ <bs-chatbot-suggestion-button>Summarize this document</bs-chatbot-suggestion-button>
26
+ <bs-chatbot-suggestion-button>Draft a follow-up email</bs-chatbot-suggestion-button>
27
+ <bs-chatbot-suggestion-button>Explain this in simple terms</bs-chatbot-suggestion-button>
28
+ </div>
29
+ `,
30
+ };
@@ -36,10 +36,10 @@ export class BsInput {
36
36
  this.bsChange.emit(value);
37
37
  };
38
38
  render() {
39
- return (h("div", { key: 'df12d3d7af1bdc0e0e536e6c635ee406e4043b4f', class: `bs-input ${this.error ? 'bs-input--error' : ''}` }, this.label && (
39
+ return (h("div", { key: '571583a0d1181a2e307ba86679003c6cc37e4e63', class: `bs-input ${this.error ? 'bs-input--error' : ''}` }, this.label && (
40
40
  // "control" is a fixed id, not a generated one -- safe because Shadow DOM scopes ids
41
41
  // to this instance's own shadow root, so it can never collide with another bs-input.
42
- h("label", { key: '2e4f867d17ab691a1df1b0b5b2964c0e1e986a91', part: "label", class: "bs-input__label", htmlFor: "control" }, this.label)), h("input", { key: 'a078574a5ffad9eafea791cf5866ac123c4d5f56', id: "control", part: "control", class: "bs-input__control", type: this.type, value: this.value, placeholder: this.placeholder, disabled: this.disabled, "aria-describedby": this.error || this.description ? 'description-or-error' : undefined, "aria-invalid": this.error ? 'true' : undefined, onInput: this.onInput, onChange: this.onChange }), this.error ? (h("span", { id: "description-or-error", part: "error", class: "bs-input__error" }, this.error)) : this.description ? (h("span", { id: "description-or-error", part: "description", class: "bs-input__description" }, this.description)) : null));
42
+ h("label", { key: '0a6c34ad8de3227e1264af649c1ac227e64c67bd', part: "label", class: "bs-input__label", htmlFor: "control" }, this.label)), h("input", { key: 'de46e2c3272735160ca1773abf6fd270d042cfdd', id: "control", part: "control", class: "bs-input__control", type: this.type, value: this.value, placeholder: this.placeholder, disabled: this.disabled, "aria-describedby": this.error || this.description ? 'description-or-error' : undefined, "aria-invalid": this.error ? 'true' : undefined, onInput: this.onInput, onChange: this.onChange }), this.error ? (h("span", { id: "description-or-error", part: "error", class: "bs-input__error" }, this.error)) : this.description ? (h("span", { id: "description-or-error", part: "description", class: "bs-input__description" }, this.description)) : null));
43
43
  }
44
44
  static get is() { return "bs-input"; }
45
45
  static get encapsulation() { return "shadow"; }
@@ -22,7 +22,7 @@ import { h } from "@stencil/core";
22
22
  */
23
23
  export class BsMenu {
24
24
  render() {
25
- return (h("div", { key: 'd4eee73bfffd1fcfd8f057e394a53fea4688748b', part: "list", class: "bs-menu", role: "menu" }, h("slot", { key: '866189bfabc2798ce37b8f0f6141143d4c49081e' })));
25
+ return (h("div", { key: 'e5008951228aa528404f810fe9ce90a5ee7298b1', part: "list", class: "bs-menu", role: "menu" }, h("slot", { key: 'd2e590cf51f626bd22dce58535fbea81291f9068' })));
26
26
  }
27
27
  static get is() { return "bs-menu"; }
28
28
  static get encapsulation() { return "shadow"; }
@@ -39,7 +39,7 @@ export class BsMenuItem {
39
39
  this.bsSelect.emit();
40
40
  };
41
41
  render() {
42
- return (h("button", { key: '4d0e94afadd487e2ec44c0c6b416c27eb8f1a5f4', type: "button", part: "item", role: "menuitem", class: "bs-menu-item", onClick: this.onClick }, h("span", { key: 'a436154aaddddadc3944049597a87a2b52eb61cb', part: "icon", class: `bs-menu-item__icon ${this.hasIcon ? 'bs-menu-item__icon--has-content' : ''}` }, h("slot", { key: '50ad9c1b78bc8ea55219ad7692d7ef7fa7e48189', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: 'b3d1ee83556f10de5ad08d6f212ebfd9531dd54e', part: "label", class: "bs-menu-item__label" }, h("slot", { key: '5fe02e9b2407c4fd9eaf699caec9ecc9c0e25575' }))));
42
+ return (h("button", { key: '0fbb5f8802a2866794682b90a850d5455c86d69e', type: "button", part: "item", role: "menuitem", class: "bs-menu-item", onClick: this.onClick }, h("span", { key: '810cd5b7bebf0f0f411a956fa13357b4bc3b18ae', part: "icon", class: `bs-menu-item__icon ${this.hasIcon ? 'bs-menu-item__icon--has-content' : ''}` }, h("slot", { key: '683105e1dd44932ac0b569d57eccc3fb54dc1497', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: '2d0edd4325f535020b04bcea93db47ef60d33127', part: "label", class: "bs-menu-item__label" }, h("slot", { key: 'b7ca912d7ec3b5ac3a78f09eb03b8d6b0f96cc2e' }))));
43
43
  }
44
44
  static get is() { return "bs-menu-item"; }
45
45
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,11 @@
1
+ import type { Components, JSX } from "../types/components";
2
+
3
+ interface BsChatbotSuggestionButton extends Components.BsChatbotSuggestionButton, HTMLElement {}
4
+ export const BsChatbotSuggestionButton: {
5
+ prototype: BsChatbotSuggestionButton;
6
+ new (): BsChatbotSuggestionButton;
7
+ };
8
+ /**
9
+ * Used to define this component and all nested components recursively.
10
+ */
11
+ export const defineCustomElement: () => void;
@@ -0,0 +1 @@
1
+ import{t,p as o,H as s,c as b,h as e}from"./p-BpvhHQSw.js";const n=o(class extends s{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.bsSelect=b(this,"bsSelect")}disabled=!1;bsSelect;onClick=()=>{this.bsSelect.emit()};render(){return e("button",{key:"e19ad1fd5e95f84f6bff54cbc326e78f70ef3677",type:"button",part:"button",class:"bs-chatbot-suggestion-button",disabled:this.disabled,onClick:this.onClick},e("slot",{key:"4048fb336d69f0ca78e50ea9d5cba52921906966"}))}static get style(){return":host{display:inline-block;--bs-chatbot-suggestion-button-radius:var(--bs-border-radius-full);--bs-chatbot-suggestion-button-border-color:var(--bs-border-primary);--bs-chatbot-suggestion-button-bg-default:var(--bs-color-primary-container);--bs-chatbot-suggestion-button-bg-hover:var(--bs-color-primary-container-hover);--bs-chatbot-suggestion-button-bg-pressed:var(--bs-brand-200);--bs-chatbot-suggestion-button-bg-focus:var(--bs-color-primary-container-hover);--bs-chatbot-suggestion-button-text-default:var(--bs-text-action);--bs-chatbot-suggestion-button-text-hover:var(--bs-text-action-hover);--bs-chatbot-suggestion-button-focus-ring-color:var(--bs-border-primary-focus)}.bs-chatbot-suggestion-button{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;height:40px;min-width:80px;padding:var(--bs-spacing-100) var(--bs-spacing-200);border:var(--bs-border-width-thin) solid var(--bs-chatbot-suggestion-button-border-color);border-radius:var(--bs-chatbot-suggestion-button-radius);background:var(--bs-chatbot-suggestion-button-bg-default);color:var(--bs-chatbot-suggestion-button-text-default);font-family:inherit;font-size:var(--bs-font-size-md);line-height:calc(var(--bs-line-height-body-md) * 1px);text-align:center;cursor:pointer;transition:background-color var(--bs-duration-fast) var(--bs-easing-standard)}.bs-chatbot-suggestion-button:hover:not(:disabled){background:var(--bs-chatbot-suggestion-button-bg-hover);color:var(--bs-chatbot-suggestion-button-text-hover)}.bs-chatbot-suggestion-button:active:not(:disabled){background:var(--bs-chatbot-suggestion-button-bg-pressed);color:var(--bs-chatbot-suggestion-button-text-hover)}.bs-chatbot-suggestion-button:focus-visible{background:var(--bs-chatbot-suggestion-button-bg-focus);color:var(--bs-chatbot-suggestion-button-text-hover);outline:var(--bs-border-width-medium) solid var(--bs-chatbot-suggestion-button-focus-ring-color);outline-offset:3px}.bs-chatbot-suggestion-button:disabled{opacity:var(--bs-opacity-disabled);cursor:not-allowed}"}},[769,"bs-chatbot-suggestion-button",{disabled:[4]}]);function r(){"undefined"!=typeof customElements&&["bs-chatbot-suggestion-button"].forEach((o=>{"bs-chatbot-suggestion-button"===o&&(customElements.get(t(o))||customElements.define(t(o),n))}))}r();const a=n,i=r;export{a as BsChatbotSuggestionButton,i as defineCustomElement}
@@ -1 +1 @@
1
- import{t as r,p as t,H as s,c as e,h as i}from"./p-BpvhHQSw.js";const o=t(class extends s{constructor(r){super(),!1!==r&&this.__registerHost(),this.__attachShadow(),this.bsInput=e(this,"bsInput"),this.bsChange=e(this,"bsChange")}value="";type="text";label;placeholder;description;error;disabled=!1;bsInput;bsChange;onInput=r=>{this.bsInput.emit(r.target.value)};onChange=r=>{this.bsChange.emit(r.target.value)};render(){return i("div",{key:"df12d3d7af1bdc0e0e536e6c635ee406e4043b4f",class:"bs-input "+(this.error?"bs-input--error":"")},this.label&&i("label",{key:"2e4f867d17ab691a1df1b0b5b2964c0e1e986a91",part:"label",class:"bs-input__label",htmlFor:"control"},this.label),i("input",{key:"a078574a5ffad9eafea791cf5866ac123c4d5f56",id:"control",part:"control",class:"bs-input__control",type:this.type,value:this.value,placeholder:this.placeholder,disabled:this.disabled,"aria-describedby":this.error||this.description?"description-or-error":void 0,"aria-invalid":this.error?"true":void 0,onInput:this.onInput,onChange:this.onChange}),this.error?i("span",{id:"description-or-error",part:"error",class:"bs-input__error"},this.error):this.description?i("span",{id:"description-or-error",part:"description",class:"bs-input__description"},this.description):null)}static get delegatesFocus(){return!0}static get style(){return":host{display:block}.bs-input{display:flex;flex-direction:column;gap:var(--bs-spacing-100);font-family:inherit}.bs-input__label{font-size:var(--bs-font-size-sm);font-weight:var(--bs-font-weight-medium);color:var(--bs-input-label)}.bs-input__control{height:var(--bs-spacing-600);padding:0 var(--bs-spacing-300);border:1px solid var(--bs-input-border-default);border-radius:var(--bs-border-radius-100);background:var(--bs-input-bg-default);color:var(--bs-input-text);font-size:var(--bs-font-size-md);font-family:inherit}.bs-input__control::placeholder{color:var(--bs-input-placeholder)}.bs-input__control:hover:not(:disabled){border-color:var(--bs-input-border-hover)}.bs-input__control:focus-visible{outline:none;border-color:var(--bs-input-border-focus)}.bs-input__control:disabled{background:var(--bs-input-bg-disabled);color:var(--bs-input-text-disabled);cursor:not-allowed}.bs-input--error .bs-input__control{border-color:var(--bs-input-border-error)}.bs-input--error .bs-input__label{color:var(--bs-input-label)}.bs-input__description{font-size:var(--bs-font-size-xs);color:var(--bs-input-description)}.bs-input__error{font-size:var(--bs-font-size-xs);color:var(--bs-input-error)}"}},[529,"bs-input",{value:[1],type:[1],label:[1],placeholder:[1],description:[1],error:[1],disabled:[4]}]);function n(){"undefined"!=typeof customElements&&["bs-input"].forEach((t=>{"bs-input"===t&&(customElements.get(r(t))||customElements.define(r(t),o))}))}n();const a=o,b=n;export{a as BsInput,b as defineCustomElement}
1
+ import{t as r,p as t,H as s,c as e,h as i}from"./p-BpvhHQSw.js";const o=t(class extends s{constructor(r){super(),!1!==r&&this.__registerHost(),this.__attachShadow(),this.bsInput=e(this,"bsInput"),this.bsChange=e(this,"bsChange")}value="";type="text";label;placeholder;description;error;disabled=!1;bsInput;bsChange;onInput=r=>{this.bsInput.emit(r.target.value)};onChange=r=>{this.bsChange.emit(r.target.value)};render(){return i("div",{key:"571583a0d1181a2e307ba86679003c6cc37e4e63",class:"bs-input "+(this.error?"bs-input--error":"")},this.label&&i("label",{key:"0a6c34ad8de3227e1264af649c1ac227e64c67bd",part:"label",class:"bs-input__label",htmlFor:"control"},this.label),i("input",{key:"de46e2c3272735160ca1773abf6fd270d042cfdd",id:"control",part:"control",class:"bs-input__control",type:this.type,value:this.value,placeholder:this.placeholder,disabled:this.disabled,"aria-describedby":this.error||this.description?"description-or-error":void 0,"aria-invalid":this.error?"true":void 0,onInput:this.onInput,onChange:this.onChange}),this.error?i("span",{id:"description-or-error",part:"error",class:"bs-input__error"},this.error):this.description?i("span",{id:"description-or-error",part:"description",class:"bs-input__description"},this.description):null)}static get delegatesFocus(){return!0}static get style(){return":host{display:block}.bs-input{display:flex;flex-direction:column;gap:var(--bs-spacing-100);font-family:inherit}.bs-input__label{font-size:var(--bs-font-size-sm);font-weight:var(--bs-font-weight-medium);color:var(--bs-input-label)}.bs-input__control{height:var(--bs-spacing-600);padding:0 var(--bs-spacing-300);border:1px solid var(--bs-input-border-default);border-radius:var(--bs-border-radius-100);background:var(--bs-input-bg-default);color:var(--bs-input-text);font-size:var(--bs-font-size-md);font-family:inherit}.bs-input__control::placeholder{color:var(--bs-input-placeholder)}.bs-input__control:hover:not(:disabled){border-color:var(--bs-input-border-hover)}.bs-input__control:focus-visible{outline:none;border-color:var(--bs-input-border-focus)}.bs-input__control:disabled{background:var(--bs-input-bg-disabled);color:var(--bs-input-text-disabled);cursor:not-allowed}.bs-input--error .bs-input__control{border-color:var(--bs-input-border-error)}.bs-input--error .bs-input__label{color:var(--bs-input-label)}.bs-input__description{font-size:var(--bs-font-size-xs);color:var(--bs-input-description)}.bs-input__error{font-size:var(--bs-font-size-xs);color:var(--bs-input-error)}"}},[529,"bs-input",{value:[1],type:[1],label:[1],placeholder:[1],description:[1],error:[1],disabled:[4]}]);function n(){"undefined"!=typeof customElements&&["bs-input"].forEach((t=>{"bs-input"===t&&(customElements.get(r(t))||customElements.define(r(t),o))}))}n();const a=o,l=n;export{a as BsInput,l as defineCustomElement}
@@ -1 +1 @@
1
- import{t as e,p as t,H as n,c as s,h as i}from"./p-BpvhHQSw.js";const a=t(class extends n{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.bsSelect=s(this,"bsSelect")}hasIcon=!1;bsSelect;onIconSlotchange=e=>{this.hasIcon=e.target.assignedNodes().length>0};onClick=()=>{this.bsSelect.emit()};render(){return i("button",{key:"4d0e94afadd487e2ec44c0c6b416c27eb8f1a5f4",type:"button",part:"item",role:"menuitem",class:"bs-menu-item",onClick:this.onClick},i("span",{key:"a436154aaddddadc3944049597a87a2b52eb61cb",part:"icon",class:"bs-menu-item__icon "+(this.hasIcon?"bs-menu-item__icon--has-content":"")},i("slot",{key:"50ad9c1b78bc8ea55219ad7692d7ef7fa7e48189",name:"icon",onSlotchange:this.onIconSlotchange})),i("span",{key:"b3d1ee83556f10de5ad08d6f212ebfd9531dd54e",part:"label",class:"bs-menu-item__label"},i("slot",{key:"5fe02e9b2407c4fd9eaf699caec9ecc9c0e25575"})))}static get style(){return":host{display:block;--bs-menu-item-radius:var(--bs-border-radius-100);--bs-menu-item-padding-y:var(--bs-spacing-100);--bs-menu-item-padding-x:var(--bs-spacing-150);--bs-menu-item-gap:var(--bs-spacing-100);--bs-menu-item-hover:var(--bs-color-neutral-container);--bs-menu-item-pressed:var(--bs-color-neutral-container-pressed);--bs-menu-item-icon-color:var(--bs-icon-default);--bs-menu-item-color:var(--bs-text-muted);--bs-menu-item-font-size:var(--bs-font-size-md);--bs-menu-item-line-height:var(--bs-line-height-body-md)}.bs-menu-item{box-sizing:border-box;display:flex;align-items:center;width:100%;height:48px;border:none;cursor:pointer;background:transparent;color:var(--bs-menu-item-color);font-family:inherit;border-radius:var(--bs-menu-item-radius);padding:var(--bs-menu-item-padding-y) var(--bs-menu-item-padding-x);gap:var(--bs-menu-item-gap);transition:background-color var(--bs-duration-fast) var(--bs-easing-standard)}.bs-menu-item:focus-visible{outline:2px solid var(--bs-border-neutral-focus);outline-offset:2px}.bs-menu-item:hover{background:var(--bs-menu-item-hover)}.bs-menu-item:active{background:var(--bs-menu-item-pressed)}.bs-menu-item__icon{display:none;width:24px;height:24px;flex-shrink:0;color:var(--bs-menu-item-icon-color)}.bs-menu-item__icon--has-content{display:inline-flex;align-items:center;justify-content:center}.bs-menu-item__icon ::slotted(svg){width:24px;height:24px}.bs-menu-item__label{font-size:var(--bs-menu-item-font-size);line-height:calc(var(--bs-menu-item-line-height) * 1px);white-space:nowrap}"}},[769,"bs-menu-item",{hasIcon:[32]}]);function o(){"undefined"!=typeof customElements&&["bs-menu-item"].forEach((t=>{"bs-menu-item"===t&&(customElements.get(e(t))||customElements.define(e(t),a))}))}o();const r=a,m=o;export{r as BsMenuItem,m as defineCustomElement}
1
+ import{t as e,p as t,H as n,c as s,h as i}from"./p-BpvhHQSw.js";const a=t(class extends n{constructor(e){super(),!1!==e&&this.__registerHost(),this.__attachShadow(),this.bsSelect=s(this,"bsSelect")}hasIcon=!1;bsSelect;onIconSlotchange=e=>{this.hasIcon=e.target.assignedNodes().length>0};onClick=()=>{this.bsSelect.emit()};render(){return i("button",{key:"0fbb5f8802a2866794682b90a850d5455c86d69e",type:"button",part:"item",role:"menuitem",class:"bs-menu-item",onClick:this.onClick},i("span",{key:"810cd5b7bebf0f0f411a956fa13357b4bc3b18ae",part:"icon",class:"bs-menu-item__icon "+(this.hasIcon?"bs-menu-item__icon--has-content":"")},i("slot",{key:"683105e1dd44932ac0b569d57eccc3fb54dc1497",name:"icon",onSlotchange:this.onIconSlotchange})),i("span",{key:"2d0edd4325f535020b04bcea93db47ef60d33127",part:"label",class:"bs-menu-item__label"},i("slot",{key:"b7ca912d7ec3b5ac3a78f09eb03b8d6b0f96cc2e"})))}static get style(){return":host{display:block;--bs-menu-item-radius:var(--bs-border-radius-100);--bs-menu-item-padding-y:var(--bs-spacing-100);--bs-menu-item-padding-x:var(--bs-spacing-150);--bs-menu-item-gap:var(--bs-spacing-100);--bs-menu-item-hover:var(--bs-color-neutral-container);--bs-menu-item-pressed:var(--bs-color-neutral-container-pressed);--bs-menu-item-icon-color:var(--bs-icon-default);--bs-menu-item-color:var(--bs-text-muted);--bs-menu-item-font-size:var(--bs-font-size-md);--bs-menu-item-line-height:var(--bs-line-height-body-md)}.bs-menu-item{box-sizing:border-box;display:flex;align-items:center;width:100%;height:48px;border:none;cursor:pointer;background:transparent;color:var(--bs-menu-item-color);font-family:inherit;border-radius:var(--bs-menu-item-radius);padding:var(--bs-menu-item-padding-y) var(--bs-menu-item-padding-x);gap:var(--bs-menu-item-gap);transition:background-color var(--bs-duration-fast) var(--bs-easing-standard)}.bs-menu-item:focus-visible{outline:2px solid var(--bs-border-neutral-focus);outline-offset:2px}.bs-menu-item:hover{background:var(--bs-menu-item-hover)}.bs-menu-item:active{background:var(--bs-menu-item-pressed)}.bs-menu-item__icon{display:none;width:24px;height:24px;flex-shrink:0;color:var(--bs-menu-item-icon-color)}.bs-menu-item__icon--has-content{display:inline-flex;align-items:center;justify-content:center}.bs-menu-item__icon ::slotted(svg){width:24px;height:24px}.bs-menu-item__label{font-size:var(--bs-menu-item-font-size);line-height:calc(var(--bs-menu-item-line-height) * 1px);white-space:nowrap}"}},[769,"bs-menu-item",{hasIcon:[32]}]);function o(){"undefined"!=typeof customElements&&["bs-menu-item"].forEach((t=>{"bs-menu-item"===t&&(customElements.get(e(t))||customElements.define(e(t),a))}))}o();const r=a,b=o;export{r as BsMenuItem,b as defineCustomElement}
@@ -1 +1 @@
1
- import{t as s,p as e,H as a,h as n}from"./p-BpvhHQSw.js";const r=e(class extends a{constructor(s){super(),!1!==s&&this.__registerHost(),this.__attachShadow()}render(){return n("div",{key:"d4eee73bfffd1fcfd8f057e394a53fea4688748b",part:"list",class:"bs-menu",role:"menu"},n("slot",{key:"866189bfabc2798ce37b8f0f6141143d4c49081e"}))}static get style(){return":host{display:block;--bs-menu-bg:var(--bs-surface-raised);--bs-menu-radius:var(--bs-border-radius-100);--bs-menu-padding-y:var(--bs-spacing-50);--bs-menu-gap:var(--bs-spacing-50);--bs-menu-shadow:var(--bs-shadow-sm)}.bs-menu{box-sizing:border-box;display:flex;flex-direction:column;gap:var(--bs-menu-gap);background:var(--bs-menu-bg);border-radius:var(--bs-menu-radius);padding:var(--bs-menu-padding-y) 0;box-shadow:var(--bs-menu-shadow);font-family:inherit}"}},[257,"bs-menu"]);function b(){"undefined"!=typeof customElements&&["bs-menu"].forEach((e=>{"bs-menu"===e&&(customElements.get(s(e))||customElements.define(s(e),r))}))}b();const u=r,d=b;export{u as BsMenu,d as defineCustomElement}
1
+ import{t as s,p as e,H as a,h as n}from"./p-BpvhHQSw.js";const r=e(class extends a{constructor(s){super(),!1!==s&&this.__registerHost(),this.__attachShadow()}render(){return n("div",{key:"e5008951228aa528404f810fe9ce90a5ee7298b1",part:"list",class:"bs-menu",role:"menu"},n("slot",{key:"d2e590cf51f626bd22dce58535fbea81291f9068"}))}static get style(){return":host{display:block;--bs-menu-bg:var(--bs-surface-raised);--bs-menu-radius:var(--bs-border-radius-100);--bs-menu-padding-y:var(--bs-spacing-50);--bs-menu-gap:var(--bs-spacing-50);--bs-menu-shadow:var(--bs-shadow-sm)}.bs-menu{box-sizing:border-box;display:flex;flex-direction:column;gap:var(--bs-menu-gap);background:var(--bs-menu-bg);border-radius:var(--bs-menu-radius);padding:var(--bs-menu-padding-y) 0;box-shadow:var(--bs-menu-shadow);font-family:inherit}"}},[257,"bs-menu"]);function b(){"undefined"!=typeof customElements&&["bs-menu"].forEach((e=>{"bs-menu"===e&&(customElements.get(s(e))||customElements.define(s(e),r))}))}b();const u=r,t=b;export{u as BsMenu,t as defineCustomElement}
@@ -16,5 +16,5 @@ var patchBrowser = () => {
16
16
 
17
17
  patchBrowser().then(async (options) => {
18
18
  await globalScripts();
19
- return bootstrapLazy([["bs-badge",[[769,"bs-badge",{"variant":[1]}]]],["bs-button",[[785,"bs-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasEndIcon":[32],"hasLabel":[32]}]]],["bs-button-skeleton",[[513,"bs-button-skeleton",{"size":[1]}]]],["bs-card",[[769,"bs-card",{"surface":[1]}]]],["bs-chatbot-header",[[769,"bs-chatbot-header",{"heading":[1],"expanded":[1540]}]]],["bs-chatbot-response-action",[[769,"bs-chatbot-response-action",{"sourcesCount":[2,"sources-count"],"menuOpen":[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["bs-composer",[[785,"bs-composer",{"variant":[1],"placeholder":[1],"value":[1],"state":[1],"ariaLabel":[1,"aria-label"]}]]],["bs-data-table",[[513,"bs-data-table",{"columns":[16],"rows":[16],"sortColumn":[1,"sort-column"],"sortDirection":[1,"sort-direction"],"selectable":[4],"cellRenderer":[16],"selectedIds":[32]}]]],["bs-input",[[529,"bs-input",{"value":[1],"type":[1],"label":[1],"placeholder":[1],"description":[1],"error":[1],"disabled":[4]}]]],["bs-menu",[[257,"bs-menu"]]],["bs-menu-item",[[769,"bs-menu-item",{"hasIcon":[32]}]]],["bs-modal",[[769,"bs-modal",{"open":[1540],"heading":[1],"size":[1],"hasFooter":[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]]], options);
19
+ return bootstrapLazy([["bs-badge",[[769,"bs-badge",{"variant":[1]}]]],["bs-button",[[785,"bs-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasEndIcon":[32],"hasLabel":[32]}]]],["bs-button-skeleton",[[513,"bs-button-skeleton",{"size":[1]}]]],["bs-card",[[769,"bs-card",{"surface":[1]}]]],["bs-chatbot-header",[[769,"bs-chatbot-header",{"heading":[1],"expanded":[1540]}]]],["bs-chatbot-response-action",[[769,"bs-chatbot-response-action",{"sourcesCount":[2,"sources-count"],"menuOpen":[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["bs-chatbot-suggestion-button",[[769,"bs-chatbot-suggestion-button",{"disabled":[4]}]]],["bs-composer",[[785,"bs-composer",{"variant":[1],"placeholder":[1],"value":[1],"state":[1],"ariaLabel":[1,"aria-label"]}]]],["bs-data-table",[[513,"bs-data-table",{"columns":[16],"rows":[16],"sortColumn":[1,"sort-column"],"sortDirection":[1,"sort-direction"],"selectable":[4],"cellRenderer":[16],"selectedIds":[32]}]]],["bs-input",[[529,"bs-input",{"value":[1],"type":[1],"label":[1],"placeholder":[1],"description":[1],"error":[1],"disabled":[4]}]]],["bs-menu",[[257,"bs-menu"]]],["bs-menu-item",[[769,"bs-menu-item",{"hasIcon":[32]}]]],["bs-modal",[[769,"bs-modal",{"open":[1540],"heading":[1],"size":[1],"hasFooter":[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]]], options);
20
20
  });
@@ -0,0 +1,23 @@
1
+ import { r as registerInstance, c as createEvent, h } from './index-nLORuTUY.js';
2
+
3
+ const bsChatbotSuggestionButtonCss = () => `:host{display:inline-block;--bs-chatbot-suggestion-button-radius:var(--bs-border-radius-full);--bs-chatbot-suggestion-button-border-color:var(--bs-border-primary);--bs-chatbot-suggestion-button-bg-default:var(--bs-color-primary-container);--bs-chatbot-suggestion-button-bg-hover:var(--bs-color-primary-container-hover);--bs-chatbot-suggestion-button-bg-pressed:var(--bs-brand-200);--bs-chatbot-suggestion-button-bg-focus:var(--bs-color-primary-container-hover);--bs-chatbot-suggestion-button-text-default:var(--bs-text-action);--bs-chatbot-suggestion-button-text-hover:var(--bs-text-action-hover);--bs-chatbot-suggestion-button-focus-ring-color:var(--bs-border-primary-focus)}.bs-chatbot-suggestion-button{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;height:40px;min-width:80px;padding:var(--bs-spacing-100) var(--bs-spacing-200);border:var(--bs-border-width-thin) solid var(--bs-chatbot-suggestion-button-border-color);border-radius:var(--bs-chatbot-suggestion-button-radius);background:var(--bs-chatbot-suggestion-button-bg-default);color:var(--bs-chatbot-suggestion-button-text-default);font-family:inherit;font-size:var(--bs-font-size-md);line-height:calc(var(--bs-line-height-body-md) * 1px);text-align:center;cursor:pointer;transition:background-color var(--bs-duration-fast) var(--bs-easing-standard)}.bs-chatbot-suggestion-button:hover:not(:disabled){background:var(--bs-chatbot-suggestion-button-bg-hover);color:var(--bs-chatbot-suggestion-button-text-hover)}.bs-chatbot-suggestion-button:active:not(:disabled){background:var(--bs-chatbot-suggestion-button-bg-pressed);color:var(--bs-chatbot-suggestion-button-text-hover)}.bs-chatbot-suggestion-button:focus-visible{background:var(--bs-chatbot-suggestion-button-bg-focus);color:var(--bs-chatbot-suggestion-button-text-hover);outline:var(--bs-border-width-medium) solid var(--bs-chatbot-suggestion-button-focus-ring-color);outline-offset:3px}.bs-chatbot-suggestion-button:disabled{opacity:var(--bs-opacity-disabled);cursor:not-allowed}`;
4
+
5
+ const BsChatbotSuggestionButton = class {
6
+ constructor(hostRef) {
7
+ registerInstance(this, hostRef);
8
+ this.bsSelect = createEvent(this, "bsSelect");
9
+ }
10
+ /** Disables the button and applies a reduced-opacity treatment. */
11
+ disabled = false;
12
+ /** Fires when the button is clicked. */
13
+ bsSelect;
14
+ onClick = () => {
15
+ this.bsSelect.emit();
16
+ };
17
+ render() {
18
+ return (h("button", { key: 'e19ad1fd5e95f84f6bff54cbc326e78f70ef3677', type: "button", part: "button", class: "bs-chatbot-suggestion-button", disabled: this.disabled, onClick: this.onClick }, h("slot", { key: '4048fb336d69f0ca78e50ea9d5cba52921906966' })));
19
+ }
20
+ };
21
+ BsChatbotSuggestionButton.style = bsChatbotSuggestionButtonCss();
22
+
23
+ export { BsChatbotSuggestionButton as bs_chatbot_suggestion_button };
@@ -28,10 +28,10 @@ const BsInput = class {
28
28
  this.bsChange.emit(value);
29
29
  };
30
30
  render() {
31
- return (h("div", { key: 'df12d3d7af1bdc0e0e536e6c635ee406e4043b4f', class: `bs-input ${this.error ? 'bs-input--error' : ''}` }, this.label && (
31
+ return (h("div", { key: '571583a0d1181a2e307ba86679003c6cc37e4e63', class: `bs-input ${this.error ? 'bs-input--error' : ''}` }, this.label && (
32
32
  // "control" is a fixed id, not a generated one -- safe because Shadow DOM scopes ids
33
33
  // to this instance's own shadow root, so it can never collide with another bs-input.
34
- h("label", { key: '2e4f867d17ab691a1df1b0b5b2964c0e1e986a91', part: "label", class: "bs-input__label", htmlFor: "control" }, this.label)), h("input", { key: 'a078574a5ffad9eafea791cf5866ac123c4d5f56', id: "control", part: "control", class: "bs-input__control", type: this.type, value: this.value, placeholder: this.placeholder, disabled: this.disabled, "aria-describedby": this.error || this.description ? 'description-or-error' : undefined, "aria-invalid": this.error ? 'true' : undefined, onInput: this.onInput, onChange: this.onChange }), this.error ? (h("span", { id: "description-or-error", part: "error", class: "bs-input__error" }, this.error)) : this.description ? (h("span", { id: "description-or-error", part: "description", class: "bs-input__description" }, this.description)) : null));
34
+ h("label", { key: '0a6c34ad8de3227e1264af649c1ac227e64c67bd', part: "label", class: "bs-input__label", htmlFor: "control" }, this.label)), h("input", { key: 'de46e2c3272735160ca1773abf6fd270d042cfdd', id: "control", part: "control", class: "bs-input__control", type: this.type, value: this.value, placeholder: this.placeholder, disabled: this.disabled, "aria-describedby": this.error || this.description ? 'description-or-error' : undefined, "aria-invalid": this.error ? 'true' : undefined, onInput: this.onInput, onChange: this.onChange }), this.error ? (h("span", { id: "description-or-error", part: "error", class: "bs-input__error" }, this.error)) : this.description ? (h("span", { id: "description-or-error", part: "description", class: "bs-input__description" }, this.description)) : null));
35
35
  }
36
36
  static get delegatesFocus() { return true; }
37
37
  };
@@ -19,7 +19,7 @@ const BsMenuItem = class {
19
19
  this.bsSelect.emit();
20
20
  };
21
21
  render() {
22
- return (h("button", { key: '4d0e94afadd487e2ec44c0c6b416c27eb8f1a5f4', type: "button", part: "item", role: "menuitem", class: "bs-menu-item", onClick: this.onClick }, h("span", { key: 'a436154aaddddadc3944049597a87a2b52eb61cb', part: "icon", class: `bs-menu-item__icon ${this.hasIcon ? 'bs-menu-item__icon--has-content' : ''}` }, h("slot", { key: '50ad9c1b78bc8ea55219ad7692d7ef7fa7e48189', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: 'b3d1ee83556f10de5ad08d6f212ebfd9531dd54e', part: "label", class: "bs-menu-item__label" }, h("slot", { key: '5fe02e9b2407c4fd9eaf699caec9ecc9c0e25575' }))));
22
+ return (h("button", { key: '0fbb5f8802a2866794682b90a850d5455c86d69e', type: "button", part: "item", role: "menuitem", class: "bs-menu-item", onClick: this.onClick }, h("span", { key: '810cd5b7bebf0f0f411a956fa13357b4bc3b18ae', part: "icon", class: `bs-menu-item__icon ${this.hasIcon ? 'bs-menu-item__icon--has-content' : ''}` }, h("slot", { key: '683105e1dd44932ac0b569d57eccc3fb54dc1497', name: "icon", onSlotchange: this.onIconSlotchange })), h("span", { key: '2d0edd4325f535020b04bcea93db47ef60d33127', part: "label", class: "bs-menu-item__label" }, h("slot", { key: 'b7ca912d7ec3b5ac3a78f09eb03b8d6b0f96cc2e' }))));
23
23
  }
24
24
  };
25
25
  BsMenuItem.style = bsMenuItemCss();
@@ -7,7 +7,7 @@ const BsMenu = class {
7
7
  registerInstance(this, hostRef);
8
8
  }
9
9
  render() {
10
- return (h("div", { key: 'd4eee73bfffd1fcfd8f057e394a53fea4688748b', part: "list", class: "bs-menu", role: "menu" }, h("slot", { key: '866189bfabc2798ce37b8f0f6141143d4c49081e' })));
10
+ return (h("div", { key: 'e5008951228aa528404f810fe9ce90a5ee7298b1', part: "list", class: "bs-menu", role: "menu" }, h("slot", { key: 'd2e590cf51f626bd22dce58535fbea81291f9068' })));
11
11
  }
12
12
  };
13
13
  BsMenu.style = bsMenuCss();
@@ -4,7 +4,7 @@ export { s as setNonce } from './index-nLORuTUY.js';
4
4
  const defineCustomElements = async (win, options) => {
5
5
  if (typeof window === 'undefined') return undefined;
6
6
  await globalScripts();
7
- return bootstrapLazy([["bs-badge",[[769,"bs-badge",{"variant":[1]}]]],["bs-button",[[785,"bs-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasEndIcon":[32],"hasLabel":[32]}]]],["bs-button-skeleton",[[513,"bs-button-skeleton",{"size":[1]}]]],["bs-card",[[769,"bs-card",{"surface":[1]}]]],["bs-chatbot-header",[[769,"bs-chatbot-header",{"heading":[1],"expanded":[1540]}]]],["bs-chatbot-response-action",[[769,"bs-chatbot-response-action",{"sourcesCount":[2,"sources-count"],"menuOpen":[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["bs-composer",[[785,"bs-composer",{"variant":[1],"placeholder":[1],"value":[1],"state":[1],"ariaLabel":[1,"aria-label"]}]]],["bs-data-table",[[513,"bs-data-table",{"columns":[16],"rows":[16],"sortColumn":[1,"sort-column"],"sortDirection":[1,"sort-direction"],"selectable":[4],"cellRenderer":[16],"selectedIds":[32]}]]],["bs-input",[[529,"bs-input",{"value":[1],"type":[1],"label":[1],"placeholder":[1],"description":[1],"error":[1],"disabled":[4]}]]],["bs-menu",[[257,"bs-menu"]]],["bs-menu-item",[[769,"bs-menu-item",{"hasIcon":[32]}]]],["bs-modal",[[769,"bs-modal",{"open":[1540],"heading":[1],"size":[1],"hasFooter":[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]]], options);
7
+ return bootstrapLazy([["bs-badge",[[769,"bs-badge",{"variant":[1]}]]],["bs-button",[[785,"bs-button",{"variant":[1],"size":[1],"disabled":[4],"type":[1],"ariaLabel":[1,"aria-label"],"hasIcon":[32],"hasEndIcon":[32],"hasLabel":[32]}]]],["bs-button-skeleton",[[513,"bs-button-skeleton",{"size":[1]}]]],["bs-card",[[769,"bs-card",{"surface":[1]}]]],["bs-chatbot-header",[[769,"bs-chatbot-header",{"heading":[1],"expanded":[1540]}]]],["bs-chatbot-response-action",[[769,"bs-chatbot-response-action",{"sourcesCount":[2,"sources-count"],"menuOpen":[1540,"menu-open"]},[[4,"click","onDocumentClick"],[4,"keydown","onKeydown"]]]]],["bs-chatbot-suggestion-button",[[769,"bs-chatbot-suggestion-button",{"disabled":[4]}]]],["bs-composer",[[785,"bs-composer",{"variant":[1],"placeholder":[1],"value":[1],"state":[1],"ariaLabel":[1,"aria-label"]}]]],["bs-data-table",[[513,"bs-data-table",{"columns":[16],"rows":[16],"sortColumn":[1,"sort-column"],"sortDirection":[1,"sort-direction"],"selectable":[4],"cellRenderer":[16],"selectedIds":[32]}]]],["bs-input",[[529,"bs-input",{"value":[1],"type":[1],"label":[1],"placeholder":[1],"description":[1],"error":[1],"disabled":[4]}]]],["bs-menu",[[257,"bs-menu"]]],["bs-menu-item",[[769,"bs-menu-item",{"hasIcon":[32]}]]],["bs-modal",[[769,"bs-modal",{"open":[1540],"heading":[1],"size":[1],"hasFooter":[32]},[[4,"keydown","onKeydown"],[4,"focusin","onFocusIn"]]]]]], options);
8
8
  };
9
9
 
10
10
  export { defineCustomElements };
@@ -0,0 +1,46 @@
1
+ import { EventEmitter } from '../../stencil-public-runtime';
2
+ /**
3
+ * A pill-shaped clickable suggestion chip for a Genie AI chat panel (e.g. "How can I help you?").
4
+ *
5
+ * One instance renders one chip -- to show several suggestion prompts side by side, render
6
+ * multiple `bs-chatbot-suggestion-button` elements inside a plain flex-wrap container; this
7
+ * library doesn't ship a separate list/group component for that since a `<div>` with
8
+ * `flex-wrap: wrap` is sufficient.
9
+ *
10
+ * ## When to use
11
+ * - Quick-reply/starter prompts shown above or alongside `bs-composer` in a Genie AI chat panel.
12
+ *
13
+ * ## When not to use
14
+ * - As a general-purpose button -- use `bs-button` instead, this component's pill shape and
15
+ * tonal color treatment are specific to Genie chat suggestion prompts.
16
+ *
17
+ * @slot - Default slot: the suggestion's label text.
18
+ * @part button - The button element.
19
+ * @prop --bs-chatbot-suggestion-button-radius - Corner radius. Aliased to `--bs-border-radius-full`.
20
+ * @prop --bs-chatbot-suggestion-button-border-color - Border color. Aliased to `--bs-border-primary`.
21
+ * @prop --bs-chatbot-suggestion-button-bg-default - Background in the default (enabled) state.
22
+ * Aliased to `--bs-color-primary-container`.
23
+ * @prop --bs-chatbot-suggestion-button-bg-hover - Background on hover. Aliased to
24
+ * `--bs-color-primary-container-hover`.
25
+ * @prop --bs-chatbot-suggestion-button-bg-pressed - Background when pressed. Aliased directly to
26
+ * the primitive `--bs-brand-200` -- there's no pre-built semantic "container-pressed" token
27
+ * matching this tonal button's lighter pressed shade progression (50 -> 100 -> 200), so this
28
+ * component aliases one locally (same situation `bs-button.css` documents for its
29
+ * subtle/outlined/success/warning/info variants).
30
+ * @prop --bs-chatbot-suggestion-button-bg-focus - Background when focused. Aliased to
31
+ * `--bs-color-primary-container-hover` (same as hover).
32
+ * @prop --bs-chatbot-suggestion-button-text-default - Text color in the default state. Aliased to
33
+ * `--bs-text-action`.
34
+ * @prop --bs-chatbot-suggestion-button-text-hover - Text color on hover, pressed, and focus.
35
+ * Aliased to `--bs-text-action-hover`.
36
+ * @prop --bs-chatbot-suggestion-button-focus-ring-color - Focus ring color. Aliased to
37
+ * `--bs-border-primary-focus`.
38
+ */
39
+ export declare class BsChatbotSuggestionButton {
40
+ /** Disables the button and applies a reduced-opacity treatment. */
41
+ disabled: boolean;
42
+ /** Fires when the button is clicked. */
43
+ bsSelect: EventEmitter<void>;
44
+ private onClick;
45
+ render(): any;
46
+ }
@@ -0,0 +1,10 @@
1
+ import type { Meta, StoryObj } from '@storybook/web-components-vite';
2
+ interface BsChatbotSuggestionButtonArgs {
3
+ label: string;
4
+ disabled: boolean;
5
+ }
6
+ declare const meta: Meta<BsChatbotSuggestionButtonArgs>;
7
+ export default meta;
8
+ type Story = StoryObj<BsChatbotSuggestionButtonArgs>;
9
+ export declare const Default: Story;
10
+ export declare const SuggestionRow: Story;
@@ -190,6 +190,44 @@ export namespace Components {
190
190
  */
191
191
  "sourcesCount"?: number;
192
192
  }
193
+ /**
194
+ * A pill-shaped clickable suggestion chip for a Genie AI chat panel (e.g. "How can I help you?").
195
+ * One instance renders one chip -- to show several suggestion prompts side by side, render
196
+ * multiple `bs-chatbot-suggestion-button` elements inside a plain flex-wrap container; this
197
+ * library doesn't ship a separate list/group component for that since a `<div>` with
198
+ * `flex-wrap: wrap` is sufficient.
199
+ * ## When to use
200
+ * - Quick-reply/starter prompts shown above or alongside `bs-composer` in a Genie AI chat panel.
201
+ * ## When not to use
202
+ * - As a general-purpose button -- use `bs-button` instead, this component's pill shape and
203
+ * tonal color treatment are specific to Genie chat suggestion prompts.
204
+ * @prop --bs-chatbot-suggestion-button-radius - Corner radius. Aliased to `--bs-border-radius-full`.
205
+ * @prop --bs-chatbot-suggestion-button-border-color - Border color. Aliased to `--bs-border-primary`.
206
+ * @prop --bs-chatbot-suggestion-button-bg-default - Background in the default (enabled) state.
207
+ * Aliased to `--bs-color-primary-container`.
208
+ * @prop --bs-chatbot-suggestion-button-bg-hover - Background on hover. Aliased to
209
+ * `--bs-color-primary-container-hover`.
210
+ * @prop --bs-chatbot-suggestion-button-bg-pressed - Background when pressed. Aliased directly to
211
+ * the primitive `--bs-brand-200` -- there's no pre-built semantic "container-pressed" token
212
+ * matching this tonal button's lighter pressed shade progression (50 -> 100 -> 200), so this
213
+ * component aliases one locally (same situation `bs-button.css` documents for its
214
+ * subtle/outlined/success/warning/info variants).
215
+ * @prop --bs-chatbot-suggestion-button-bg-focus - Background when focused. Aliased to
216
+ * `--bs-color-primary-container-hover` (same as hover).
217
+ * @prop --bs-chatbot-suggestion-button-text-default - Text color in the default state. Aliased to
218
+ * `--bs-text-action`.
219
+ * @prop --bs-chatbot-suggestion-button-text-hover - Text color on hover, pressed, and focus.
220
+ * Aliased to `--bs-text-action-hover`.
221
+ * @prop --bs-chatbot-suggestion-button-focus-ring-color - Focus ring color. Aliased to
222
+ * `--bs-border-primary-focus`.
223
+ */
224
+ interface BsChatbotSuggestionButton {
225
+ /**
226
+ * Disables the button and applies a reduced-opacity treatment.
227
+ * @default false
228
+ */
229
+ "disabled": boolean;
230
+ }
193
231
  /**
194
232
  * A chat composer input for Genie AI-style conversational interfaces: a text field
195
233
  * plus an attach button, a mic/voice-recording toggle, and a single primary action button whose
@@ -382,6 +420,10 @@ export interface BsChatbotResponseActionCustomEvent<T> extends CustomEvent<T> {
382
420
  detail: T;
383
421
  target: HTMLBsChatbotResponseActionElement;
384
422
  }
423
+ export interface BsChatbotSuggestionButtonCustomEvent<T> extends CustomEvent<T> {
424
+ detail: T;
425
+ target: HTMLBsChatbotSuggestionButtonElement;
426
+ }
385
427
  export interface BsComposerCustomEvent<T> extends CustomEvent<T> {
386
428
  detail: T;
387
429
  target: HTMLBsComposerElement;
@@ -568,6 +610,54 @@ declare global {
568
610
  prototype: HTMLBsChatbotResponseActionElement;
569
611
  new (): HTMLBsChatbotResponseActionElement;
570
612
  };
613
+ interface HTMLBsChatbotSuggestionButtonElementEventMap {
614
+ "bsSelect": void;
615
+ }
616
+ /**
617
+ * A pill-shaped clickable suggestion chip for a Genie AI chat panel (e.g. "How can I help you?").
618
+ * One instance renders one chip -- to show several suggestion prompts side by side, render
619
+ * multiple `bs-chatbot-suggestion-button` elements inside a plain flex-wrap container; this
620
+ * library doesn't ship a separate list/group component for that since a `<div>` with
621
+ * `flex-wrap: wrap` is sufficient.
622
+ * ## When to use
623
+ * - Quick-reply/starter prompts shown above or alongside `bs-composer` in a Genie AI chat panel.
624
+ * ## When not to use
625
+ * - As a general-purpose button -- use `bs-button` instead, this component's pill shape and
626
+ * tonal color treatment are specific to Genie chat suggestion prompts.
627
+ * @prop --bs-chatbot-suggestion-button-radius - Corner radius. Aliased to `--bs-border-radius-full`.
628
+ * @prop --bs-chatbot-suggestion-button-border-color - Border color. Aliased to `--bs-border-primary`.
629
+ * @prop --bs-chatbot-suggestion-button-bg-default - Background in the default (enabled) state.
630
+ * Aliased to `--bs-color-primary-container`.
631
+ * @prop --bs-chatbot-suggestion-button-bg-hover - Background on hover. Aliased to
632
+ * `--bs-color-primary-container-hover`.
633
+ * @prop --bs-chatbot-suggestion-button-bg-pressed - Background when pressed. Aliased directly to
634
+ * the primitive `--bs-brand-200` -- there's no pre-built semantic "container-pressed" token
635
+ * matching this tonal button's lighter pressed shade progression (50 -> 100 -> 200), so this
636
+ * component aliases one locally (same situation `bs-button.css` documents for its
637
+ * subtle/outlined/success/warning/info variants).
638
+ * @prop --bs-chatbot-suggestion-button-bg-focus - Background when focused. Aliased to
639
+ * `--bs-color-primary-container-hover` (same as hover).
640
+ * @prop --bs-chatbot-suggestion-button-text-default - Text color in the default state. Aliased to
641
+ * `--bs-text-action`.
642
+ * @prop --bs-chatbot-suggestion-button-text-hover - Text color on hover, pressed, and focus.
643
+ * Aliased to `--bs-text-action-hover`.
644
+ * @prop --bs-chatbot-suggestion-button-focus-ring-color - Focus ring color. Aliased to
645
+ * `--bs-border-primary-focus`.
646
+ */
647
+ interface HTMLBsChatbotSuggestionButtonElement extends Components.BsChatbotSuggestionButton, HTMLStencilElement {
648
+ addEventListener<K extends keyof HTMLBsChatbotSuggestionButtonElementEventMap>(type: K, listener: (this: HTMLBsChatbotSuggestionButtonElement, ev: BsChatbotSuggestionButtonCustomEvent<HTMLBsChatbotSuggestionButtonElementEventMap[K]>) => any, options?: boolean | AddEventListenerOptions): void;
649
+ addEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
650
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
651
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
652
+ removeEventListener<K extends keyof HTMLBsChatbotSuggestionButtonElementEventMap>(type: K, listener: (this: HTMLBsChatbotSuggestionButtonElement, ev: BsChatbotSuggestionButtonCustomEvent<HTMLBsChatbotSuggestionButtonElementEventMap[K]>) => any, options?: boolean | EventListenerOptions): void;
653
+ removeEventListener<K extends keyof DocumentEventMap>(type: K, listener: (this: Document, ev: DocumentEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
654
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, ev: HTMLElementEventMap[K]) => any, options?: boolean | EventListenerOptions): void;
655
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
656
+ }
657
+ var HTMLBsChatbotSuggestionButtonElement: {
658
+ prototype: HTMLBsChatbotSuggestionButtonElement;
659
+ new (): HTMLBsChatbotSuggestionButtonElement;
660
+ };
571
661
  interface HTMLBsComposerElementEventMap {
572
662
  "bsInput": string;
573
663
  "bsSubmit": void;
@@ -770,6 +860,7 @@ declare global {
770
860
  "bs-card": HTMLBsCardElement;
771
861
  "bs-chatbot-header": HTMLBsChatbotHeaderElement;
772
862
  "bs-chatbot-response-action": HTMLBsChatbotResponseActionElement;
863
+ "bs-chatbot-suggestion-button": HTMLBsChatbotSuggestionButtonElement;
773
864
  "bs-composer": HTMLBsComposerElement;
774
865
  "bs-data-table": HTMLBsDataTableElement;
775
866
  "bs-input": HTMLBsInputElement;
@@ -989,6 +1080,48 @@ declare namespace LocalJSX {
989
1080
  */
990
1081
  "sourcesCount"?: number;
991
1082
  }
1083
+ /**
1084
+ * A pill-shaped clickable suggestion chip for a Genie AI chat panel (e.g. "How can I help you?").
1085
+ * One instance renders one chip -- to show several suggestion prompts side by side, render
1086
+ * multiple `bs-chatbot-suggestion-button` elements inside a plain flex-wrap container; this
1087
+ * library doesn't ship a separate list/group component for that since a `<div>` with
1088
+ * `flex-wrap: wrap` is sufficient.
1089
+ * ## When to use
1090
+ * - Quick-reply/starter prompts shown above or alongside `bs-composer` in a Genie AI chat panel.
1091
+ * ## When not to use
1092
+ * - As a general-purpose button -- use `bs-button` instead, this component's pill shape and
1093
+ * tonal color treatment are specific to Genie chat suggestion prompts.
1094
+ * @prop --bs-chatbot-suggestion-button-radius - Corner radius. Aliased to `--bs-border-radius-full`.
1095
+ * @prop --bs-chatbot-suggestion-button-border-color - Border color. Aliased to `--bs-border-primary`.
1096
+ * @prop --bs-chatbot-suggestion-button-bg-default - Background in the default (enabled) state.
1097
+ * Aliased to `--bs-color-primary-container`.
1098
+ * @prop --bs-chatbot-suggestion-button-bg-hover - Background on hover. Aliased to
1099
+ * `--bs-color-primary-container-hover`.
1100
+ * @prop --bs-chatbot-suggestion-button-bg-pressed - Background when pressed. Aliased directly to
1101
+ * the primitive `--bs-brand-200` -- there's no pre-built semantic "container-pressed" token
1102
+ * matching this tonal button's lighter pressed shade progression (50 -> 100 -> 200), so this
1103
+ * component aliases one locally (same situation `bs-button.css` documents for its
1104
+ * subtle/outlined/success/warning/info variants).
1105
+ * @prop --bs-chatbot-suggestion-button-bg-focus - Background when focused. Aliased to
1106
+ * `--bs-color-primary-container-hover` (same as hover).
1107
+ * @prop --bs-chatbot-suggestion-button-text-default - Text color in the default state. Aliased to
1108
+ * `--bs-text-action`.
1109
+ * @prop --bs-chatbot-suggestion-button-text-hover - Text color on hover, pressed, and focus.
1110
+ * Aliased to `--bs-text-action-hover`.
1111
+ * @prop --bs-chatbot-suggestion-button-focus-ring-color - Focus ring color. Aliased to
1112
+ * `--bs-border-primary-focus`.
1113
+ */
1114
+ interface BsChatbotSuggestionButton {
1115
+ /**
1116
+ * Disables the button and applies a reduced-opacity treatment.
1117
+ * @default false
1118
+ */
1119
+ "disabled"?: boolean;
1120
+ /**
1121
+ * Fires when the button is clicked.
1122
+ */
1123
+ "onBsSelect"?: (event: BsChatbotSuggestionButtonCustomEvent<void>) => void;
1124
+ }
992
1125
  /**
993
1126
  * A chat composer input for Genie AI-style conversational interfaces: a text field
994
1127
  * plus an attach button, a mic/voice-recording toggle, and a single primary action button whose
@@ -1230,6 +1363,9 @@ declare namespace LocalJSX {
1230
1363
  "sourcesCount": number;
1231
1364
  "menuOpen": boolean;
1232
1365
  }
1366
+ interface BsChatbotSuggestionButtonAttributes {
1367
+ "disabled": boolean;
1368
+ }
1233
1369
  interface BsComposerAttributes {
1234
1370
  "variant": BsComposerVariant;
1235
1371
  "placeholder": string;
@@ -1264,6 +1400,7 @@ declare namespace LocalJSX {
1264
1400
  "bs-card": Omit<BsCard, keyof BsCardAttributes> & { [K in keyof BsCard & keyof BsCardAttributes]?: BsCard[K] } & { [K in keyof BsCard & keyof BsCardAttributes as `attr:${K}`]?: BsCardAttributes[K] } & { [K in keyof BsCard & keyof BsCardAttributes as `prop:${K}`]?: BsCard[K] };
1265
1401
  "bs-chatbot-header": Omit<BsChatbotHeader, keyof BsChatbotHeaderAttributes> & { [K in keyof BsChatbotHeader & keyof BsChatbotHeaderAttributes]?: BsChatbotHeader[K] } & { [K in keyof BsChatbotHeader & keyof BsChatbotHeaderAttributes as `attr:${K}`]?: BsChatbotHeaderAttributes[K] } & { [K in keyof BsChatbotHeader & keyof BsChatbotHeaderAttributes as `prop:${K}`]?: BsChatbotHeader[K] };
1266
1402
  "bs-chatbot-response-action": Omit<BsChatbotResponseAction, keyof BsChatbotResponseActionAttributes> & { [K in keyof BsChatbotResponseAction & keyof BsChatbotResponseActionAttributes]?: BsChatbotResponseAction[K] } & { [K in keyof BsChatbotResponseAction & keyof BsChatbotResponseActionAttributes as `attr:${K}`]?: BsChatbotResponseActionAttributes[K] } & { [K in keyof BsChatbotResponseAction & keyof BsChatbotResponseActionAttributes as `prop:${K}`]?: BsChatbotResponseAction[K] };
1403
+ "bs-chatbot-suggestion-button": Omit<BsChatbotSuggestionButton, keyof BsChatbotSuggestionButtonAttributes> & { [K in keyof BsChatbotSuggestionButton & keyof BsChatbotSuggestionButtonAttributes]?: BsChatbotSuggestionButton[K] } & { [K in keyof BsChatbotSuggestionButton & keyof BsChatbotSuggestionButtonAttributes as `attr:${K}`]?: BsChatbotSuggestionButtonAttributes[K] } & { [K in keyof BsChatbotSuggestionButton & keyof BsChatbotSuggestionButtonAttributes as `prop:${K}`]?: BsChatbotSuggestionButton[K] };
1267
1404
  "bs-composer": Omit<BsComposer, keyof BsComposerAttributes> & { [K in keyof BsComposer & keyof BsComposerAttributes]?: BsComposer[K] } & { [K in keyof BsComposer & keyof BsComposerAttributes as `attr:${K}`]?: BsComposerAttributes[K] } & { [K in keyof BsComposer & keyof BsComposerAttributes as `prop:${K}`]?: BsComposer[K] };
1268
1405
  "bs-data-table": Omit<BsDataTable, keyof BsDataTableAttributes> & { [K in keyof BsDataTable & keyof BsDataTableAttributes]?: BsDataTable[K] } & { [K in keyof BsDataTable & keyof BsDataTableAttributes as `attr:${K}`]?: BsDataTableAttributes[K] } & { [K in keyof BsDataTable & keyof BsDataTableAttributes as `prop:${K}`]?: BsDataTable[K] };
1269
1406
  "bs-input": Omit<BsInput, keyof BsInputAttributes> & { [K in keyof BsInput & keyof BsInputAttributes]?: BsInput[K] } & { [K in keyof BsInput & keyof BsInputAttributes as `attr:${K}`]?: BsInputAttributes[K] } & { [K in keyof BsInput & keyof BsInputAttributes as `prop:${K}`]?: BsInput[K] };
@@ -1381,6 +1518,38 @@ declare module "@stencil/core" {
1381
1518
  * @prop --bs-chatbot-response-action-sources-line-height - Aliased to `--bs-line-height-body-sm`.
1382
1519
  */
1383
1520
  "bs-chatbot-response-action": LocalJSX.IntrinsicElements["bs-chatbot-response-action"] & JSXBase.HTMLAttributes<HTMLBsChatbotResponseActionElement>;
1521
+ /**
1522
+ * A pill-shaped clickable suggestion chip for a Genie AI chat panel (e.g. "How can I help you?").
1523
+ * One instance renders one chip -- to show several suggestion prompts side by side, render
1524
+ * multiple `bs-chatbot-suggestion-button` elements inside a plain flex-wrap container; this
1525
+ * library doesn't ship a separate list/group component for that since a `<div>` with
1526
+ * `flex-wrap: wrap` is sufficient.
1527
+ * ## When to use
1528
+ * - Quick-reply/starter prompts shown above or alongside `bs-composer` in a Genie AI chat panel.
1529
+ * ## When not to use
1530
+ * - As a general-purpose button -- use `bs-button` instead, this component's pill shape and
1531
+ * tonal color treatment are specific to Genie chat suggestion prompts.
1532
+ * @prop --bs-chatbot-suggestion-button-radius - Corner radius. Aliased to `--bs-border-radius-full`.
1533
+ * @prop --bs-chatbot-suggestion-button-border-color - Border color. Aliased to `--bs-border-primary`.
1534
+ * @prop --bs-chatbot-suggestion-button-bg-default - Background in the default (enabled) state.
1535
+ * Aliased to `--bs-color-primary-container`.
1536
+ * @prop --bs-chatbot-suggestion-button-bg-hover - Background on hover. Aliased to
1537
+ * `--bs-color-primary-container-hover`.
1538
+ * @prop --bs-chatbot-suggestion-button-bg-pressed - Background when pressed. Aliased directly to
1539
+ * the primitive `--bs-brand-200` -- there's no pre-built semantic "container-pressed" token
1540
+ * matching this tonal button's lighter pressed shade progression (50 -> 100 -> 200), so this
1541
+ * component aliases one locally (same situation `bs-button.css` documents for its
1542
+ * subtle/outlined/success/warning/info variants).
1543
+ * @prop --bs-chatbot-suggestion-button-bg-focus - Background when focused. Aliased to
1544
+ * `--bs-color-primary-container-hover` (same as hover).
1545
+ * @prop --bs-chatbot-suggestion-button-text-default - Text color in the default state. Aliased to
1546
+ * `--bs-text-action`.
1547
+ * @prop --bs-chatbot-suggestion-button-text-hover - Text color on hover, pressed, and focus.
1548
+ * Aliased to `--bs-text-action-hover`.
1549
+ * @prop --bs-chatbot-suggestion-button-focus-ring-color - Focus ring color. Aliased to
1550
+ * `--bs-border-primary-focus`.
1551
+ */
1552
+ "bs-chatbot-suggestion-button": LocalJSX.IntrinsicElements["bs-chatbot-suggestion-button"] & JSXBase.HTMLAttributes<HTMLBsChatbotSuggestionButtonElement>;
1384
1553
  /**
1385
1554
  * A chat composer input for Genie AI-style conversational interfaces: a text field
1386
1555
  * plus an attach button, a mic/voice-recording toggle, and a single primary action button whose
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brandsync/wc",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -54,6 +54,7 @@
54
54
  "@stencil/vitest": "^1.8.3",
55
55
  "@storybook/addon-a11y": "^10.5.8",
56
56
  "@storybook/addon-docs": "^10.5.8",
57
+ "@storybook/addon-vitest": "^10.5.8",
57
58
  "@storybook/web-components-vite": "^10.5.8",
58
59
  "@types/node": "^22.13.5",
59
60
  "@vitest/browser-playwright": "^4.0.0",