[{"data":1,"prerenderedAt":1074},["ShallowReactive",2],{"docs:\u002Fdocs\u002Fcomponents\u002Ftree-table":3,"component-meta:UiTreeTable":584},{"id":4,"title":5,"body":6,"component":557,"dependsOn":558,"description":567,"emitDescriptions":568,"extension":515,"meta":576,"navigation":577,"order":578,"path":579,"seo":580,"status":581,"stem":582,"__hash__":583},"docs\u002Fdocs\u002Fcomponents\u002Ftree-table.md","TreeTable",{"type":7,"value":8,"toc":542},"minimark",[9,18,23,28,35,39,43,57,75,79,82,93,116,127,130,141,145,148,156,167,170,174,177,181,192,199,203,211,222,230,244,257,263,267,306,313,320,323,326,337,351,361,365,380,389,392,396,399,413,417,430,452,459,481,500,517,536],[10,11,12,13,17],"p",{},"Рендер плоский: дерево розгортається у список видимих рядків, і в шаблоні\nлишається один ",[14,15,16],"code",{},"v-for",". Понад сотню рядків список віртуалізується —\nу DOM тримаються лише видиме вікно й дві розпірки.",[19,20,22],"h2",{"id":21},"приклад","Приклад",[24,25],"component-preview",{"name":26,"stage":27},"tree-table-catalog","min-h-96",[10,29,30,31,34],{},"492 вузли, чотири рівні. Розгорніть усе й подивіться в інспекторі: рядків\nу DOM лишається кілька десятків, а ",[14,32,33],{},"aria-rowcount"," на таблиці називає\nсправжнє число — саме воно потрібне скрінрідеру, бо DOM тут бреше.",[19,36,38],{"id":37},"ліниве-завантаження","Ліниве завантаження",[24,40],{"name":41,"stage":42},"tree-table-lazy","min-h-64",[10,44,45,48,49,52,53,56],{},[14,46,47],{},"expandAll()"," (і «Розгорнути всі» в меню налаштувань) для лінивих гілок,\nвідкритих уперше, віддає ",[14,50,51],{},"expand"," з ",[14,54,55],{},"loaded: false"," — так само, як клік.\nІнакше вони лишалися б відкритими й порожніми без жодного сигналу.",[10,58,59,62,63,66,67,70,71,74],{},[14,60,61],{},"undefined"," і ",[14,64,65],{},"[]"," у полі дітей — різні стани. Перше означає «діти ще\nїдуть»: рядок лишається ",[14,68,69],{},"aria-busy",", замість шеврона крутиться індикатор\nіз ",[14,72,73],{},"loadingIds",". Друге означає «гілка справді порожня». Компонент розрізняє\nїх сам, режим перемикати не треба.",[19,76,78],{"id":77},"дані-з-файлу","Дані з файлу",[24,80],{"name":81,"stage":27},"tree-table-json",[10,83,84,85,88,89,92],{},"Перетягніть у зону власне вивантаження — масив вузлів\n",[14,86,87],{},"{ id, parent, name, children[], data{} }"," — і воно відрендериться як є.\nФайл нікуди не надсилається: його читає ",[14,90,91],{},"FileReader"," у браузері.",[10,94,95,96,99,100,103,104,107,108,111,112,115],{},"Поля тут лежать не на вузлі, а у вкладеному ",[14,97,98],{},"data",", і саме для цього\nіснує ",[14,101,102],{},"getValue",": перекладати дані під форму колонок не треба, достатньо\nописати, звідки брати значення. Ключі колонок при цьому — без крапок,\nінакше ",[14,105,106],{},"#cell-data.active"," розбереться як слот ",[14,109,110],{},"cell-data"," з\nмодифікатором ",[14,113,114],{},"active",".",[10,117,118,119,122,123,126],{},"Над таблицею — пошук і фільтри. Плоский ",[14,120,121],{},"filter"," тут не працює\nпринципово: вузол, що збігся, без предків втрачає місце в ієрархії, а\nбез предків його ще й не видно. Тому ",[14,124,125],{},"filterTree"," лишає вузол, якщо\nзбігся він сам АБО хтось у його піддереві, і окремо повертає список\nгілок, які треба розгорнути. Розгортання користувача при цьому не\nгубиться — воно повертається, коли фільтр знімають.",[10,128,129],{},"Діти фільтруються навіть у вузла, що збігся сам: інакше «лише активні»\nпоказувало б вимкнених дітей активної теки, тобто рівно те, що просили\nсховати.",[10,131,132,133,136,137,140],{},"Демо заразом перевіряє те, що зазвичай помічають надто пізно: чи\nунікальні ",[14,134,135],{},"id",". Рядки ключуються саме ними, тож у вивантаженні з\nповторами ламаються ",[14,138,139],{},":key",", виділення й фокус — а назви, на відміну від\nid, повторюються суцільно.",[19,142,144],{"id":143},"пагінація","Пагінація",[24,146],{"name":147,"stage":27},"tree-table-paged",[10,149,150,151,155],{},"Сторінками йдуть ",[152,153,154],"strong",{},"корені",", а не рядки. Різати плоский список видимих\nрядків не можна: дитина опинилась би на наступній сторінці без свого\nбатька — тобто без єдиного, що пояснює її місце. Тому сторінка — це N\nкоренів РАЗОМ з їхніми піддеревами, і загальна кількість рахується теж\nпо коренях.",[10,157,158,159,162,163,166],{},"Оновлення вже показаних даних (",[14,160,161],{},"loading"," при непорожньому ",[14,164,165],{},"items",") не\nзамінює дерево скелетоном — розгорнуті гілки лишаються на місці під\nнапівпрозорим оверлеєм. Скелетон з'являється лише на першому завантаженні.",[10,168,169],{},"Пагінація й віртуалізація не конкурують: перша обмежує, скільки гілок\nвзагалі приходить у компонент, друга — скільки рядків із них живе в DOM.\nОдна гілка, розгорнута на всю глибину, легко дає більше рядків, ніж уся\nсторінка коренів.",[19,171,173],{"id":172},"api","API",[175,176],"component-api",{},[19,178,180],{"id":179},"коли-використовувати","Коли використовувати",[10,182,183,184,187,188,191],{},"Ієрархічні дані, у яких на кожен вузол є ще й колонки: дерево сторінок\nсайту з alias і датами, каталог категорій із лічильниками товарів, дерево\nрахунків із сумами. Тобто всюди, де ",[14,185,186],{},"Tree"," не вистачає через колонки, а\n",[14,189,190],{},"Table"," — через вкладеність.",[10,193,194,195,198],{},"Великі дерева. Поріг ",[14,196,197],{},"virtualizeFrom"," (типово 100 видимих рядків) вмикає\nвікно автоматично, тож той самий компонент обслуговує і десять рядків, і\nдесять тисяч.",[19,200,202],{"id":201},"коли-не-використовувати","Коли НЕ використовувати",[10,204,205,210],{},[152,206,207,208,115],{},"Плоскі дані — ",[14,209,190],{}," Він уміє те саме з колонками, але без контракту\nфіксованої висоти, тож рядок там росте за вмістом.",[10,212,213,218,219,115],{},[152,214,215,216,115],{},"Дерево без колонок — ",[14,217,186],{}," Легший, без арифметики вікна й без\n",[14,220,221],{},"\u003Ccolgroup>",[10,223,224],{},[152,225,226,227,115],{},"Однорідний список без ієрархії — ",[14,228,229],{},"VirtualList",[10,231,232,235,236,239,240,243],{},[152,233,234],{},"Рядки змінної висоти."," ",[14,237,238],{},"rowHeight"," — це передумова, а не налаштування:\nуся арифметика вікна множить його на індекс. Рядок мусить вкладатися у\nзадану висоту (",[14,241,242],{},"truncate",", фіксована кількість рядків тексту). Це інший\nкомпонент, а не важчий випадок цього.",[10,245,246,249,250,253,254,115],{},[152,247,248],{},"Пошук по сторінці і друк."," Ctrl+F і принтер бачать лише вікно —\nвластивість будь-якої віртуалізації. Для друку й експорту вимикайте її:\n",[14,251,252],{},":virtualize-from=\"Infinity\""," разом із ",[14,255,256],{},"max-height=\"none\"",[10,258,259,262],{},[152,260,261],{},"Перетягування вузлів."," Зміна батька — це мутація даних, а не подання;\nкомпонент її не робить і робити не буде.",[19,264,266],{"id":265},"доступність","Доступність",[10,268,269,52,272,274,275,278,279,282,283,282,286,282,289,292,293,282,296,298,299,302,303,115],{},[14,270,271],{},"role=\"treegrid\"",[14,273,33],{}," на таблиці; на рядку — ",[14,276,277],{},"aria-level",",\n",[14,280,281],{},"aria-posinset",", ",[14,284,285],{},"aria-setsize",[14,287,288],{},"aria-rowindex",[14,290,291],{},"aria-expanded"," (у\nлистків його немає взагалі), ",[14,294,295],{},"aria-selected",[14,297,69],{},". Колонка\nієрархії — ",[14,300,301],{},"rowheader",", решта — ",[14,304,305],{},"gridcell",[10,307,308,309,312],{},"Roving tabindex: Tab бере лише активний рядок. ↑↓ рухають, → розгортає й\nдалі спускається, ← згортає й далі підіймається до батька, ",[14,310,311],{},"*"," розкриває\nвсіх сусідів рівня, Home\u002FEnd і PageUp\u002FPageDown ходять по списку, Space\nперемикає вибір гілки. Літери шукають набором: «ан» переводить фокус на\nнаступний рядок, чий підпис починається з «ан»; буфер живе 600 мс.",[10,314,315,316,319],{},"При ",[14,317,318],{},"selectable"," Ctrl\u002FCmd+A обирає все дерево, Escape знімає вибір (і не\nспливає далі, поки вибір є — модалка з таблицею від нього не закриється).",[10,321,322],{},"Коли активний рядок зникає — згорнули предка кліком по шеврону чи\n«Згорнути все» — Tab-зупинка переходить до найближчого видимого предка,\nа не на початок списку.",[10,324,325],{},"Клавіші з вкладених контролів рядок не перехоплює: Enter на кнопці в\nслоті комірки натискає кнопку, стрілки в полі вводу рухають каретку.\nПрапорець виділення — виняток: стрілки з нього рухають рядки.",[10,327,328,329,332,333,336],{},"Рядок за межами вікна фізично відсутній у DOM, тож перед ",[14,330,331],{},"focus()","\nкомпонент зсуває вікно і лише потім фокусує — з ",[14,334,335],{},"preventScroll",", інакше\nбраузер додає власну прокрутку і виходить подвійний стрибок.",[10,338,339,340,343,344,347,348,350],{},"Шеврон — ",[14,341,342],{},"span"," під ",[14,345,346],{},"aria-hidden",", а не кнопка. Кнопка на кожному рядку\nпоставила б у Tab-порядок між двома сусідніми рядками стільки кнопок,\nскільки рядків у вікні; доступна афорданс розгортання — це ",[14,349,291],{},"\nплюс ← і →.",[10,352,353,354,356,357,360],{},"Прапорець рядка при ",[14,355,318],{}," лишається справжнім ",[14,358,359],{},"input",", тож Tab\nобходить прапорці ВІДРЕНДЕРЕНИХ рядків. Клавіатурному користувачу вони не\nпотрібні: Space на рядку робить те саме.",[19,362,364],{"id":363},"каскадне-виділення","Каскадне виділення",[10,366,367,368,371,372,375,376,379],{},"Вибір гілки бере її саму й усіх нащадків; батько показує ",[14,369,370],{},"indeterminate",",\nпоки обрано частину. Масив ",[14,373,374],{},"selected"," містить ",[152,377,378],{},"і батьків, і дітей"," —\nінакше масова дія «видалити обране» мовчки пропускала б теку, яку\nкористувач і клікнув. Потрібні лише листки — відфільтруйте на своєму боці.",[10,381,382,383,235,385,388],{},"У лінивому режимі це має третій наслідок: діти, що приїхали під уже\nпозначену теку, автоматично доливаються в набір, тож ",[14,384,374],{},[152,386,387],{},"росте","\nз розгортанням. Якщо ваш API приймає id теки й сам розбирається з\nпіддеревом, приберіть нащадків перед відправкою.",[10,390,391],{},"Прапорець у шапці рахується по ВСЬОМУ дереву, а не по видимих рядках. У\nплоскій таблиці «сторінка» дорівнює видимому; у дереві прив'язка до\nвидимого зробила б сенс галочки залежним від того, які теки випадково\nвідкриті.",[19,393,395],{"id":394},"сортування","Сортування",[10,397,398],{},"Сортуються тільки сусіди в межах одного батька — ієрархія не сплющується\nніколи, бо обхід сортує рівно той масив, у який зараз спускається.",[10,400,315,401,404,405,408,409,412],{},[14,402,403],{},"serverSort"," компонент лише повідомляє намір через ",[14,406,407],{},"update:sort",".\nСервер при цьому зобов'язаний сортувати ",[152,410,411],{},"сусідів усередині батька",":\nповерне плоский глобально відсортований список — ієрархія загине, і\nкомпонент цього не помітить, бо діти лишаться дітьми, просто не тими.",[19,414,416],{"id":415},"деталі-реалізації","Деталі реалізації",[10,418,419,420,423,424,426,427,429],{},"Віртуалізація зроблена розпірними рядками, а не абсолютним\nпозиціюванням: абсолютний ",[14,421,422],{},"tr"," вибиває рядок із табличного боксу, і\n",[14,425,221],{}," перестає керувати ширинами. Тому таблиця справжня, а над і\nпід вікном стоять два порожні ",[14,428,422],{}," порахованої висоти.",[10,431,432,433,436,437,440,441,444,445,447,448,451],{},"Таблиця — ",[14,434,435],{},"border-separate"," з нульовим ",[14,438,439],{},"border-spacing",", а роздільник\nрядків — псевдоелемент. Будь-який ",[14,442,443],{},"border"," на ",[14,446,422],{}," чи ",[14,449,450],{},"td"," увійшов би у\nвисоту рядка, а вікно множить її на індекс: один зайвий піксель\nнакопичується і зсуває хвіст списку.",[10,453,454,455,458],{},"Щільність задає ЧИСЛО висоти рядка, а не паддінг: висота мусить бути\nвідома до рендеру й однакова на сервері та клієнті. Адаптивної пари\n",[14,456,457],{},"{ base, md }"," тому немає — сервер не знає ширини вікна.",[10,460,461,464,465,468,469,472,473,476,477,480],{},[14,462,463],{},"mobileCards"," тримає обидві розкладки в DOM, а вибирає між ними CSS.\nПрихований контейнер спорожнюється ",[152,466,467],{},"виміром",": ",[14,470,471],{},"ResizeObserver"," віддає\nпід ",[14,474,475],{},"display: none"," нульовий бокс. ",[14,478,479],{},"matchMedia"," тут неможливий — він\nправдивий лише після монтування, і гілка по брейкпойнту розійшлася б із\nпрередереним HTML на все тіло таблиці.",[10,482,483,484,487,488,491,492,495,496,499],{},"Панель налаштувань колонок — спільний компонент із ",[14,485,486],{},"UiTable","\n(",[14,489,490],{},"app\u002Fcomponents\u002Fui\u002Ftable\u002FColumnSettings.vue","), як і арифметика ширин,\nпорівняння значень і зведення збереженої розкладки\n(",[14,493,494],{},"app\u002Futils\u002FtableColumns.ts"," — імпортуйте звідти напряму, ",[14,497,498],{},"treeTable.ts","\nцих функцій не ре-експортує). Дві копії тієї самої панелі розходяться\nмовчки: у дереві кнопки порядку встигли отримати зону дотику й\nSVG-стрілки, а в плоскій таблиці лишались текстові «↑↓» без зони.\nКерування гілками приходить у панель слотом — це єдине, чого в плоскій\nтаблиці немає.",[10,501,502,503,509,510,512,513,516],{},"Кнопка, що відкриває панель, теж спільна і стоїть там само, де в\n",[504,505,507],"a",{"href":506},"\u002Fdocs\u002Fcomponents\u002Ftable#%D0%BD%D0%B0%D0%BB%D0%B0%D1%88%D1%82%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F-%D0%BA%D0%BE%D0%BB%D0%BE%D0%BD%D0%BE%D0%BA",[14,508,486],{},": у правому куті\nшапки, без власного рядка, з появою на наведенні. Шапка дерева липка\nзавжди, тож і кут тримається верху безумовно. З ",[14,511,463],{}," нижче ",[14,514,515],{},"md","\nкнопка переходить у рядок над картками — кута там немає.",[10,518,519,520,523,524,527,528,531,532,535],{},"З ",[14,521,522],{},"tableId"," розкладка зберігається під ключем\n",[14,525,526],{},"tree_table_settings_${tableId}",", а відкриті гілки — окремо, під\n",[14,529,530],{},"tree_table_expanded_${tableId}",". Ключі різні, бо різний час життя:\nрозкладка вмирає від ",[14,533,534],{},"settingsVersion",", розгортання — разом із даними.\nОдин payload означав би, що зміна дефолтної ширини колонки заразом\nзакриває всім користувачам усі теки.",[10,537,538,539,541],{},"Збережене застосовується лише після монтування, тож на прередереній\nсторінці видно короткий проблиск дефолтної розкладки. Тут він помітніший,\nніж у ",[14,540,190],{},": збережена щільність міняє висоту рядка, а з нею — розпірки\nй діапазон вікна.",{"title":543,"searchDepth":544,"depth":544,"links":545},"",2,[546,547,548,549,550,551,552,553,554,555,556],{"id":21,"depth":544,"text":22},{"id":37,"depth":544,"text":38},{"id":77,"depth":544,"text":78},{"id":143,"depth":544,"text":144},{"id":172,"depth":544,"text":173},{"id":179,"depth":544,"text":180},{"id":201,"depth":544,"text":202},{"id":265,"depth":544,"text":266},{"id":363,"depth":544,"text":364},{"id":394,"depth":544,"text":395},{"id":415,"depth":544,"text":416},"UiTreeTable",[559,494,560,561,562,563,490,564,565,566],"app\u002Futils\u002FtreeTable.ts","app\u002Futils\u002FtableSelection.ts","app\u002Futils\u002FoverlayPosition.ts","app\u002Futils\u002FuiFieldStyles.ts","app\u002Fcomposables\u002FuseReducedMotion.ts","app\u002Fcomponents\u002Fui\u002FUiCheckbox.vue","app\u002Fcomponents\u002Fui\u002FUiMenu.vue","app\u002Fcomponents\u002Fui\u002FUiSkeleton.vue","Дерево-таблиця з віртуальним скролом — ієрархія в першій колонці, звичайні сортовані колонки далі.",{"update:expanded":569,"update:selected":570,"update:sort":571,"update:headers":572,"expand":573,"collapse":574,"rowClick":575},"Набір відкритих гілок. Використовуйте через `v-model:expanded`.","Ключі обраних вузлів, включно з батьками. Використовуйте через `v-model:selected`.","Нове сортування або `null` на третьому кліку. Використовуйте через `v-model:sort`.","Розкладка колонок після ресайзу чи меню налаштувань.","Гілку відкрито. `loaded` каже, чи діти вже завантажені.","Гілку закрито.","Активація рядка кліком або Enter при `rowClickable`.",{},true,44,"\u002Fdocs\u002Fcomponents\u002Ftree-table",{"title":5,"description":567},"stable","docs\u002Fcomponents\u002Ftree-table","-e432JnE77zpmUnEQlsc_RmJp8cBzZMPIXAZShncYuk",{"mode":585,"prefetch":586,"preload":586,"filePath":587,"declarationPath":588,"pascalName":557,"kebabName":589,"chunkName":590,"priority":591,"_scanned":577,"meta":592},"all",false,"app\u002Fcomponents\u002Fui\u002FUiTreeTable.vue","\u002Fapp\u002Fapp\u002Fcomponents\u002Fui\u002FUiTreeTable.vue","ui-tree-table","components\u002Fui-tree-table",1,{"type":544,"props":593,"slots":858,"events":929,"exposed":1041,"hash":1073},[594,665,672,677,682,686,694,702,711,714,719,724,728,733,741,757,766,769,773,779,785,793,798,803,808,813,819,824,830,836,842,848,853],{"name":595,"global":586,"description":596,"tags":597,"required":577,"type":598,"schema":599},"headers","Опис колонок. Колонка ієрархії — перша або названа в `treeColumn`.",[],"TreeTableHeader[]",{"kind":600,"type":598,"schema":601},"array",{"0":602},{"kind":603,"type":604,"schema":605},"object","TreeTableHeader",{"value":606,"text":611,"sortable":614,"width":623,"flex":628,"align":632,"title":641,"defaultSortDir":645,"required":654,"resizable":658,"visible":662},{"name":607,"global":586,"description":608,"tags":609,"required":577,"type":610,"schema":610},"value","Ключ поля у вузлі. Він же — суфікс іменованих слотів.",[],"string",{"name":612,"global":586,"description":543,"tags":613,"required":577,"type":610,"schema":610},"text",[],{"name":615,"global":586,"description":543,"tags":616,"required":586,"type":617,"schema":618},"sortable",[],"boolean",{"kind":619,"type":617,"schema":620},"enum",{"0":621,"1":622},"false","true",{"name":624,"global":586,"description":625,"tags":626,"required":586,"type":627,"schema":627},"width","Ширина в ПІКСЕЛЯХ (число, не рядок). Для `flex` — мінімальна.",[],"number",{"name":629,"global":586,"description":630,"tags":631,"required":586,"type":617,"schema":617},"flex","Колонка забирає залишок ширини. Дозволена ОДНА на таблицю.",[],{"name":633,"global":586,"description":543,"tags":634,"required":586,"type":635,"schema":636},"align",[],"\"left\" | \"center\" | \"right\"",{"kind":619,"type":635,"schema":637},{"0":638,"1":639,"2":640},"\"left\"","\"center\"","\"right\"",{"name":642,"global":586,"description":643,"tags":644,"required":586,"type":610,"schema":610},"title","Повна назва: підказка на заголовку і підпис у меню налаштувань.",[],{"name":646,"global":586,"description":647,"tags":648,"required":586,"type":649,"schema":650},"defaultSortDir","Напрям ПЕРШОГО кліку по сортуванню. Типово `asc`.",[],"\"asc\" | \"desc\"",{"kind":619,"type":649,"schema":651},{"0":652,"1":653},"\"asc\"","\"desc\"",{"name":655,"global":586,"description":656,"tags":657,"required":586,"type":617,"schema":617},"required","Колонку не можна приховати. Колонка ієрархії закріплена завжди.",[],{"name":659,"global":586,"description":660,"tags":661,"required":586,"type":617,"schema":617},"resizable","Заборонити ресайз. Типово можна все, крім `flex`.",[],{"name":663,"global":586,"description":543,"tags":664,"required":586,"type":617,"schema":617},"visible",[],{"name":165,"global":586,"description":666,"tags":667,"required":577,"type":668,"schema":669},"Корені дерева. Діти лежать у полі, названому в `childrenField`.",[],"T[]",{"kind":600,"type":668,"schema":670},{"0":671},"T",{"name":673,"global":586,"default":674,"description":675,"tags":676,"required":586,"type":610,"schema":610},"keyRow","\"id\"","Поле-ідентифікатор вузла. Значення унікальне в УСЬОМУ дереві.",[],{"name":678,"global":586,"default":679,"description":680,"tags":681,"required":586,"type":610,"schema":610},"childrenField","\"children\"","Поле з масивом дітей. `undefined` і `[]` — різні стани, див. `expand`.",[],{"name":683,"global":586,"description":684,"tags":685,"required":586,"type":610,"schema":610},"treeColumn","Яка колонка малює ієрархію. Типово — перша в `headers`.",[],{"name":102,"global":586,"description":687,"tags":688,"required":586,"type":689,"schema":690},"Значення комірки й ключ сортування, коли поля лежать не на вузлі.",[],"(item: T, key: string) => unknown",{"kind":691,"type":692,"schema":693},"event","(item: T, key: string): unknown",{},{"name":695,"global":586,"description":696,"tags":697,"required":586,"type":698,"schema":699},"hasChildren","Чи має вузол дітей, коли їх ще не завантажено. Типово — довжина `children`.",[],"(item: T) => boolean",{"kind":691,"type":700,"schema":701},"(item: T): boolean",{},{"name":73,"global":586,"default":65,"description":703,"tags":704,"required":586,"type":705,"schema":706},"Вузли, чиї діти зараз вантажаться: індикатор і `aria-busy` на рядку.",[],"(string | number)[]",{"kind":600,"type":705,"schema":707},{"0":708},{"kind":619,"type":709,"schema":710},"string | number",[610,627],{"name":238,"global":586,"description":712,"tags":713,"required":586,"type":627,"schema":627},"Висота рядка в ПІКСЕЛЯХ. Перекриває висоту, задану щільністю.",[],{"name":715,"global":586,"default":716,"description":717,"tags":718,"required":586,"type":627,"schema":627},"cardHeight","96","Висота картки нижче `md`, у пікселях. Той самий контракт, що `rowHeight`.",[],{"name":720,"global":586,"default":721,"description":722,"tags":723,"required":586,"type":610,"schema":610},"maxHeight","\"28rem\"","Висота контейнера прокрутки, напр. `\"28rem\"`. `\"none\"` знімає обмеження.",[],{"name":197,"global":586,"default":725,"description":726,"tags":727,"required":586,"type":627,"schema":627},"100","З якої кількості ВИДИМИХ рядків вмикати віртуалізацію. `Infinity` вимикає.",[],{"name":729,"global":586,"default":730,"description":731,"tags":732,"required":586,"type":627,"schema":627},"overscan","5","Скільки рядків тримати відрендереними за межами вікна з кожного боку.",[],{"name":734,"global":586,"default":65,"description":735,"tags":736,"required":586,"type":705,"schema":737},"expanded","Відкриті гілки. Використовуйте через `v-model:expanded`.",[],{"kind":600,"type":705,"schema":738},{"0":739},{"kind":619,"type":709,"schema":740},[610,627],{"name":742,"global":586,"default":743,"description":744,"tags":745,"required":586,"type":746,"schema":747},"sort","null","Поточне сортування. Використовуйте через `v-model:sort`.",[],"TreeTableSort",{"kind":603,"type":746,"schema":748},{"by":749,"dir":752},{"name":750,"global":586,"description":543,"tags":751,"required":577,"type":610,"schema":610},"by",[],{"name":753,"global":586,"description":543,"tags":754,"required":577,"type":649,"schema":755},"dir",[],{"kind":619,"type":649,"schema":756},{"0":652,"1":653},{"name":758,"global":586,"default":759,"description":760,"tags":761,"required":586,"type":762,"schema":763},"density","\"md\"","Щільність рядків. Обирає висоту рядка, якщо не задано `rowHeight`.",[],"\"sm\" | \"md\"",{"kind":619,"type":762,"schema":764},{"0":765,"1":759},"\"sm\"",{"name":522,"global":586,"description":767,"tags":768,"required":586,"type":610,"schema":610},"Вмикає меню налаштувань і збереження розкладки під `tree_table_settings_${tableId}`.",[],{"name":534,"global":586,"default":770,"description":771,"tags":772,"required":586,"type":627,"schema":627},"0","Версія ВАШИХ дефолтів. Змінили ширини — підніміть, і збережене скинеться.",[],{"name":374,"global":586,"default":65,"description":570,"tags":774,"required":586,"type":705,"schema":775},[],{"kind":600,"type":705,"schema":776},{"0":777},{"kind":619,"type":709,"schema":778},[610,627],{"name":780,"global":586,"description":781,"tags":782,"required":586,"type":698,"schema":783},"selectableRow","Які вузли можна обрати. Каскад незбиральних не додає.",[],{"kind":691,"type":700,"schema":784},{},{"name":786,"global":586,"description":787,"tags":788,"required":586,"type":789,"schema":790},"rowClass","Клас на рядок — для підсвітки. Заливка має йти в CSS після `bg-card`.",[],"(item: T) => string",{"kind":691,"type":791,"schema":792},"(item: T): string",{},{"name":794,"global":586,"default":795,"description":796,"tags":797,"required":586,"type":627,"schema":627},"skeletonRows","6","Скільки рядків-заглушок показати під час ПЕРШОГО завантаження.",[],{"name":799,"global":586,"default":800,"description":801,"tags":802,"required":586,"type":610,"schema":610},"emptyText","\"Даних немає\"","Текст, коли рядків немає. Складніший стан — слот `empty`.",[],{"name":804,"global":586,"default":805,"description":806,"tags":807,"required":586,"type":610,"schema":610},"ariaLabel","\"Дерево-таблиця\"","Доступна назва таблиці для скрінрідера.",[],{"name":403,"global":586,"description":809,"tags":810,"required":586,"type":617,"schema":811},"Сортувати на сервері. Сервер мусить сортувати СУСІДІВ, не все дерево.",[],{"kind":619,"type":617,"schema":812},{"0":621,"1":622},{"name":814,"global":586,"default":622,"description":815,"tags":816,"required":586,"type":617,"schema":817},"densityToggle","Показати перемикач щільності в меню налаштувань.",[],{"kind":619,"type":617,"schema":818},{"0":621,"1":622},{"name":318,"global":586,"description":820,"tags":821,"required":586,"type":617,"schema":822},"Вмикає колонку прапорців із каскадом на все піддерево.",[],{"kind":619,"type":617,"schema":823},{"0":621,"1":622},{"name":825,"global":586,"default":622,"description":826,"tags":827,"required":586,"type":617,"schema":828},"selectionBar","Панель «Вибрано N» над таблицею.",[],{"kind":619,"type":617,"schema":829},{"0":621,"1":622},{"name":831,"global":586,"description":832,"tags":833,"required":586,"type":617,"schema":834},"expandOnClick","Клік по рядку з дітьми тогглить гілку.",[],{"kind":619,"type":617,"schema":835},{"0":621,"1":622},{"name":837,"global":586,"description":838,"tags":839,"required":586,"type":617,"schema":840},"rowClickable","Робить рядки клікабельними: курсор і подія `rowClick`.",[],{"kind":619,"type":617,"schema":841},{"0":621,"1":622},{"name":843,"global":586,"default":622,"description":844,"tags":845,"required":586,"type":617,"schema":846},"stickyTreeColumn","Закріпити колонку ієрархії при горизонтальній прокрутці.",[],{"kind":619,"type":617,"schema":847},{"0":621,"1":622},{"name":463,"global":586,"description":849,"tags":850,"required":586,"type":617,"schema":851},"Нижче `md` замість таблиці — картки з відступом і шевроном.",[],{"kind":619,"type":617,"schema":852},{"0":621,"1":622},{"name":161,"global":586,"description":854,"tags":855,"required":586,"type":617,"schema":856},"Показує скелетони замість рядків, зберігаючи висоту таблиці.",[],{"kind":619,"type":617,"schema":857},{"0":621,"1":622},[859,878,894,905,910],{"name":860,"type":861,"description":862,"tags":863,"schema":864},"icon","{ item: T; depth: number; expanded: boolean; hasChildren: boolean; }","Іконка типу вузла перед підписом у колонці ієрархії.",[],{"kind":603,"type":861,"schema":865},{"item":866,"depth":869,"expanded":872,"hasChildren":876},{"name":867,"global":586,"description":543,"tags":868,"required":577,"type":671,"schema":671},"item",[],{"name":870,"global":586,"description":543,"tags":871,"required":577,"type":627,"schema":627},"depth",[],{"name":734,"global":586,"description":543,"tags":873,"required":577,"type":617,"schema":874},[],{"kind":619,"type":617,"schema":875},{"0":621,"1":622},{"name":695,"global":586,"description":543,"tags":877,"required":577,"type":617,"schema":617},[],{"name":879,"type":861,"description":880,"tags":881,"schema":882},"label","Підпис у колонці ієрархії замість значення `treeColumn`.",[],{"kind":603,"type":861,"schema":883},{"item":884,"depth":886,"expanded":888,"hasChildren":892},{"name":867,"global":586,"description":543,"tags":885,"required":577,"type":671,"schema":671},[],{"name":870,"global":586,"description":543,"tags":887,"required":577,"type":627,"schema":627},[],{"name":734,"global":586,"description":543,"tags":889,"required":577,"type":617,"schema":890},[],{"kind":619,"type":617,"schema":891},{"0":621,"1":622},{"name":695,"global":586,"description":543,"tags":893,"required":577,"type":617,"schema":617},[],{"name":895,"type":896,"description":897,"tags":898,"schema":899},"mobile-card","{ item: T; depth: number; }","Вміст картки нижче `md`, якщо стандартний список пар не підходить.",[],{"kind":603,"type":896,"schema":900},{"item":901,"depth":903},{"name":867,"global":586,"description":543,"tags":902,"required":577,"type":671,"schema":671},[],{"name":870,"global":586,"description":543,"tags":904,"required":577,"type":627,"schema":627},[],{"name":906,"type":907,"description":908,"tags":909,"schema":907},"empty","any","Показується замість «Даних немає».",[],{"name":911,"type":912,"description":913,"tags":914,"schema":915},"selection-actions","{ selected: (string | number)[]; clear: () => void; }","Дії в панелі «Вибрано N». `clear` знімає виділення.",[],{"kind":603,"type":912,"schema":916},{"selected":917,"clear":923},{"name":374,"global":586,"description":543,"tags":918,"required":577,"type":705,"schema":919},[],{"kind":600,"type":705,"schema":920},{"0":921},{"kind":619,"type":709,"schema":922},[610,627],{"name":924,"global":586,"description":543,"tags":925,"required":577,"type":926,"schema":927},"clear",[],"() => void",{"kind":691,"type":928},"(): void",[930,940,950,963,1001,1020,1035],{"name":931,"description":543,"tags":932,"type":933,"signature":934,"schema":935},"update:expanded",[],"[ids: (string | number)[]]","(evt: \"update:expanded\", ids: (string | number)[]): void",[936],{"kind":600,"type":705,"schema":937},[938],{"kind":619,"type":709,"schema":939},[610,627],{"name":941,"description":543,"tags":942,"type":943,"signature":944,"schema":945},"update:selected",[],"[keys: (string | number)[]]","(evt: \"update:selected\", keys: (string | number)[]): void",[946],{"kind":600,"type":705,"schema":947},[948],{"kind":619,"type":709,"schema":949},[610,627],{"name":407,"description":543,"tags":951,"type":952,"signature":953,"schema":954},[],"[value: TreeTableSort]","(evt: \"update:sort\", value: TreeTableSort): void",[955],{"kind":603,"type":746,"schema":956},{"by":957,"dir":959},{"name":750,"global":586,"description":543,"tags":958,"required":577,"type":610,"schema":610},[],{"name":753,"global":586,"description":543,"tags":960,"required":577,"type":649,"schema":961},[],{"kind":619,"type":649,"schema":962},{"0":652,"1":653},{"name":964,"description":543,"tags":965,"type":966,"signature":967,"schema":968},"update:headers",[],"[value: TreeTableHeader[]]","(evt: \"update:headers\", value: TreeTableHeader[]): void",[969],{"kind":600,"type":598,"schema":970},[971],{"kind":603,"type":604,"schema":972},{"value":973,"text":975,"sortable":977,"width":981,"flex":983,"align":985,"title":989,"defaultSortDir":991,"required":995,"resizable":997,"visible":999},{"name":607,"global":586,"description":608,"tags":974,"required":577,"type":610,"schema":610},[],{"name":612,"global":586,"description":543,"tags":976,"required":577,"type":610,"schema":610},[],{"name":615,"global":586,"description":543,"tags":978,"required":586,"type":617,"schema":979},[],{"kind":619,"type":617,"schema":980},{"0":621,"1":622},{"name":624,"global":586,"description":625,"tags":982,"required":586,"type":627,"schema":627},[],{"name":629,"global":586,"description":630,"tags":984,"required":586,"type":617,"schema":617},[],{"name":633,"global":586,"description":543,"tags":986,"required":586,"type":635,"schema":987},[],{"kind":619,"type":635,"schema":988},{"0":638,"1":639,"2":640},{"name":642,"global":586,"description":643,"tags":990,"required":586,"type":610,"schema":610},[],{"name":646,"global":586,"description":647,"tags":992,"required":586,"type":649,"schema":993},[],{"kind":619,"type":649,"schema":994},{"0":652,"1":653},{"name":655,"global":586,"description":656,"tags":996,"required":586,"type":617,"schema":617},[],{"name":659,"global":586,"description":660,"tags":998,"required":586,"type":617,"schema":617},[],{"name":663,"global":586,"description":543,"tags":1000,"required":586,"type":617,"schema":617},[],{"name":51,"description":543,"tags":1002,"type":1003,"signature":1004,"schema":1005},[],"[payload: { item: T; id: string | number; loaded: boolean; }]","(evt: \"expand\", payload: { item: T; id: string | number; loaded: boolean; }): void",[1006],{"kind":603,"type":1007,"schema":1008},"{ item: T; id: string | number; loaded: boolean; }",{"item":1009,"id":1011,"loaded":1015},{"name":867,"global":586,"description":543,"tags":1010,"required":577,"type":671,"schema":671},[],{"name":135,"global":586,"description":543,"tags":1012,"required":577,"type":709,"schema":1013},[],{"kind":619,"type":709,"schema":1014},{"0":610,"1":627},{"name":1016,"global":586,"description":543,"tags":1017,"required":577,"type":617,"schema":1018},"loaded",[],{"kind":619,"type":617,"schema":1019},{"0":621,"1":622},{"name":1021,"description":543,"tags":1022,"type":1023,"signature":1024,"schema":1025},"collapse",[],"[payload: { item: T; id: string | number; }]","(evt: \"collapse\", payload: { item: T; id: string | number; }): void",[1026],{"kind":603,"type":1027,"schema":1028},"{ item: T; id: string | number; }",{"item":1029,"id":1031},{"name":867,"global":586,"description":543,"tags":1030,"required":577,"type":671,"schema":671},[],{"name":135,"global":586,"description":543,"tags":1032,"required":577,"type":709,"schema":1033},[],{"kind":619,"type":709,"schema":1034},{"0":610,"1":627},{"name":1036,"description":543,"tags":1037,"type":1038,"signature":1039,"schema":1040},"rowClick",[],"[item: T]","(evt: \"rowClick\", item: T): void",[671],[1042,1050,1058,1063,1068],{"name":1043,"type":1044,"description":1045,"tags":1046,"schema":1047},"scrollToIndex","(index: number) => void","Прокрутити до рядка за номером у ПЛОСКОМУ списку видимих рядків.",[],{"kind":691,"type":1048,"schema":1049},"(index: number): void",{},{"name":1051,"type":1052,"description":1053,"tags":1054,"schema":1055},"scrollToKey","(key: string | number) => boolean","Розгорнути предків вузла і перейти до нього. `false`, якщо вузла немає.",[],{"kind":691,"type":1056,"schema":1057},"(key: string | number): boolean",{},{"name":1059,"type":926,"description":1060,"tags":1061,"schema":1062},"expandAll","Розгорнути всі гілки. Повний обхід дерева — дорого на великих даних.",[],{"kind":691,"type":928},{"name":1064,"type":926,"description":1065,"tags":1066,"schema":1067},"collapseAll","Згорнути всі гілки.",[],{"kind":691,"type":928},{"name":1069,"type":926,"description":1070,"tags":1071,"schema":1072},"clearSelection","Зняти виділення. Потрібне після успішної масової дії.",[],{"kind":691,"type":928},"QwpWijeQirmEJDrVT2Kyu2Tnagvqr9_yxGAlVCgkV2w",1792004323354]