[{"data":1,"prerenderedAt":377},["ShallowReactive",2],{"docs:\u002Fdocs\u002Fcomponents\u002Ftoast":3,"component-meta:UiToaster":364},{"id":4,"title":5,"body":6,"component":239,"dependsOn":352,"description":354,"emitDescriptions":355,"extension":356,"meta":357,"navigation":69,"order":358,"path":359,"seo":360,"status":361,"stem":362,"__hash__":363},"docs\u002Fdocs\u002Fcomponents\u002Ftoast.md","Toast",{"type":7,"value":8,"toc":343},"minimark",[9,18,23,27,31,234,250,254,257,261,264,268,274,277,281,299,302,317,321,332,339],[10,11,12,13,17],"p",{},"Стан черги оголошено на рівні модуля, тому ",[14,15,16],"code",{},"useToast()"," — singleton: усі\nвиклики в застосунку працюють з однією чергою. Показати повідомлення можна\nзвідки завгодно, не заводячи Pinia-стор і нічого не прокидаючи через дерево.",[19,20,22],"h2",{"id":21},"приклад","Приклад",[24,25],"component-preview",{"name":26},"toast-types",[19,28,30],{"id":29},"використання","Використання",[32,33,38],"pre",{"className":34,"code":35,"language":36,"meta":37,"style":37},"language-ts shiki shiki-themes github-light github-dark","const toast = useToast()\n\ntoast.success('Зміни збережено')\ntoast.error('Не вдалося зберегти')\n\n\u002F\u002F Кнопки дій під повідомленням: дії — дані тоста, а не слот, бо черга\n\u002F\u002F живе в composable поза шаблоном. Клік по дії сам тост не закриває —\n\u002F\u002F закривайте через dismiss(id), коли потрібно.\nconst id = toast.info('Файл завеликий', {\n  duration: 0,\n  actions: [\n    { label: 'Стиснути', onClick: () => compress() },\n    { label: 'Закрити', onClick: () => toast.dismiss(id) },\n  ],\n})\n","ts","",[14,39,40,64,71,90,105,110,117,123,129,153,165,171,198,222,228],{"__ignoreMap":37},[41,42,45,49,53,56,60],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"szBVR","const",[41,50,52],{"class":51},"sj4cs"," toast",[41,54,55],{"class":47}," =",[41,57,59],{"class":58},"sScJk"," useToast",[41,61,63],{"class":62},"sVt8B","()\n",[41,65,67],{"class":43,"line":66},2,[41,68,70],{"emptyLinePlaceholder":69},true,"\n",[41,72,74,77,80,83,87],{"class":43,"line":73},3,[41,75,76],{"class":62},"toast.",[41,78,79],{"class":58},"success",[41,81,82],{"class":62},"(",[41,84,86],{"class":85},"sZZnC","'Зміни збережено'",[41,88,89],{"class":62},")\n",[41,91,93,95,98,100,103],{"class":43,"line":92},4,[41,94,76],{"class":62},[41,96,97],{"class":58},"error",[41,99,82],{"class":62},[41,101,102],{"class":85},"'Не вдалося зберегти'",[41,104,89],{"class":62},[41,106,108],{"class":43,"line":107},5,[41,109,70],{"emptyLinePlaceholder":69},[41,111,113],{"class":43,"line":112},6,[41,114,116],{"class":115},"sJ8bj","\u002F\u002F Кнопки дій під повідомленням: дії — дані тоста, а не слот, бо черга\n",[41,118,120],{"class":43,"line":119},7,[41,121,122],{"class":115},"\u002F\u002F живе в composable поза шаблоном. Клік по дії сам тост не закриває —\n",[41,124,126],{"class":43,"line":125},8,[41,127,128],{"class":115},"\u002F\u002F закривайте через dismiss(id), коли потрібно.\n",[41,130,132,134,137,139,142,145,147,150],{"class":43,"line":131},9,[41,133,48],{"class":47},[41,135,136],{"class":51}," id",[41,138,55],{"class":47},[41,140,141],{"class":62}," toast.",[41,143,144],{"class":58},"info",[41,146,82],{"class":62},[41,148,149],{"class":85},"'Файл завеликий'",[41,151,152],{"class":62},", {\n",[41,154,156,159,162],{"class":43,"line":155},10,[41,157,158],{"class":62},"  duration: ",[41,160,161],{"class":51},"0",[41,163,164],{"class":62},",\n",[41,166,168],{"class":43,"line":167},11,[41,169,170],{"class":62},"  actions: [\n",[41,172,174,177,180,183,186,189,192,195],{"class":43,"line":173},12,[41,175,176],{"class":62},"    { label: ",[41,178,179],{"class":85},"'Стиснути'",[41,181,182],{"class":62},", ",[41,184,185],{"class":58},"onClick",[41,187,188],{"class":62},": () ",[41,190,191],{"class":47},"=>",[41,193,194],{"class":58}," compress",[41,196,197],{"class":62},"() },\n",[41,199,201,203,206,208,210,212,214,216,219],{"class":43,"line":200},13,[41,202,176],{"class":62},[41,204,205],{"class":85},"'Закрити'",[41,207,182],{"class":62},[41,209,185],{"class":58},[41,211,188],{"class":62},[41,213,191],{"class":47},[41,215,141],{"class":62},[41,217,218],{"class":58},"dismiss",[41,220,221],{"class":62},"(id) },\n",[41,223,225],{"class":43,"line":224},14,[41,226,227],{"class":62},"  ],\n",[41,229,231],{"class":43,"line":230},15,[41,232,233],{"class":62},"})\n",[10,235,236,237,240,241,245,246,249],{},"Контейнер ",[14,238,239],{},"UiToaster"," монтується ",[242,243,244],"strong",{},"рівно один раз",", зазвичай в ",[14,247,248],{},"app.vue",".",[19,251,253],{"id":252},"api","API",[255,256],"component-api",{},[19,258,260],{"id":259},"коли-використовувати","Коли використовувати",[10,262,263],{},"Для результату дії, який не вимагає реакції: збережено, надіслано, скопійовано.",[19,265,267],{"id":266},"коли-не-використовувати","Коли НЕ використовувати",[10,269,270,271,249],{},"Не повідомляйте тостом про те, що потребує рішення. Тост зникає — питання\nлишається. Для цього є ",[14,272,273],{},"useConfirm()",[10,275,276],{},"Не дублюйте тостом помилку поля форми: її місце під самим полем, де видно,\nщо виправляти.",[19,278,280],{"id":279},"доступність","Доступність",[10,282,283,284,287,288,291,292,287,295,298],{},"Помилки отримують ",[14,285,286],{},"role=\"alert\""," і ",[14,289,290],{},"aria-live=\"assertive\""," — їх скрінрідер\nзачитає одразу. Решта — ",[14,293,294],{},"role=\"status\"",[14,296,297],{},"polite",", щоб не перебивати те,\nщо користувач читає.",[10,300,301],{},"Тривалість різна за типом: помилка тримається 6 секунд, попередження 5,\nрешта 3. Помилку треба встигнути прочитати, а не побачити спалах на місці,\nде щойно щось пішло не так.",[10,303,304,305,308,309,312,313,316],{},"Контейнер має ",[14,306,307],{},"data-overlay-ignore"," — маркер, який поважає ",[14,310,311],{},"useFocusTrap",".\nБез нього тости, що з'явилися під відкритою модалкою, отримали б ",[14,314,315],{},"inert","\nразом з рештою фону, і закрити їх було б неможливо.",[19,318,320],{"id":319},"що-виправлено-проти-вихідної-версії","Що виправлено проти вихідної версії",[10,322,323,324,327,328,331],{},"Таймер автозакриття тепер скасовується при ручному. Раніше він лишався\nжити: користувач закривав тост хрестиком, а через секунду спрацьовував\nвідкладений ",[14,325,326],{},"splice"," і зносив ",[242,329,330],{},"інший"," тост, який на той час опинився на\nйого місці в масиві.",[10,333,334,335,338],{},"Тони беруть токени статусів. Вихідна версія малювала попередження білим по\n",[14,336,337],{},"bg-amber-500"," — контраст ≈1.9:1, тобто найгірше читабельним було саме те\nповідомлення, яке найважливіше прочитати.",[340,341,342],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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);}",{"title":37,"searchDepth":66,"depth":66,"links":344},[345,346,347,348,349,350,351],{"id":21,"depth":66,"text":22},{"id":29,"depth":66,"text":30},{"id":252,"depth":66,"text":253},{"id":259,"depth":66,"text":260},{"id":266,"depth":66,"text":267},{"id":279,"depth":66,"text":280},{"id":319,"depth":66,"text":320},[353],"app\u002Fcomposables\u002FuseToast.ts","Черга сповіщень, доступна з будь-якого місця без прокидання пропсів.",{},"md",{},20,"\u002Fdocs\u002Fcomponents\u002Ftoast",{"title":5,"description":354},"stable","docs\u002Fcomponents\u002Ftoast","yzuGAVma8eEE63sZ1_CI6SpYjLrHCGg8yYMdPYM69cQ",{"mode":365,"prefetch":366,"preload":366,"filePath":367,"declarationPath":368,"pascalName":239,"kebabName":369,"chunkName":370,"priority":44,"_scanned":69,"meta":371},"all",false,"app\u002Fcomponents\u002Fui\u002FUiToaster.vue","C:\u002Fproject-DS\u002FtatetUI\u002Fapp\u002Fcomponents\u002Fui\u002FUiToaster.vue","ui-toaster","components\u002Fui-toaster",{"type":44,"props":372,"slots":373,"events":374,"exposed":375,"hash":376},[],[],[],[],"g_aBmN8tt3w0-QFd2s4I_F_NFKyUZP4h1-IRre75mRY",1788072641297]