[{"data":1,"prerenderedAt":1788},["ShallowReactive",2],{"locale-alternates":3,"docs-nav-en":134,"api-none":377,"page-en-\u002Fcomponents\u002Fbb-confirm":378,"pt-showcase-BbConfirm":1729},{"\u002Fit\u002Fcomponenti\u002Fbb-accordion":4,"\u002Fen\u002Fcomponents\u002Fbb-accordion":5,"\u002Fit\u002Fcomponenti\u002Fbb-alert":6,"\u002Fen\u002Fcomponents\u002Fbb-alert":7,"\u002Fit\u002Fcomponenti\u002Fbb-asterisk":8,"\u002Fen\u002Fcomponents\u002Fbb-asterisk":9,"\u002Fit\u002Fcomponenti\u002Fbb-avatar":10,"\u002Fen\u002Fcomponents\u002Fbb-avatar":11,"\u002Fit\u002Fcomponenti\u002Fbb-badge":12,"\u002Fen\u002Fcomponents\u002Fbb-badge":13,"\u002Fit\u002Fcomponenti\u002Fbb-base-button":14,"\u002Fen\u002Fcomponents\u002Fbb-base-button":15,"\u002Fit\u002Fcomponenti\u002Fbb-breadcrumbs":16,"\u002Fen\u002Fcomponents\u002Fbb-breadcrumbs":17,"\u002Fit\u002Fcomponenti\u002Fbb-button":18,"\u002Fen\u002Fcomponents\u002Fbb-button":19,"\u002Fit\u002Fcomponenti\u002Fbb-calendar":20,"\u002Fen\u002Fcomponents\u002Fbb-calendar":21,"\u002Fit\u002Fcomponenti\u002Fbb-checkbox":22,"\u002Fen\u002Fcomponents\u002Fbb-checkbox":23,"\u002Fit\u002Fcomponenti\u002Fbb-checkbox-group":24,"\u002Fen\u002Fcomponents\u002Fbb-checkbox-group":25,"\u002Fit\u002Fcomponenti\u002Fbb-collapsible":26,"\u002Fen\u002Fcomponents\u002Fbb-collapsible":27,"\u002Fit\u002Fcomponenti\u002Fbb-color-input":28,"\u002Fen\u002Fcomponents\u002Fbb-color-input":29,"\u002Fit\u002Fcomponenti\u002Fbb-color-palette":30,"\u002Fen\u002Fcomponents\u002Fbb-color-palette":31,"\u002Fit\u002Fcomponenti\u002Fbb-confirm":32,"\u002Fen\u002Fcomponents\u002Fbb-confirm":33,"\u002Fit\u002Fcomponenti\u002Fbb-date-picker":34,"\u002Fen\u002Fcomponents\u002Fbb-date-picker":35,"\u002Fit\u002Fcomponenti\u002Fbb-date-picker-input":36,"\u002Fen\u002Fcomponents\u002Fbb-date-picker-input":37,"\u002Fit\u002Fcomponenti\u002Fbb-dialog":38,"\u002Fen\u002Fcomponents\u002Fbb-dialog":39,"\u002Fit\u002Fcomponenti\u002Fbb-dropdown":40,"\u002Fen\u002Fcomponents\u002Fbb-dropdown":41,"\u002Fit\u002Fcomponenti\u002Fbb-dropdown-button":42,"\u002Fen\u002Fcomponents\u002Fbb-dropdown-button":43,"\u002Fit\u002Fcomponenti\u002Fbb-dropzone":44,"\u002Fen\u002Fcomponents\u002Fbb-dropzone":45,"\u002Fit\u002Fcomponenti\u002Fbb-form":46,"\u002Fen\u002Fcomponents\u002Fbb-form":47,"\u002Fit\u002Fcomponenti\u002Fbb-hover-card":48,"\u002Fen\u002Fcomponents\u002Fbb-hover-card":49,"\u002Fit\u002Fcomponenti\u002Fbb-icon":50,"\u002Fen\u002Fcomponents\u002Fbb-icon":51,"\u002Fit\u002Fcomponenti\u002Fbb-indicator":52,"\u002Fen\u002Fcomponents\u002Fbb-indicator":53,"\u002Fit\u002Fcomponenti\u002Fbb-number-input":54,"\u002Fen\u002Fcomponents\u002Fbb-number-input":55,"\u002Fit\u002Fcomponenti\u002Fbb-off-canvas":56,"\u002Fen\u002Fcomponents\u002Fbb-off-canvas":57,"\u002Fit\u002Fcomponenti\u002Fbb-pagination":58,"\u002Fen\u002Fcomponents\u002Fbb-pagination":59,"\u002Fit\u002Fcomponenti\u002Fbb-popover":60,"\u002Fen\u002Fcomponents\u002Fbb-popover":61,"\u002Fit\u002Fcomponenti\u002Fbb-progress":62,"\u002Fen\u002Fcomponents\u002Fbb-progress":63,"\u002Fit\u002Fcomponenti\u002Fbb-radio":64,"\u002Fen\u002Fcomponents\u002Fbb-radio":65,"\u002Fit\u002Fcomponenti\u002Fbb-radio-group":66,"\u002Fen\u002Fcomponents\u002Fbb-radio-group":67,"\u002Fit\u002Fcomponenti\u002Fbb-rating":68,"\u002Fen\u002Fcomponents\u002Fbb-rating":69,"\u002Fit\u002Fcomponenti\u002Fbb-select":70,"\u002Fen\u002Fcomponents\u002Fbb-select":71,"\u002Fit\u002Fcomponenti\u002Fbb-select-popover":72,"\u002Fen\u002Fcomponents\u002Fbb-select-popover":73,"\u002Fit\u002Fcomponenti\u002Fbb-slider":74,"\u002Fen\u002Fcomponents\u002Fbb-slider":75,"\u002Fit\u002Fcomponenti\u002Fbb-smooth-height":76,"\u002Fen\u002Fcomponents\u002Fbb-smooth-height":77,"\u002Fit\u002Fcomponenti\u002Fbb-spinner":78,"\u002Fen\u002Fcomponents\u002Fbb-spinner":79,"\u002Fit\u002Fcomponenti\u002Fbb-switch":80,"\u002Fen\u002Fcomponents\u002Fbb-switch":81,"\u002Fit\u002Fcomponenti\u002Fbb-switch-group":82,"\u002Fen\u002Fcomponents\u002Fbb-switch-group":83,"\u002Fit\u002Fcomponenti\u002Fbb-table":84,"\u002Fen\u002Fcomponents\u002Fbb-table":85,"\u002Fit\u002Fcomponenti\u002Fbb-tabs":86,"\u002Fen\u002Fcomponents\u002Fbb-tabs":87,"\u002Fit\u002Fcomponenti\u002Fbb-tag":88,"\u002Fen\u002Fcomponents\u002Fbb-tag":89,"\u002Fit\u002Fcomponenti\u002Fbb-text-input":90,"\u002Fen\u002Fcomponents\u002Fbb-text-input":91,"\u002Fit\u002Fcomponenti\u002Fbb-textarea":92,"\u002Fen\u002Fcomponents\u002Fbb-textarea":93,"\u002Fit\u002Fcomponenti\u002Fbb-time-picker":94,"\u002Fen\u002Fcomponents\u002Fbb-time-picker":95,"\u002Fit\u002Fcomponenti\u002Fbb-time-picker-input":96,"\u002Fen\u002Fcomponents\u002Fbb-time-picker-input":97,"\u002Fit\u002Fcomponenti\u002Fbb-toast":98,"\u002Fen\u002Fcomponents\u002Fbb-toast":99,"\u002Fit\u002Fcomponenti\u002Fbb-tooltip":100,"\u002Fen\u002Fcomponents\u002Fbb-tooltip":101,"\u002Fit\u002Fcomponenti\u002Fbb-tree":102,"\u002Fen\u002Fcomponents\u002Fbb-tree":103,"\u002Fit\u002Fguide\u002Fadoption-checklist":104,"\u002Fen\u002Fguides\u002Fadoption-checklist":105,"\u002Fit\u002Fguide\u002Fai-agents":106,"\u002Fen\u002Fguides\u002Fai-agents":107,"\u002Fit\u002Fguide\u002Fcoherence":108,"\u002Fen\u002Fguides\u002Fcoherence":109,"\u002Fit\u002Fguide\u002Fdesign-language":110,"\u002Fen\u002Fguides\u002Fdesign-language":111,"\u002Fit\u002Fguide\u002Fdesign-tokens":112,"\u002Fen\u002Fguides\u002Fdesign-tokens":113,"\u002Fit\u002Fguide\u002Ffetching-data":114,"\u002Fen\u002Fguides\u002Ffetching-data":115,"\u002Fit\u002Fguide\u002Ficons":116,"\u002Fen\u002Fguides\u002Ficons":117,"\u002Fit\u002Fguide\u002Finertia":118,"\u002Fen\u002Fguides\u002Finertia":119,"\u002Fit\u002Fguide\u002Finstallation":120,"\u002Fen\u002Fguides\u002Finstallation":121,"\u002Fit\u002Fguide\u002Fmigration":122,"\u002Fen\u002Fguides\u002Fmigration":123,"\u002Fit\u002Fguide\u002Fnuxt":124,"\u002Fen\u002Fguides\u002Fnuxt":125,"\u002Fit\u002Fguide\u002Foptions-and-items":126,"\u002Fen\u002Fguides\u002Foptions-and-items":127,"\u002Fit\u002Fguide\u002Fpassthrough":128,"\u002Fen\u002Fguides\u002Fpassthrough":129,"\u002Fit\u002Fguide\u002Fpreset-components":130,"\u002Fen\u002Fguides\u002Fpreset-components":131,"\u002Fit\u002Fguide\u002Fvalidated-forms":132,"\u002Fen\u002Fguides\u002Fvalidated-forms":133},"\u002Fen\u002Fcomponents\u002Fbb-accordion","\u002Fit\u002Fcomponenti\u002Fbb-accordion","\u002Fen\u002Fcomponents\u002Fbb-alert","\u002Fit\u002Fcomponenti\u002Fbb-alert","\u002Fen\u002Fcomponents\u002Fbb-asterisk","\u002Fit\u002Fcomponenti\u002Fbb-asterisk","\u002Fen\u002Fcomponents\u002Fbb-avatar","\u002Fit\u002Fcomponenti\u002Fbb-avatar","\u002Fen\u002Fcomponents\u002Fbb-badge","\u002Fit\u002Fcomponenti\u002Fbb-badge","\u002Fen\u002Fcomponents\u002Fbb-base-button","\u002Fit\u002Fcomponenti\u002Fbb-base-button","\u002Fen\u002Fcomponents\u002Fbb-breadcrumbs","\u002Fit\u002Fcomponenti\u002Fbb-breadcrumbs","\u002Fen\u002Fcomponents\u002Fbb-button","\u002Fit\u002Fcomponenti\u002Fbb-button","\u002Fen\u002Fcomponents\u002Fbb-calendar","\u002Fit\u002Fcomponenti\u002Fbb-calendar","\u002Fen\u002Fcomponents\u002Fbb-checkbox","\u002Fit\u002Fcomponenti\u002Fbb-checkbox","\u002Fen\u002Fcomponents\u002Fbb-checkbox-group","\u002Fit\u002Fcomponenti\u002Fbb-checkbox-group","\u002Fen\u002Fcomponents\u002Fbb-collapsible","\u002Fit\u002Fcomponenti\u002Fbb-collapsible","\u002Fen\u002Fcomponents\u002Fbb-color-input","\u002Fit\u002Fcomponenti\u002Fbb-color-input","\u002Fen\u002Fcomponents\u002Fbb-color-palette","\u002Fit\u002Fcomponenti\u002Fbb-color-palette","\u002Fen\u002Fcomponents\u002Fbb-confirm","\u002Fit\u002Fcomponenti\u002Fbb-confirm","\u002Fen\u002Fcomponents\u002Fbb-date-picker","\u002Fit\u002Fcomponenti\u002Fbb-date-picker","\u002Fen\u002Fcomponents\u002Fbb-date-picker-input","\u002Fit\u002Fcomponenti\u002Fbb-date-picker-input","\u002Fen\u002Fcomponents\u002Fbb-dialog","\u002Fit\u002Fcomponenti\u002Fbb-dialog","\u002Fen\u002Fcomponents\u002Fbb-dropdown","\u002Fit\u002Fcomponenti\u002Fbb-dropdown","\u002Fen\u002Fcomponents\u002Fbb-dropdown-button","\u002Fit\u002Fcomponenti\u002Fbb-dropdown-button","\u002Fen\u002Fcomponents\u002Fbb-dropzone","\u002Fit\u002Fcomponenti\u002Fbb-dropzone","\u002Fen\u002Fcomponents\u002Fbb-form","\u002Fit\u002Fcomponenti\u002Fbb-form","\u002Fen\u002Fcomponents\u002Fbb-hover-card","\u002Fit\u002Fcomponenti\u002Fbb-hover-card","\u002Fen\u002Fcomponents\u002Fbb-icon","\u002Fit\u002Fcomponenti\u002Fbb-icon","\u002Fen\u002Fcomponents\u002Fbb-indicator","\u002Fit\u002Fcomponenti\u002Fbb-indicator","\u002Fen\u002Fcomponents\u002Fbb-number-input","\u002Fit\u002Fcomponenti\u002Fbb-number-input","\u002Fen\u002Fcomponents\u002Fbb-off-canvas","\u002Fit\u002Fcomponenti\u002Fbb-off-canvas","\u002Fen\u002Fcomponents\u002Fbb-pagination","\u002Fit\u002Fcomponenti\u002Fbb-pagination","\u002Fen\u002Fcomponents\u002Fbb-popover","\u002Fit\u002Fcomponenti\u002Fbb-popover","\u002Fen\u002Fcomponents\u002Fbb-progress","\u002Fit\u002Fcomponenti\u002Fbb-progress","\u002Fen\u002Fcomponents\u002Fbb-radio","\u002Fit\u002Fcomponenti\u002Fbb-radio","\u002Fen\u002Fcomponents\u002Fbb-radio-group","\u002Fit\u002Fcomponenti\u002Fbb-radio-group","\u002Fen\u002Fcomponents\u002Fbb-rating","\u002Fit\u002Fcomponenti\u002Fbb-rating","\u002Fen\u002Fcomponents\u002Fbb-select","\u002Fit\u002Fcomponenti\u002Fbb-select","\u002Fen\u002Fcomponents\u002Fbb-select-popover","\u002Fit\u002Fcomponenti\u002Fbb-select-popover","\u002Fen\u002Fcomponents\u002Fbb-slider","\u002Fit\u002Fcomponenti\u002Fbb-slider","\u002Fen\u002Fcomponents\u002Fbb-smooth-height","\u002Fit\u002Fcomponenti\u002Fbb-smooth-height","\u002Fen\u002Fcomponents\u002Fbb-spinner","\u002Fit\u002Fcomponenti\u002Fbb-spinner","\u002Fen\u002Fcomponents\u002Fbb-switch","\u002Fit\u002Fcomponenti\u002Fbb-switch","\u002Fen\u002Fcomponents\u002Fbb-switch-group","\u002Fit\u002Fcomponenti\u002Fbb-switch-group","\u002Fen\u002Fcomponents\u002Fbb-table","\u002Fit\u002Fcomponenti\u002Fbb-table","\u002Fen\u002Fcomponents\u002Fbb-tabs","\u002Fit\u002Fcomponenti\u002Fbb-tabs","\u002Fen\u002Fcomponents\u002Fbb-tag","\u002Fit\u002Fcomponenti\u002Fbb-tag","\u002Fen\u002Fcomponents\u002Fbb-text-input","\u002Fit\u002Fcomponenti\u002Fbb-text-input","\u002Fen\u002Fcomponents\u002Fbb-textarea","\u002Fit\u002Fcomponenti\u002Fbb-textarea","\u002Fen\u002Fcomponents\u002Fbb-time-picker","\u002Fit\u002Fcomponenti\u002Fbb-time-picker","\u002Fen\u002Fcomponents\u002Fbb-time-picker-input","\u002Fit\u002Fcomponenti\u002Fbb-time-picker-input","\u002Fen\u002Fcomponents\u002Fbb-toast","\u002Fit\u002Fcomponenti\u002Fbb-toast","\u002Fen\u002Fcomponents\u002Fbb-tooltip","\u002Fit\u002Fcomponenti\u002Fbb-tooltip","\u002Fen\u002Fcomponents\u002Fbb-tree","\u002Fit\u002Fcomponenti\u002Fbb-tree","\u002Fen\u002Fguides\u002Fadoption-checklist","\u002Fit\u002Fguide\u002Fadoption-checklist","\u002Fen\u002Fguides\u002Fai-agents","\u002Fit\u002Fguide\u002Fai-agents","\u002Fen\u002Fguides\u002Fcoherence","\u002Fit\u002Fguide\u002Fcoherence","\u002Fen\u002Fguides\u002Fdesign-language","\u002Fit\u002Fguide\u002Fdesign-language","\u002Fen\u002Fguides\u002Fdesign-tokens","\u002Fit\u002Fguide\u002Fdesign-tokens","\u002Fen\u002Fguides\u002Ffetching-data","\u002Fit\u002Fguide\u002Ffetching-data","\u002Fen\u002Fguides\u002Ficons","\u002Fit\u002Fguide\u002Ficons","\u002Fen\u002Fguides\u002Finertia","\u002Fit\u002Fguide\u002Finertia","\u002Fen\u002Fguides\u002Finstallation","\u002Fit\u002Fguide\u002Finstallation","\u002Fen\u002Fguides\u002Fmigration","\u002Fit\u002Fguide\u002Fmigration","\u002Fen\u002Fguides\u002Fnuxt","\u002Fit\u002Fguide\u002Fnuxt","\u002Fen\u002Fguides\u002Foptions-and-items","\u002Fit\u002Fguide\u002Foptions-and-items","\u002Fen\u002Fguides\u002Fpassthrough","\u002Fit\u002Fguide\u002Fpassthrough","\u002Fen\u002Fguides\u002Fpreset-components","\u002Fit\u002Fguide\u002Fpreset-components","\u002Fen\u002Fguides\u002Fvalidated-forms","\u002Fit\u002Fguide\u002Fvalidated-forms",[135,150,162,186,198,242,275,311,332,353,365,371],{"label":136,"entries":137},"Getting started",[138,142,146],{"title":139,"path":140,"order":141},"Installation","\u002Fguides\u002Finstallation",1,{"title":143,"path":144,"order":145},"Migrating from v2","\u002Fguides\u002Fmigration",2,{"title":147,"path":148,"order":149},"Adoption checklist","\u002Fguides\u002Fadoption-checklist",3,{"label":151,"entries":152},"Design system",[153,156,159],{"title":154,"path":155,"order":141},"Design tokens","\u002Fguides\u002Fdesign-tokens",{"title":157,"path":158,"order":145},"Design language","\u002Fguides\u002Fdesign-language",{"title":160,"path":161,"order":149},"Passthrough","\u002Fguides\u002Fpassthrough",{"label":163,"entries":164},"Playbooks",[165,168,171,174,178,182],{"title":166,"path":167,"order":141},"Options and items","\u002Fguides\u002Foptions-and-items",{"title":169,"path":170,"order":145},"Fetching data","\u002Fguides\u002Ffetching-data",{"title":172,"path":173,"order":149},"Coherence","\u002Fguides\u002Fcoherence",{"title":175,"path":176,"order":177},"Validated forms","\u002Fguides\u002Fvalidated-forms",4,{"title":179,"path":180,"order":181},"Icons","\u002Fguides\u002Ficons",5,{"title":183,"path":184,"order":185},"Preset components","\u002Fguides\u002Fpreset-components",6,{"label":187,"entries":188},"Ecosystem",[189,192,195],{"title":190,"path":191,"order":141},"Inertia and Laravel","\u002Fguides\u002Finertia",{"title":193,"path":194,"order":145},"Nuxt","\u002Fguides\u002Fnuxt",{"title":196,"path":197,"order":149},"AI agents","\u002Fguides\u002Fai-agents",{"label":199,"entries":200},"Inputs",[201,204,207,210,213,216,219,222,226,230,234,238],{"title":202,"path":203,"component":202,"order":141},"BbBaseButton","\u002Fcomponents\u002Fbb-base-button",{"title":205,"path":206,"component":205,"order":145},"BbButton","\u002Fcomponents\u002Fbb-button",{"title":208,"path":209,"component":208,"order":149},"BbCalendar","\u002Fcomponents\u002Fbb-calendar",{"title":211,"path":212,"component":211,"order":149},"BbColorInput","\u002Fcomponents\u002Fbb-color-input",{"title":214,"path":215,"component":214,"order":177},"BbDatePickerInput","\u002Fcomponents\u002Fbb-date-picker-input",{"title":217,"path":218,"component":217,"order":181},"BbDropzone","\u002Fcomponents\u002Fbb-dropzone",{"title":220,"path":221,"component":220,"order":185},"BbForm","\u002Fcomponents\u002Fbb-form",{"title":223,"path":224,"component":223,"order":225},"BbNumberInput","\u002Fcomponents\u002Fbb-number-input",7,{"title":227,"path":228,"component":227,"order":229},"BbTag","\u002Fcomponents\u002Fbb-tag",8,{"title":231,"path":232,"component":231,"order":233},"BbTextarea","\u002Fcomponents\u002Fbb-textarea",9,{"title":235,"path":236,"component":235,"order":237},"BbTextInput","\u002Fcomponents\u002Fbb-text-input",10,{"title":239,"path":240,"component":239,"order":241},"BbTimePickerInput","\u002Fcomponents\u002Fbb-time-picker-input",11,{"label":243,"entries":244},"Selection",[245,248,251,254,257,260,263,266,269,272],{"title":246,"path":247,"component":246,"order":141},"BbCheckbox","\u002Fcomponents\u002Fbb-checkbox",{"title":249,"path":250,"component":249,"order":145},"BbCheckboxGroup","\u002Fcomponents\u002Fbb-checkbox-group",{"title":252,"path":253,"component":252,"order":149},"BbRadio","\u002Fcomponents\u002Fbb-radio",{"title":255,"path":256,"component":255,"order":177},"BbRadioGroup","\u002Fcomponents\u002Fbb-radio-group",{"title":258,"path":259,"component":258,"order":181},"BbRating","\u002Fcomponents\u002Fbb-rating",{"title":261,"path":262,"component":261,"order":185},"BbSelect","\u002Fcomponents\u002Fbb-select",{"title":264,"path":265,"component":264,"order":225},"BbSelectPopover","\u002Fcomponents\u002Fbb-select-popover",{"title":267,"path":268,"component":267,"order":229},"BbSlider","\u002Fcomponents\u002Fbb-slider",{"title":270,"path":271,"component":270,"order":233},"BbSwitch","\u002Fcomponents\u002Fbb-switch",{"title":273,"path":274,"component":273,"order":237},"BbSwitchGroup","\u002Fcomponents\u002Fbb-switch-group",{"label":276,"entries":277},"Overlay",[278,281,284,287,290,293,296,299,302,305,308],{"title":279,"path":280,"component":279,"order":141},"BbColorPalette","\u002Fcomponents\u002Fbb-color-palette",{"title":282,"path":283,"component":282,"order":145},"BbConfirm","\u002Fcomponents\u002Fbb-confirm",{"title":285,"path":286,"component":285,"order":149},"BbDatePicker","\u002Fcomponents\u002Fbb-date-picker",{"title":288,"path":289,"component":288,"order":177},"BbDialog","\u002Fcomponents\u002Fbb-dialog",{"title":291,"path":292,"component":291,"order":181},"BbDropdown","\u002Fcomponents\u002Fbb-dropdown",{"title":294,"path":295,"component":294,"order":185},"BbDropdownButton","\u002Fcomponents\u002Fbb-dropdown-button",{"title":297,"path":298,"component":297,"order":225},"BbHoverCard","\u002Fcomponents\u002Fbb-hover-card",{"title":300,"path":301,"component":300,"order":225},"BbOffCanvas","\u002Fcomponents\u002Fbb-off-canvas",{"title":303,"path":304,"component":303,"order":229},"BbPopover","\u002Fcomponents\u002Fbb-popover",{"title":306,"path":307,"component":306,"order":233},"BbTimePicker","\u002Fcomponents\u002Fbb-time-picker",{"title":309,"path":310,"component":309,"order":237},"BbTooltip","\u002Fcomponents\u002Fbb-tooltip",{"label":312,"entries":313},"Navigation",[314,317,320,323,326,329],{"title":315,"path":316,"component":315,"order":141},"BbAccordion","\u002Fcomponents\u002Fbb-accordion",{"title":318,"path":319,"component":318,"order":145},"BbBreadcrumbs","\u002Fcomponents\u002Fbb-breadcrumbs",{"title":321,"path":322,"component":321,"order":149},"BbCollapsible","\u002Fcomponents\u002Fbb-collapsible",{"title":324,"path":325,"component":324,"order":177},"BbPagination","\u002Fcomponents\u002Fbb-pagination",{"title":327,"path":328,"component":327,"order":181},"BbTabs","\u002Fcomponents\u002Fbb-tabs",{"title":330,"path":331,"component":330,"order":185},"BbTree","\u002Fcomponents\u002Fbb-tree",{"label":333,"entries":334},"Feedback",[335,338,341,344,347,350],{"title":336,"path":337,"component":336,"order":141},"BbAlert","\u002Fcomponents\u002Fbb-alert",{"title":339,"path":340,"component":339,"order":145},"BbBadge","\u002Fcomponents\u002Fbb-badge",{"title":342,"path":343,"component":342,"order":149},"BbIndicator","\u002Fcomponents\u002Fbb-indicator",{"title":345,"path":346,"component":345,"order":177},"BbProgress","\u002Fcomponents\u002Fbb-progress",{"title":348,"path":349,"component":348,"order":181},"BbSpinner","\u002Fcomponents\u002Fbb-spinner",{"title":351,"path":352,"component":351,"order":185},"BbToast","\u002Fcomponents\u002Fbb-toast",{"label":354,"entries":355},"Data Display",[356,359,362],{"title":357,"path":358,"component":357,"order":141},"BbAvatar","\u002Fcomponents\u002Fbb-avatar",{"title":360,"path":361,"component":360,"order":145},"BbIcon","\u002Fcomponents\u002Fbb-icon",{"title":363,"path":364,"component":363,"order":149},"BbTable","\u002Fcomponents\u002Fbb-table",{"label":366,"entries":367},"Layout & Utility",[368],{"title":369,"path":370,"component":369,"order":141},"BbSmoothHeight","\u002Fcomponents\u002Fbb-smooth-height",{"label":372,"entries":373},"Other",[374],{"title":375,"path":376,"component":375,"order":141},"BbAsterisk","\u002Fcomponents\u002Fbb-asterisk",null,{"id":379,"title":282,"body":380,"component":282,"description":1717,"extension":818,"group":276,"meta":1718,"navigation":543,"order":145,"path":283,"sections":1719,"seo":1726,"stem":1727,"__hash__":1728},"docs_en\u002Fcomponents\u002Fbb-confirm.md",{"type":381,"value":382,"toc":1705},"minimark",[383,422,441,449,459,595,630,641,649,655,659,669,680,700,706,722,725,747,782,823,829,832,835,848,864,870,1137,1148,1151,1157,1164,1167,1190,1203,1210,1217,1229,1232,1260,1298,1311,1331,1363,1369,1375,1378,1403,1406,1409,1432,1449,1457,1463,1478,1521,1571,1611,1649,1675,1701],[384,385,386,394],"when",{},[387,388,389,390,393],"p",{},"Use ",[391,392,282],"code",{}," when an action is destructive or irreversible — delete,\noverwrite, publish, sign out — or otherwise deserves a deliberate second step.",[395,396,398],"template",{"v-slot:else":397},"",[399,400,401,415],"ul",{},[402,403,404,409,410,414],"li",{},[405,406,407],"a",{"href":6},[391,408,336],{}," or\n",[405,411,412],{"href":98},[391,413,351],{}," — the message is informational rather\nthan a decision; an alert with two buttons is not a question",[402,416,417,421],{},[405,418,419],{"href":38},[391,420,288],{}," — the \"confirm\" has grown fields and\nvalidation; a confirm with an input in it is a form wearing a disguise",[387,423,424,425,427,428,436,437,440],{},"You do not place ",[391,426,282],{}," where the action lives, and there is no tag to\nmount for it. ",[429,430,431,432,435],"strong",{},"The app's one ",[391,433,434],{},"\u003CBbHost \u002F>"," renders every confirm, and it takes no\nprops."," The text, the buttons and what happens on dismissal all travel in the\nmessage you pass to ",[391,438,439],{},"useConfirm().confirm()",". The dialog is the render target;\nthe composable is the API.",[442,443,445],"h2",{"id":444},"setup",[446,447,448],"span",{},"Setup and destructive gates",[387,450,451,452,454,455,458],{},"Mount ",[391,453,434],{}," once, beside the router outlet, and ",[391,456,457],{},"confirm()"," works from\nanywhere after that — components, composables, stores alike. The same host\nrenders every toast too.",[460,461,465],"pre",{"className":462,"code":463,"language":464,"meta":397,"style":397},"language-vue shiki shiki-themes github-light-high-contrast github-dark-high-contrast","\u003Ctemplate>\n    \u003CNuxtLayout>\n        \u003CNuxtPage \u002F>\n    \u003C\u002FNuxtLayout>\n    \u003C!-- One per app. With named pt scopes, one per area layout,\n         if every page renders inside exactly one of them. -->\n    \u003CBbHost \u002F>\n\u003C\u002Ftemplate>\n\n\u003Cscript setup lang=\"ts\">\nimport { BbHost } from 'bitboss-ui';\n\u003C\u002Fscript>\n","vue",[391,466,467,480,490,501,510,516,521,530,539,545,568,586],{"__ignoreMap":397},[446,468,470,474,477],{"class":469,"line":141},"line",[446,471,473],{"class":472},"suds8","\u003C",[446,475,395],{"class":476},"sne4z",[446,478,479],{"class":472},">\n",[446,481,482,485,488],{"class":469,"line":145},[446,483,484],{"class":472},"    \u003C",[446,486,487],{"class":476},"NuxtLayout",[446,489,479],{"class":472},[446,491,492,495,498],{"class":469,"line":149},[446,493,494],{"class":472},"        \u003C",[446,496,497],{"class":476},"NuxtPage",[446,499,500],{"class":472}," \u002F>\n",[446,502,503,506,508],{"class":469,"line":177},[446,504,505],{"class":472},"    \u003C\u002F",[446,507,487],{"class":476},[446,509,479],{"class":472},[446,511,512],{"class":469,"line":181},[446,513,515],{"class":514},"sLBg1","    \u003C!-- One per app. With named pt scopes, one per area layout,\n",[446,517,518],{"class":469,"line":185},[446,519,520],{"class":514},"         if every page renders inside exactly one of them. -->\n",[446,522,523,525,528],{"class":469,"line":225},[446,524,484],{"class":472},[446,526,527],{"class":476},"BbHost",[446,529,500],{"class":472},[446,531,532,535,537],{"class":469,"line":229},[446,533,534],{"class":472},"\u003C\u002F",[446,536,395],{"class":476},[446,538,479],{"class":472},[446,540,541],{"class":469,"line":233},[446,542,544],{"emptyLinePlaceholder":543},true,"\n",[446,546,547,549,552,556,559,562,566],{"class":469,"line":237},[446,548,473],{"class":472},[446,550,551],{"class":476},"script",[446,553,555],{"class":554},"s-5SL"," setup",[446,557,558],{"class":554}," lang",[446,560,561],{"class":472},"=",[446,563,565],{"class":564},"sT6z2","\"ts\"",[446,567,479],{"class":472},[446,569,570,574,577,580,583],{"class":469,"line":241},[446,571,573],{"class":572},"sHUrx","import",[446,575,576],{"class":472}," { BbHost } ",[446,578,579],{"class":572},"from",[446,581,582],{"class":564}," 'bitboss-ui'",[446,584,585],{"class":472},";\n",[446,587,589,591,593],{"class":469,"line":588},12,[446,590,534],{"class":472},[446,592,551],{"class":476},[446,594,479],{"class":472},[387,596,597,598,601,602,605,606,609,610,613,614,617,618,621,622,625,626,629],{},"Under Vue that file is ",[391,599,600],{},"App.vue",", under Nuxt ",[391,603,604],{},"app.vue",", under Inertia the\n",[391,607,608],{},"createInertiaApp"," render root. There are two ways to get this wrong, and a\ndevelopment build warns about both. With ",[429,611,612],{},"no host",", ",[391,615,616],{},"await confirm(...)","\nresolves ",[391,619,620],{},"false"," after one second, so the caller moves on as if the user had\nsaid no. With ",[429,623,624],{},"two hosts",", the second renders nothing; it takes over only when\nthe first unmounts. The per-area layout the comment mentions is set out in\n",[405,627,160],{"href":628},"\u002Fen\u002Fguides\u002Fpassthrough#scopes",".",[387,631,632,633,635,636,638,639,629],{},"This site mounts its one ",[391,634,434],{}," in ",[391,637,604],{},", so the demos below mount\nnothing, and neither does a page of yours that calls ",[391,640,457],{},[642,643,645],"h3",{"id":644},"the-destructive-gate",[446,646,648],{"id":647},"gate","The destructive gate",[387,650,651,654],{},[391,652,653],{},"await"," the decision, then act only on a truthy result.",[656,657],"demo",{"name":658},"BbConfirm\u002FDestructiveGate",[387,660,661,662,664,665,668],{},"Everything after the ",[391,663,653],{}," is ordinary code: the dialog has already resolved and\nclosed. ",[391,666,667],{},"variant: 'destructive'"," colours the dialog as dangerous and makes the Yes\nbutton destructive too, so the two never disagree about how serious this is.",[387,670,671,672,675,676,679],{},"Screen readers announce the confirm as an alert dialog named by its ",[391,673,674],{},"title",".\nLeave the title out and the message names it instead, so a one-line\n",[391,677,678],{},"confirm({ text })"," is still read aloud as a question.",[387,681,682,683,690,691,695,696,629],{},"Every destructive action passes through this gate. That is why a\n",[405,684,686,689],{"href":685},"\u002Fen\u002Fcomponents\u002Fbb-button#variants",[391,687,688],{},"destructive"," button"," or a\n",[405,692,694],{"href":693},"\u002Fen\u002Fcomponents\u002Fbb-dropdown#items","destructive menu row"," is worth marking: the\nmark tells the next person a confirm belongs there. To announce the outcome\nafterwards (\"Invoice deleted\"), follow the gate with a\n",[405,697,698],{"href":98},[391,699,351],{},[442,701,703],{"id":702},"buttons",[446,704,705],{},"Labelling the choice",[387,707,708,711,712,715,716,718,719,721],{},[391,709,710],{},"yes"," and ",[391,713,714],{},"no"," each take three forms: ",[391,717,620],{}," hides the button, a string relabels\nit, and an object gives you the whole ",[391,720,205],{}," surface.",[656,723],{"name":724},"BbConfirm\u002FButtonLabels",[387,726,727,728,731,732,735,736,613,740,613,743,746],{},"The defaults come from the plugin's ",[391,729,730],{},"locale",": \"OK\" and \"Cancel\" in English (the\ndefault), \"OK\" and \"Annulla\" with ",[391,733,734],{},"locale: 'it'",". Treat them as placeholders. The\nYes label is the last thing the user reads before committing, so make it the verb\nof the action: ",[737,738,739],"em",{},"Delete",[737,741,742],{},"Archive",[737,744,745],{},"Publish",". \"Are you sure? \u002F OK\" tells nobody\nwhat is about to happen.",[387,748,749,752,753,613,756,613,759,762,763,766,767,613,770,773,774,777,778,781],{},[391,750,751],{},"no: false"," leaves one button, which is how you write an acknowledgement rather\nthan a question. The object form takes ",[391,754,755],{},"text",[391,757,758],{},"variant",[391,760,761],{},"size",",\n",[391,764,765],{},"prepend:icon"," \u002F ",[391,768,769],{},"append:icon",[391,771,772],{},"icon"," for an icon-only button, ",[391,775,776],{},"block",", and the\n",[391,779,780],{},"onClick"," the next section is about.",[783,784,785],"migration",{},[387,786,787,613,790,613,793,711,796,799,800,711,803,805,806,809,810,812,813,815,816,819,820,629],{},[391,788,789],{},"yesText",[391,791,792],{},"onYes",[391,794,795],{},"noText",[391,797,798],{},"onNo"," collapse into these two options. ",[391,801,802],{},"yes: false",[391,804,751],{}," are unchanged — do not \"migrate\" either into ",[391,807,808],{},"actions: false",", which hides the whole footer instead of one button. Two silent\ndifferences: the default labels follow the plugin ",[391,811,730],{},", which is English\nunless you set ",[391,814,734],{},", and the footer buttons default to ",[391,817,818],{},"md"," where v2\nused ",[391,821,822],{},"lg",[442,824,826],{"id":825},"async",[446,827,828],{},"Work before the dialog closes",[387,830,831],{},"Some work has to finish before the dialog goes away — the user should see the\ndelete happen, not discover it later.",[656,833],{"name":834},"BbConfirm\u002FAsyncBeforeClose",[387,836,837,838,840,841,843,844,847],{},"Put it in the button's ",[391,839,780],{}," instead of after the ",[391,842,653],{},". The button shows a\nspinner while the promise runs, the opposite button is disabled, the × is hidden\nand every dismissal is blocked until it settles. ",[391,845,846],{},"returning: true"," then resolves\nthe promise with the callback's own return value rather than a plain boolean.",[387,849,850,852,853,856,857,859,860,863],{},[391,851,457],{}," ",[429,854,855],{},"rejects"," when a button's ",[391,858,780],{}," throws. Wrap the\nawait in ",[391,861,862],{},"try\u002Fcatch"," whenever the work can fail, or a failed delete becomes an\nunhandled rejection instead of a message.",[387,865,866,867,869],{},"An Inertia visit returns no promise, so wrap it in one and return that from\n",[391,868,780],{},". Yes spins for the whole visit and the dialog closes when it ends.",[460,871,875],{"className":872,"code":873,"language":874,"meta":397,"style":397},"language-ts shiki shiki-themes github-light-high-contrast github-dark-high-contrast","const destroy = (url: string) =>\n  new Promise\u003Cvoid>((resolve, reject) => {\n    router.delete(url, {\n      onSuccess: () => resolve(),\n      onError: (errors) => reject({ errors }),\n      \u002F\u002F Cut short by another visit: resolve. A 500 or a network error: reject.\n      onFinish: (visit) =>\n        visit.cancelled || visit.interrupted\n          ? resolve()\n          : reject(new Error('The delete failed')),\n    });\n  });\n\nconfirm({\n  title: 'Delete invoice?',\n  variant: 'destructive',\n  yes: { text: 'Delete', onClick: () => destroy(`\u002Finvoices\u002F${id}`) },\n});\n","ts",[391,876,877,908,940,951,967,988,993,1007,1018,1028,1052,1057,1062,1067,1076,1087,1098,1131],{"__ignoreMap":397},[446,878,879,882,886,889,892,896,899,902,905],{"class":469,"line":141},[446,880,881],{"class":572},"const",[446,883,885],{"class":884},"sKwhi"," destroy",[446,887,888],{"class":572}," =",[446,890,891],{"class":472}," (",[446,893,895],{"class":894},"soyes","url",[446,897,898],{"class":572},":",[446,900,901],{"class":554}," string",[446,903,904],{"class":472},") ",[446,906,907],{"class":572},"=>\n",[446,909,910,913,916,918,921,924,927,929,932,934,937],{"class":469,"line":145},[446,911,912],{"class":572},"  new",[446,914,915],{"class":554}," Promise",[446,917,473],{"class":472},[446,919,920],{"class":554},"void",[446,922,923],{"class":472},">((",[446,925,926],{"class":894},"resolve",[446,928,613],{"class":472},[446,930,931],{"class":894},"reject",[446,933,904],{"class":472},[446,935,936],{"class":572},"=>",[446,938,939],{"class":472}," {\n",[446,941,942,945,948],{"class":469,"line":149},[446,943,944],{"class":472},"    router.",[446,946,947],{"class":884},"delete",[446,949,950],{"class":472},"(url, {\n",[446,952,953,956,959,961,964],{"class":469,"line":177},[446,954,955],{"class":884},"      onSuccess",[446,957,958],{"class":472},": () ",[446,960,936],{"class":572},[446,962,963],{"class":884}," resolve",[446,965,966],{"class":472},"(),\n",[446,968,969,972,975,978,980,982,985],{"class":469,"line":181},[446,970,971],{"class":884},"      onError",[446,973,974],{"class":472},": (",[446,976,977],{"class":894},"errors",[446,979,904],{"class":472},[446,981,936],{"class":572},[446,983,984],{"class":884}," reject",[446,986,987],{"class":472},"({ errors }),\n",[446,989,990],{"class":469,"line":185},[446,991,992],{"class":514},"      \u002F\u002F Cut short by another visit: resolve. A 500 or a network error: reject.\n",[446,994,995,998,1000,1003,1005],{"class":469,"line":225},[446,996,997],{"class":884},"      onFinish",[446,999,974],{"class":472},[446,1001,1002],{"class":894},"visit",[446,1004,904],{"class":472},[446,1006,907],{"class":572},[446,1008,1009,1012,1015],{"class":469,"line":229},[446,1010,1011],{"class":472},"        visit.cancelled ",[446,1013,1014],{"class":572},"||",[446,1016,1017],{"class":472}," visit.interrupted\n",[446,1019,1020,1023,1025],{"class":469,"line":233},[446,1021,1022],{"class":572},"          ?",[446,1024,963],{"class":884},[446,1026,1027],{"class":472},"()\n",[446,1029,1030,1033,1035,1038,1041,1044,1046,1049],{"class":469,"line":237},[446,1031,1032],{"class":572},"          :",[446,1034,984],{"class":884},[446,1036,1037],{"class":472},"(",[446,1039,1040],{"class":572},"new",[446,1042,1043],{"class":884}," Error",[446,1045,1037],{"class":472},[446,1047,1048],{"class":564},"'The delete failed'",[446,1050,1051],{"class":472},")),\n",[446,1053,1054],{"class":469,"line":241},[446,1055,1056],{"class":472},"    });\n",[446,1058,1059],{"class":469,"line":588},[446,1060,1061],{"class":472},"  });\n",[446,1063,1065],{"class":469,"line":1064},13,[446,1066,544],{"emptyLinePlaceholder":543},[446,1068,1070,1073],{"class":469,"line":1069},14,[446,1071,1072],{"class":884},"confirm",[446,1074,1075],{"class":472},"({\n",[446,1077,1079,1082,1085],{"class":469,"line":1078},15,[446,1080,1081],{"class":472},"  title: ",[446,1083,1084],{"class":564},"'Delete invoice?'",[446,1086,762],{"class":472},[446,1088,1090,1093,1096],{"class":469,"line":1089},16,[446,1091,1092],{"class":472},"  variant: ",[446,1094,1095],{"class":564},"'destructive'",[446,1097,762],{"class":472},[446,1099,1101,1104,1107,1109,1111,1113,1115,1117,1119,1122,1125,1128],{"class":469,"line":1100},17,[446,1102,1103],{"class":472},"  yes: { text: ",[446,1105,1106],{"class":564},"'Delete'",[446,1108,613],{"class":472},[446,1110,780],{"class":884},[446,1112,958],{"class":472},[446,1114,936],{"class":572},[446,1116,885],{"class":884},[446,1118,1037],{"class":472},[446,1120,1121],{"class":564},"`\u002Finvoices\u002F${",[446,1123,1124],{"class":472},"id",[446,1126,1127],{"class":564},"}`",[446,1129,1130],{"class":472},") },\n",[446,1132,1134],{"class":469,"line":1133},18,[446,1135,1136],{"class":472},"});\n",[387,1138,1139,1140,1143,1144,1147],{},"Not ",[391,1141,1142],{},"autoClose: false"," with ",[391,1145,1146],{},"close()"," called from the visit's callbacks: Yes\nnever shows busy, and a missed callback leaves the dialog up or closes it\nmid-visit.",[387,1149,1150],{},"Keep those callbacks short. While one runs there is no way out of the dialog by\ndesign, so a slow one is a frozen screen.",[442,1152,1154],{"id":1153},"decisions",[446,1155,1156],{},"Outcomes and dismissal",[387,1158,1159,1160,1163],{},"When the decision has three answers, an ",[391,1161,1162],{},"actions"," array replaces the yes\u002Fno\nfooter entirely.",[656,1165],{"name":1166},"BbConfirm\u002FThreeWayDecision",[387,1168,1169,1170,711,1173,1175,1176,1179,1180,1182,1183,1186,1187,629],{},"Each entry is the same button config, defaulting to ",[391,1171,1172],{},"outline",[391,1174,818],{},". Clicking\nany of them resolves the promise ",[391,1177,1178],{},"true"," — or, with ",[391,1181,846],{},", with that\nhandler's return value, typed as the union across the array. ",[391,1184,1185],{},"as const"," on the\nreturns is what keeps the literal types instead of widening them all to ",[391,1188,1189],{},"string",[387,1191,1192,711,1194,1196,1197,1199,1200,1202],{},[391,1193,710],{},[391,1195,714],{}," are ignored when ",[391,1198,1162],{}," is present, with a dev warning. Every\nimplicit dismissal still resolves ",[391,1201,620],{}," without running anything, so a\nthree-way decision always has a fourth outcome: none of them.",[387,1204,1205,1206,1209],{},"Three is about the ceiling. Three labelled buttons need a wider confirm,\n",[391,1207,1208],{},"size: 'md'"," in the message, to fit on one line each. A footer with five buttons\nis a form that has not admitted it yet.",[642,1211,1213],{"id":1212},"what-false-actually-means",[446,1214,1216],{"id":1215},"dismissal","What false actually means",[387,1218,1219,1221,1222,1225,1226,629],{},[391,1220,620],{}," means ",[737,1223,1224],{},"not confirmed",". It does not mean ",[737,1227,1228],{},"declined",[656,1230],{"name":1231},"BbConfirm\u002FForcedChoice",[387,1233,1234,1235,1238,1239,1242,1243,1245,1246,1248,1249,1252,1253,1256,1257,1259],{},"A backdrop click, ",[391,1236,1237],{},"Escape",", the ×, a ",[391,1240,1241],{},"duration"," timeout and the owning\ncomponent unmounting all resolve ",[391,1244,620],{},". A second ",[391,1247,457],{}," does not: every\ncall opens its own dialog. The new one ",[429,1250,1251],{},"covers"," the open one, which stays\npending and comes back when the newer one closes, so two confirms fired from\nthe same handler ask both, newest first. The ",[391,1254,1255],{},"stack"," option seats a confirm in\na ",[391,1258,288],{}," stack of your own instead.",[387,1261,1262,1265,1266,1269,1270,1273,1274,1277,1278,1280,1281,1283,1284,1287,1288,1291,1292,1294,1295,629],{},[391,1263,1264],{},"if (!ok)"," therefore runs on all of those. ",[391,1267,1268],{},"no.onClick"," runs on No and, with the\ndefault ",[391,1271,1272],{},"dismissAsNo",", on the ",[429,1275,1276],{},"user-initiated"," dismissals too: the\nbackdrop, ",[391,1279,1237],{}," and the ×. With ",[391,1282,846],{},", those resolve with its\nreturn value, so give No a callback that returns a sensible \"declined\" value.\nThe ",[429,1285,1286],{},"system-initiated"," dismissals (the timeout, an owner unmounting,\n",[391,1289,1290],{},"dismissAll()",") never run it and always resolve ",[391,1293,620],{},". For work that must run only on an explicit No, set ",[391,1296,1297],{},"dismissAsNo: false",[387,1299,1300,1303,1304,1306,1307,1310],{},[391,1301,1302],{},"persistent"," blocks the backdrop and ",[391,1305,1237],{}," but leaves the × working;\n",[391,1308,1309],{},"hideClose"," removes the ×. Together, as in the demo, they force a real answer.\nUse them when both answers change the data.",[387,1312,1313,1314,1317,1318,1321,1322,1324,1325,1327,1328,1330],{},"Dialogs also ",[429,1315,1316],{},"die with the scope that opened them",". A confirm belongs to the\neffect scope that called ",[391,1319,1320],{},"useConfirm()",". If the user presses Back, or a route\nchange swaps the page, while the dialog is open, it is dismissed quietly. The\npromise resolves ",[391,1323,620],{}," and no callback runs, because the handlers close over\nstate that no longer exists. Calling ",[391,1326,1320],{}," at page level is the usual\nchoice. Call it outside a component (app setup, a store, module scope) for\nconfirms that must survive any unmount. ",[391,1329,1290],{}," is the imperative version\nfor app-level events like a logout.",[783,1332,1334],{"title":1333},"autoClose defaults to true",[387,1335,1336,1339,1340,1342,1343,1345,1346,1348,1349,891,1352,1356,1357,1359,1360,1362],{},[391,1337,1338],{},"autoClose"," defaults to ",[391,1341,1178],{}," where v2 made it opt-in. A multi-step flow that\nrelied on the dialog staying open after the answer now closes under it, and\nnothing warns. A v2 delete that ran its request after the ",[391,1344,653],{}," and then\ncalled ",[391,1347,1146],{}," moves the request into ",[391,1350,1351],{},"yes.onClick",[405,1353,1355],{"href":1354},"#async","above","). Only a\nflow that shows further steps passes ",[391,1358,1142],{}," and ends itself with\n",[391,1361,1146],{},". It only hides the dialog and never resolves anything, so calling it\nbefore a button has run leaves that promise pending forever.",[442,1364,1366],{"id":1365},"portals",[446,1367,1368],{},"A body that is not a sentence",[387,1370,1371,1372,1374],{},"When plain ",[391,1373,755],{}," cannot carry the decision, render your own content in the body.",[656,1376],{"name":1377},"BbConfirm\u002FPortalBody",[387,1379,1380,1383,1384,1387,1388,1391,1392,1394,1395,766,1397,1399,1400,1402],{},[391,1381,1382],{},"\u003CBbConfirmPortal name=\"…\">"," registers content and renders nothing where it sits,\nso it can live next to the thing it describes. Its slot receives\n",[391,1385,1386],{},"{ data, yes, no }",". ",[391,1389,1390],{},"data"," is the ",[391,1393,1390],{}," you passed. ",[391,1396,710],{},[391,1398,714],{},"\nresolve the dialog from inside the body. When the portal owns its own buttons,\npass ",[391,1401,808],{}," to hide the standard footer. The slot is a live closure over your\ncomponent's state, so it can read that state directly.",[387,1404,1405],{},"A typed confirmation is that case: the portal's own Delete stays disabled until\nthe name matches.",[656,1407],{"name":1408},"BbConfirm\u002FTypedDelete",[387,1410,1411,1413,1414,1417,1418,1387,1420,1423,1424,1427,1428,1431],{},[391,1412,755],{}," takes priority over ",[391,1415,1416],{},"portal",": with both set, the portal never renders.\nRemove the ",[391,1419,755],{},[391,1421,1422],{},"bitboss-ui check"," reads every literal ",[391,1425,1426],{},"portal: 'name'"," against\nthe ",[391,1429,1430],{},"\u003CBbConfirmPortal name>","s in your templates, so a misspelt name fails the\ncheck instead of rendering an empty body.",[387,1433,1434,1435,1437,1438,1440,1441,1444,1445,1448],{},"For a body you reuse across the app, pass a component as ",[391,1436,1416],{}," instead of a\nname, and the keys of ",[391,1439,1390],{}," are forwarded to it as props with ",[391,1442,1443],{},"v-bind",". And ",[391,1446,1447],{},"focusTarget"," takes\na CSS selector, for pointing focus at an input inside the body rather than at the\nfirst tabbable thing.",[387,1450,1451,1452,1456],{},"If that body grows a second field and a validation rule, stop. It is a\n",[405,1453,1454],{"href":38},[391,1455,288],{}," now.",[442,1458,1460],{"id":1459},"styling",[446,1461,1462],{},"Variants, size and the sheet",[387,1464,1465,1467,1468,1387,1471,1474,1475,1477],{},[391,1466,758],{}," lands on the dialog root as ",[391,1469,1470],{},"bb-confirm--\u003Cname>",[391,1472,1473],{},"default"," and\n",[391,1476,688],{}," ship with the library; register the rest and they become typed\nvalues:",[460,1479,1481],{"className":872,"code":1480,"language":874,"meta":397,"style":397},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n    bitboss: { confirmVariants: ['warning'] },\n});\n",[391,1482,1483,1488,1501,1514],{"__ignoreMap":397},[446,1484,1485],{"class":469,"line":141},[446,1486,1487],{"class":514},"\u002F\u002F nuxt.config.ts\n",[446,1489,1490,1493,1496,1499],{"class":469,"line":145},[446,1491,1492],{"class":572},"export",[446,1494,1495],{"class":572}," default",[446,1497,1498],{"class":884}," defineNuxtConfig",[446,1500,1075],{"class":894},[446,1502,1503,1506,1509,1512],{"class":469,"line":149},[446,1504,1505],{"class":472},"    bitboss: { confirmVariants: [",[446,1507,1508],{"class":564},"'warning'",[446,1510,1511],{"class":472},"] }",[446,1513,762],{"class":894},[446,1515,1516,1519],{"class":469,"line":177},[446,1517,1518],{"class":894},"})",[446,1520,585],{"class":472},[460,1522,1526],{"className":1523,"code":1524,"language":1525,"meta":397,"style":397},"language-css shiki shiki-themes github-light-high-contrast github-dark-high-contrast",".bb-confirm.bb-confirm--warning .bb-dialog__content,\n.bb-confirm.bb-confirm--warning .bb-offcanvas__content {\n    color: var(--bb-text-warn);\n}\n","css",[391,1527,1528,1538,1547,1566],{"__ignoreMap":397},[446,1529,1530,1533,1536],{"class":469,"line":141},[446,1531,1532],{"class":554},".bb-confirm.bb-confirm--warning",[446,1534,1535],{"class":554}," .bb-dialog__content",[446,1537,762],{"class":472},[446,1539,1540,1542,1545],{"class":469,"line":145},[446,1541,1532],{"class":554},[446,1543,1544],{"class":554}," .bb-offcanvas__content",[446,1546,939],{"class":472},[446,1548,1549,1552,1555,1558,1560,1563],{"class":469,"line":149},[446,1550,1551],{"class":554},"    color",[446,1553,1554],{"class":472},": ",[446,1556,1557],{"class":554},"var",[446,1559,1037],{"class":472},[446,1561,1562],{"class":894},"--bb-text-warn",[446,1564,1565],{"class":472},");\n",[446,1567,1568],{"class":469,"line":177},[446,1569,1570],{"class":472},"}\n",[387,1572,1573,1574,1577,1578,711,1581,1584,1585,1587,1588,1591,1592,1595,1596,1599,1600,1603,1604,1607,1608,1610],{},"Both selectors are needed because a confirm has two surfaces. On small viewports\nit follows the global ",[391,1575,1576],{},"adaptive"," config and renders as a bottom sheet instead of a\ndialog, with no per-call override. Style ",[391,1579,1580],{},".bb-dialog__*",[391,1582,1583],{},".bb-offcanvas__*","\ntogether or your skin only exists on one of them. ",[391,1586,761],{}," picks a maximum-width\npreset from ",[391,1589,1590],{},"xs"," to ",[391,1593,1594],{},"2xl",", and ",[391,1597,1598],{},"fullscreen"," takes over the screen (",[391,1601,1602],{},"'mobile'","\nrestricts that to small viewports). The plugin's ",[391,1605,1606],{},"confirm: { defaultSize }","\nsets the default for every confirm; a per-call ",[391,1609,761],{}," wins.",[460,1612,1614],{"className":872,"code":1613,"language":874,"meta":397,"style":397},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n    bitboss: { confirm: { defaultSize: 'md' } },\n});\n",[391,1615,1616,1620,1630,1643],{"__ignoreMap":397},[446,1617,1618],{"class":469,"line":141},[446,1619,1487],{"class":514},[446,1621,1622,1624,1626,1628],{"class":469,"line":145},[446,1623,1492],{"class":572},[446,1625,1495],{"class":572},[446,1627,1498],{"class":884},[446,1629,1075],{"class":894},[446,1631,1632,1635,1638,1641],{"class":469,"line":149},[446,1633,1634],{"class":472},"    bitboss: { confirm: { defaultSize: ",[446,1636,1637],{"class":564},"'md'",[446,1639,1640],{"class":472}," } }",[446,1642,762],{"class":894},[446,1644,1645,1647],{"class":469,"line":177},[446,1646,1518],{"class":894},[446,1648,585],{"class":472},[387,1650,1651,1652,1654,1655,1658,1659,1662,1663,1669,1670,762,1672,1674],{},"Every footer button, Yes, No or an ",[391,1653,1162],{}," entry, carries\n",[391,1656,1657],{},".bb-confirm__action",", and an ",[391,1660,1661],{},"action"," key in the build-time\n",[405,1664,1666],{"href":1665},"\u002Fen\u002Fcomponents\u002Fbb-confirm\u002Fapi#prop-pt:%3Cpart%3E",[391,1667,1668],{},"pt.BbConfirm"," map styles\nall of them at once. For one button in one confirm, use its config: ",[391,1671,758],{},[391,1673,761],{},", icons.",[783,1676,1677],{},[387,1678,1679,711,1682,1685,1686,1689,1690,1692,1693,1696,1697,1700],{},[391,1680,1681],{},".bb-confirm__no",[391,1683,1684],{},".bb-confirm__yes"," are gone, and a rule hanging off\neither one stops matching; ",[391,1687,1688],{},"npx bitboss-ui check"," reports it. Both buttons are ",[391,1691,1657],{},"\nnow; tell them apart through the per-call button config. ",[391,1694,1695],{},".bb-confirm__content","\nand ",[391,1698,1699],{},".bb-confirm__text"," survive and are still the right targets for the body\ncopy.",[1702,1703,1704],"style",{},"html pre.shiki code .suds8, html code.shiki .suds8{--shiki-default:#0E1116;--shiki-dark:#F0F3F6}html pre.shiki code .sne4z, html code.shiki .sne4z{--shiki-default:#024C1A;--shiki-dark:#72F088}html pre.shiki code .sLBg1, html code.shiki .sLBg1{--shiki-default:#66707B;--shiki-dark:#BDC4CC}html pre.shiki code .s-5SL, html code.shiki .s-5SL{--shiki-default:#023B95;--shiki-dark:#91CBFF}html pre.shiki code .sT6z2, html code.shiki .sT6z2{--shiki-default:#032563;--shiki-dark:#ADDCFF}html pre.shiki code .sHUrx, html code.shiki .sHUrx{--shiki-default:#A0111F;--shiki-dark:#FF9492}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sKwhi, html code.shiki .sKwhi{--shiki-default:#622CBC;--shiki-dark:#DBB7FF}html pre.shiki code .soyes, html code.shiki .soyes{--shiki-default:#702C00;--shiki-dark:#FFB757}",{"title":397,"searchDepth":149,"depth":149,"links":1706},[1707,1710,1711,1712,1715,1716],{"id":444,"depth":145,"text":448,"children":1708},[1709],{"id":644,"depth":149,"text":648},{"id":702,"depth":145,"text":705},{"id":825,"depth":145,"text":828},{"id":1153,"depth":145,"text":1156,"children":1713},[1714],{"id":1212,"depth":149,"text":1216},{"id":1365,"depth":145,"text":1368},{"id":1459,"depth":145,"text":1462},"The yes\u002Fno gate in front of anything irreversible: one host at the app root, and a confirm() you await.",{},[1720,1721,1722,1723,1724,1725],{"id":444,"title":448},{"id":702,"title":705},{"id":825,"title":828},{"id":1153,"title":1156},{"id":1365,"title":1368},{"id":1459,"title":1462},{"title":282,"description":1717},"components\u002Fbb-confirm","5_B6gXVU4utWlaLYiIuKrorK4fVlNFHQheVm1vjl--4",{"name":282,"slug":1730,"group":276,"description":1731,"entrypoint":1732,"docs":1733,"props":1736,"models":1747,"events":1748,"slots":1749,"exposed":1750,"pt":1751,"validated":377,"migration":1785},"bb-confirm","The confirm() dialog.","bitboss-ui",{"contract":1734,"source":1735},"ai\u002FBbConfirm.md","ai\u002Fsource\u002FBbConfirm.md",[1737,1742],{"name":1738,"type":1739,"required":1740,"default":377,"description":1741,"note":377,"demo":377},"pt","PtMap\u003CBbConfirmPtPart, \"open\" | \"default\" | \"destructive\"> | undefined",false,"Passthrough, object form: the same keys as the `pt:*` attributes without the prefix. See the `pt:\u003Cpart>` row.",{"name":1743,"type":1744,"required":1740,"default":377,"description":1745,"note":1746,"demo":1459},"pt:\u003Cpart>","PtValue | undefined","Passthrough, attribute form: one attribute per part, `pt:\u003Cpart>`, and per part and state, `pt:\u003Cpart>:\u003Cstate>`. Parts: `action`, `close`, `content`, `footer`, `header`, `root`, `sheet`, `text`, `title`. States: `default`, `destructive`, `open`.","Not attributes on a tag: `\u003CBbHost \u002F>` takes no props. These parts are the keys of the build-time `pt.BbConfirm` map, which styles every confirm the app opens.",[],[],[],[],{"parts":1752,"states":1777},[1753,1756,1759,1762,1764,1767,1769,1772,1775],{"name":1754,"description":1755},"root","The `\u003Cdialog>` of every confirm the app opens (forwarded to the `BbDialog` the host renders).",{"name":1757,"description":1758},"sheet","The bottom sheet a confirm becomes on a phone — never the desktop dialog.",{"name":1760,"description":1761},"header","The header band.",{"name":674,"description":1763},"The confirm's title.",{"name":1765,"description":1766},"content","The dialog body.",{"name":755,"description":1768},"The confirm's plain-text body — not a portal's content.",{"name":1770,"description":1771},"footer","The action buttons' band.",{"name":1773,"description":1774},"close","The ✕.",{"name":1661,"description":1776},"Every footer button — yes, no and each custom `actions` entry — at the button's root. A broadcast.",[1778,1780,1782],{"name":1473,"description":1779},"Component-wide, from the message: `variant: 'default'`. Merged after the part's base entry and before its states, so the real states still win.",{"name":688,"description":1781},"Component-wide, from the message: `variant: 'destructive'`. Below the real states, like every variant.",{"name":1783,"description":1784},"open","Component-wide: a confirm is showing.",{"removed":1786,"renamed":1787},[],[],1793055140958]