[{"data":1,"prerenderedAt":2742},["ShallowReactive",2],{"locale-alternates":3,"docs-nav-en":134,"api-none":377,"page-en-\u002Fcomponents\u002Fbb-dialog":378,"pt-showcase-BbDialog":2546},{"\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":288,"body":380,"component":288,"description":2530,"extension":2531,"group":276,"meta":2532,"navigation":526,"order":177,"path":289,"sections":2533,"seo":2543,"stem":2544,"__hash__":2545},"docs_en\u002Fcomponents\u002Fbb-dialog.md",{"type":381,"value":382,"toc":2507},"minimark",[383,431,437,454,462,480,581,610,663,673,757,774,782,802,806,855,861,878,881,890,933,940,956,959,997,1020,1026,1045,1048,1075,1084,1087,1149,1156,1172,1175,1246,1249,1487,1493,1507,1511,1524,1598,1604,1607,1610,1646,1655,1658,1675,1712,1734,1738,1747,1750,1769,1833,1846,1852,1858,1861,1870,1877,1890,1897,1938,1943,1955,1958,1976,1988,1991,2031,2056,2106,2112,2122,2125,2136,2156,2163,2171,2174,2187,2201,2213,2284,2297,2303,2324,2373,2392,2430,2458,2466,2503],[384,385,386,394],"when",{},[387,388,389,390,393],"p",{},"Reach for ",[391,392,288],"code",{}," when someone has to finish one focused task without losing\nthe page behind it. An edit form, a create step, a decision that has to be made\nnow. Nothing else on the page is reachable while it is open.",[395,396,398],"template",{"v-slot:else":397},"",[399,400,401,410,417,424],"ul",{},[402,403,404,409],"li",{},[405,406,407],"a",{"href":56},[391,408,300],{},": the panel sits beside the task\ninstead of replacing it",[402,411,412,416],{},[405,413,414],{"href":60},[391,415,303],{},": the panel is anchored to the control\nthat opened it",[402,418,419,423],{},[405,420,421],{"href":40},[391,422,291],{},": the anchored content is a menu of\nactions",[402,425,426,430],{},[405,427,428],{"href":32},[391,429,282],{},": it is a plain yes\u002Fno, above all a\ndestructive one",[387,432,433,434,436],{},"Also see: ",[405,435,175],{"href":132},".",[387,438,439,441,442,445,446,449,450,453],{},[391,440,288],{}," is the library's modal: give it an ",[391,443,444],{},"id"," and a ",[391,447,448],{},"title",", and put\n",[391,451,452],{},"v-bb-dialog"," on the button that opens it.",[455,456,458],"h2",{"id":457},"open",[459,460,461],"span",{},"Open by id",[387,463,464,465,468,469,472,473,476,477,479],{},"Most dialogs need only a button that opens them, so they need no ",[391,466,467],{},"ref(false)",",\nno ",[391,470,471],{},"@click"," and no ",[391,474,475],{},"v-model",". The value of the directive is the dialog's ",[391,478,444],{},",\nin inner quotes:",[481,482,486],"pre",{"className":483,"code":484,"language":485,"meta":397,"style":397},"language-vue shiki shiki-themes github-light-high-contrast github-dark-high-contrast","\u003CBbButton v-bb-dialog=\"'invite'\">Invite teammate\u003C\u002FBbButton>\n\n\u003CBbDialog id=\"invite\" title=\"Invite teammate\">\n    …\n    \u003Ctemplate #footer=\"{ close }\">\n        \u003CBbButton variant=\"ghost\" @click=\"close\">Cancel\u003C\u002FBbButton>\n    \u003C\u002Ftemplate>\n\u003C\u002FBbDialog>\n","vue",[391,487,488,522,528,552,557,562,567,572],{"__ignoreMap":397},[459,489,491,495,498,502,505,508,512,514,517,519],{"class":490,"line":141},"line",[459,492,494],{"class":493},"suds8","\u003C",[459,496,205],{"class":497},"sne4z",[459,499,501],{"class":500},"s-5SL"," v-bb-dialog",[459,503,504],{"class":493},"=",[459,506,507],{"class":493},"\"",[459,509,511],{"class":510},"sT6z2","'invite'",[459,513,507],{"class":493},[459,515,516],{"class":493},">Invite teammate\u003C\u002F",[459,518,205],{"class":497},[459,520,521],{"class":493},">\n",[459,523,524],{"class":490,"line":145},[459,525,527],{"emptyLinePlaceholder":526},true,"\n",[459,529,530,532,534,537,539,542,545,547,550],{"class":490,"line":149},[459,531,494],{"class":493},[459,533,288],{"class":497},[459,535,536],{"class":500}," id",[459,538,504],{"class":493},[459,540,541],{"class":510},"\"invite\"",[459,543,544],{"class":500}," title",[459,546,504],{"class":493},[459,548,549],{"class":510},"\"Invite teammate\"",[459,551,521],{"class":493},[459,553,554],{"class":490,"line":177},[459,555,556],{"class":493},"    …\n",[459,558,559],{"class":490,"line":181},[459,560,561],{"class":493},"    \u003Ctemplate #footer=\"{ close }\">\n",[459,563,564],{"class":490,"line":185},[459,565,566],{"class":493},"        \u003CBbButton variant=\"ghost\" @click=\"close\">Cancel\u003C\u002FBbButton>\n",[459,568,569],{"class":490,"line":225},[459,570,571],{"class":493},"    \u003C\u002Ftemplate>\n",[459,573,574,577,579],{"class":490,"line":229},[459,575,576],{"class":493},"\u003C\u002F",[459,578,288],{"class":497},[459,580,521],{"class":493},[387,582,583,584,587,588,591,592,596,597,599,600,603,604,606,607,609],{},"When the dialog needs to know what it was opened for, pass that as ",[391,585,586],{},"data",":\n",[391,589,590],{},"v-bb-dialog=\"{ id: 'edit-member', data: member }\"",". Every row opens the\n",[593,594,595],"strong",{},"same"," dialog with its own ",[391,598,586],{},". Write one ",[391,601,602],{},"\u003CBbDialog id>"," per id, never one\nper row: the ",[391,605,444],{}," is also the element's DOM id, and two elements with one id are\nbroken HTML. The dialog reads ",[391,608,586],{}," in two places:",[399,611,612,638],{},[402,613,614,615,618,619,622,623,626,627,629,630,633,634,637],{},"the ",[391,616,617],{},"default",", ",[391,620,621],{},"header"," and ",[391,624,625],{},"footer"," slots receive it as ",[391,628,586],{},", typed ",[391,631,632],{},"any",",\nso ",[391,635,636],{},"data.fullName"," reads with no cast;",[402,639,640,643,644,618,646,649,650,618,653,618,656,622,659,662],{},[391,641,642],{},"useBbDialogContext\u003CT>(id)"," returns it typed, along with ",[391,645,457],{},[391,647,648],{},"isReady",",\n",[391,651,652],{},"show(data?)",[391,654,655],{},"hide()",[391,657,658],{},"complete(value)",[391,660,661],{},"reset()",". A component inside\nthe dialog can call it too.",[387,664,665,667,668,672],{},[391,666,586],{}," is the opening's own copy of what you passed (see the\n",[405,669,671],{"href":670},"#forms","edit form"," below), and it stays set until the close transition has\nrun, so the content never flashes empty as the dialog fades out.",[399,674,675,703,717,730,738],{},[402,676,677,680,681,683,684,688,689,691,692,698,699,702],{},[593,678,679],{},"Three closes."," ",[391,682,658],{}," closes with a ",[405,685,687],{"href":686},"#results","result"," for\nwhoever opened the dialog. The context's ",[391,690,655],{}," is the code's close, with\nno result. Both close even under ",[405,693,695],{"href":694},"#dismissal",[391,696,697],{},"prevent-close",", so call one\nwhen an operation is done. The slots' ",[391,700,701],{},"close()"," is the user's close, like the\n×: wire it to Cancel.",[402,704,705,712,713,716],{},[593,706,707,708,711],{},"A ",[391,709,710],{},"show()"," on an open dialog changes nothing."," It joins the opening\nalready showing (its promise, its data); the new data, trigger and\n",[391,714,715],{},"onComplete"," are ignored. A show during the close transition opens it again.",[402,718,719,722,723,726,727,436],{},[593,720,721],{},"Lookup starts at the trigger."," The directive looks for the dialog in the\ncomponent whose template it sits in and in what that component renders, then\nin its parents. A dialog wrapped in a component of its own, such as\n",[391,724,725],{},"\u003CEditMemberDialog \u002F>",", opens from the page that renders it, and two pages\ncan each have an ",[391,728,729],{},"id=\"edit\"",[402,731,732,737],{},[593,733,734,736],{},[391,735,475],{}," still works",", and wins over the directive. Keep it for a dialog\nyour state opens, from a route or a watcher, rather than from a button.",[402,739,740,741,618,744,747,748,751,752,756],{},"The button gets ",[391,742,743],{},"aria-haspopup=\"dialog\"",[391,745,746],{},"aria-expanded"," and\n",[391,749,750],{},"aria-controls",", and focus returns to it on close. On a phone the\n",[405,753,755],{"href":754},"#flow","adaptive sheet"," opens the same way.",[387,758,759,762,763,766,767,769,770,773],{},[391,760,761],{},"npx bitboss-ui check"," and the ESLint rule ",[391,764,765],{},"bitboss-ui\u002Fportal-names"," report an\nid that no ",[391,768,602],{}," in the project declares (",[391,771,772],{},"unknown-dialog",").",[775,776,778],"h3",{"id":777},"a-dialog-in-the-url",[459,779,781],{"id":780},"navigation","A dialog in the URL",[387,783,784,785,790,791,794,795,801],{},"With ",[405,786,788],{"href":787},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-navigation",[391,789,780],{},", opening the\ndialog writes ",[391,792,793],{},"?dialog=true"," to the URL (or the key you name with\n",[405,796,798],{"href":797},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-queryKey",[391,799,800],{},"query-key","), and closing it takes\nthe key away.",[803,804],"demo",{"name":805},"BbDialog\u002FUrlDialog",[399,807,808,825,831,842],{},[402,809,810,813,814,817,818,821,822,824],{},[593,811,812],{},"Back closes it",", like ",[391,815,816],{},"Escape",": the result's reason is ",[391,819,820],{},"'escape'",", and a\ndialog that refuses ",[391,823,816],{}," refuses Back too.",[402,826,827,830],{},[593,828,829],{},"A link with the key opens it on load",", so a support email can point at it.",[402,832,833,841],{},[593,834,835],{},[405,836,838],{"href":837},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-replace",[391,839,840],{},"replace"," swaps the history\nentry instead of adding one: Back then leaves the page.",[402,843,844,845,847,848,850,851,854],{},"Two URL dialogs on one page each need their own ",[391,846,800],{},". A ",[391,849,300],{},"\nwrites ",[391,852,853],{},"offcanvas"," by default, so a dialog and a panel never collide.",[455,856,858],{"id":857},"forms",[459,859,860],{},"Editing a record",[387,862,863,864,866,867,870,871,873,874,877],{},"Each row's Edit button hands the dialog its record as ",[391,865,586],{},", and the dialog\ngets its own ",[593,868,869],{},"copy"," of it, made fresh on every opening. So the form binds\n",[391,872,586],{}," directly, with no draft to seed and nothing to clear: Save hands the\nsaved record back with ",[391,875,876],{},"complete",", and any other close throws the copy away.",[803,879],{"name":880},"BbDialog\u002FEditRecord",[387,882,883,884,889],{},"Always pass ",[405,885,887],{"href":886},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-title",[391,888,448],{},". It draws the header and gives the dialog its accessible\nname; without one a screen reader announces \"dialog\" and nothing else.",[399,891,892,906,924],{},[402,893,894,897,898,901,902,905],{},[593,895,896],{},"The row stays untouched until Save."," Plain objects and arrays are copied\nall the way down; anything else (a ",[391,899,900],{},"Date",", a ",[391,903,904],{},"File",", a class instance) is the\nobject you passed.",[402,907,908,680,911,913,914,916,917,920,921,923],{},[593,909,910],{},"Compare by id, never by identity.",[391,912,586],{}," is not the row you passed, so\n",[391,915,715],{}," (or the code after ",[391,918,919],{},"await show()",") is where the page writes the\nresult back, as ",[391,922,840],{}," does above.",[402,925,926,929,930,773],{},[593,927,928],{},"While the save runs",", the form is read-only and the dialog refuses every\nclose until it settles (",[405,931,932],{"href":694},"Controlling dismissal",[775,934,936],{"id":935},"create-and-edit-in-one-dialog",[459,937,939],{"id":938},"default-data","Create and edit in one dialog",[387,941,942,943,945,946,949,950,955],{},"A create has no row to pass, so ",[391,944,586],{}," would be ",[391,947,948],{},"undefined",". Give the dialog a\n",[405,951,953],{"href":952},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-defaultData",[391,954,938],{}," object: every\nopening without data gets a fresh copy of it, and an edit lays its row over it.",[803,957],{"name":958},"BbDialog\u002FDefaultData",[399,960,961,971,988],{},[402,962,963,970],{},[593,964,965,966,969],{},"The fields bind ",[391,967,968],{},"data.title"," with no guard",", on a create and an edit alike.",[402,972,973,977,978,981,982,984,985,987],{},[593,974,975],{},[391,976,661],{}," (in the slots, or ",[391,979,980],{},"useBbDialogContext(id).reset()",") restores\nthe keys ",[391,983,938],{}," declares from a fresh copy and keeps every other\nkey: Clear empties a task, and on an edit the row's ",[391,986,444],{}," stays, so the\ncleared task still saves as an edit. It never goes back to the row's\nvalues; Cancel is what discards an edit.",[402,989,990,993,994,436],{},[593,991,992],{},"Every close resets it"," as well, so nothing needs doing on ",[391,995,996],{},"@show",[387,998,999,1000,1006,1007,1009,1010,1012,1013,1019],{},"The body is lazy: it renders when the dialog opens and unmounts after the close\ntransition, so every opening starts fresh, the state of what is inside it\nincluded. A reopen during the close transition gets a fresh body too.\n",[405,1001,1003],{"href":1002},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-eager",[391,1004,1005],{},"eager"," keeps it mounted\nfrom the start and across closes, with ",[391,1008,586],{}," back to ",[391,1011,948],{}," while it is\nclosed; use it only when a test or measurement must read the body before the\nfirst open. ",[405,1014,1016],{"href":1015},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#event-hidden",[391,1017,1018],{},"@hidden"," fires after\nthe close transition, the place to tear down expensive content.",[455,1021,1023],{"id":1022},"results",[459,1024,1025],{},"What the opener gets back",[387,1027,1028,1029,1031,1032,1034,1035,1037,1038,1041,1042,436],{},"Every opening ends one way or the other. ",[391,1030,715],{}," on the directive hears\nonly a ",[391,1033,658],{},". For the rest, open from code: ",[391,1036,710],{}," returns a\npromise of ",[391,1039,1040],{},"{ completed: true, value }"," or ",[391,1043,1044],{},"{ completed: false, reason }",[803,1046],{"name":1047},"BbDialog\u002FResults",[387,1049,1050,1051,1053,1054,618,1056,618,1059,1062,1063,445,1065,1067,1068,1071,1072,436],{},"Pick a format, then try ",[391,1052,816],{},", the backdrop, the × and Cancel: each names\nits reason (",[391,1055,820],{},[391,1057,1058],{},"'backdrop'",[391,1060,1061],{},"'close'","). ",[391,1064,655],{},[391,1066,475],{},"\nset to ",[391,1069,1070],{},"false"," say ",[391,1073,1074],{},"'hide'",[387,1076,1077,1083],{},[405,1078,1080],{"href":1079},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#event-hide",[391,1081,1082],{},"@hide"," carries the same result as\nthe close starts, so the dialog's own listener knows a save from a dismissal.\nA live preview reverts on a dismissal with no flag of its own:",[803,1085],{"name":1086},"BbDialog\u002FLivePreview",[399,1088,1089,1095,1110,1126,1141],{},[402,1090,1091,1094],{},[593,1092,1093],{},"It settles when the close starts",", so the page can update while the dialog\nfades out. It never rejects and never hangs.",[402,1096,1097,1103,1104,1106,1107,436],{},[593,1098,1099,1100],{},"Close a save with ",[391,1101,1102],{},"complete()",", not by writing the model, to tell it from\na cancel. On a ",[391,1105,475],{}," dialog too, it closes through the model and reports\n",[391,1108,1109],{},"{ completed: true }",[402,1111,1112,1115,1116,1122,1123,1125],{},[593,1113,1114],{},"A click that awaits the dialog spins"," like any async click: put\n",[405,1117,1119],{"href":1118},"\u002Fen\u002Fcomponents\u002Fbb-button\u002Fapi#prop-disableAutoLoading",[391,1120,1121],{},"disable-auto-loading","\non that button. ",[391,1124,715],{}," never spins.",[402,1127,1128,680,1131,1133,1134,618,1137,622,1139,436],{},[593,1129,1130],{},"Prefer the directive on a button.",[391,1132,710],{}," is for opens no button makes,\nor a flow that needs the reason; the directive keeps the button's\n",[391,1135,1136],{},"aria-haspopup",[391,1138,746],{},[391,1140,750],{},[402,1142,1143,1146,1147,436],{},[391,1144,1145],{},"useBbDialogContext\u003CIn, Out>"," types both ends; untyped, they are ",[391,1148,632],{},[775,1150,1152],{"id":1151},"the-page-saves",[459,1153,1155],{"id":1154},"page-saves","The page saves",[387,1157,1158,1159,1161,1162,1164,1165,1168,1169,1171],{},"When the page owns the save (it knows the endpoint and the list to update),\n",[391,1160,715],{}," returns the request's promise. ",[391,1163,658],{}," waits for it, and\nthe dialog stays open and ",[593,1166,1167],{},"locked"," until it settles: the ×, Cancel, ",[391,1170,816],{},"\nand the backdrop are refused, and the footer's Save spins.",[803,1173],{"name":1174},"BbDialog\u002FPageSaves",[399,1176,1177,1185,1201,1216,1226],{},[402,1178,1179,1182,1183,436],{},[593,1180,1181],{},"Resolved",", the dialog closes and the opening settles\n",[391,1184,1040],{},[402,1186,1187,1190,1191,1193,1194,1200],{},[593,1188,1189],{},"Rejected",", the dialog stays open with the user's edit, and ",[391,1192,1102],{},"\nrejects with the same error. Bind the error's fields on the form with\n",[405,1195,1197],{"href":1196},"\u002Fen\u002Fcomponents\u002Fbb-form\u002Fapi#prop-fieldErrors",[391,1198,1199],{},":field-errors",": each message\nshows under its field until the user edits it.",[402,1202,1203,1208,1209,1212,1213,436],{},[593,1204,1205,1206],{},"Catch ",[391,1207,1102],{}," whenever an opener may reject, as the form above does.\nUncaught, the rejection travels through the form's ",[391,1210,1211],{},"@submit"," to\n",[391,1214,1215],{},"app.config.errorHandler",[402,1217,1218,1219,1222,1223,1225],{},"From code it is ",[391,1220,1221],{},"edit.show(row, { onComplete: save })",", on an id handle and a\ncomponent handle alike. A synchronous ",[391,1224,715],{},", or none, closes at once.",[402,1227,1228,1233,1234,1237,1238,1241,1242,1245],{},[593,1229,1230,1232],{},[391,1231,715],{}," is just a function."," A trigger inside a child component gets\nthe page's save the way your app already shares things: a function prop\n(",[391,1235,1236],{},":save=\"saveMember\"","), a page ",[391,1239,1240],{},"provide"," \u002F ",[391,1243,1244],{},"inject",", or a store action. Not\nan emit: an emit cannot return the promise.",[387,1247,1248],{},"An Inertia visit returns no promise and never rejects on its own, so wrap it:\na validation error rejects with the errors, success resolves, and a visit cut\nshort by another visit resolves too, closing the dialog.",[481,1250,1254],{"className":1251,"code":1252,"language":1253,"meta":397,"style":397},"language-ts shiki shiki-themes github-light-high-contrast github-dark-high-contrast","import { router } from '@inertiajs\u002Fvue3';\n\nconst save = (user: User) =>\n    new Promise\u003Cvoid>((resolve, reject) => {\n        router.put(`\u002Fusers\u002F${user.id}`, user, {\n            onSuccess: () => resolve(),\n            onError: (errors) => reject({ errors }),\n            \u002F\u002F Cancelled or interrupted: close. A 500 or a network error\n            \u002F\u002F keeps the dialog open.\n            onFinish: (visit) =>\n                visit.cancelled || visit.interrupted\n                    ? resolve()\n                    : reject(new Error('The save failed')),\n        });\n    });\n","ts",[391,1255,1256,1274,1278,1309,1341,1367,1383,1404,1410,1415,1429,1440,1451,1475,1481],{"__ignoreMap":397},[459,1257,1258,1262,1265,1268,1271],{"class":490,"line":141},[459,1259,1261],{"class":1260},"sHUrx","import",[459,1263,1264],{"class":493}," { router } ",[459,1266,1267],{"class":1260},"from",[459,1269,1270],{"class":510}," '@inertiajs\u002Fvue3'",[459,1272,1273],{"class":493},";\n",[459,1275,1276],{"class":490,"line":145},[459,1277,527],{"emptyLinePlaceholder":526},[459,1279,1280,1283,1287,1290,1293,1297,1300,1303,1306],{"class":490,"line":149},[459,1281,1282],{"class":1260},"const",[459,1284,1286],{"class":1285},"sKwhi"," save",[459,1288,1289],{"class":1260}," =",[459,1291,1292],{"class":493}," (",[459,1294,1296],{"class":1295},"soyes","user",[459,1298,1299],{"class":1260},":",[459,1301,1302],{"class":1295}," User",[459,1304,1305],{"class":493},") ",[459,1307,1308],{"class":1260},"=>\n",[459,1310,1311,1314,1317,1319,1322,1325,1328,1330,1333,1335,1338],{"class":490,"line":177},[459,1312,1313],{"class":1260},"    new",[459,1315,1316],{"class":500}," Promise",[459,1318,494],{"class":493},[459,1320,1321],{"class":500},"void",[459,1323,1324],{"class":493},">((",[459,1326,1327],{"class":1295},"resolve",[459,1329,618],{"class":493},[459,1331,1332],{"class":1295},"reject",[459,1334,1305],{"class":493},[459,1336,1337],{"class":1260},"=>",[459,1339,1340],{"class":493}," {\n",[459,1342,1343,1346,1349,1352,1355,1357,1359,1361,1364],{"class":490,"line":181},[459,1344,1345],{"class":493},"        router.",[459,1347,1348],{"class":1285},"put",[459,1350,1351],{"class":493},"(",[459,1353,1354],{"class":510},"`\u002Fusers\u002F${",[459,1356,1296],{"class":493},[459,1358,436],{"class":510},[459,1360,444],{"class":493},[459,1362,1363],{"class":510},"}`",[459,1365,1366],{"class":493},", user, {\n",[459,1368,1369,1372,1375,1377,1380],{"class":490,"line":185},[459,1370,1371],{"class":1285},"            onSuccess",[459,1373,1374],{"class":493},": () ",[459,1376,1337],{"class":1260},[459,1378,1379],{"class":1285}," resolve",[459,1381,1382],{"class":493},"(),\n",[459,1384,1385,1388,1391,1394,1396,1398,1401],{"class":490,"line":225},[459,1386,1387],{"class":1285},"            onError",[459,1389,1390],{"class":493},": (",[459,1392,1393],{"class":1295},"errors",[459,1395,1305],{"class":493},[459,1397,1337],{"class":1260},[459,1399,1400],{"class":1285}," reject",[459,1402,1403],{"class":493},"({ errors }),\n",[459,1405,1406],{"class":490,"line":229},[459,1407,1409],{"class":1408},"sLBg1","            \u002F\u002F Cancelled or interrupted: close. A 500 or a network error\n",[459,1411,1412],{"class":490,"line":233},[459,1413,1414],{"class":1408},"            \u002F\u002F keeps the dialog open.\n",[459,1416,1417,1420,1422,1425,1427],{"class":490,"line":237},[459,1418,1419],{"class":1285},"            onFinish",[459,1421,1390],{"class":493},[459,1423,1424],{"class":1295},"visit",[459,1426,1305],{"class":493},[459,1428,1308],{"class":1260},[459,1430,1431,1434,1437],{"class":490,"line":241},[459,1432,1433],{"class":493},"                visit.cancelled ",[459,1435,1436],{"class":1260},"||",[459,1438,1439],{"class":493}," visit.interrupted\n",[459,1441,1443,1446,1448],{"class":490,"line":1442},12,[459,1444,1445],{"class":1260},"                    ?",[459,1447,1379],{"class":1285},[459,1449,1450],{"class":493},"()\n",[459,1452,1454,1457,1459,1461,1464,1467,1469,1472],{"class":490,"line":1453},13,[459,1455,1456],{"class":1260},"                    :",[459,1458,1400],{"class":1285},[459,1460,1351],{"class":493},[459,1462,1463],{"class":1260},"new",[459,1465,1466],{"class":1285}," Error",[459,1468,1351],{"class":493},[459,1470,1471],{"class":510},"'The save failed'",[459,1473,1474],{"class":493},")),\n",[459,1476,1478],{"class":490,"line":1477},14,[459,1479,1480],{"class":493},"        });\n",[459,1482,1484],{"class":490,"line":1483},15,[459,1485,1486],{"class":493},"    });\n",[455,1488,1490],{"id":1489},"on-demand",[459,1491,1492],{},"Opening a component",[387,1494,1495,1496,1499,1500,1506],{},"A create flow does not need its dialog mounted on the page. Hand the directive\nthe dialog's ",[593,1497,1498],{},"component"," instead of an id: the app's\n",[405,1501,1503],{"href":1502},"\u002Fen\u002Fcomponents\u002Fbb-confirm#setup",[391,1504,1505],{},"\u003CBbHost \u002F>"," mounts a fresh instance for\nthat one opening and unmounts it after the close, so every open starts from a\nnew setup and there is nothing to reset.",[803,1508],{"name":1509,"also":1510},"BbDialog\u002FOnDemand","BbDialog\u002FNewLabelDialog",[387,1512,1513,1514,1517,1518,1520,1521,436],{},"The component renders its own ",[391,1515,1516],{},"\u003CBbDialog>"," and binds its form to the opening's\n",[391,1519,586],{}," (undefined here: the form starts from its defaults). From code it is\n",[391,1522,1523],{},"useBbDialogContext\u003CIn, Out>(NewLabelDialog).show(data)",[399,1525,1526,1538,1551,1559,1589],{},[402,1527,1528,1533,1534,1537],{},[593,1529,1530,1531],{},"It needs ",[391,1532,1505],{}," at the app root, the one that renders confirms and\ntoasts. Without it the opening settles ",[391,1535,1536],{},"'unmounted'"," after a second.",[402,1539,1540,1543,1544,1546,1547,1550],{},[593,1541,1542],{},"It takes the trigger's surroundings",": a ",[391,1545,1240],{}," or a ",[391,1548,1549],{},"\u003CBbPtScope>","\naround the button reaches the dialog, which paints in the host.",[402,1552,1553,1556,1557,773],{},[593,1554,1555],{},"It lives as long as its opener."," A route change or a row that re-renders\naway dismisses it (",[391,1558,1536],{},[402,1560,1561,680,1564,1567,1568,618,1570,618,1572,618,1574,618,1577,649,1580,618,1582,1585,1586,1588],{},[593,1562,1563],{},"One handle, one dialog.",[391,1565,1566],{},"useBbDialogContext\u003CIn, Out>(NewLabelDialog)"," is\nthe same handle as the id form (",[391,1569,648],{},[391,1571,457],{},[391,1573,586],{},[391,1575,1576],{},"show",[391,1578,1579],{},"hide",[391,1581,876],{},[391,1583,1584],{},"reset","), about its own dialog: a ",[391,1587,710],{}," while it is open joins\nit. Another handle, or another trigger button, opens its own instance on top.",[402,1590,1591,1594,1595,1597],{},[593,1592,1593],{},"From a store."," Create the handle in a setup store's body, then call\n",[391,1596,710],{}," from its actions or a router hook: the opening lives until it\ncloses.",[455,1599,1601],{"id":1600},"layout",[459,1602,1603],{},"Structure and size",[387,1605,1606],{},"The body is the only one of the three regions that scrolls: header and footer\nstay pinned.",[803,1608],{"name":1609},"BbDialog\u002FHeaderFooter",[387,1611,1612,1613,1618,1619,1622,1623,1626,1627,1632,1633,1639,1640,1645],{},"Put actions in the ",[405,1614,1616],{"href":1615},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#slot-footer",[391,1617,625],{}," slot, one primary with its counterweight beside it;\nits scope carries ",[391,1620,1621],{},"close",", so Cancel needs no handle on the dialog.\nThe footer lays the buttons out in a row at the end by itself, so they need no\nwrapper; ",[391,1624,1625],{},"class=\"me-auto\""," on one pushes it to the start.\nA footer with two primaries is a decision you have not made yet. Use the ",[405,1628,1630],{"href":1629},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#slot-title",[391,1631,448],{},"\nslot when only the title text needs restyling. With neither a title nor a\ndescription the whole header goes, leaving the × floating over the top corner of\nthe body.\n",[405,1634,1636],{"href":1635},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-description",[391,1637,1638],{},"description"," adds one muted\nline under the title, and it is what screen readers read as the dialog's\ndescription. When that line needs markup, use the\n",[405,1641,1643],{"href":1642},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#slot-description",[391,1644,1638],{}," slot.",[387,1647,1648,1649,1654],{},"The ",[405,1650,1652],{"href":1651},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#slot-header",[391,1653,621],{}," slot replaces the whole header, on the dialog and on the mobile\nsheet alike.",[803,1656],{"name":1657},"BbDialog\u002FCustomHeader",[387,1659,1660,1661,1663,1664,1667,1668,1670,1671,1674],{},"Two things this slot makes yours. Render a control wired to the slot's ",[391,1662,1621],{},",\nbecause the default × is gone. And put ",[391,1665,1666],{},"titleId"," on your heading, or the dialog\nhas no accessible name while the markup still looks correct. The ",[391,1669,1638],{},"\nprop does not render inside a replaced header. Give your slot root\n",[391,1672,1673],{},"flex-1",": the header is a flex row, so a single child otherwise hugs the left\nedge.",[1676,1677,1678],"migration",{},[387,1679,1680,1683,1684,1687,1688,1691,1692,1687,1694,618,1697,622,1700,1703,1704,1708,1709,436],{},[391,1681,1682],{},"#close"," is gone, a custom close control lives inside ",[391,1685,1686],{},"#header",". ",[391,1689,1690],{},"hideHeader"," is\ngone: omit ",[391,1693,448],{},[391,1695,1696],{},"compact",[391,1698,1699],{},"overlayClasses",[391,1701,1702],{},"panelClasses"," are gone too,\nsince spacing is ",[405,1705,1707],{"href":1706},"#styling","token-driven"," and the panel takes a normal ",[391,1710,1711],{},"class",[387,1713,1714,1715,1718,1719,1721,1722,622,1725,1728,1729,1733],{},"Never gate Cancel on validity: an unfinished form is exactly when someone wants\nout. A submit button in the footer sits outside the ",[391,1716,1717],{},"\u003Cform>"," element. Give the\nform an ",[391,1720,444],{}," and point the button at it with ",[391,1723,1724],{},"form=\"…\"",[391,1726,1727],{},"type=\"submit\"",",\nas ",[405,1730,1732],{"href":1731},"\u002Fen\u002Fcomponents\u002Fbb-form#outside","Driving the form from outside"," shows.",[775,1735,1737],{"id":1736},"width-and-fullscreen","Width and fullscreen",[387,1739,1740,1746],{},[405,1741,1743],{"href":1742},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-size",[391,1744,1745],{},"size"," is a maximum width: the height always hugs the content.\nBesides the presets it takes a pixel number or a CSS length.",[803,1748],{"name":1749},"BbDialog\u002FSizes",[387,1751,1752,1753,1756,1757,1760,1761,1764,1765,1768],{},"The presets run from ",[391,1754,1755],{},"xs"," (320px) to ",[391,1758,1759],{},"2xl"," (672px), and ",[391,1762,1763],{},"sm"," (384px) is the\ndefault. A per-breakpoint map, ",[391,1766,1767],{},":size=\"{ default: 'xs', lg: 'xl' }\"",", is the\nonly form that reacts to a live resize.",[1676,1770,1772,1783],{"title":1771},"preset widths",[387,1773,1774,1775,1778,1779,1782],{},"The preset values changed between v2 and v3 and nothing warns you. v2 shipped\n",[391,1776,1777],{},"{ sm: 384, md: 652, lg: 896 }",", so a ",[391,1780,1781],{},"size=\"md\""," dialog now loses about 200px.\nPin the old numbers if your layouts assumed them:",[481,1784,1786],{"className":1251,"code":1785,"language":1253,"meta":397,"style":397},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n    bitboss: { dialogDefaultSizes: { md: 652, lg: 896 } },\n});\n",[391,1787,1788,1793,1807,1826],{"__ignoreMap":397},[459,1789,1790],{"class":490,"line":141},[459,1791,1792],{"class":1408},"\u002F\u002F nuxt.config.ts\n",[459,1794,1795,1798,1801,1804],{"class":490,"line":145},[459,1796,1797],{"class":1260},"export",[459,1799,1800],{"class":1260}," default",[459,1802,1803],{"class":1285}," defineNuxtConfig",[459,1805,1806],{"class":1295},"({\n",[459,1808,1809,1812,1815,1818,1821,1824],{"class":490,"line":149},[459,1810,1811],{"class":493},"    bitboss: { dialogDefaultSizes: { md: ",[459,1813,1814],{"class":500},"652",[459,1816,1817],{"class":493},", lg: ",[459,1819,1820],{"class":500},"896",[459,1822,1823],{"class":493}," } }",[459,1825,649],{"class":1295},[459,1827,1828,1831],{"class":490,"line":177},[459,1829,1830],{"class":1295},"})",[459,1832,1273],{"class":493},[387,1834,1835,1841,1842,1845],{},[405,1836,1838],{"href":1837},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-fullscreen",[391,1839,1840],{},"fullscreen"," fills the viewport minus the standard page margin, intentionally\nnot edge to edge. ",[391,1843,1844],{},"fullscreen=\"mobile\""," applies that only on small viewports.",[455,1847,1849],{"id":1848},"focus",[459,1850,1851],{},"Focus and the top layer",[387,1853,1854,1855,1857],{},"Focus, ",[391,1856,816],{}," and layering are the browser's job. There is nothing to wire,\nnot even for a popover or a select opened from in here.",[803,1859],{"name":1860},"BbDialog\u002FFocusTarget",[387,1862,1863,1869],{},[405,1864,1866],{"href":1865},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-focusTarget",[391,1867,1868],{},"focus-target"," is a CSS selector and decides only where focus starts. Without\nit the browser focuses the first tabbable element, and in a dialog with a header\nthat is the ×. Point it at the field in a form, and at the primary action in a\ndecision whose real content is its footer.",[387,1871,1872,1873,1876],{},"Focus returns to the trigger on close, as long as that trigger still exists.\nWhen the dialog's action destroys the row that opened it, focus drops to\n",[391,1874,1875],{},"\u003Cbody>",", so move it somewhere sensible yourself.",[387,1878,1879,1880,1883,1884,1886,1887,1889],{},"The dialog paints above every ",[391,1881,1882],{},"z-index",", and it stays where you declared it in\nthe DOM. Scoped styles, ",[391,1885,1240],{},"\u002F",[391,1888,1244],{}," and your component tree all behave\nnormally.",[775,1891,1893],{"id":1892},"steps-in-one-dialog",[459,1894,1896],{"id":1895},"steps","Steps in one dialog",[399,1898,1899,1911,1921],{},[402,1900,1901,1907,1908,1910],{},[593,1902,1903,1904],{},"Each step's first field gets ",[391,1905,1906],{},"autofocus",": it fires when the field\nmounts, so focus follows the step with no watcher (",[391,1909,1868],{}," picks only\nwhere the opening starts).",[402,1912,1913,1916,1917,1920],{},[593,1914,1915],{},"A final success step with no field is a status region","\n(",[391,1918,1919],{},"role=\"status\"","), announced as it appears, not a focus target.",[402,1922,1923,1926,1927,1930,1931,1933,1934,1937],{},[593,1924,1925],{},"A footer button that changes type in place"," (Next, ",[391,1928,1929],{},"type=\"button\"",",\nbecoming Accept, ",[391,1932,1727],{},", during its own click): give each its own\n",[391,1935,1936],{},"key",". Unkeyed, Vue reuses the element, its type flips mid-click, and the\nclick on Next submits the form.",[455,1939,1941],{"id":1940},"dismissal",[459,1942,932],{},[387,1944,1945,1951,1952,1954],{},[405,1946,1948],{"href":1947},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-persistent",[391,1949,1950],{},"persistent"," stops the backdrop and ",[391,1953,816],{}," from closing. The × still closes\nit: that is the deliberate escape hatch.",[803,1956],{"name":1957},"BbDialog\u002FPersistent",[387,1959,1960,1961,1967,1968,618,1970,1972,1973,1975],{},"Pair it with ",[405,1962,1964],{"href":1963},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-hideClose",[391,1965,1966],{},"hide-close"," when the choice really has to be made, and then the\nfooter owes the user a visible way out. ",[391,1969,1950],{},[391,1971,1966],{}," and no Cancel\nis a trap in three directions: no ",[391,1974,816],{}," for the keyboard, no backdrop for the\npointer, nothing for a screen reader to find.",[387,1977,1978,1979,1981,1982,1984,1985,1987],{},"While a save is in flight the dialog has to stay put, and a ",[391,1980,220],{}," inside\nit does that by itself: return the save's promise from ",[391,1983,1211],{}," and, until it\nsettles, the fields turn read-only and the dialog refuses every close, the ×,\nCancel, ",[391,1986,816],{}," and the backdrop, with the same nudge.",[803,1989],{"name":1990},"BbDialog\u002FBusySave",[387,1992,1993,1994,1997,1998,2001,2002,2004,2005,2008,2009,747,2011,2014,2015,2018,2019,2021,2022,2024,2025,2027,2028,2030],{},"No ",[391,1995,1996],{},"saving"," ref, no ",[391,1999,2000],{},":disabled",", no ",[391,2003,697],{},", and no ",[391,2006,2007],{},":loading"," on the\nfooter's Rename: it sits outside the form, so ",[391,2010,1727],{},[391,2012,2013],{},"form=\"dialog-busy-form\""," submit it, and it spins with the save on its own.\n",[391,2016,2017],{},"complete(await save(data))"," closes once the save resolves: ",[391,2020,876],{}," and the context's ",[391,2023,655],{}," (or a\n",[391,2026,475],{},") close under the lock, the slots' ",[391,2029,701],{}," does not.",[387,2032,2033,2038,2039,2042,2043,2045,2046,2048,2049,2055],{},[405,2034,2036],{"href":2035},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-preventClose",[391,2037,697],{}," is for the\nrest. Unset, it follows the form. ",[391,2040,2041],{},"true"," refuses every user close, the × and\nthe slots' ",[391,2044,1621],{}," included, for work that is not a form submit. ",[391,2047,1070],{}," keeps\nthe dialog closable even mid-save, and\n",[405,2050,2052],{"href":2051},"\u002Fen\u002Fcomponents\u002Fbb-form\u002Fapi#prop-disableSubmitLock",[391,2053,2054],{},"disable-submit-lock"," on\nthe form does the same.",[1676,2057,2059,2074,2091],{"title":2058},"show-close → hide-close",[387,2060,2061,2062,2065,2066,2068,2069,2065,2071,2073],{},"v2's ",[391,2063,2064],{},"show-close"," (default ",[391,2067,2041],{},") is v3's ",[391,2070,1966],{},[391,2072,1070],{},"), and\nthe compiler cannot see it:",[481,2075,2079],{"className":2076,"code":2077,"language":2078,"meta":397,"style":397},"language-diff shiki shiki-themes github-light-high-contrast github-dark-high-contrast","- \u003CBbDialog v-model=\"open\" :show-close=\"false\" persistent \u002F>\n+ \u003CBbDialog v-model=\"open\" hide-close persistent \u002F>\n","diff",[391,2080,2081,2086],{"__ignoreMap":397},[459,2082,2083],{"class":490,"line":141},[459,2084,2085],{},"- \u003CBbDialog v-model=\"open\" :show-close=\"false\" persistent \u002F>\n",[459,2087,2088],{"class":490,"line":145},[459,2089,2090],{},"+ \u003CBbDialog v-model=\"open\" hide-close persistent \u002F>\n",[387,2092,2093,2094,2097,2098,2101,2102,2105],{},"A leftover ",[391,2095,2096],{},":show-close=\"false\""," falls through to ",[391,2099,2100],{},"$attrs",", and the close button\ncomes back on the dialog that was deliberately built without one. ",[391,2103,2104],{},"eslint --fix","\nrewrites it.",[455,2107,2109],{"id":2108},"flow",[459,2110,2111],{},"Stacks and mobile sheets",[387,2113,2114,2115,2121],{},"Dialogs that share a ",[405,2116,2118],{"href":2117},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-stack",[391,2119,2120],{},"stack"," name replace one another instead of piling up.",[803,2123],{"name":2124},"BbDialog\u002FStacked",[387,2126,2127,2128,2131,2132,2135],{},"Only the most recently opened member is visible, and closing it brings the\nprevious one back. A two-step flow then reads as one surface whose content\nswaps. A member adds no dim of its own: the one it covers keeps its backdrop,\nso the page behind stays as dark as under the first member. Dialogs with\ndifferent names layer by open order, each adding its dim\n(",[391,2129,2130],{},"--bb-overlay-above","; ",[391,2133,2134],{},"transparent"," keeps one dim under the whole pile).",[387,2137,2138,2139,2144,2145,2149,2150,2152,2153,436],{},"Before you reuse the name on a phone:\n",[405,2140,2142],{"href":2141},"\u002Fen\u002Fcomponents\u002Fbb-off-canvas#stack",[391,2143,300],{},"'s stack does the opposite,\nwith parents stepping back and leaving a band visible. An\n",[405,2146,2148],{"href":2147},"#mobile-sheet","adaptive"," dialog forwards ",[391,2151,2120],{}," to its mobile sheet, so the same\nname gives you replacement on desktop and peeking on mobile. Override it through\n",[391,2154,2155],{},"off-canvas-props",[775,2157,2159],{"id":2158},"the-mobile-bottom-sheet",[459,2160,2162],{"id":2161},"mobile-sheet","The mobile bottom sheet",[387,2164,2165,2166,2170],{},"Below 768px this is not a centred modal: it renders as a\n",[405,2167,2168],{"href":56},[391,2169,300],{}," bottom sheet. That is the shipped\nbehaviour.",[803,2172],{"name":2173,":frame":2041},"BbDialog\u002FAdaptive",[387,2175,2176,2182,2183,2186],{},[405,2177,2179],{"href":2178},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-adaptive",[391,2180,2181],{},":adaptive=\"false\""," keeps the centred modal everywhere, and ",[391,2184,2185],{},"adaptive: false","\nin the plugin options does it project-wide.",[387,2188,2189,2190,622,2193,2196,2197,773],{},"The surface is latched when the dialog opens, so rotating a phone never swaps a\nmodal for a sheet under someone's finger. ",[391,2191,2192],{},"snap-points",[391,2194,2195],{},"v-model:snap"," reach\nthe sheet too (",[405,2198,2200],{"href":2199},"\u002Fen\u002Fcomponents\u002Fbb-off-canvas#snap-points","snap points",[387,2202,2203,2204,2206,2207,2212],{},"The sheet starts bottom-anchored, draggable and content-sized. The dialog's own\n",[391,2205,1745],{}," is deliberately not forwarded: a max width and a drawer's extent are\ndifferent measurements. Tune the sheet with ",[405,2208,2210],{"href":2209},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-offCanvasProps",[391,2211,2155],{},", which merges\nlast:",[481,2214,2216],{"className":483,"code":2215,"language":485,"meta":397,"style":397},"\u003CBbDialog\n    id=\"order-detail\"\n    :off-canvas-props=\"{ side: 'right', draggable: false, size: 'lg' }\"\n    title=\"Order detail\"\n\u002F>\n",[391,2217,2218,2225,2235,2269,2279],{"__ignoreMap":397},[459,2219,2220,2222],{"class":490,"line":141},[459,2221,494],{"class":493},[459,2223,2224],{"class":497},"BbDialog\n",[459,2226,2227,2230,2232],{"class":490,"line":145},[459,2228,2229],{"class":500},"    id",[459,2231,504],{"class":493},[459,2233,2234],{"class":510},"\"order-detail\"\n",[459,2236,2237,2240,2242,2244,2246,2249,2252,2255,2257,2260,2263,2266],{"class":490,"line":149},[459,2238,2239],{"class":493},"    :",[459,2241,2155],{"class":500},[459,2243,504],{"class":493},[459,2245,507],{"class":493},[459,2247,2248],{"class":493},"{ side: ",[459,2250,2251],{"class":510},"'right'",[459,2253,2254],{"class":493},", draggable: ",[459,2256,1070],{"class":500},[459,2258,2259],{"class":493},", size: ",[459,2261,2262],{"class":510},"'lg'",[459,2264,2265],{"class":493}," }",[459,2267,2268],{"class":493},"\"\n",[459,2270,2271,2274,2276],{"class":490,"line":177},[459,2272,2273],{"class":500},"    title",[459,2275,504],{"class":493},[459,2277,2278],{"class":510},"\"Order detail\"\n",[459,2280,2281],{"class":490,"line":181},[459,2282,2283],{"class":493},"\u002F>\n",[387,2285,2286,2287,2289,2290,2292,2293,2296],{},"What you get on a phone is a real ",[391,2288,300],{},", so its rules apply there: the\ndrag gesture, the peeking stack, and ",[391,2291,1745],{}," meaning extent rather than width.\nThe ",[405,2294,2295],{"href":56},"drawer page"," is where those live.",[455,2298,2300],{"id":2299},"styling",[459,2301,2302],{},"Padding and the title",[387,2304,2305,2306,2309,2310,622,2313,2316,2317,2320,2321,436],{},"Spacing reaches the dialog through ",[391,2307,2308],{},"--bb-panel-p"," (16px), split into the local\npair ",[391,2311,2312],{},"--px",[391,2314,2315],{},"--py"," on ",[391,2318,2319],{},".bb-dialog",". Set them on the component's class, never\non ",[391,2322,2323],{},":root",[481,2325,2329],{"className":2326,"code":2327,"language":2328,"meta":397,"style":397},"language-css shiki shiki-themes github-light-high-contrast github-dark-high-contrast",".my-dialog {\n    --px: 24px;\n    --py: 10px;\n}\n","css",[391,2330,2331,2338,2354,2368],{"__ignoreMap":397},[459,2332,2333,2336],{"class":490,"line":141},[459,2334,2335],{"class":500},".my-dialog",[459,2337,1340],{"class":493},[459,2339,2340,2343,2346,2349,2352],{"class":490,"line":145},[459,2341,2342],{"class":1295},"    --px",[459,2344,2345],{"class":493},": ",[459,2347,2348],{"class":500},"24",[459,2350,2351],{"class":1260},"px",[459,2353,1273],{"class":493},[459,2355,2356,2359,2361,2364,2366],{"class":490,"line":149},[459,2357,2358],{"class":1295},"    --py",[459,2360,2345],{"class":493},[459,2362,2363],{"class":500},"10",[459,2365,2351],{"class":1260},[459,2367,1273],{"class":493},[459,2369,2370],{"class":490,"line":177},[459,2371,2372],{"class":493},"}\n",[387,2374,2375,2376,2378,2379,649,2382,618,2385,2388,2389,436],{},"For per-part differences, scope ",[391,2377,2315],{}," to the part: ",[391,2380,2381],{},".bb-dialog__header",[391,2383,2384],{},".bb-dialog__content",[391,2386,2387],{},".bb-dialog__footer",". On a phone those parts are\n",[391,2390,2391],{},".bb-offcanvas__*",[387,2393,2394,2395,1292,2401,649,2404,618,2407,2410,2411,2414,2415,2418,2419,2422,2423,2426,2427,773],{},"To style both surfaces at once use\n",[405,2396,2398],{"href":2397},"\u002Fen\u002Fcomponents\u002Fbb-dialog\u002Fapi#prop-pt:%3Cpart%3E",[391,2399,2400],{},"pt",[391,2402,2403],{},"pt:header",[391,2405,2406],{},"pt:content",[391,2408,2409],{},"pt:footer","…). It follows the dialog onto the sheet, and\n",[391,2412,2413],{},"pt:sheet"," targets the phone only. Three more locals set the\nrhythm and the title for every dialog and sheet at once: ",[391,2416,2417],{},"--dialog-gap"," is the\nbody-to-footer rhythm, ",[391,2420,2421],{},"--dialog-title-fs"," the title's size and\n",[391,2424,2425],{},"--dialog-title-fw"," its weight (",[391,2428,2429],{},"500",[481,2431,2433],{"className":2326,"code":2432,"language":2328,"meta":397,"style":397},".my-theme {\n    --dialog-title-fw: 600;\n}\n",[391,2434,2435,2442,2454],{"__ignoreMap":397},[459,2436,2437,2440],{"class":490,"line":141},[459,2438,2439],{"class":500},".my-theme",[459,2441,1340],{"class":493},[459,2443,2444,2447,2449,2452],{"class":490,"line":145},[459,2445,2446],{"class":1295},"    --dialog-title-fw",[459,2448,2345],{"class":493},[459,2450,2451],{"class":500},"600",[459,2453,1273],{"class":493},[459,2455,2456],{"class":490,"line":149},[459,2457,2372],{"class":493},[387,2459,2460,2465],{},[405,2461,2463],{"href":2462},"\u002Fen\u002Fcomponents\u002Fbb-off-canvas#styling",[391,2464,300],{}," uses the same names on its\nown parts.",[1676,2467,2469],{"title":2468},"--bb-dialog-close",[387,2470,2471,2472,2474,2475,2478,2479,2482,2483,2486,2487,622,2490,2493,2494,622,2496,2498,2499,2502],{},"Delete ",[391,2473,2468],{}," rather than porting it. In v2 it was the close icon's\nwidth; in v3 ",[391,2476,2477],{},"--close-size"," (28px) is the whole control box, and the title\nreserves the same space beside it. A copied ",[391,2480,2481],{},"12px"," then gives you a 12×12px\ntarget, under the 24px minimum in WCAG 2.5.8. The correct edit is usually none:\nv3 already ships the same 28px control v2 produced. The rest of the\n",[391,2484,2485],{},"--bb-dialog-*"," family went with it: ",[391,2488,2489],{},"--bb-dialog-px",[391,2491,2492],{},"--bb-dialog-py"," are\nthe ",[391,2495,2312],{},[391,2497,2315],{}," above, and everything else is plain CSS on the\n",[391,2500,2501],{},".bb-dialog__*"," parts.",[2504,2505,2506],"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 .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 .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 .sHUrx, html code.shiki .sHUrx{--shiki-default:#A0111F;--shiki-dark:#FF9492}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}html pre.shiki code .sLBg1, html code.shiki .sLBg1{--shiki-default:#66707B;--shiki-dark:#BDC4CC}",{"title":397,"searchDepth":149,"depth":149,"links":2508},[2509,2512,2515,2518,2519,2522,2525,2526,2529],{"id":457,"depth":145,"text":461,"children":2510},[2511],{"id":777,"depth":149,"text":781},{"id":857,"depth":145,"text":860,"children":2513},[2514],{"id":935,"depth":149,"text":939},{"id":1022,"depth":145,"text":1025,"children":2516},[2517],{"id":1151,"depth":149,"text":1155},{"id":1489,"depth":145,"text":1492},{"id":1600,"depth":145,"text":1603,"children":2520},[2521],{"id":1736,"depth":149,"text":1737},{"id":1848,"depth":145,"text":1851,"children":2523},[2524],{"id":1892,"depth":149,"text":1896},{"id":1940,"depth":145,"text":932},{"id":2108,"depth":145,"text":2111,"children":2527},[2528],{"id":2158,"depth":149,"text":2162},{"id":2299,"depth":145,"text":2302},"The centred modal: a native dialog over the page, a bottom sheet on phones.","md",{},[2534,2535,2536,2537,2538,2539,2540,2541,2542],{"id":457,"title":461},{"id":857,"title":860},{"id":1022,"title":1025},{"id":1489,"title":1492},{"id":1600,"title":1603},{"id":1848,"title":1851},{"id":1940,"title":932},{"id":2108,"title":2111},{"id":2299,"title":2302},{"title":288,"description":2530},"components\u002Fbb-dialog","f4pU4hoALEsPKLDXtnEGUZ6JIcPbx17d-CiMV5YIoTo",{"name":288,"slug":2547,"group":276,"description":2548,"entrypoint":2549,"docs":2550,"props":2553,"models":2647,"events":2651,"slots":2675,"exposed":2694,"pt":2695,"validated":377,"migration":2721},"bb-dialog","Presents modal dialogs; also the v-bb-dialog directive.","bitboss-ui",{"contract":2551,"source":2552},"ai\u002FBbDialog.md","ai\u002Fsource\u002FBbDialog.md",[2554,2560,2565,2568,2571,2575,2579,2583,2586,2589,2592,2597,2600,2605,2608,2613,2618,2621,2626,2630,2635,2638,2641],{"name":2148,"type":2555,"required":2556,"default":2557,"description":2558,"note":2559,"demo":2108},"boolean | undefined",false,"`config.adaptive` (`true`)","On mobile, renders as a `BbOffCanvas` drawer instead of a centred dialog; the surface is chosen when the dialog opens and kept until it closes. Unset: the global `config.adaptive`.","Three-state on purpose: unset falls back to `config.adaptive`, which ships on, so most projects never write it. The surface is latched when the dialog opens, so a resize mid-session never swaps a modal for a sheet.",{"name":2561,"type":2562,"required":2556,"default":377,"description":2563,"note":2564,"demo":857},"defaultData","Record\u003Cstring, any> | undefined","What `data` is when an opening passes none (a create): an object, copied at once, so inputs bind `data.x` with no guard. An opening's data lays over it (`{ ...defaultData, ...row }`, one level). `reset()` restores its keys but keeps an edit's `id`; a close restores it.","What a create binds: every opening without data gets a fresh copy, an edit lays its row over it (one level). `reset()` restores the keys it declares and keeps the rest (an edit's `id` stays); every close restores it. Without it `data` is `undefined` on a create.",{"name":1638,"type":2566,"required":2556,"default":377,"description":2567,"note":377,"demo":377},"string | undefined","One short line under the title, muted (the shadcn `DialogDescription` shape), and the only element `aria-describedby` points at. Keep it to a sentence; anything longer belongs in the body.",{"name":1005,"type":2555,"required":2556,"default":1070,"description":2569,"note":2570,"demo":857},"Keep the body mounted while closed, from before the first opening. Without it the body mounts per opening and unmounts after `@hidden`. `data` still clears while closed, so an eager body guards its reads.","Reach for it only when something has to read or measure the body before it has ever been open — a chart, a test, an SSR snapshot. Leaving it off is what keeps a page with many dialogs cheap.",{"name":2572,"type":2566,"required":2556,"default":377,"description":2573,"note":2574,"demo":1848},"focusTarget","CSS selector of the element to focus after opening. Defaults to the first tabbable element.","Chooses where focus starts, never whether it is contained: `showModal()` traps focus and returns it to the trigger either way. Without it the first tabbable element gets focus, which is the × in the header; point it at the field in a form and at the primary action in a decision.",{"name":1840,"type":2576,"required":2556,"default":377,"description":2577,"note":2578,"demo":1600},"boolean | \"mobile\" | undefined","Display the dialog fullscreen. Use `'mobile'` to restrict fullscreen to small devices.","Fills the viewport minus the page margin (20px, 14px on mobile) — deliberately not edge to edge. It overrides `size` rather than combining with it.",{"name":2580,"type":2555,"required":2556,"default":1070,"description":2581,"note":2582,"demo":1940},"hideClose","Hide the default close (×) button. The button is shown by default; set this to remove it (e.g. for a `persistent` dialog you don't want dismissible — the × otherwise still closes a persistent dialog).","Inverted from v2's `show-close`, which defaulted to `true`. A leftover `:show-close=\"false\"` type-checks, falls through to `$attrs`, and the × comes back. Removing it also removes the last one-click way out, so the footer then owes the user a visible Cancel.",{"name":444,"type":2566,"required":2556,"default":377,"description":2584,"note":2585,"demo":457},"Names the dialog for `v-bb-dialog=\"'edit'\"` and `useBbDialogContext`, found nearest to the trigger, so two pages may reuse an id. Also the DOM `id`: one dialog per id, rows pass `data`.","One dialog per id: it is also the DOM id. Many rows open the same dialog with their own `data` (`v-bb-dialog=\"{ id, data: row }\"`) rather than rendering one each.",{"name":2587,"type":2555,"required":2556,"default":1070,"description":2588,"note":377,"demo":377},"modelValue","Used by v-model to open \u002F close the dialog. A dialog with no `v-model` starts closed.",{"name":780,"type":2555,"required":2556,"default":1070,"description":2590,"note":2591,"demo":457},"Syncs the open state with the URL: opening writes `?\u003CqueryKey>=true`, closing removes it, a URL with the key opens the dialog on load, and Back closes it (refused whenever Escape is). Template dialogs only; keep a record id in your own query.","Back closes the dialog like `Escape` (reason `'escape'`, refused where `Escape` is). Template dialogs only; a record id stays in your own query.",{"name":2593,"type":2594,"required":2556,"default":377,"description":2595,"note":2596,"demo":2108},"offCanvasProps","Partial\u003CBbOffCanvasProps> | undefined","Props for the phone sheet (the `BbOffCanvas` that `adaptive` renders on mobile), spread over its defaults. A `pt` inside it styles only the sheet (passthrough guide § Inside the sheet).","Merged last, so it wins over both the forwarded dialog props and the sheet's own defaults. The drawer's edge prop is `side` — `direction` was its v2 name. Spelled `canvas-props` in v2.",{"name":1950,"type":2555,"required":2556,"default":1070,"description":2598,"note":2599,"demo":1940},"Blocks closing by outside click or Escape. The header close (×) STILL closes a persistent dialog, the documented escape hatch: add `hideClose` to remove it, or use `preventClose` to block every dismissal. Programmatic close still works.","Blocks the backdrop and Escape only. The × still closes, by design, so `persistent` alone never makes a dialog unresolvable — pair it with `hideClose` when the choice must be made explicitly.",{"name":2601,"type":2555,"required":2556,"default":2602,"description":2603,"note":2604,"demo":1940},"preventClose","`undefined` (follows a saving form inside)","Refuses every user close (backdrop, Escape, the ✕, the slots' `close`) with the deny nudge; `v-model` still closes. Unset: locked while a `BbForm` inside saves (an async `@submit`). `true`: always; `false`: never, not even mid-save. Beside a form: `busy || undefined`.","Rarely written: unset, the dialog already locks itself while a `BbForm` inside it saves. `true` locks it for work that is not a form submit; `false` keeps it closable even mid-save. The slots' `close` is refused too, so close with `complete(value)` or `hide()` (or `v-model`) once the work is done.",{"name":2400,"type":2606,"required":2556,"default":377,"description":2607,"note":377,"demo":377},"PtMap\u003CBbDialogPtPart, BbDialogPtState> | undefined","Passthrough, object form: the same keys as the `pt:*` attributes without the prefix. See the `pt:\u003Cpart>` row.",{"name":2609,"type":2610,"required":2556,"default":377,"description":2611,"note":377,"demo":2612},"pt:\u003Cpart>","PtValue | undefined","Passthrough, attribute form: one attribute per part, `pt:\u003Cpart>`, and per part and state, `pt:\u003Cpart>:\u003Cstate>`. Parts: `close`, `content`, `description`, `footer`, `header`, `root`, `sheet`, `title`. States: `fullscreen`, `open`.","passthrough",{"name":2614,"type":2566,"required":2556,"default":2615,"description":2616,"note":2617,"demo":457},"queryKey","\"dialog\"","The query key `navigation` writes.","Two URL dialogs on one page need their own key. `BbOffCanvas` defaults to `'offcanvas'`, so a dialog and a panel never collide.",{"name":840,"type":2555,"required":2556,"default":1070,"description":2619,"note":2620,"demo":457},"With `navigation`, replaces the history entry instead of pushing one, so Back leaves the page instead of closing the dialog.","Swaps the history entry instead of pushing one, so Back leaves the page rather than closing the dialog.",{"name":1745,"type":2622,"required":2556,"default":2623,"description":2624,"note":2625,"demo":1600},"Responsive\u003CNonNullable\u003Cnumber | CssSize | keyof BbDialogSizes | undefined>> | undefined","\"sm\"","Controls the maximum width of the dialog. Accepts named presets from `'xs'` to `'2xl'`, a custom CSS width string, or a numeric pixel value — or a per-breakpoint map (e.g. `{ default: 'sm', lg: 'lg' }`) to switch width responsively.","A maximum width; the height always hugs the content. The v3 presets are narrower than v2's `{ sm: 384, md: 652, lg: 896 }` and nothing warns — pin the old numbers with `dialogDefaultSizes` if a layout assumed them. Only the per-breakpoint map form re-resolves on a resize.",{"name":2627,"type":2628,"required":2556,"default":377,"description":2629,"note":377,"demo":377},"snap","BbSnapPoint | undefined","The phone sheet's snap stop (Q71.8), one of the `snapPoints` entries. The desktop dialog ignores it.",{"name":2631,"type":2632,"required":2556,"default":377,"description":2633,"note":2634,"demo":2108},"snapPoints","BbSnapPoint[] | undefined","Heights the phone sheet rests at, smallest first: a screen fraction (`0.5`; `1` = as tall as it gets) or pixels (`'240px'`). The first is the opening height; `v-model:snap` reads and sets the stop. Sheet only: the centred dialog ignores it.","Reaches the phone sheet only; the centred modal ignores it.",{"name":2120,"type":2566,"required":2556,"default":377,"description":2636,"note":2637,"demo":2108},"Name of this dialog's stack. Dialogs with the same `stack` replace one another: only the latest opened shows, the rest of the stack hide beneath it. Dialogs in different stacks, or with no `stack`, never affect each other and stay fully visible.","Members of a dialog stack replace one another. The identically named prop on `BbOffCanvas` does the opposite — parents step back and peek — which matters because an adaptive dialog forwards this value to its mobile sheet.",{"name":448,"type":2566,"required":2556,"default":377,"description":2639,"note":2640,"demo":1600},"Title text announced to assistive technologies. If omitted, no header is rendered (unless a `header` slot is supplied) and accessibility must be handled manually.","The accessible name, not just a heading: it wires `aria-labelledby`. Drop it and the header goes too, and naming the dialog becomes your job.",{"name":2642,"type":2643,"required":2556,"default":2644,"description":2645,"note":2646,"demo":857},"transitionDuration","number | undefined","250","Controls the duration of the open and close animations.","Times both the animation and when `hidden` fires. Reopening inside that window keeps the dialog open rather than snapping it shut. Default is 250ms; v2 used 300.",[2648,2650],{"name":2587,"type":2555,"note":2649,"demo":457},"For a dialog your state opens (a route, a watcher); a button opens one by `id` with `v-bb-dialog`. Bound, it wins over the directive and `show()`. Toggling it back from `@hide` to veto a close is not the way to keep a dialog open — that is what `persistent` is for.",{"name":2627,"type":2628,"note":377,"demo":377},[2652,2657,2661,2664,2667,2671],{"name":2653,"signature":2654,"description":2655,"note":2656,"demo":857},"hidden","(): void","Emitted after the close transition completes and the dialog is fully dismissed.","Fires after the close transition, `transitionDuration` later than `hide`. The place to tear down expensive content, not to cancel a close.",{"name":1579,"signature":2658,"description":2659,"note":2660,"demo":1022},"(result: BbDialogResult): void","Emitted as soon as the dialog starts to close (model becomes false), with the opening's result: the same object its promise settles with, `{ completed: true, value }` or `{ completed: false, reason }` (Q73.6).","Fires as the close starts, with the opening's result: `{ completed: true, value }` or `{ completed: false, reason }`. A live preview reverts when `completed` is false. To tell a save from a cancel, close a save with `complete()`, not by writing the model: on a `v-model` dialog too it reports `{ completed: true }`.",{"name":1576,"signature":2654,"description":2662,"note":2663,"demo":1600},"Emitted as soon as the dialog starts to open (model becomes true).","Fires as the dialog starts to open, before the transition, with the opening's `data` already set. Nothing to seed here: `data` is a fresh copy every opening, and `defaultData` gives a create its blank one.",{"name":2665,"signature":2654,"description":2666,"note":377,"demo":377},"shown","Emitted once the open transition has run (symmetric with `hidden`): the dialog is settled, so code that measures or anchors to its content sees the final layout. Not emitted for a dialog closed before it finished opening.",{"name":2668,"signature":2669,"description":2670,"note":377,"demo":377},"update:modelValue","(value: boolean): void","Emitted with the new value whenever `v-model` changes.",{"name":2672,"signature":2673,"description":2674,"note":377,"demo":377},"update:snap","(value: BbSnapPoint | undefined): void","Emitted with the new value whenever `v-model:snap` changes.",[2676,2680,2683,2687,2691],{"name":617,"type":2677,"description":2678,"note":2679,"demo":1600},"BbDialogDefaultSlotProps","Primary body content of the dialog, rendered in the scrollable body area.","The only region that scrolls, and it renders lazily — nothing inside exists until the first open unless you set `eager`. Its scope carries the opening's `data` (a copy, so a form binds it directly), `close` and `complete`.",{"name":1638,"type":2681,"description":2682,"note":377,"demo":377},"BbDialogDescriptionSlotProps","Replaces the description text under the title. Renders the header even when `title` and `description` are unset — a slotted description is a description, the same rule `#title` follows.",{"name":625,"type":2684,"description":2685,"note":2686,"demo":1600},"BbDialogFooterSlotProps","Content rendered in the dialog footer, below the body area. Typically used for action buttons.","Stays pinned while the body scrolls, and lays out what you slot in as a row at the end, 8px apart: no wrapper `div` needed, and `me-auto` pushes one action to the start. One primary action and a Cancel that is never gated on validity. The scope (`BbDialogFooterSlotProps`) carries `data`, `close`, `complete` and `reset`, on the modal and on the adaptive sheet alike. `close` closes like the ×: allowed under `persistent`, refused under `preventClose`. `complete(value)` closes with a result and is never refused.",{"name":621,"type":2688,"description":2689,"note":2690,"demo":1600},"BbDialogHeaderSlotProps","Replaces the whole header (title and ✕) on both surfaces, so it owns closing: wire your control to `close`, and `titleId` onto your title. It renders even without `title`. Its root is a flex item: give it `flex-1` to fill the width.","Replaces the header on both surfaces, so it also replaces the ×: render your own control wired to `close`, and put `titleId` on your heading or `aria-labelledby` points at nothing. The header is a flex row, so give your root `flex-1` or it hugs the left edge. This is where a v2 `#close` goes; a v2 description is the `description` prop or `#description` slot.",{"name":448,"type":2692,"description":2693,"note":377,"demo":377},"BbDialogTitleSlotProps","Replaces the default title text inside the header. Remains linked to the dialog through `aria-labelledby`. Providing this slot renders the header even when `title` is unset — a slotted title is a title.",[],{"parts":2696,"states":2716},[2697,2700,2703,2705,2707,2709,2712,2714],{"name":2698,"description":2699},"root","The `\u003Cdialog>` — the surface itself, so there is no separate `panel`. The backdrop is `::backdrop`: style it in CSS (`.bb-dialog::backdrop`), it has no node for `pt`.",{"name":2701,"description":2702},"sheet","The bottom sheet on the adaptive `surface=\"canvas\"` (the `BbOffCanvas` root) — never the desktop `\u003Cdialog>`. Applied after `root`, so it wins a conflict there.",{"name":621,"description":2704},"The header band.",{"name":448,"description":2706},"The title line inside the header. Not rendered when a `#header` slot replaces the header.",{"name":1638,"description":2708},"The description line inside the header. Not rendered when a `#header` slot replaces the header.",{"name":2710,"description":2711},"content","The scrolling body. It carries the body's padding (`--px`, `--py`, `--dialog-gap`), so `pt:content=\"px-8\"` or `[--py:20px]` sets it.",{"name":625,"description":2713},"The footer band.",{"name":1621,"description":2715},"The ✕ — in the header, or floating when there is none.",[2717,2719],{"name":1840,"description":2718},"Component-wide: the dialog fills the viewport — always with `fullscreen`, and with `fullscreen=\"mobile\"` only while the viewport is a phone, so it can flip at runtime. Listed after `open`, so a `pt:root:fullscreen` entry wins a conflict with `pt:root:open` (drop an open-state ring or radius that a full-viewport surface cannot show). Forwarded to the sheet on the adaptive `surface=\"canvas\"`.",{"name":457,"description":2720},"Component-wide: the dialog is open (follows `v-model`).",{"removed":2722,"renamed":2739},[2723,2729,2731,2733,2735],{"name":1696,"surface":2724,"replacedBy":377,"hint":377,"since":2725,"migration":2726,"silent":526,"fix":2727},"prop","3.0.0-alpha.1","ai\u002Fguides\u002Fmigration\u002Fcomponents\u002Fbb-dialog.md",{"kind":2728},"manual",{"name":1690,"surface":2724,"replacedBy":377,"hint":377,"since":2725,"migration":2726,"silent":526,"fix":2730},{"kind":2728},{"name":1699,"surface":2724,"replacedBy":377,"hint":377,"since":2725,"migration":2726,"silent":526,"fix":2732},{"kind":2728},{"name":1702,"surface":2724,"replacedBy":377,"hint":377,"since":2725,"migration":2726,"silent":526,"fix":2734},{"kind":2728},{"name":2736,"surface":2724,"replacedBy":2580,"hint":377,"since":2725,"migration":2726,"silent":526,"fix":2737},"showClose",{"kind":2738},"invert",[2740],{"from":2736,"to":2580,"surface":2724,"since":2725,"migration":2726,"fix":2741},{"kind":2738},1793055141398]