[{"data":1,"prerenderedAt":6842},["ShallowReactive",2],{"component-docs-data-table":3,"component-meta-data-table":4645,"components-data-table":4643,"component-stories-tabs-data-table":4767,"$fEjZpFH0sX5lf9r5DqHjpE5W7CJ1Rj0Oiu25ygAOvmSk":5003,"$fxNFHl6oAEqYICBlbY7Kf5FoxQ8MHHF92LCha9vCI7C0":5364,"$f8f5lnJ37FCtouC_Q-20Y_lk47T8QT59vG2H3NVA0ikU":6018,"$fH8KF6TaNm7Prkw5PjE_U_K0_jhwqU4rL9IgcxTR8qEY":6133,"$fsnSGTjxJbwbyeIKGKRLM1aZyvHCO750tb-yYxbPAr8k":6318,"shiki--components-data-table--v-0-0-2-6-3":73,"shiki--components-data-table--v-0-0-2-30-3":73,"shiki--components-data-table--v-0-0-2-35-3":73,"shiki--components-data-table--v-0-0-2-38-3":73,"shiki--components-data-table--v-0-0-2-41-3":73,"shiki--components-data-table--v-0-0-2-44-3":73,"shiki--components-data-table--v-0-0-2-48-3":73,"shiki--components-data-table--v-0-0-2-51-3":73,"shiki--components-data-table--v-0-0-2-54-3":73,"shiki--components-data-table--v-0-0-2-57-3":73,"shiki--components-data-table--v-0-0-2-60-3":73,"shiki--components-data-table--v-0-0-2-63-3":73,"shiki--components-data-table--v-0-0-2-66-3":73,"shiki--components-data-table--v-0-0-2-69-3":73,"shiki--components-data-table--v-0-0-2-72-3":73,"shiki--components-data-table--v-0-0-2-75-3":73,"shiki--components-data-table--v-0-0-2-78-3":73,"shiki--components-data-table--v-0-0-2-81-3":73,"shiki--components-data-table--v-0-0-2-84-3":73,"shiki--components-data-table--v-0-0-2-87-3":73,"shiki--components-data-table--v-0-0-2-90-3":73,"shiki--components-data-table--v-0-0-2-93-3":73,"shiki--components-data-table--v-0-0-2-96-3":73,"shiki--components-data-table--v-0-0-2-99-3":73,"shiki--components-data-table--v-0-0-2-102-3":73,"shiki--components-data-table--v-0-0-2-105-3":73,"shiki--components-data-table--v-0-0-2-108-3":73,"shiki--components-data-table--v-0-0-0":6334,"sidebar-component-doc-meta":6335,"$fx0KBVvEgIeiEV9EkX1AURRdQeozNw-G7x_XSmfA1P-0":6493,"$fBaZKGUndEs4vgMrttiktc-gXC2SwHl610Y_dMg5Hmp8":6678,"component-parts-data-table":6726,"shiki--components-data-table--v-0-0-4-0":6792,"shiki--components-data-table--v-0-0-4-1":6793,"example-stories-data-table":6794},{"id":4,"title":5,"body":6,"description":4636,"extension":4637,"isNew":367,"meta":4638,"navigation":367,"path":4639,"seo":4640,"status":4641,"stem":4642,"updated":4643,"__hash__":4644},"componentDocs\u002Fcomponent-docs\u002Fdata-table.md","Data Table",{"type":7,"value":8,"toc":4585},"minimark",[9,14,53,64,67,89,100,106,111,114,163,184,229,245,249,268,279,605,608,621,623,645,648,675,678,698,700,725,729,732,735,737,741,744,815,857,861,865,879,882,886,895,899,903,918,922,926,937,1035,1039,1043,1050,1054,1058,1071,1074,1078,1081,1085,1089,1097,1101,1105,1120,1124,1127,1139,1143,1147,1157,1161,1165,1171,1175,1179,1193,1197,1201,1204,1208,1212,1240,1244,1248,1261,1265,1269,1284,1288,1292,1301,1305,1309,1320,1324,1328,1339,1343,1347,1354,1358,1362,1373,1377,1381,1391,1395,1399,1405,1409,1413,1417,1439,1514,1801,1816,1820,2126,2130,2142,2359,2377,2381,2391,2447,2450,2499,2503,2523,2538,2586,2596,2643,2646,2682,2685,2689,2692,2757,2760,2764,2771,2792,3544,3547,3643,3653,3657,3676,4501,4521,4525,4581],[10,11,13],"h2",{"id":12},"usage","Usage",[15,16,17,18,25,26,30,31,35,36,40,41,44,45,48,49,52],"p",{},"Data Table renders tabular data from a ",[19,20,24],"a",{"href":21,"rel":22},"https:\u002F\u002Ftanstack.com\u002Ftable",[23],"nofollow","TanStack Table"," column model and adds sorting, row selection, pagination and a declarative filter bar on top of ",[19,27,29],{"href":28},"\u002Fcomponents\u002Ftable\u002F","Table",". It is ",[32,33,34],"strong",{},"controlled and headless",": you feed it ",[37,38,39],"code",{},"columns",", ",[37,42,43],{},"data"," and (optionally) ",[37,46,47],{},"state",", and it emits a ",[37,50,51],{},"*-change"," event whenever the user interacts. It owns no data fetching, serialization or persistence — your app does that and feeds the next page of rows back in.",[15,54,55,56,58,59,63],{},"Use it when you have a list\u002Fcollection screen and want sorting, filtering, selection and paging without re-implementing the table chrome each time. For a static or hand-authored table, use ",[19,57,29],{"href":28}," directly; for just the filter toolbar, see ",[19,60,62],{"href":61},"\u002Fcomponents\u002Fdata-table-filter-bar\u002F","Data Table Filter Bar",".",[15,65,66],{},"Import the component — this registers the custom element:",[68,69,74],"pre",{"className":70,"code":71,"language":72,"meta":73,"style":73},"language-js shiki shiki-themes github-light github-dark","import \"@nordhealth\u002Fcomponents\u002Flib\u002FDataTable\"\n","js","",[37,75,76],{"__ignoreMap":73},[77,78,81,85],"span",{"class":79,"line":80},"line",1,[77,82,84],{"class":83},"szBVR","import",[77,86,88],{"class":87},"sZZnC"," \"@nordhealth\u002Fcomponents\u002Flib\u002FDataTable\"\n",[15,90,91,92,95,96,99],{},"Then give it a ",[37,93,94],{},"caption"," (for accessibility), a column model and a page of rows. Everything is set as a ",[32,97,98],{},"JS property",", not an attribute, because columns and data are objects\u002Farrays:",[101,102],"example-usage",{"component":103,"name":104,"story":105},"data-table","Data Table overview","Overview",[107,108,110],"h3",{"id":109},"the-headless-contract","The headless contract",[15,112,113],{},"Data Table never fetches, sorts, filters or paginates your data behind your back. The contract is one-way and explicit:",[115,116,117,132,138,151],"ol",{},[118,119,120,123,124,126,127,129,130,63],"li",{},[32,121,122],{},"You provide"," ",[37,125,39],{},", the current page of ",[37,128,43],{},", and (optionally) the controlled ",[37,131,47],{},[118,133,134,137],{},[32,135,136],{},"The user interacts"," — clicks a sort header, ticks a checkbox, changes a filter, moves a page.",[118,139,140,143,144,40,147,150],{},[32,141,142],{},"The table emits an event"," describing the new intent (",[37,145,146],{},"sorting-change",[37,148,149],{},"pagination-change",", …) — it does not silently mutate anything you own.",[118,152,153,156,157,159,160,162],{},[32,154,155],{},"Your app reacts"," — updates its query state and\u002For URL, fetches the matching rows, and assigns the new ",[37,158,43],{}," (and ",[37,161,47],{},") back onto the element.",[15,164,165,166,169,170,172,173,176,177,180,181,183],{},"In ",[32,167,168],{},"client mode"," (the default) the table also keeps its own internal copy of any state slice you leave uncontrolled, and runs TanStack's client-side sort\u002Ffilter\u002Fpaginate row models over the ",[37,171,43],{}," you gave it — handy for small, already-loaded datasets and demos. In ",[32,174,175],{},"server mode"," (",[37,178,179],{},"manual",") those client row models are skipped entirely: the table renders exactly the ",[37,182,43],{}," you pass and relies on you to do the sorting, filtering and paging on the server in response to its events.",[68,185,189],{"className":186,"code":187,"language":188,"meta":73,"style":73},"language-html shiki shiki-themes github-light github-dark","\u003C!-- Server-driven: render exactly the rows we pass, emit intent only -->\n\u003Cnord-data-table manual row-count=\"240\">\u003C\u002Fnord-data-table>\n","html",[37,190,191,197],{"__ignoreMap":73},[77,192,193],{"class":79,"line":80},[77,194,196],{"class":195},"sJ8bj","\u003C!-- Server-driven: render exactly the rows we pass, emit intent only -->\n",[77,198,200,204,208,212,215,218,221,224,226],{"class":79,"line":199},2,[77,201,203],{"class":202},"sVt8B","\u003C",[77,205,207],{"class":206},"s9eBZ","nord-data-table",[77,209,211],{"class":210},"sScJk"," manual",[77,213,214],{"class":210}," row-count",[77,216,217],{"class":202},"=",[77,219,220],{"class":87},"\"240\"",[77,222,223],{"class":202},">\u003C\u002F",[77,225,207],{"class":206},[77,227,228],{"class":202},">\n",[15,230,231,232,236,237,240,241,244],{},"Because the events carry ",[233,234,235],"em",{},"intent"," (the new ",[37,238,239],{},"SortingState",", the new ",[37,242,243],{},"PaginationState",", …) rather than resolved rows, the same event handlers work whether you resolve them client-side against an in-memory array or turn them into an API request. That is what makes the component equally at home in a small settings screen and a server-paged, hundreds-of-thousands-of-rows list.",[10,246,248],{"id":247},"composition","Composition",[15,250,251,252,256,257,259,260,262,263,267],{},"Data Table is a single custom element that assembles several Nord components into one collection view. You typically place it inside a ",[19,253,255],{"href":254},"\u002Fcomponents\u002Fcard\u002F","Card"," so it sits on a padded surface with a heading. Internally it embeds the ",[19,258,62],{"href":61}," as a toolbar, a ",[19,261,29],{"href":28}," for the rows, and a ",[19,264,266],{"href":265},"\u002Fcomponents\u002Fpagination\u002F","Pagination"," control beneath — all wired to the same TanStack table instance so state stays in sync.",[269,270,271],"anatomy-tree",{},[68,272,277],{"className":273,"code":275,"language":276,"meta":73},[274],"language-text","nord-card\n└── nord-data-table\n    ├── nord-data-table-filter-bar   (toolbar — from `filters`)\n    ├── nord-table                    (header + rows — from `columns` + `data`)\n    │   └── \u003Ctable> \u002F \u003Cthead> \u002F \u003Ctbody> \u002F \u003Ctfoot>\n    └── nord-pagination               (paginator — from `pagination`)\n","text",[37,278,275],{"__ignoreMap":73},[68,280,282],{"className":186,"code":281,"language":188,"meta":73,"style":73},"\u003Cnord-card padding=\"none\">\n  \u003Ch2 slot=\"header\">Patients\u003C\u002Fh2>\n  \u003Cnord-data-table caption=\"Patients\" id=\"patients\">\u003C\u002Fnord-data-table>\n\u003C\u002Fnord-card>\n\n\u003Cscript type=\"module\">\n  import \"@nordhealth\u002Fcomponents\u002Flib\u002FDataTable\"\n  const table = document.querySelector(\"#patients\")\n  table.columns = [\n    { accessorKey: \"id\", header: \"ID\", cell: info => info.getValue() },\n    { accessorKey: \"name\", header: \"Name\", cell: info => info.getValue() },\n    { accessorKey: \"species\", header: \"Species\", cell: info => info.getValue() },\n  ]\n  table.data = [\n    { id: 101, name: \"Bella\", species: \"Dog\" },\n    { id: 102, name: \"Milo\", species: \"Cat\" },\n  ]\n\u003C\u002Fscript>\n",[37,283,284,301,323,352,362,369,387,395,423,434,473,502,531,537,547,571,591,596],{"__ignoreMap":73},[77,285,286,288,291,294,296,299],{"class":79,"line":80},[77,287,203],{"class":202},[77,289,290],{"class":206},"nord-card",[77,292,293],{"class":210}," padding",[77,295,217],{"class":202},[77,297,298],{"class":87},"\"none\"",[77,300,228],{"class":202},[77,302,303,306,308,311,313,316,319,321],{"class":79,"line":199},[77,304,305],{"class":202},"  \u003C",[77,307,10],{"class":206},[77,309,310],{"class":210}," slot",[77,312,217],{"class":202},[77,314,315],{"class":87},"\"header\"",[77,317,318],{"class":202},">Patients\u003C\u002F",[77,320,10],{"class":206},[77,322,228],{"class":202},[77,324,326,328,330,333,335,338,341,343,346,348,350],{"class":79,"line":325},3,[77,327,305],{"class":202},[77,329,207],{"class":206},[77,331,332],{"class":210}," caption",[77,334,217],{"class":202},[77,336,337],{"class":87},"\"Patients\"",[77,339,340],{"class":210}," id",[77,342,217],{"class":202},[77,344,345],{"class":87},"\"patients\"",[77,347,223],{"class":202},[77,349,207],{"class":206},[77,351,228],{"class":202},[77,353,355,358,360],{"class":79,"line":354},4,[77,356,357],{"class":202},"\u003C\u002F",[77,359,290],{"class":206},[77,361,228],{"class":202},[77,363,365],{"class":79,"line":364},5,[77,366,368],{"emptyLinePlaceholder":367},true,"\n",[77,370,372,374,377,380,382,385],{"class":79,"line":371},6,[77,373,203],{"class":202},[77,375,376],{"class":206},"script",[77,378,379],{"class":210}," type",[77,381,217],{"class":202},[77,383,384],{"class":87},"\"module\"",[77,386,228],{"class":202},[77,388,390,393],{"class":79,"line":389},7,[77,391,392],{"class":83},"  import",[77,394,88],{"class":87},[77,396,398,401,405,408,411,414,417,420],{"class":79,"line":397},8,[77,399,400],{"class":83},"  const",[77,402,404],{"class":403},"sj4cs"," table",[77,406,407],{"class":83}," =",[77,409,410],{"class":202}," document.",[77,412,413],{"class":210},"querySelector",[77,415,416],{"class":202},"(",[77,418,419],{"class":87},"\"#patients\"",[77,421,422],{"class":202},")\n",[77,424,426,429,431],{"class":79,"line":425},9,[77,427,428],{"class":202},"  table.columns ",[77,430,217],{"class":83},[77,432,433],{"class":202}," [\n",[77,435,437,440,443,446,449,451,454,457,461,464,467,470],{"class":79,"line":436},10,[77,438,439],{"class":202},"    { accessorKey: ",[77,441,442],{"class":87},"\"id\"",[77,444,445],{"class":202},", header: ",[77,447,448],{"class":87},"\"ID\"",[77,450,40],{"class":202},[77,452,453],{"class":210},"cell",[77,455,456],{"class":202},": ",[77,458,460],{"class":459},"s4XuR","info",[77,462,463],{"class":83}," =>",[77,465,466],{"class":202}," info.",[77,468,469],{"class":210},"getValue",[77,471,472],{"class":202},"() },\n",[77,474,476,478,481,483,486,488,490,492,494,496,498,500],{"class":79,"line":475},11,[77,477,439],{"class":202},[77,479,480],{"class":87},"\"name\"",[77,482,445],{"class":202},[77,484,485],{"class":87},"\"Name\"",[77,487,40],{"class":202},[77,489,453],{"class":210},[77,491,456],{"class":202},[77,493,460],{"class":459},[77,495,463],{"class":83},[77,497,466],{"class":202},[77,499,469],{"class":210},[77,501,472],{"class":202},[77,503,505,507,510,512,515,517,519,521,523,525,527,529],{"class":79,"line":504},12,[77,506,439],{"class":202},[77,508,509],{"class":87},"\"species\"",[77,511,445],{"class":202},[77,513,514],{"class":87},"\"Species\"",[77,516,40],{"class":202},[77,518,453],{"class":210},[77,520,456],{"class":202},[77,522,460],{"class":459},[77,524,463],{"class":83},[77,526,466],{"class":202},[77,528,469],{"class":210},[77,530,472],{"class":202},[77,532,534],{"class":79,"line":533},13,[77,535,536],{"class":202},"  ]\n",[77,538,540,543,545],{"class":79,"line":539},14,[77,541,542],{"class":202},"  table.data ",[77,544,217],{"class":83},[77,546,433],{"class":202},[77,548,550,553,556,559,562,565,568],{"class":79,"line":549},15,[77,551,552],{"class":202},"    { id: ",[77,554,555],{"class":403},"101",[77,557,558],{"class":202},", name: ",[77,560,561],{"class":87},"\"Bella\"",[77,563,564],{"class":202},", species: ",[77,566,567],{"class":87},"\"Dog\"",[77,569,570],{"class":202}," },\n",[77,572,574,576,579,581,584,586,589],{"class":79,"line":573},16,[77,575,552],{"class":202},[77,577,578],{"class":403},"102",[77,580,558],{"class":202},[77,582,583],{"class":87},"\"Milo\"",[77,585,564],{"class":202},[77,587,588],{"class":87},"\"Cat\"",[77,590,570],{"class":202},[77,592,594],{"class":79,"line":593},17,[77,595,536],{"class":202},[77,597,599,601,603],{"class":79,"line":598},18,[77,600,357],{"class":202},[77,602,376],{"class":206},[77,604,228],{"class":202},[107,606,255],{"id":607},"card",[15,609,610,612,613,616,617,620],{},[19,611,255],{"href":254}," is the surrounding surface. It is not required, but it gives the table a heading, padding and a visual container. Use ",[37,614,615],{},"padding=\"none\""," so the table's own chrome (filter bar, rows, paginator) sits flush against the card edges, and put the screen title in the card's ",[37,618,619],{},"header"," slot.",[107,622,5],{"id":103},[15,624,625,628,629,631,632,40,634,40,636,40,639,40,642,644],{},[19,626,5],{"href":627},"\u002Fcomponents\u002Fdata-table\u002F"," is the orchestrator. It builds and owns the TanStack table instance, renders the parts below, forwards state between them, and emits the ",[37,630,51],{}," events. Almost all configuration is set as JS properties on this one element — ",[37,633,39],{},[37,635,43],{},[37,637,638],{},"filters",[37,640,641],{},"pagination",[37,643,47],{}," — and the sub-parts are generated from them.",[107,646,62],{"id":647},"data-table-filter-bar",[15,649,650,652,653,655,656,659,660,663,664,667,668,671,672,620],{},[19,651,62],{"href":61}," is the toolbar rendered above the rows from the ",[37,654,638],{}," descriptor list. Each descriptor maps to a Nord filter control (search, dropdown, date range, boolean, segmented, tag group, or a custom slot). It emits ",[37,657,658],{},"filters-change"," and ",[37,661,662],{},"filter-reset",". Opt out with ",[37,665,666],{},"no-filter-bar"," and supply your own via the ",[37,669,670],{},"filter-bar"," slot, or add extra controls beside it with the ",[37,673,674],{},"toolbar-end",[107,676,29],{"id":677},"table",[15,679,680,682,683,659,685,687,688,40,691,659,694,697],{},[19,681,29],{"href":28}," renders the actual header, body and footer from ",[37,684,39],{},[37,686,43],{},". Data Table forwards ",[37,689,690],{},"density",[37,692,693],{},"striped",[37,695,696],{},"hide-header"," straight through to it, and layers sorting affordances, selection checkboxes, sizing presets and sticky headers on top. Cell renderers in your column model compose other Nord components (badges, links, dropdowns) into the cells.",[107,699,266],{"id":641},[15,701,702,704,705,707,708,710,711,714,715,717,718,721,722,63],{},[19,703,266],{"href":265}," is the paginator rendered beneath the rows from the ",[37,706,641],{}," config. It emits ",[37,709,149],{}," intent. Opt out with ",[37,712,713],{},"no-pagination"," and provide your own via the ",[37,716,641],{}," slot, or drop it entirely in favour of ",[37,719,720],{},"infinite-scroll"," \u002F ",[37,723,724],{},"manual-infinite-scroll",[10,726,728],{"id":727},"examples","Examples",[107,730,105],{"id":731},"overview",[15,733,734],{},"The canonical table: accessor columns, a numeric preset, plain-string cells, a Nord badge cell and a display (no-accessor) actions column.",[101,736],{"component":103,"name":104,"story":105},[107,738,740],{"id":739},"cell-renderers","Cell renderers",[15,742,743],{},"Cells can return a string or any DOM node, so you can compose links, badges, formatted dates and an actions dropdown. Ready-made helpers are exported for framework code that can render Lit templates:",[745,746,747,777,799],"ul",{},[118,748,749,123,752,40,755,40,758,40,761,176,764,767,768,176,771,767,774,63],{},[32,750,751],{},"Presentation:",[37,753,754],{},"textCell",[37,756,757],{},"badgeCell",[37,759,760],{},"linkCell",[37,762,763],{},"emailCell",[37,765,766],{},"mailto:","), ",[37,769,770],{},"phoneCell",[37,772,773],{},"tel:",[37,775,776],{},"actionsCell",[118,778,779,123,782,40,785,40,788,40,791,794,795,798],{},[32,780,781],{},"Formatting (locale\u002Fcurrency injectable — never hard-coded):",[37,783,784],{},"numberCell",[37,786,787],{},"currencyCell",[37,789,790],{},"percentCell",[37,792,793],{},"dateCell"," all take consumer-supplied ",[37,796,797],{},"Intl"," options.",[118,800,801,123,804,807,808,811,812,814],{},[32,802,803],{},"Server HTML:",[37,805,806],{},"htmlCell"," renders a trusted HTML string, or set ",[37,809,810],{},"meta: { html: true }"," on a column to render its value as HTML with no ",[37,813,453],{}," function (server-rendered \u002F Django tables).",[15,816,817,818,821,822,40,824,40,827,40,830,833,834,833,837,40,840,40,843,40,846,40,849,852,853,856],{},"For sizing, set ",[37,819,820],{},"meta.cellType"," to a preset (",[37,823,276],{},[37,825,826],{},"number",[37,828,829],{},"date",[37,831,832],{},"id","\u002F",[37,835,836],{},"smallId",[37,838,839],{},"longId",[37,841,842],{},"actions",[37,844,845],{},"selection",[37,847,848],{},"icon",[37,850,851],{},"wide",").\nSet ",[37,854,855],{},"meta.textAlign"," once on the column definition; the same alignment is applied to its header (including the sort control), body cells and footer.",[101,858],{"component":103,"name":859,"story":860},"Data Table cell renderers","CellRenderers",[107,862,864],{"id":863},"sorting","Sorting",[15,866,867,868,871,872,875,876,878],{},"Mark columns sortable in the model and the headers become real ",[37,869,870],{},"\u003Cbutton>","s with ",[37,873,874],{},"aria-sort",". In client mode the table sorts its own row model; listen to ",[37,877,146],{}," to mirror the sort into your URL or a server query.",[101,880],{"component":103,"name":881,"story":864},"Data Table sorting",[107,883,885],{"id":884},"multi-sort","Multi-sort",[15,887,888,889,891,892,894],{},"Shift-click additional headers to sort by more than one column at once. The ",[37,890,146],{}," detail is the ordered ",[37,893,239],{}," array of every active sort.",[101,896],{"component":103,"name":897,"story":898},"Data Table multi-sort","MultiSort",[107,900,902],{"id":901},"row-selection","Row selection",[15,904,905,906,909,910,913,914,917],{},"Add ",[37,907,908],{},"enable-row-selection"," for a select-all \u002F per-row checkbox column. Selection is keyed by ",[37,911,912],{},"getRowId",", and each change emits ",[37,915,916],{},"row-selection-change"," with the selection map.",[101,919],{"component":103,"name":920,"story":921},"Data Table row selection","RowSelection",[107,923,925],{"id":924},"bulk-actions","Bulk actions",[15,927,928,929,932,933,936],{},"While rows are selected, a header-row takeover shows the selected count, a ",[32,930,931],{},"selection-options"," dropdown (select all on page \u002F deselect all), and your bulk actions. Compose the actions by placing a ",[37,934,935],{},"\u003Cnord-data-table-bulk-actions>"," element inside the table with your action buttons; the table renders it in the takeover row. The toolbar stays pinned to the visible start edge while the table scrolls horizontally, so the actions remain reachable in wide tables.",[68,938,940],{"className":186,"code":939,"language":188,"meta":73,"style":73},"\u003Cnord-data-table id=\"patients\" enable-row-selection>\n  \u003Cnord-data-table-bulk-actions>\n    \u003Cnord-button size=\"s\">Export\u003C\u002Fnord-button>\n    \u003Cnord-button size=\"s\" variant=\"danger\">Delete\u003C\u002Fnord-button>\n  \u003C\u002Fnord-data-table-bulk-actions>\n\u003C\u002Fnord-data-table>\n",[37,941,942,959,968,991,1018,1027],{"__ignoreMap":73},[77,943,944,946,948,950,952,954,957],{"class":79,"line":80},[77,945,203],{"class":202},[77,947,207],{"class":206},[77,949,340],{"class":210},[77,951,217],{"class":202},[77,953,345],{"class":87},[77,955,956],{"class":210}," enable-row-selection",[77,958,228],{"class":202},[77,960,961,963,966],{"class":79,"line":199},[77,962,305],{"class":202},[77,964,965],{"class":206},"nord-data-table-bulk-actions",[77,967,228],{"class":202},[77,969,970,973,976,979,981,984,987,989],{"class":79,"line":325},[77,971,972],{"class":202},"    \u003C",[77,974,975],{"class":206},"nord-button",[77,977,978],{"class":210}," size",[77,980,217],{"class":202},[77,982,983],{"class":87},"\"s\"",[77,985,986],{"class":202},">Export\u003C\u002F",[77,988,975],{"class":206},[77,990,228],{"class":202},[77,992,993,995,997,999,1001,1003,1006,1008,1011,1014,1016],{"class":79,"line":354},[77,994,972],{"class":202},[77,996,975],{"class":206},[77,998,978],{"class":210},[77,1000,217],{"class":202},[77,1002,983],{"class":87},[77,1004,1005],{"class":210}," variant",[77,1007,217],{"class":202},[77,1009,1010],{"class":87},"\"danger\"",[77,1012,1013],{"class":202},">Delete\u003C\u002F",[77,1015,975],{"class":206},[77,1017,228],{"class":202},[77,1019,1020,1023,1025],{"class":79,"line":364},[77,1021,1022],{"class":202},"  \u003C\u002F",[77,1024,965],{"class":206},[77,1026,228],{"class":202},[77,1028,1029,1031,1033],{"class":79,"line":371},[77,1030,357],{"class":202},[77,1032,207],{"class":206},[77,1034,228],{"class":202},[101,1036],{"component":103,"name":1037,"story":1038},"Data Table bulk actions","BulkActions",[107,1040,1042],{"id":1041},"single-select","Single select",[15,1044,1045,1046,1049],{},"Use ",[37,1047,1048],{},"enable-row-single-selection"," for radio-style selection where picking a row replaces the previous one and no select-all control is shown.",[101,1051],{"component":103,"name":1052,"story":1053},"Data Table single select","SingleSelect",[107,1055,1057],{"id":1056},"filtering","Filtering",[15,1059,1060,1061,1063,1064,1066,1067,1070],{},"Provide a ",[37,1062,638],{}," descriptor list to render the embedded filter bar. Changing a filter emits ",[37,1065,658],{}," with the full value map so you can re-fetch the matching rows. The ",[32,1068,1069],{},"reset-filters"," button only appears once at least one filter holds a non-default value.",[101,1072],{"component":103,"name":1073,"story":1057},"Data Table filtering",[107,1075,1077],{"id":1076},"all-filter-types","All filter types",[15,1079,1080],{},"The filter bar supports search, dropdown, date range, boolean, segmented, tag group and custom filters — one descriptor per control.",[101,1082],{"component":103,"name":1083,"story":1084},"Data Table filter types","AllFilterTypes",[107,1086,1088],{"id":1087},"client-pagination","Client pagination",[15,1090,1091,1092,1094,1095,63],{},"Pass a ",[37,1093,641],{}," config and, in client mode, the table paginates its own row model. Page changes emit ",[37,1096,149],{},[101,1098],{"component":103,"name":1099,"story":1100},"Data Table client pagination","ClientPagination",[107,1102,1104],{"id":1103},"server-side-pagination","Server-side pagination",[15,1106,1107,1108,1110,1111,1114,1115,1117,1118,63],{},"Pair ",[37,1109,179],{}," with ",[37,1112,1113],{},"row-count"," (the total number of server-side rows) and resolve ",[37,1116,149],{}," into an API request, assigning the returned page back onto ",[37,1119,43],{},[101,1121],{"component":103,"name":1122,"story":1123},"Data Table server-side pagination","ServerSidePagination",[107,1125,1126],{"id":720},"Infinite scroll",[15,1128,1129,1130,1132,1133,1135,1136,63],{},"Instead of a numbered paginator, use ",[37,1131,720],{}," (client) or ",[37,1134,724],{}," (server) to advance\u002Fappend rows as the body scrolls near the bottom. The table also emits ",[37,1137,1138],{},"reached-bottom",[101,1140],{"component":103,"name":1141,"story":1142},"Data Table infinite scroll","InfiniteScrollExample",[107,1144,1146],{"id":1145},"tree-expansion","Tree expansion",[15,1148,1149,1150,1153,1154,63],{},"Provide ",[37,1151,1152],{},"getSubRows"," to render nested child rows with an expand\u002Fcollapse control. Expansion state emits ",[37,1155,1156],{},"expanded-change",[101,1158],{"component":103,"name":1159,"story":1160},"Data Table tree expansion","TreeExpansion",[107,1162,1164],{"id":1163},"master-detail","Master \u002F detail",[15,1166,1149,1167,1170],{},[37,1168,1169],{},"renderSubRow"," to render a full-width detail panel beneath an expanded row — useful for inline detail views without navigating away.",[101,1172],{"component":103,"name":1173,"story":1174},"Data Table master detail","MasterDetail",[107,1176,1178],{"id":1177},"custom-rows","Custom rows",[15,1180,1181,1182,1185,1186,40,1189,1192],{},"Column ",[37,1183,1184],{},"meta"," hints (",[37,1187,1188],{},"bodyColspan",[37,1190,1191],{},"bodySkipByColspan",") let a row span cells for grouped or summary presentations.",[101,1194],{"component":103,"name":1195,"story":1196},"Data Table custom rows","CustomRows",[107,1198,1200],{"id":1199},"column-pinning","Column pinning",[15,1202,1203],{},"Pin columns to the start or end so they stay visible while the rest of the table scrolls horizontally. Pinned columns cast a shadow at the scroll boundary.",[101,1205],{"component":103,"name":1206,"story":1207},"Data Table column pinning","ColumnPinning",[107,1209,1211],{"id":1210},"column-sizing","Column sizing",[15,1213,1214,1215,1218,1219,1221,1222,40,1224,40,1227,40,1229,40,1231,40,1233,40,1235,40,1237,1239],{},"A column's width comes from its explicit ",[37,1216,1217],{},"size",", then a ",[37,1220,820],{}," preset (",[37,1223,845],{},[37,1225,1226],{},"expand",[37,1228,848],{},[37,1230,842],{},[37,1232,826],{},[37,1234,829],{},[37,1236,276],{},[37,1238,851],{},"), then TanStack's computed size.",[101,1241],{"component":103,"name":1242,"story":1243},"Data Table column sizing","ColumnSizing",[107,1245,1247],{"id":1246},"column-resizing","Column resizing",[15,1249,905,1250,1253,1254,1257,1258,63],{},[37,1251,1252],{},"enable-column-resizing"," for drag-to-resize handles in the header. Set ",[37,1255,1256],{},"enableResizing: false"," on an individual column definition to keep that column fixed. Sizing changes emit ",[37,1259,1260],{},"column-sizing-change",[101,1262],{"component":103,"name":1263,"story":1264},"Data Table column resizing","ColumnResizing",[107,1266,1268],{"id":1267},"columns-menu","Columns menu",[15,1270,905,1271,1273,1274,1277,1278,659,1281,63],{},[37,1272,1267],{}," for a built-in column-visibility menu in the toolbar; add ",[37,1275,1276],{},"enable-column-reorder"," for drag-to-reorder handles. These emit ",[37,1279,1280],{},"column-visibility-change",[37,1282,1283],{},"column-order-change",[101,1285],{"component":103,"name":1286,"story":1287},"Data Table columns menu","ColumnsMenu",[107,1289,1291],{"id":1290},"sticky-header","Sticky header",[15,1293,905,1294,1296,1297,1300],{},[37,1295,1290],{}," so the header row stays pinned while the body scrolls. Set ",[37,1298,1299],{},"sticky-header-offset"," to clear fixed app chrome.",[101,1302],{"component":103,"name":1303,"story":1304},"Data Table sticky header","StickyHeader",[107,1306,1308],{"id":1307},"loading-skeleton","Loading skeleton",[15,1310,1311,1312,1315,1316,1319],{},"While ",[37,1313,1314],{},"loading"," with no data yet, the table renders ",[37,1317,1318],{},"skeleton-rows"," placeholder rows instead of an empty overlay, so layout does not jump when data arrives.",[101,1321],{"component":103,"name":1322,"story":1323},"Data Table loading skeleton","LoadingSkeleton",[107,1325,1327],{"id":1326},"empty-and-no-results","Empty and no-results",[15,1329,1330,1331,1334,1335,1338],{},"The empty state differs by cause: no data at all uses ",[37,1332,1333],{},"empty-message"," (or the ",[37,1336,1337],{},"empty"," slot), while active filters returning nothing show a distinct \"no results\" state with a clear-filters affordance.",[101,1340],{"component":103,"name":1341,"story":1342},"Data Table empty and no results","EmptyAndNoResults",[107,1344,1346],{"id":1345},"row-errors","Row errors",[15,1348,1349,1350,1353],{},"Set ",[37,1351,1352],{},"rowErrors"," (keyed by row id) to render a danger banner beneath each affected row listing its validation messages — useful for inline-edit failures.",[101,1355],{"component":103,"name":1356,"story":1357},"Data Table row errors","RowErrors",[107,1359,1361],{"id":1360},"column-footers","Column footers",[15,1363,1364,1365,1368,1369,1372],{},"Give any visible column a ",[37,1366,1367],{},"footer"," and the table renders a ",[37,1370,1371],{},"\u003Ctfoot>"," totals row — handy for sums and counts.",[101,1374],{"component":103,"name":1375,"story":1376},"Data Table column footers","ColumnFooters",[107,1378,1380],{"id":1379},"clickable-rows","Clickable rows",[15,1382,1349,1383,1386,1387,1390],{},[37,1384,1385],{},"isRowClickable"," to gate which rows are activatable. Clickable rows emit ",[37,1388,1389],{},"row-click"," on click, Enter or Space with the row id and original data.",[101,1392],{"component":103,"name":1393,"story":1394},"Data Table clickable rows","ClickableRows",[107,1396,1398],{"id":1397},"server-side-complete","Server-side complete",[15,1400,1401,1402,1404],{},"A complete server-driven collection view: ",[37,1403,179],{}," mode with server sorting, filtering and pagination wired together through the events.",[101,1406],{"component":103,"name":1407,"story":1408},"Data Table server-side complete","ServerSideComplete",[10,1410,1412],{"id":1411},"api-reference","API reference",[107,1414,1416],{"id":1415},"properties","Properties",[15,1418,1419,1420,1423,1424,721,1427,1430,1431,1434,1435,1438],{},"None of these are attributes — set them with ",[37,1421,1422],{},"element.columns = …"," (or ",[37,1425,1426],{},".columns=${…}",[37,1428,1429],{},":columns"," in a framework). TanStack Table types are re-exported from ",[37,1432,1433],{},"@nordhealth\u002Fcomponents",", so you can import them without adding ",[37,1436,1437],{},"@tanstack\u002Ftable-core"," yourself:",[68,1440,1444],{"className":1441,"code":1442,"language":1443,"meta":73,"style":73},"language-ts shiki shiki-themes github-light github-dark","import type {\n  ColumnDef,\n  SortingState,\n  PaginationState,\n  RowSelectionState,\n  ExpandedState,\n  Row,\n  TableState,\n} from \"@nordhealth\u002Fcomponents\"\nimport type { DataTablePaginationConfig, FilterDescriptor } from \"@nordhealth\u002Fcomponents\"\n","ts",[37,1445,1446,1455,1460,1465,1470,1475,1480,1485,1490,1501],{"__ignoreMap":73},[77,1447,1448,1450,1452],{"class":79,"line":80},[77,1449,84],{"class":83},[77,1451,379],{"class":83},[77,1453,1454],{"class":202}," {\n",[77,1456,1457],{"class":79,"line":199},[77,1458,1459],{"class":202},"  ColumnDef,\n",[77,1461,1462],{"class":79,"line":325},[77,1463,1464],{"class":202},"  SortingState,\n",[77,1466,1467],{"class":79,"line":354},[77,1468,1469],{"class":202},"  PaginationState,\n",[77,1471,1472],{"class":79,"line":364},[77,1473,1474],{"class":202},"  RowSelectionState,\n",[77,1476,1477],{"class":79,"line":371},[77,1478,1479],{"class":202},"  ExpandedState,\n",[77,1481,1482],{"class":79,"line":389},[77,1483,1484],{"class":202},"  Row,\n",[77,1486,1487],{"class":79,"line":397},[77,1488,1489],{"class":202},"  TableState,\n",[77,1491,1492,1495,1498],{"class":79,"line":425},[77,1493,1494],{"class":202},"} ",[77,1496,1497],{"class":83},"from",[77,1499,1500],{"class":87}," \"@nordhealth\u002Fcomponents\"\n",[77,1502,1503,1505,1507,1510,1512],{"class":79,"line":436},[77,1504,84],{"class":83},[77,1506,379],{"class":83},[77,1508,1509],{"class":202}," { DataTablePaginationConfig, FilterDescriptor } ",[77,1511,1497],{"class":83},[77,1513,1500],{"class":87},[677,1515,1516,1532],{},[1517,1518,1519],"thead",{},[1520,1521,1522,1526,1529],"tr",{},[1523,1524,1525],"th",{},"Property",[1523,1527,1528],{},"Type",[1523,1530,1531],{},"Description",[1533,1534,1535,1553,1570,1598,1612,1627,1660,1677,1691,1705,1720,1734,1750,1764,1779],"tbody",{},[1520,1536,1537,1542,1547],{},[1538,1539,1540],"td",{},[37,1541,39],{},[1538,1543,1544],{},[37,1545,1546],{},"ColumnDef\u003CTData, any>[]",[1538,1548,1549,1550,1552],{},"TanStack column definitions. Each ",[37,1551,453],{}," returns a Lit template, string, or DOM node.",[1520,1554,1555,1559,1564],{},[1538,1556,1557],{},[37,1558,43],{},[1538,1560,1561],{},[37,1562,1563],{},"TData[]",[1538,1565,1566,1567,1569],{},"The current page of rows. In client mode the full dataset to sort\u002Ffilter\u002Fpaginate locally; in ",[37,1568,179],{}," mode exactly the rows to display.",[1520,1571,1572,1576,1581],{},[1538,1573,1574],{},[37,1575,47],{},[1538,1577,1578],{},[37,1579,1580],{},"Partial\u003CTableState>",[1538,1582,1583,1584,40,1586,40,1588,40,1591,40,1594,1597],{},"Controlled state (",[37,1585,863],{},[37,1587,641],{},[37,1589,1590],{},"rowSelection",[37,1592,1593],{},"columnFilters",[37,1595,1596],{},"expanded",", …). Any slice left out is tracked internally.",[1520,1599,1600,1604,1609],{},[1538,1601,1602],{},[37,1603,638],{},[1538,1605,1606],{},[37,1607,1608],{},"FilterDescriptor[]",[1538,1610,1611],{},"Declarative config for the embedded filter bar.",[1520,1613,1614,1619,1624],{},[1538,1615,1616],{},[37,1617,1618],{},"filterValues",[1538,1620,1621],{},[37,1622,1623],{},"FilterValues",[1538,1625,1626],{},"Controlled value map for the embedded filter bar.",[1520,1628,1629,1633,1638],{},[1538,1630,1631],{},[37,1632,641],{},[1538,1634,1635],{},[37,1636,1637],{},"DataTablePaginationConfig",[1538,1639,1640,1641,40,1644,40,1647,40,1650,176,1653,721,1656,1659],{},"Paginator config: ",[37,1642,1643],{},"total",[37,1645,1646],{},"pageSize",[37,1648,1649],{},"pageSizeOptions",[37,1651,1652],{},"type",[37,1654,1655],{},"numbers",[37,1657,1658],{},"simple",").",[1520,1661,1662,1666,1671],{},[1538,1663,1664],{},[37,1665,677],{},[1538,1667,1668],{},[37,1669,1670],{},"TanStackTable\u003CTData>",[1538,1672,1673,1674,1676],{},"Escape hatch: render a consumer-built TanStack ",[37,1675,29],{}," instance verbatim.",[1520,1678,1679,1683,1688],{},[1538,1680,1681],{},[37,1682,912],{},[1538,1684,1685],{},[37,1686,1687],{},"(row, index, parent?) => string",[1538,1689,1690],{},"Stable row id used by selection and expansion.",[1520,1692,1693,1697,1702],{},[1538,1694,1695],{},[37,1696,1152],{},[1538,1698,1699],{},[37,1700,1701],{},"(row) => TData[] | undefined",[1538,1703,1704],{},"Enables tree expansion.",[1520,1706,1707,1712,1717],{},[1538,1708,1709],{},[37,1710,1711],{},"getRowCanExpand",[1538,1713,1714],{},[37,1715,1716],{},"(row: Row\u003CTData>) => boolean",[1538,1718,1719],{},"Gates which rows can expand.",[1520,1721,1722,1726,1731],{},[1538,1723,1724],{},[37,1725,1169],{},[1538,1727,1728],{},[37,1729,1730],{},"(row: Row\u003CTData>) => TemplateResult",[1538,1732,1733],{},"Full-width detail panel for an expanded row (master\u002Fdetail).",[1520,1735,1736,1741,1745],{},[1538,1737,1738],{},[37,1739,1740],{},"rowCount",[1538,1742,1743],{},[37,1744,826],{},[1538,1746,1747,1748,1659],{},"Total row count for server-side pagination (attribute ",[37,1749,1113],{},[1520,1751,1752,1756,1761],{},[1538,1753,1754],{},[37,1755,1352],{},[1538,1757,1758],{},[37,1759,1760],{},"Record\u003Cstring, string[]>",[1538,1762,1763],{},"Per-row validation messages keyed by row id; each renders a danger banner.",[1520,1765,1766,1770,1774],{},[1538,1767,1768],{},[37,1769,1385],{},[1538,1771,1772],{},[37,1773,1716],{},[1538,1775,1776,1777,63],{},"Gates which rows are clickable and emit ",[37,1778,1389],{},[1520,1780,1781,1786,1791],{},[1538,1782,1783],{},[37,1784,1785],{},"rowGrouping",[1538,1787,1788],{},[37,1789,1790],{},"RowGroupingConfig",[1538,1792,1793,1794,1797,1798,63],{},"Group contiguous rows under collapsible group-header rows: ",[37,1795,1796],{},"{ column, collapsible?, collapsedByDefault? }",". Rows must arrive ordered by ",[37,1799,1800],{},"column",[15,1802,1803,1804,1110,1807,1809,1810,1812,1813,63],{},"Columns can also opt into rendering their value as ",[32,1805,1806],{},"trusted HTML",[37,1808,810],{}," — for server-rendered tables (e.g. Django) whose cells arrive as pre-rendered HTML strings, with no ",[37,1811,453],{}," function and no framework import. See ",[19,1814,740],{"href":1815},"#cell-renderers",[107,1817,1819],{"id":1818},"attributes","Attributes",[677,1821,1822,1833],{},[1517,1823,1824],{},[1520,1825,1826,1829,1831],{},[1523,1827,1828],{},"Attribute",[1523,1830,1528],{},[1523,1832,1531],{},[1533,1834,1835,1849,1863,1883,1896,1909,1922,1935,1948,1964,1980,1996,2011,2024,2040,2053,2066,2087,2100,2113],{},[1520,1836,1837,1841,1846],{},[1538,1838,1839],{},[37,1840,94],{},[1538,1842,1843],{},[37,1844,1845],{},"string",[1538,1847,1848],{},"Accessible caption (visually hidden, required).",[1520,1850,1851,1855,1860],{},[1538,1852,1853],{},[37,1854,179],{},[1538,1856,1857],{},[37,1858,1859],{},"boolean",[1538,1861,1862],{},"Server-side mode: skip the client sort\u002Ffilter\u002Fpaginate row models.",[1520,1864,1865,1869,1880],{},[1538,1866,1867],{},[37,1868,690],{},[1538,1870,1871,721,1874,721,1877],{},[37,1872,1873],{},"condensed",[37,1875,1876],{},"default",[37,1878,1879],{},"relaxed",[1538,1881,1882],{},"Row density, forwarded to the inner Table.",[1520,1884,1885,1889,1893],{},[1538,1886,1887],{},[37,1888,693],{},[1538,1890,1891],{},[37,1892,1859],{},[1538,1894,1895],{},"Zebra striping.",[1520,1897,1898,1902,1906],{},[1538,1899,1900],{},[37,1901,696],{},[1538,1903,1904],{},[37,1905,1859],{},[1538,1907,1908],{},"Hide the column header row.",[1520,1910,1911,1915,1919],{},[1538,1912,1913],{},[37,1914,1314],{},[1538,1916,1917],{},[37,1918,1859],{},[1538,1920,1921],{},"Show the loading overlay \u002F skeleton.",[1520,1923,1924,1928,1932],{},[1538,1925,1926],{},[37,1927,1333],{},[1538,1929,1930],{},[37,1931,1845],{},[1538,1933,1934],{},"Override the default empty-state message.",[1520,1936,1937,1941,1945],{},[1538,1938,1939],{},[37,1940,1290],{},[1538,1942,1943],{},[37,1944,1859],{},[1538,1946,1947],{},"Pin the header row while the body scrolls.",[1520,1949,1950,1954,1961],{},[1538,1951,1952],{},[37,1953,1299],{},[1538,1955,1956,721,1958],{},[37,1957,826],{},[37,1959,1960],{},"auto",[1538,1962,1963],{},"Top offset (px) for the sticky header to clear fixed chrome.",[1520,1965,1966,1970,1974],{},[1538,1967,1968],{},[37,1969,1318],{},[1538,1971,1972],{},[37,1973,826],{},[1538,1975,1976,1977,1659],{},"Placeholder rows rendered while loading with no data (default ",[37,1978,1979],{},"5",[1520,1981,1982,1986,1990],{},[1538,1983,1984],{},[37,1985,666],{},[1538,1987,1988],{},[37,1989,1859],{},[1538,1991,1992,1993,1995],{},"Opt out of the embedded filter bar (use the ",[37,1994,670],{}," slot instead).",[1520,1997,1998,2002,2006],{},[1538,1999,2000],{},[37,2001,713],{},[1538,2003,2004],{},[37,2005,1859],{},[1538,2007,2008,2009,1995],{},"Opt out of the embedded paginator (use the ",[37,2010,641],{},[1520,2012,2013,2017,2021],{},[1538,2014,2015],{},[37,2016,720],{},[1538,2018,2019],{},[37,2020,1859],{},[1538,2022,2023],{},"Client-side infinite scroll: auto-advance the page near the bottom.",[1520,2025,2026,2030,2034],{},[1538,2027,2028],{},[37,2029,724],{},[1538,2031,2032],{},[37,2033,1859],{},[1538,2035,2036,2037,2039],{},"Server-side infinite scroll: emit ",[37,2038,1138],{}," near the bottom.",[1520,2041,2042,2046,2050],{},[1538,2043,2044],{},[37,2045,908],{},[1538,2047,2048],{},[37,2049,1859],{},[1538,2051,2052],{},"Add the multi-select select-all \u002F per-row checkbox column.",[1520,2054,2055,2059,2063],{},[1538,2056,2057],{},[37,2058,1048],{},[1538,2060,2061],{},[37,2062,1859],{},[1538,2064,2065],{},"Radio-style single-row selection (no select-all).",[1520,2067,2068,2073,2077],{},[1538,2069,2070],{},[37,2071,2072],{},"enable-select-all-matching",[1538,2074,2075],{},[37,2076,1859],{},[1538,2078,2079,2080,2082,2083,2086],{},"Offer a \"Select all N matching\" affordance when the page is fully selected and ",[37,2081,1740],{}," exceeds it; emits ",[37,2084,2085],{},"select-all-matching"," (intent only — you resolve the ids).",[1520,2088,2089,2093,2097],{},[1538,2090,2091],{},[37,2092,1252],{},[1538,2094,2095],{},[37,2096,1859],{},[1538,2098,2099],{},"Drag-to-resize column handles in the header.",[1520,2101,2102,2106,2110],{},[1538,2103,2104],{},[37,2105,1267],{},[1538,2107,2108],{},[37,2109,1859],{},[1538,2111,2112],{},"Render the built-in column-visibility menu in the toolbar.",[1520,2114,2115,2119,2123],{},[1538,2116,2117],{},[37,2118,1276],{},[1538,2120,2121],{},[37,2122,1859],{},[1538,2124,2125],{},"Add drag-to-reorder handles to the columns menu.",[107,2127,2129],{"id":2128},"events","Events",[15,2131,2132,2133,2136,2137,833,2139,2141],{},"Every interaction emits an unprefixed event whose ",[37,2134,2135],{},"detail"," is the new value for that state slice. None of these change what the table renders by themselves — re-render by assigning new ",[37,2138,43],{},[37,2140,47],{}," in response.",[677,2143,2144,2158],{},[1517,2145,2146],{},[1520,2147,2148,2151,2155],{},[1523,2149,2150],{},"Event",[1523,2152,2153],{},[37,2154,2135],{},[1523,2156,2157],{},"Fires when",[1533,2159,2160,2173,2186,2201,2216,2230,2247,2261,2275,2289,2304,2318,2333,2347],{},[1520,2161,2162,2166,2170],{},[1538,2163,2164],{},[37,2165,146],{},[1538,2167,2168],{},[37,2169,239],{},[1538,2171,2172],{},"A sortable header is toggled.",[1520,2174,2175,2179,2183],{},[1538,2176,2177],{},[37,2178,149],{},[1538,2180,2181],{},[37,2182,243],{},[1538,2184,2185],{},"The page or page size changes.",[1520,2187,2188,2193,2198],{},[1538,2189,2190],{},[37,2191,2192],{},"column-filters-change",[1538,2194,2195],{},[37,2196,2197],{},"ColumnFiltersState",[1538,2199,2200],{},"Column filters change.",[1520,2202,2203,2208,2213],{},[1538,2204,2205],{},[37,2206,2207],{},"global-filter-change",[1538,2209,2210],{},[37,2211,2212],{},"unknown",[1538,2214,2215],{},"The global filter value changes.",[1520,2217,2218,2222,2227],{},[1538,2219,2220],{},[37,2221,916],{},[1538,2223,2224],{},[37,2225,2226],{},"RowSelectionState",[1538,2228,2229],{},"Rows are selected or deselected.",[1520,2231,2232,2236,2241],{},[1538,2233,2234],{},[37,2235,2085],{},[1538,2237,2238],{},[37,2239,2240],{},"{ total }",[1538,2242,2243,2244,2246],{},"The user chose \"Select all N matching\" across pages (opt-in via ",[37,2245,2072],{},"). Resolve the ids server-side and apply the selection.",[1520,2248,2249,2253,2258],{},[1538,2250,2251],{},[37,2252,1156],{},[1538,2254,2255],{},[37,2256,2257],{},"ExpandedState",[1538,2259,2260],{},"Rows are expanded or collapsed.",[1520,2262,2263,2267,2272],{},[1538,2264,2265],{},[37,2266,1280],{},[1538,2268,2269],{},[37,2270,2271],{},"VisibilityState",[1538,2273,2274],{},"Column visibility changes.",[1520,2276,2277,2281,2286],{},[1538,2278,2279],{},[37,2280,1283],{},[1538,2282,2283],{},[37,2284,2285],{},"ColumnOrderState",[1538,2287,2288],{},"Column order changes.",[1520,2290,2291,2296,2301],{},[1538,2292,2293],{},[37,2294,2295],{},"column-pinning-change",[1538,2297,2298],{},[37,2299,2300],{},"ColumnPinningState",[1538,2302,2303],{},"Column pinning changes.",[1520,2305,2306,2310,2315],{},[1538,2307,2308],{},[37,2309,1260],{},[1538,2311,2312],{},[37,2313,2314],{},"ColumnSizingState",[1538,2316,2317],{},"Column sizing changes.",[1520,2319,2320,2325,2330],{},[1538,2321,2322],{},[37,2323,2324],{},"state-change",[1538,2326,2327],{},[37,2328,2329],{},"TableState",[1538,2331,2332],{},"Any state slice changes (fully-controlled escape hatch).",[1520,2334,2335,2339,2344],{},[1538,2336,2337],{},[37,2338,1389],{},[1538,2340,2341],{},[37,2342,2343],{},"{ id, row }",[1538,2345,2346],{},"A clickable row is activated (click \u002F Enter \u002F Space).",[1520,2348,2349,2353,2356],{},[1538,2350,2351],{},[37,2352,1138],{},[1538,2354,2355],{},"—",[1538,2357,2358],{},"The body is scrolled near the bottom (infinite scroll).",[15,2360,2361,2362,2364,2365,767,2368,659,2370,2373,2374,2376],{},"The embedded filter bar additionally emits ",[37,2363,658],{}," (with ",[37,2366,2367],{},"{ values, changed }",[37,2369,662],{},[37,2371,2372],{},"filter-add",". See ",[19,2375,62],{"href":61}," for details.",[107,2378,2380],{"id":2379},"slots-override-renderers","Slots & override renderers",[15,2382,2383,2384,2387,2388,2390],{},"This element is light-DOM, so consumer content placed with ",[37,2385,2386],{},"slot=\"…\""," (or the dedicated ",[37,2389,935],{}," element) is captured and re-projected into the rendered table.",[677,2392,2393,2402],{},[1517,2394,2395],{},[1520,2396,2397,2400],{},[1523,2398,2399],{},"Slot",[1523,2401,1531],{},[1533,2403,2404,2416,2425,2436],{},[1520,2405,2406,2413],{},[1538,2407,2408,1423,2410,2412],{},[37,2409,924],{},[37,2411,935],{},")",[1538,2414,2415],{},"Actions shown in the header-row takeover while rows are selected.",[1520,2417,2418,2422],{},[1538,2419,2420],{},[37,2421,674],{},[1538,2423,2424],{},"Extra controls beside the embedded filter bar.",[1520,2426,2427,2431],{},[1538,2428,2429],{},[37,2430,670],{},[1538,2432,2433,2434,1659],{},"Replaces the embedded filter bar (pair with ",[37,2435,666],{},[1520,2437,2438,2442],{},[1538,2439,2440],{},[37,2441,641],{},[1538,2443,2444,2445,1659],{},"Replaces the embedded paginator (pair with ",[37,2446,713],{},[15,2448,2449],{},"For the in-grid states, use the render-prop properties instead of slots:",[677,2451,2452,2460],{},[1517,2453,2454],{},[1520,2455,2456,2458],{},[1523,2457,1525],{},[1523,2459,1531],{},[1533,2461,2462,2475,2487],{},[1520,2463,2464,2469],{},[1538,2465,2466],{},[37,2467,2468],{},"renderEmpty",[1538,2470,2471,2474],{},[37,2472,2473],{},"() => TemplateResult"," — custom empty state (replaces the default message + clear-filters action).",[1520,2476,2477,2482],{},[1538,2478,2479],{},[37,2480,2481],{},"renderLoading",[1538,2483,2484,2486],{},[37,2485,2473],{}," — custom loading overlay (replaces the default spinner).",[1520,2488,2489,2493],{},[1538,2490,2491],{},[37,2492,1169],{},[1538,2494,2495,2498],{},[37,2496,2497],{},"(row) => TemplateResult"," — master\u002Fdetail content for an expanded row.",[10,2500,2502],{"id":2501},"framework-owned-rows","Framework-owned rows",[15,2504,2505,2508,2509,2512,2513,2516,2517,2520,2521,63],{},[37,2506,2507],{},"\u003Cnord-data-table>"," is the ready-made Lit renderer. In React or Vue applications that need native JSX, render functions or scoped slots for cells, let the framework own the semantic ",[37,2510,2511],{},"\u003Ctable>"," markup instead. Use the framework's TanStack adapter (",[37,2514,2515],{},"@tanstack\u002Freact-table"," or ",[37,2518,2519],{},"@tanstack\u002Fvue-table",") with the same column metadata, sizing presets and localization exported by ",[37,2522,1433],{},[15,2524,2525,2526,2529,2530,2533,2534,2537],{},"Load the reusable class stylesheet once, put ",[37,2527,2528],{},".n-data-table"," on the ",[37,2531,2532],{},"nord-table"," shell, and use the ",[37,2535,2536],{},"n-data-table-*"," classes on sorting, resizing and state affordances:",[68,2539,2541],{"className":70,"code":2540,"language":72,"meta":73,"style":73},"import \"@nordhealth\u002Fcomponents\u002Flib\u002FTable\"\nimport \"@nordhealth\u002Fcomponents\u002Flib\u002Fdata-table.css\"\nimport {\n  applyColumnSizingDefaults,\n  CELL_TYPE_SIZES,\n  getColumnSize,\n} from \"@nordhealth\u002Fcomponents\"\n",[37,2542,2543,2550,2557,2563,2568,2573,2578],{"__ignoreMap":73},[77,2544,2545,2547],{"class":79,"line":80},[77,2546,84],{"class":83},[77,2548,2549],{"class":87}," \"@nordhealth\u002Fcomponents\u002Flib\u002FTable\"\n",[77,2551,2552,2554],{"class":79,"line":199},[77,2553,84],{"class":83},[77,2555,2556],{"class":87}," \"@nordhealth\u002Fcomponents\u002Flib\u002Fdata-table.css\"\n",[77,2558,2559,2561],{"class":79,"line":325},[77,2560,84],{"class":83},[77,2562,1454],{"class":202},[77,2564,2565],{"class":79,"line":354},[77,2566,2567],{"class":202},"  applyColumnSizingDefaults,\n",[77,2569,2570],{"class":79,"line":364},[77,2571,2572],{"class":202},"  CELL_TYPE_SIZES,\n",[77,2574,2575],{"class":79,"line":371},[77,2576,2577],{"class":202},"  getColumnSize,\n",[77,2579,2580,2582,2584],{"class":79,"line":389},[77,2581,1494],{"class":202},[77,2583,1497],{"class":83},[77,2585,1500],{"class":87},[15,2587,2588,2589,2592,2593,2595],{},"Pass ",[37,2590,2591],{},"applyColumnSizingDefaults(columns)"," to the framework adapter before creating the table so ",[37,2594,820],{}," presets are installed before TanStack resolves its 150px fallback.",[68,2597,2599],{"className":186,"code":2598,"language":188,"meta":73,"style":73},"\u003Cnord-table class=\"n-data-table\">\n  \u003Ctable>\u003C!-- React or Vue owns thead, tbody, rows and cells. -->\u003C\u002Ftable>\n\u003C\u002Fnord-table>\n",[37,2600,2601,2617,2635],{"__ignoreMap":73},[77,2602,2603,2605,2607,2610,2612,2615],{"class":79,"line":80},[77,2604,203],{"class":202},[77,2606,2532],{"class":206},[77,2608,2609],{"class":210}," class",[77,2611,217],{"class":202},[77,2613,2614],{"class":87},"\"n-data-table\"",[77,2616,228],{"class":202},[77,2618,2619,2621,2623,2626,2629,2631,2633],{"class":79,"line":199},[77,2620,305],{"class":202},[77,2622,677],{"class":206},[77,2624,2625],{"class":202},">",[77,2627,2628],{"class":195},"\u003C!-- React or Vue owns thead, tbody, rows and cells. -->",[77,2630,357],{"class":202},[77,2632,677],{"class":206},[77,2634,228],{"class":202},[77,2636,2637,2639,2641],{"class":79,"line":325},[77,2638,357],{"class":202},[77,2640,2532],{"class":206},[77,2642,228],{"class":202},[15,2644,2645],{},"This is the “own your rows on the core” pattern:",[745,2647,2648,2655,2666,2676],{},[118,2649,2650,2651,2654],{},"Shared core: TanStack column definitions, ",[37,2652,2653],{},"ColumnMeta",", sizing presets, filter descriptors and localization.",[118,2656,2657,2658,2661,2662,2665],{},"React: ",[37,2659,2660],{},"useReactTable"," + ",[37,2663,2664],{},"flexRender","; cells are ordinary JSX\u002Frender props.",[118,2667,2668,2669,2661,2672,2675],{},"Vue: ",[37,2670,2671],{},"useVueTable",[37,2673,2674],{},"FlexRender","; cells are ordinary Vue templates, scoped slots or VNodes.",[118,2677,2678,2679,2681],{},"Lit or no-framework consumers: ",[37,2680,2507],{}," remains the complete config-driven renderer.",[15,2683,2684],{},"The repository's React and Vue playgrounds contain side-by-side framework-owned and raw Lit examples. Framework renderers should consume these shared primitives rather than re-deriving column sizes or copying component CSS.",[10,2686,2688],{"id":2687},"renderer-and-application-boundary","Renderer and application boundary",[15,2690,2691],{},"Every renderer stops at presentation and user intent. Application workflows stay in the consuming application:",[677,2693,2694,2704],{},[1517,2695,2696],{},[1520,2697,2698,2701],{},[1523,2699,2700],{},"Responsibility",[1523,2702,2703],{},"Owner",[1533,2705,2706,2714,2721,2729,2736,2743,2750],{},[1520,2707,2708,2711],{},[1538,2709,2710],{},"Render headers, rows, cells, loading\u002Fempty\u002Ferror states",[1538,2712,2713],{},"Renderer",[1520,2715,2716,2719],{},[1538,2717,2718],{},"Emit sorting, filtering, pagination and selection intent",[1538,2720,2713],{},[1520,2722,2723,2726],{},[1538,2724,2725],{},"Data fetching and request cancellation",[1538,2727,2728],{},"Application",[1520,2730,2731,2734],{},[1538,2732,2733],{},"API request\u002Fresponse mapping",[1538,2735,2728],{},[1520,2737,2738,2741],{},[1538,2739,2740],{},"URL sync and navigation state",[1538,2742,2728],{},[1520,2744,2745,2748],{},[1538,2746,2747],{},"User preference persistence and saved views",[1538,2749,2728],{},[1520,2751,2752,2755],{},[1538,2753,2754],{},"CSV\u002FPDF\u002Fprint export and other domain actions",[1538,2756,2728],{},[15,2758,2759],{},"This boundary is the same for the Lit, React, Vue and plain-JavaScript renderers. A renderer emits the next state; the application updates its URL or saved state, performs fetching, and supplies the resulting rows.",[10,2761,2763],{"id":2762},"usage-with-plain-js-jquery-django","Usage with plain JS (jQuery \u002F Django)",[15,2765,2766,2767,2770],{},"Data Table is a standard custom element, so it works anywhere you can run JavaScript — no framework required. Render the empty element from your template, then set its properties from a script and listen for events to re-fetch. This pattern fits a Django template that ships JSON in a ",[37,2768,2769],{},"\u003Cscript type=\"application\u002Fjson\">"," tag, or a jQuery-driven page.",[15,2772,2773,2774,2777,2778,2781,2782,2785,2786,659,2789,2791],{},"The Django adapter belongs in the application, not in the design-system package. Provet's legacy ",[37,2775,2776],{},"aoData"," parameters, ",[37,2779,2780],{},"iSortCol_N"," visual-to-data column remapping, ",[37,2783,2784],{},"{ data, recordsTotal, recordsFiltered }"," responses, filter serialization and saved-filter endpoints are application contracts. Keep that adapter beside the Django API and translate its result into the renderer's ",[37,2787,2788],{},".data",[37,2790,1740],{}," properties. The design system intentionally contains no Provet endpoint, persistence or legacy-wire knowledge.",[68,2793,2795],{"className":186,"code":2794,"language":188,"meta":73,"style":73},"\u003Cnord-data-table caption=\"Patients\" id=\"patients\" manual row-count=\"0\">\u003C\u002Fnord-data-table>\n\n\u003Cscript id=\"patients-data\" type=\"application\u002Fjson\">\n  {{ patients_json|safe }}\n\u003C\u002Fscript>\n\n\u003Cscript type=\"module\">\n  import \"@nordhealth\u002Fcomponents\u002Flib\u002FDataTable\"\n\n  const table = document.querySelector(\"#patients\")\n\n  table.columns = [\n    { accessorKey: \"id\", header: \"ID\", cell: info => info.getValue(), meta: { textAlign: \"end\", cellType: \"number\" } },\n    { accessorKey: \"name\", header: \"Name\", cell: info => info.getValue() },\n    { accessorKey: \"species\", header: \"Species\", cell: info => info.getValue() },\n  ]\n\n  table.filters = [\n    { type: \"search\", key: \"q\", label: \"Search\", placeholder: \"Search patients\" },\n  ]\n\n  \u002F\u002F Initial page rendered by Django.\n  const initial = JSON.parse(document.getElementById(\"patients-data\").textContent)\n  table.data = initial.results\n  table.rowCount = initial.count\n\n  \u002F\u002F Re-fetch whenever the user sorts, pages, or filters. A new intent aborts\n  \u002F\u002F the previous request so a slow response cannot overwrite newer rows.\n  let pending\n  async function reload(params) {\n    pending?.abort()\n    pending = new AbortController()\n    const res = await fetch(\"\u002Fapi\u002Fpatients\u002F?\" + new URLSearchParams(params), {\n      signal: pending.signal,\n    })\n    const page = await res.json()\n    table.data = page.results\n    table.rowCount = page.count\n  }\n\n  let query = {}\n  table.addEventListener(\"sorting-change\", e => {\n    const [sort] = e.detail\n    query = { ...query, ordering: sort ? (sort.desc ? \"-\" : \"\") + sort.id : \"\" }\n    reload(query)\n  })\n  table.addEventListener(\"pagination-change\", e => {\n    query = { ...query, page: e.detail.pageIndex + 1, page_size: e.detail.pageSize }\n    reload(query)\n  })\n  table.addEventListener(\"filters-change\", e => {\n    query = { ...query, ...e.detail.values, page: 1 }\n    reload(query)\n  })\n\u003C\u002Fscript>\n",[37,2796,2797,2830,2834,2856,2861,2869,2873,2887,2893,2897,2915,2919,2927,2966,2992,3018,3022,3026,3035,3064,3069,3074,3080,3111,3121,3132,3137,3143,3149,3158,3178,3190,3206,3239,3245,3251,3271,3282,3293,3299,3304,3317,3340,3359,3410,3419,3425,3445,3467,3474,3479,3499,3523,3530,3535],{"__ignoreMap":73},[77,2798,2799,2801,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821,2824,2826,2828],{"class":79,"line":80},[77,2800,203],{"class":202},[77,2802,207],{"class":206},[77,2804,332],{"class":210},[77,2806,217],{"class":202},[77,2808,337],{"class":87},[77,2810,340],{"class":210},[77,2812,217],{"class":202},[77,2814,345],{"class":87},[77,2816,211],{"class":210},[77,2818,214],{"class":210},[77,2820,217],{"class":202},[77,2822,2823],{"class":87},"\"0\"",[77,2825,223],{"class":202},[77,2827,207],{"class":206},[77,2829,228],{"class":202},[77,2831,2832],{"class":79,"line":199},[77,2833,368],{"emptyLinePlaceholder":367},[77,2835,2836,2838,2840,2842,2844,2847,2849,2851,2854],{"class":79,"line":325},[77,2837,203],{"class":202},[77,2839,376],{"class":206},[77,2841,340],{"class":210},[77,2843,217],{"class":202},[77,2845,2846],{"class":87},"\"patients-data\"",[77,2848,379],{"class":210},[77,2850,217],{"class":202},[77,2852,2853],{"class":87},"\"application\u002Fjson\"",[77,2855,228],{"class":202},[77,2857,2858],{"class":79,"line":354},[77,2859,2860],{"class":202},"  {{ patients_json|safe }}\n",[77,2862,2863,2865,2867],{"class":79,"line":364},[77,2864,357],{"class":202},[77,2866,376],{"class":206},[77,2868,228],{"class":202},[77,2870,2871],{"class":79,"line":371},[77,2872,368],{"emptyLinePlaceholder":367},[77,2874,2875,2877,2879,2881,2883,2885],{"class":79,"line":389},[77,2876,203],{"class":202},[77,2878,376],{"class":206},[77,2880,379],{"class":210},[77,2882,217],{"class":202},[77,2884,384],{"class":87},[77,2886,228],{"class":202},[77,2888,2889,2891],{"class":79,"line":397},[77,2890,392],{"class":83},[77,2892,88],{"class":87},[77,2894,2895],{"class":79,"line":425},[77,2896,368],{"emptyLinePlaceholder":367},[77,2898,2899,2901,2903,2905,2907,2909,2911,2913],{"class":79,"line":436},[77,2900,400],{"class":83},[77,2902,404],{"class":403},[77,2904,407],{"class":83},[77,2906,410],{"class":202},[77,2908,413],{"class":210},[77,2910,416],{"class":202},[77,2912,419],{"class":87},[77,2914,422],{"class":202},[77,2916,2917],{"class":79,"line":475},[77,2918,368],{"emptyLinePlaceholder":367},[77,2920,2921,2923,2925],{"class":79,"line":504},[77,2922,428],{"class":202},[77,2924,217],{"class":83},[77,2926,433],{"class":202},[77,2928,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2954,2957,2960,2963],{"class":79,"line":533},[77,2930,439],{"class":202},[77,2932,442],{"class":87},[77,2934,445],{"class":202},[77,2936,448],{"class":87},[77,2938,40],{"class":202},[77,2940,453],{"class":210},[77,2942,456],{"class":202},[77,2944,460],{"class":459},[77,2946,463],{"class":83},[77,2948,466],{"class":202},[77,2950,469],{"class":210},[77,2952,2953],{"class":202},"(), meta: { textAlign: ",[77,2955,2956],{"class":87},"\"end\"",[77,2958,2959],{"class":202},", cellType: ",[77,2961,2962],{"class":87},"\"number\"",[77,2964,2965],{"class":202}," } },\n",[77,2967,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990],{"class":79,"line":539},[77,2969,439],{"class":202},[77,2971,480],{"class":87},[77,2973,445],{"class":202},[77,2975,485],{"class":87},[77,2977,40],{"class":202},[77,2979,453],{"class":210},[77,2981,456],{"class":202},[77,2983,460],{"class":459},[77,2985,463],{"class":83},[77,2987,466],{"class":202},[77,2989,469],{"class":210},[77,2991,472],{"class":202},[77,2993,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016],{"class":79,"line":549},[77,2995,439],{"class":202},[77,2997,509],{"class":87},[77,2999,445],{"class":202},[77,3001,514],{"class":87},[77,3003,40],{"class":202},[77,3005,453],{"class":210},[77,3007,456],{"class":202},[77,3009,460],{"class":459},[77,3011,463],{"class":83},[77,3013,466],{"class":202},[77,3015,469],{"class":210},[77,3017,472],{"class":202},[77,3019,3020],{"class":79,"line":573},[77,3021,536],{"class":202},[77,3023,3024],{"class":79,"line":593},[77,3025,368],{"emptyLinePlaceholder":367},[77,3027,3028,3031,3033],{"class":79,"line":598},[77,3029,3030],{"class":202},"  table.filters ",[77,3032,217],{"class":83},[77,3034,433],{"class":202},[77,3036,3038,3041,3044,3047,3050,3053,3056,3059,3062],{"class":79,"line":3037},19,[77,3039,3040],{"class":202},"    { type: ",[77,3042,3043],{"class":87},"\"search\"",[77,3045,3046],{"class":202},", key: ",[77,3048,3049],{"class":87},"\"q\"",[77,3051,3052],{"class":202},", label: ",[77,3054,3055],{"class":87},"\"Search\"",[77,3057,3058],{"class":202},", placeholder: ",[77,3060,3061],{"class":87},"\"Search patients\"",[77,3063,570],{"class":202},[77,3065,3067],{"class":79,"line":3066},20,[77,3068,536],{"class":202},[77,3070,3072],{"class":79,"line":3071},21,[77,3073,368],{"emptyLinePlaceholder":367},[77,3075,3077],{"class":79,"line":3076},22,[77,3078,3079],{"class":195},"  \u002F\u002F Initial page rendered by Django.\n",[77,3081,3083,3085,3088,3090,3093,3095,3098,3101,3104,3106,3108],{"class":79,"line":3082},23,[77,3084,400],{"class":83},[77,3086,3087],{"class":403}," initial",[77,3089,407],{"class":83},[77,3091,3092],{"class":403}," JSON",[77,3094,63],{"class":202},[77,3096,3097],{"class":210},"parse",[77,3099,3100],{"class":202},"(document.",[77,3102,3103],{"class":210},"getElementById",[77,3105,416],{"class":202},[77,3107,2846],{"class":87},[77,3109,3110],{"class":202},").textContent)\n",[77,3112,3114,3116,3118],{"class":79,"line":3113},24,[77,3115,542],{"class":202},[77,3117,217],{"class":83},[77,3119,3120],{"class":202}," initial.results\n",[77,3122,3124,3127,3129],{"class":79,"line":3123},25,[77,3125,3126],{"class":202},"  table.rowCount ",[77,3128,217],{"class":83},[77,3130,3131],{"class":202}," initial.count\n",[77,3133,3135],{"class":79,"line":3134},26,[77,3136,368],{"emptyLinePlaceholder":367},[77,3138,3140],{"class":79,"line":3139},27,[77,3141,3142],{"class":195},"  \u002F\u002F Re-fetch whenever the user sorts, pages, or filters. A new intent aborts\n",[77,3144,3146],{"class":79,"line":3145},28,[77,3147,3148],{"class":195},"  \u002F\u002F the previous request so a slow response cannot overwrite newer rows.\n",[77,3150,3152,3155],{"class":79,"line":3151},29,[77,3153,3154],{"class":83},"  let",[77,3156,3157],{"class":202}," pending\n",[77,3159,3161,3164,3167,3170,3172,3175],{"class":79,"line":3160},30,[77,3162,3163],{"class":83},"  async",[77,3165,3166],{"class":83}," function",[77,3168,3169],{"class":210}," reload",[77,3171,416],{"class":202},[77,3173,3174],{"class":459},"params",[77,3176,3177],{"class":202},") {\n",[77,3179,3181,3184,3187],{"class":79,"line":3180},31,[77,3182,3183],{"class":202},"    pending?.",[77,3185,3186],{"class":210},"abort",[77,3188,3189],{"class":202},"()\n",[77,3191,3193,3196,3198,3201,3204],{"class":79,"line":3192},32,[77,3194,3195],{"class":202},"    pending ",[77,3197,217],{"class":83},[77,3199,3200],{"class":83}," new",[77,3202,3203],{"class":210}," AbortController",[77,3205,3189],{"class":202},[77,3207,3209,3212,3215,3217,3220,3223,3225,3228,3231,3233,3236],{"class":79,"line":3208},33,[77,3210,3211],{"class":83},"    const",[77,3213,3214],{"class":403}," res",[77,3216,407],{"class":83},[77,3218,3219],{"class":83}," await",[77,3221,3222],{"class":210}," fetch",[77,3224,416],{"class":202},[77,3226,3227],{"class":87},"\"\u002Fapi\u002Fpatients\u002F?\"",[77,3229,3230],{"class":83}," +",[77,3232,3200],{"class":83},[77,3234,3235],{"class":210}," URLSearchParams",[77,3237,3238],{"class":202},"(params), {\n",[77,3240,3242],{"class":79,"line":3241},34,[77,3243,3244],{"class":202},"      signal: pending.signal,\n",[77,3246,3248],{"class":79,"line":3247},35,[77,3249,3250],{"class":202},"    })\n",[77,3252,3254,3256,3259,3261,3263,3266,3269],{"class":79,"line":3253},36,[77,3255,3211],{"class":83},[77,3257,3258],{"class":403}," page",[77,3260,407],{"class":83},[77,3262,3219],{"class":83},[77,3264,3265],{"class":202}," res.",[77,3267,3268],{"class":210},"json",[77,3270,3189],{"class":202},[77,3272,3274,3277,3279],{"class":79,"line":3273},37,[77,3275,3276],{"class":202},"    table.data ",[77,3278,217],{"class":83},[77,3280,3281],{"class":202}," page.results\n",[77,3283,3285,3288,3290],{"class":79,"line":3284},38,[77,3286,3287],{"class":202},"    table.rowCount ",[77,3289,217],{"class":83},[77,3291,3292],{"class":202}," page.count\n",[77,3294,3296],{"class":79,"line":3295},39,[77,3297,3298],{"class":202},"  }\n",[77,3300,3302],{"class":79,"line":3301},40,[77,3303,368],{"emptyLinePlaceholder":367},[77,3305,3307,3309,3312,3314],{"class":79,"line":3306},41,[77,3308,3154],{"class":83},[77,3310,3311],{"class":202}," query ",[77,3313,217],{"class":83},[77,3315,3316],{"class":202}," {}\n",[77,3318,3320,3323,3326,3328,3331,3333,3336,3338],{"class":79,"line":3319},42,[77,3321,3322],{"class":202},"  table.",[77,3324,3325],{"class":210},"addEventListener",[77,3327,416],{"class":202},[77,3329,3330],{"class":87},"\"sorting-change\"",[77,3332,40],{"class":202},[77,3334,3335],{"class":459},"e",[77,3337,463],{"class":83},[77,3339,1454],{"class":202},[77,3341,3343,3345,3348,3351,3354,3356],{"class":79,"line":3342},43,[77,3344,3211],{"class":83},[77,3346,3347],{"class":202}," [",[77,3349,3350],{"class":403},"sort",[77,3352,3353],{"class":202},"] ",[77,3355,217],{"class":83},[77,3357,3358],{"class":202}," e.detail\n",[77,3360,3362,3365,3367,3370,3373,3376,3379,3382,3384,3387,3390,3393,3396,3399,3402,3405,3407],{"class":79,"line":3361},44,[77,3363,3364],{"class":202},"    query ",[77,3366,217],{"class":83},[77,3368,3369],{"class":202}," { ",[77,3371,3372],{"class":83},"...",[77,3374,3375],{"class":202},"query, ordering: sort ",[77,3377,3378],{"class":83},"?",[77,3380,3381],{"class":202}," (sort.desc ",[77,3383,3378],{"class":83},[77,3385,3386],{"class":87}," \"-\"",[77,3388,3389],{"class":83}," :",[77,3391,3392],{"class":87}," \"\"",[77,3394,3395],{"class":202},") ",[77,3397,3398],{"class":83},"+",[77,3400,3401],{"class":202}," sort.id ",[77,3403,3404],{"class":83},":",[77,3406,3392],{"class":87},[77,3408,3409],{"class":202}," }\n",[77,3411,3413,3416],{"class":79,"line":3412},45,[77,3414,3415],{"class":210},"    reload",[77,3417,3418],{"class":202},"(query)\n",[77,3420,3422],{"class":79,"line":3421},46,[77,3423,3424],{"class":202},"  })\n",[77,3426,3428,3430,3432,3434,3437,3439,3441,3443],{"class":79,"line":3427},47,[77,3429,3322],{"class":202},[77,3431,3325],{"class":210},[77,3433,416],{"class":202},[77,3435,3436],{"class":87},"\"pagination-change\"",[77,3438,40],{"class":202},[77,3440,3335],{"class":459},[77,3442,463],{"class":83},[77,3444,1454],{"class":202},[77,3446,3448,3450,3452,3454,3456,3459,3461,3464],{"class":79,"line":3447},48,[77,3449,3364],{"class":202},[77,3451,217],{"class":83},[77,3453,3369],{"class":202},[77,3455,3372],{"class":83},[77,3457,3458],{"class":202},"query, page: e.detail.pageIndex ",[77,3460,3398],{"class":83},[77,3462,3463],{"class":403}," 1",[77,3465,3466],{"class":202},", page_size: e.detail.pageSize }\n",[77,3468,3470,3472],{"class":79,"line":3469},49,[77,3471,3415],{"class":210},[77,3473,3418],{"class":202},[77,3475,3477],{"class":79,"line":3476},50,[77,3478,3424],{"class":202},[77,3480,3482,3484,3486,3488,3491,3493,3495,3497],{"class":79,"line":3481},51,[77,3483,3322],{"class":202},[77,3485,3325],{"class":210},[77,3487,416],{"class":202},[77,3489,3490],{"class":87},"\"filters-change\"",[77,3492,40],{"class":202},[77,3494,3335],{"class":459},[77,3496,463],{"class":83},[77,3498,1454],{"class":202},[77,3500,3502,3504,3506,3508,3510,3513,3515,3518,3521],{"class":79,"line":3501},52,[77,3503,3364],{"class":202},[77,3505,217],{"class":83},[77,3507,3369],{"class":202},[77,3509,3372],{"class":83},[77,3511,3512],{"class":202},"query, ",[77,3514,3372],{"class":83},[77,3516,3517],{"class":202},"e.detail.values, page: ",[77,3519,3520],{"class":403},"1",[77,3522,3409],{"class":202},[77,3524,3526,3528],{"class":79,"line":3525},53,[77,3527,3415],{"class":210},[77,3529,3418],{"class":202},[77,3531,3533],{"class":79,"line":3532},54,[77,3534,3424],{"class":202},[77,3536,3538,3540,3542],{"class":79,"line":3537},55,[77,3539,357],{"class":202},[77,3541,376],{"class":206},[77,3543,228],{"class":202},[15,3545,3546],{},"With jQuery the only difference is how you reach the element and bind events — the property\u002Fevent contract is identical:",[68,3548,3550],{"className":70,"code":3549,"language":72,"meta":73,"style":73},"const table = $(\"#patients\")[0]\ntable.columns = columns\ntable.data = rows\n\n$(table).on(\"sorting-change\", e => {\n  reload({ ordering: toOrdering(e.originalEvent.detail) })\n})\n",[37,3551,3552,3577,3587,3597,3601,3624,3638],{"__ignoreMap":73},[77,3553,3554,3557,3559,3561,3564,3566,3568,3571,3574],{"class":79,"line":80},[77,3555,3556],{"class":83},"const",[77,3558,404],{"class":403},[77,3560,407],{"class":83},[77,3562,3563],{"class":210}," $",[77,3565,416],{"class":202},[77,3567,419],{"class":87},[77,3569,3570],{"class":202},")[",[77,3572,3573],{"class":403},"0",[77,3575,3576],{"class":202},"]\n",[77,3578,3579,3582,3584],{"class":79,"line":199},[77,3580,3581],{"class":202},"table.columns ",[77,3583,217],{"class":83},[77,3585,3586],{"class":202}," columns\n",[77,3588,3589,3592,3594],{"class":79,"line":325},[77,3590,3591],{"class":202},"table.data ",[77,3593,217],{"class":83},[77,3595,3596],{"class":202}," rows\n",[77,3598,3599],{"class":79,"line":354},[77,3600,368],{"emptyLinePlaceholder":367},[77,3602,3603,3606,3609,3612,3614,3616,3618,3620,3622],{"class":79,"line":364},[77,3604,3605],{"class":210},"$",[77,3607,3608],{"class":202},"(table).",[77,3610,3611],{"class":210},"on",[77,3613,416],{"class":202},[77,3615,3330],{"class":87},[77,3617,40],{"class":202},[77,3619,3335],{"class":459},[77,3621,463],{"class":83},[77,3623,1454],{"class":202},[77,3625,3626,3629,3632,3635],{"class":79,"line":371},[77,3627,3628],{"class":210},"  reload",[77,3630,3631],{"class":202},"({ ordering: ",[77,3633,3634],{"class":210},"toOrdering",[77,3636,3637],{"class":202},"(e.originalEvent.detail) })\n",[77,3639,3640],{"class":79,"line":389},[77,3641,3642],{"class":202},"})\n",[15,3644,3645,3646,3648,3649,3652],{},"Because columns and data are object\u002Farray ",[32,3647,1415],{},", always assign them with JS (",[37,3650,3651],{},"table.columns = …",") — they cannot be passed as HTML attributes.",[10,3654,3656],{"id":3655},"usage-with-vue","Usage with Vue",[15,3658,3659,3660,1423,3663,3666,3667,3670,3671,3673,3674,63],{},"In Vue, bind the object\u002Farray properties with ",[37,3661,3662],{},".prop",[37,3664,3665],{},"v-bind"," of a ref) and listen for the kebab-case events with ",[37,3668,3669],{},"@",". Vue assigns non-string bindings as DOM properties automatically when the value is non-primitive, but ",[37,3672,3662],{}," makes the intent explicit. The TanStack types come straight from ",[37,3675,1433],{},[68,3677,3681],{"className":3678,"code":3679,"language":3680,"meta":73,"style":73},"language-vue shiki shiki-themes github-light github-dark","\u003Cscript setup lang=\"ts\">\nimport { ref } from \"vue\"\nimport { badgeCell, type BadgeVariant } from \"@nordhealth\u002Fcomponents\"\nimport type { ColumnDef, SortingState, PaginationState } from \"@nordhealth\u002Fcomponents\"\nimport \"@nordhealth\u002Fcomponents\u002Flib\u002FDataTable\"\n\ninterface Patient {\n  id: number\n  name: string\n  species: string\n  status: \"active\" | \"inactive\"\n}\n\nconst variant: Record\u003CPatient[\"status\"], BadgeVariant> = {\n  active: \"success\",\n  inactive: \"warning\",\n}\n\nconst columns: ColumnDef\u003CPatient, any>[] = [\n  { accessorKey: \"name\", header: \"Name\", cell: info => info.getValue() },\n  { accessorKey: \"species\", header: \"Species\", cell: info => info.getValue() },\n  {\n    accessorKey: \"status\",\n    header: \"Status\",\n    cell: info => badgeCell(info.getValue(), variant[info.getValue() as Patient[\"status\"]]),\n  },\n]\n\nconst rows = ref\u003CPatient[]>([])\nconst total = ref(0)\nconst state = ref({ sorting: [] as SortingState, pagination: { pageIndex: 0, pageSize: 20 } as PaginationState })\n\nasync function reload() {\n  const res = await fetch(`\u002Fapi\u002Fpatients\u002F?${new URLSearchParams({\n    page: String(state.value.pagination.pageIndex + 1),\n    page_size: String(state.value.pagination.pageSize),\n  })}`)\n  const page = await res.json()\n  rows.value = page.results\n  total.value = page.count\n}\n\nfunction onSorting(e: CustomEvent\u003CSortingState>) {\n  state.value = { ...state.value, sorting: e.detail }\n  reload()\n}\n\nfunction onPagination(e: CustomEvent\u003CPaginationState>) {\n  state.value = { ...state.value, pagination: e.detail }\n  reload()\n}\n\nreload()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cnord-data-table\n    caption=\"Patients\"\n    manual\n    :row-count=\"total\"\n    .columns=\"columns\"\n    .data=\"rows\"\n    .state=\"state\"\n    @sorting-change=\"onSorting\"\n    @pagination-change=\"onPagination\"\n  \u002F>\n\u003C\u002Ftemplate>\n","vue",[37,3682,3683,3702,3714,3730,3743,3749,3753,3763,3773,3783,3792,3808,3813,3817,3852,3863,3873,3877,3881,3909,3936,3962,3967,3976,3986,4025,4030,4034,4038,4057,4074,4115,4119,4131,4156,4189,4214,4224,4240,4249,4258,4262,4266,4290,4304,4310,4314,4318,4339,4352,4358,4362,4366,4373,4381,4385,4395,4403,4414,4420,4431,4442,4453,4464,4475,4486,4492],{"__ignoreMap":73},[77,3684,3685,3687,3689,3692,3695,3697,3700],{"class":79,"line":80},[77,3686,203],{"class":202},[77,3688,376],{"class":206},[77,3690,3691],{"class":210}," setup",[77,3693,3694],{"class":210}," lang",[77,3696,217],{"class":202},[77,3698,3699],{"class":87},"\"ts\"",[77,3701,228],{"class":202},[77,3703,3704,3706,3709,3711],{"class":79,"line":199},[77,3705,84],{"class":83},[77,3707,3708],{"class":202}," { ref } ",[77,3710,1497],{"class":83},[77,3712,3713],{"class":87}," \"vue\"\n",[77,3715,3716,3718,3721,3723,3726,3728],{"class":79,"line":325},[77,3717,84],{"class":83},[77,3719,3720],{"class":202}," { badgeCell, ",[77,3722,1652],{"class":83},[77,3724,3725],{"class":202}," BadgeVariant } ",[77,3727,1497],{"class":83},[77,3729,1500],{"class":87},[77,3731,3732,3734,3736,3739,3741],{"class":79,"line":354},[77,3733,84],{"class":83},[77,3735,379],{"class":83},[77,3737,3738],{"class":202}," { ColumnDef, SortingState, PaginationState } ",[77,3740,1497],{"class":83},[77,3742,1500],{"class":87},[77,3744,3745,3747],{"class":79,"line":364},[77,3746,84],{"class":83},[77,3748,88],{"class":87},[77,3750,3751],{"class":79,"line":371},[77,3752,368],{"emptyLinePlaceholder":367},[77,3754,3755,3758,3761],{"class":79,"line":389},[77,3756,3757],{"class":83},"interface",[77,3759,3760],{"class":210}," Patient",[77,3762,1454],{"class":202},[77,3764,3765,3768,3770],{"class":79,"line":397},[77,3766,3767],{"class":459},"  id",[77,3769,3404],{"class":83},[77,3771,3772],{"class":403}," number\n",[77,3774,3775,3778,3780],{"class":79,"line":425},[77,3776,3777],{"class":459},"  name",[77,3779,3404],{"class":83},[77,3781,3782],{"class":403}," string\n",[77,3784,3785,3788,3790],{"class":79,"line":436},[77,3786,3787],{"class":459},"  species",[77,3789,3404],{"class":83},[77,3791,3782],{"class":403},[77,3793,3794,3797,3799,3802,3805],{"class":79,"line":475},[77,3795,3796],{"class":459},"  status",[77,3798,3404],{"class":83},[77,3800,3801],{"class":87}," \"active\"",[77,3803,3804],{"class":83}," |",[77,3806,3807],{"class":87}," \"inactive\"\n",[77,3809,3810],{"class":79,"line":504},[77,3811,3812],{"class":202},"}\n",[77,3814,3815],{"class":79,"line":533},[77,3816,368],{"emptyLinePlaceholder":367},[77,3818,3819,3821,3823,3825,3828,3830,3833,3836,3839,3842,3845,3848,3850],{"class":79,"line":539},[77,3820,3556],{"class":83},[77,3822,1005],{"class":403},[77,3824,3404],{"class":83},[77,3826,3827],{"class":210}," Record",[77,3829,203],{"class":202},[77,3831,3832],{"class":210},"Patient",[77,3834,3835],{"class":202},"[",[77,3837,3838],{"class":87},"\"status\"",[77,3840,3841],{"class":202},"], ",[77,3843,3844],{"class":210},"BadgeVariant",[77,3846,3847],{"class":202},"> ",[77,3849,217],{"class":83},[77,3851,1454],{"class":202},[77,3853,3854,3857,3860],{"class":79,"line":549},[77,3855,3856],{"class":202},"  active: ",[77,3858,3859],{"class":87},"\"success\"",[77,3861,3862],{"class":202},",\n",[77,3864,3865,3868,3871],{"class":79,"line":573},[77,3866,3867],{"class":202},"  inactive: ",[77,3869,3870],{"class":87},"\"warning\"",[77,3872,3862],{"class":202},[77,3874,3875],{"class":79,"line":593},[77,3876,3812],{"class":202},[77,3878,3879],{"class":79,"line":598},[77,3880,368],{"emptyLinePlaceholder":367},[77,3882,3883,3885,3888,3890,3893,3895,3897,3899,3902,3905,3907],{"class":79,"line":3037},[77,3884,3556],{"class":83},[77,3886,3887],{"class":403}," columns",[77,3889,3404],{"class":83},[77,3891,3892],{"class":210}," ColumnDef",[77,3894,203],{"class":202},[77,3896,3832],{"class":210},[77,3898,40],{"class":202},[77,3900,3901],{"class":403},"any",[77,3903,3904],{"class":202},">[] ",[77,3906,217],{"class":83},[77,3908,433],{"class":202},[77,3910,3911,3914,3916,3918,3920,3922,3924,3926,3928,3930,3932,3934],{"class":79,"line":3066},[77,3912,3913],{"class":202},"  { accessorKey: ",[77,3915,480],{"class":87},[77,3917,445],{"class":202},[77,3919,485],{"class":87},[77,3921,40],{"class":202},[77,3923,453],{"class":210},[77,3925,456],{"class":202},[77,3927,460],{"class":459},[77,3929,463],{"class":83},[77,3931,466],{"class":202},[77,3933,469],{"class":210},[77,3935,472],{"class":202},[77,3937,3938,3940,3942,3944,3946,3948,3950,3952,3954,3956,3958,3960],{"class":79,"line":3071},[77,3939,3913],{"class":202},[77,3941,509],{"class":87},[77,3943,445],{"class":202},[77,3945,514],{"class":87},[77,3947,40],{"class":202},[77,3949,453],{"class":210},[77,3951,456],{"class":202},[77,3953,460],{"class":459},[77,3955,463],{"class":83},[77,3957,466],{"class":202},[77,3959,469],{"class":210},[77,3961,472],{"class":202},[77,3963,3964],{"class":79,"line":3076},[77,3965,3966],{"class":202},"  {\n",[77,3968,3969,3972,3974],{"class":79,"line":3082},[77,3970,3971],{"class":202},"    accessorKey: ",[77,3973,3838],{"class":87},[77,3975,3862],{"class":202},[77,3977,3978,3981,3984],{"class":79,"line":3113},[77,3979,3980],{"class":202},"    header: ",[77,3982,3983],{"class":87},"\"Status\"",[77,3985,3862],{"class":202},[77,3987,3988,3991,3993,3995,3997,4000,4003,4005,4008,4010,4013,4016,4018,4020,4022],{"class":79,"line":3123},[77,3989,3990],{"class":210},"    cell",[77,3992,456],{"class":202},[77,3994,460],{"class":459},[77,3996,463],{"class":83},[77,3998,3999],{"class":210}," badgeCell",[77,4001,4002],{"class":202},"(info.",[77,4004,469],{"class":210},[77,4006,4007],{"class":202},"(), variant[info.",[77,4009,469],{"class":210},[77,4011,4012],{"class":202},"() ",[77,4014,4015],{"class":83},"as",[77,4017,3760],{"class":210},[77,4019,3835],{"class":202},[77,4021,3838],{"class":87},[77,4023,4024],{"class":202},"]]),\n",[77,4026,4027],{"class":79,"line":3134},[77,4028,4029],{"class":202},"  },\n",[77,4031,4032],{"class":79,"line":3139},[77,4033,3576],{"class":202},[77,4035,4036],{"class":79,"line":3145},[77,4037,368],{"emptyLinePlaceholder":367},[77,4039,4040,4042,4045,4047,4050,4052,4054],{"class":79,"line":3151},[77,4041,3556],{"class":83},[77,4043,4044],{"class":403}," rows",[77,4046,407],{"class":83},[77,4048,4049],{"class":210}," ref",[77,4051,203],{"class":202},[77,4053,3832],{"class":210},[77,4055,4056],{"class":202},"[]>([])\n",[77,4058,4059,4061,4064,4066,4068,4070,4072],{"class":79,"line":3160},[77,4060,3556],{"class":83},[77,4062,4063],{"class":403}," total",[77,4065,407],{"class":83},[77,4067,4049],{"class":210},[77,4069,416],{"class":202},[77,4071,3573],{"class":403},[77,4073,422],{"class":202},[77,4075,4076,4078,4081,4083,4085,4088,4090,4093,4096,4098,4101,4104,4107,4109,4112],{"class":79,"line":3180},[77,4077,3556],{"class":83},[77,4079,4080],{"class":403}," state",[77,4082,407],{"class":83},[77,4084,4049],{"class":210},[77,4086,4087],{"class":202},"({ sorting: [] ",[77,4089,4015],{"class":83},[77,4091,4092],{"class":210}," SortingState",[77,4094,4095],{"class":202},", pagination: { pageIndex: ",[77,4097,3573],{"class":403},[77,4099,4100],{"class":202},", pageSize: ",[77,4102,4103],{"class":403},"20",[77,4105,4106],{"class":202}," } ",[77,4108,4015],{"class":83},[77,4110,4111],{"class":210}," PaginationState",[77,4113,4114],{"class":202}," })\n",[77,4116,4117],{"class":79,"line":3192},[77,4118,368],{"emptyLinePlaceholder":367},[77,4120,4121,4124,4126,4128],{"class":79,"line":3208},[77,4122,4123],{"class":83},"async",[77,4125,3166],{"class":83},[77,4127,3169],{"class":210},[77,4129,4130],{"class":202},"() {\n",[77,4132,4133,4135,4137,4139,4141,4143,4145,4148,4151,4153],{"class":79,"line":3241},[77,4134,400],{"class":83},[77,4136,3214],{"class":403},[77,4138,407],{"class":83},[77,4140,3219],{"class":83},[77,4142,3222],{"class":210},[77,4144,416],{"class":202},[77,4146,4147],{"class":87},"`\u002Fapi\u002Fpatients\u002F?${",[77,4149,4150],{"class":83},"new",[77,4152,3235],{"class":210},[77,4154,4155],{"class":87},"({\n",[77,4157,4158,4161,4164,4166,4168,4170,4173,4175,4177,4179,4182,4184,4186],{"class":79,"line":3247},[77,4159,4160],{"class":87},"    page: ",[77,4162,4163],{"class":210},"String",[77,4165,416],{"class":87},[77,4167,47],{"class":202},[77,4169,63],{"class":87},[77,4171,4172],{"class":202},"value",[77,4174,63],{"class":87},[77,4176,641],{"class":202},[77,4178,63],{"class":87},[77,4180,4181],{"class":202},"pageIndex",[77,4183,3230],{"class":83},[77,4185,3463],{"class":403},[77,4187,4188],{"class":87},"),\n",[77,4190,4191,4194,4196,4198,4200,4202,4204,4206,4208,4210,4212],{"class":79,"line":3253},[77,4192,4193],{"class":87},"    page_size: ",[77,4195,4163],{"class":210},[77,4197,416],{"class":87},[77,4199,47],{"class":202},[77,4201,63],{"class":87},[77,4203,4172],{"class":202},[77,4205,63],{"class":87},[77,4207,641],{"class":202},[77,4209,63],{"class":87},[77,4211,1646],{"class":202},[77,4213,4188],{"class":87},[77,4215,4216,4219,4222],{"class":79,"line":3273},[77,4217,4218],{"class":87},"  })",[77,4220,4221],{"class":87},"}`",[77,4223,422],{"class":202},[77,4225,4226,4228,4230,4232,4234,4236,4238],{"class":79,"line":3284},[77,4227,400],{"class":83},[77,4229,3258],{"class":403},[77,4231,407],{"class":83},[77,4233,3219],{"class":83},[77,4235,3265],{"class":202},[77,4237,3268],{"class":210},[77,4239,3189],{"class":202},[77,4241,4242,4245,4247],{"class":79,"line":3295},[77,4243,4244],{"class":202},"  rows.value ",[77,4246,217],{"class":83},[77,4248,3281],{"class":202},[77,4250,4251,4254,4256],{"class":79,"line":3301},[77,4252,4253],{"class":202},"  total.value ",[77,4255,217],{"class":83},[77,4257,3292],{"class":202},[77,4259,4260],{"class":79,"line":3306},[77,4261,3812],{"class":202},[77,4263,4264],{"class":79,"line":3319},[77,4265,368],{"emptyLinePlaceholder":367},[77,4267,4268,4271,4274,4276,4278,4280,4283,4285,4287],{"class":79,"line":3342},[77,4269,4270],{"class":83},"function",[77,4272,4273],{"class":210}," onSorting",[77,4275,416],{"class":202},[77,4277,3335],{"class":459},[77,4279,3404],{"class":83},[77,4281,4282],{"class":210}," CustomEvent",[77,4284,203],{"class":202},[77,4286,239],{"class":210},[77,4288,4289],{"class":202},">) {\n",[77,4291,4292,4295,4297,4299,4301],{"class":79,"line":3361},[77,4293,4294],{"class":202},"  state.value ",[77,4296,217],{"class":83},[77,4298,3369],{"class":202},[77,4300,3372],{"class":83},[77,4302,4303],{"class":202},"state.value, sorting: e.detail }\n",[77,4305,4306,4308],{"class":79,"line":3412},[77,4307,3628],{"class":210},[77,4309,3189],{"class":202},[77,4311,4312],{"class":79,"line":3421},[77,4313,3812],{"class":202},[77,4315,4316],{"class":79,"line":3427},[77,4317,368],{"emptyLinePlaceholder":367},[77,4319,4320,4322,4325,4327,4329,4331,4333,4335,4337],{"class":79,"line":3447},[77,4321,4270],{"class":83},[77,4323,4324],{"class":210}," onPagination",[77,4326,416],{"class":202},[77,4328,3335],{"class":459},[77,4330,3404],{"class":83},[77,4332,4282],{"class":210},[77,4334,203],{"class":202},[77,4336,243],{"class":210},[77,4338,4289],{"class":202},[77,4340,4341,4343,4345,4347,4349],{"class":79,"line":3469},[77,4342,4294],{"class":202},[77,4344,217],{"class":83},[77,4346,3369],{"class":202},[77,4348,3372],{"class":83},[77,4350,4351],{"class":202},"state.value, pagination: e.detail }\n",[77,4353,4354,4356],{"class":79,"line":3476},[77,4355,3628],{"class":210},[77,4357,3189],{"class":202},[77,4359,4360],{"class":79,"line":3481},[77,4361,3812],{"class":202},[77,4363,4364],{"class":79,"line":3501},[77,4365,368],{"emptyLinePlaceholder":367},[77,4367,4368,4371],{"class":79,"line":3525},[77,4369,4370],{"class":210},"reload",[77,4372,3189],{"class":202},[77,4374,4375,4377,4379],{"class":79,"line":3532},[77,4376,357],{"class":202},[77,4378,376],{"class":206},[77,4380,228],{"class":202},[77,4382,4383],{"class":79,"line":3537},[77,4384,368],{"emptyLinePlaceholder":367},[77,4386,4388,4390,4393],{"class":79,"line":4387},56,[77,4389,203],{"class":202},[77,4391,4392],{"class":206},"template",[77,4394,228],{"class":202},[77,4396,4398,4400],{"class":79,"line":4397},57,[77,4399,305],{"class":202},[77,4401,4402],{"class":206},"nord-data-table\n",[77,4404,4406,4409,4411],{"class":79,"line":4405},58,[77,4407,4408],{"class":210},"    caption",[77,4410,217],{"class":202},[77,4412,4413],{"class":87},"\"Patients\"\n",[77,4415,4417],{"class":79,"line":4416},59,[77,4418,4419],{"class":210},"    manual\n",[77,4421,4423,4426,4428],{"class":79,"line":4422},60,[77,4424,4425],{"class":210},"    :row-count",[77,4427,217],{"class":202},[77,4429,4430],{"class":87},"\"total\"\n",[77,4432,4434,4437,4439],{"class":79,"line":4433},61,[77,4435,4436],{"class":210},"    .columns",[77,4438,217],{"class":202},[77,4440,4441],{"class":87},"\"columns\"\n",[77,4443,4445,4448,4450],{"class":79,"line":4444},62,[77,4446,4447],{"class":210},"    .data",[77,4449,217],{"class":202},[77,4451,4452],{"class":87},"\"rows\"\n",[77,4454,4456,4459,4461],{"class":79,"line":4455},63,[77,4457,4458],{"class":210},"    .state",[77,4460,217],{"class":202},[77,4462,4463],{"class":87},"\"state\"\n",[77,4465,4467,4470,4472],{"class":79,"line":4466},64,[77,4468,4469],{"class":210},"    @sorting-change",[77,4471,217],{"class":202},[77,4473,4474],{"class":87},"\"onSorting\"\n",[77,4476,4478,4481,4483],{"class":79,"line":4477},65,[77,4479,4480],{"class":210},"    @pagination-change",[77,4482,217],{"class":202},[77,4484,4485],{"class":87},"\"onPagination\"\n",[77,4487,4489],{"class":79,"line":4488},66,[77,4490,4491],{"class":202},"  \u002F>\n",[77,4493,4495,4497,4499],{"class":79,"line":4494},67,[77,4496,357],{"class":202},[77,4498,4392],{"class":206},[77,4500,228],{"class":202},[15,4502,4503,4504,4507,4508,4511,4512,721,4515,721,4517,4520],{},"If you use ",[37,4505,4506],{},"@vue\u002Fcompiler-dom","'s custom-element handling (",[37,4509,4510],{},"isCustomElement","), the ",[37,4513,4514],{},".columns",[37,4516,2788],{},[37,4518,4519],{},".state"," bindings forward to DOM properties so the table gets real objects, not stringified attributes.",[10,4522,4524],{"id":4523},"accessibility","Accessibility",[745,4526,4527,4537,4548,4556,4559,4565,4578],{},[118,4528,4529,4530,4532,4533,4536],{},"Always set a ",[37,4531,94],{},". It is rendered as a visually-hidden ",[37,4534,4535],{},"\u003Ccaption>"," so screen-reader users hear what the table contains, while sighted users rely on the surrounding heading.",[118,4538,4539,4540,4543,4544,4547],{},"The host has ",[37,4541,4542],{},"role=\"region\"",", so screen-reader users can jump to the table as a landmark; give it a heading or ",[37,4545,4546],{},"aria-label"," if a page has more than one.",[118,4549,4550,4551,871,4553,4555],{},"Sortable headers are real ",[37,4552,870],{},[37,4554,874],{}," reflecting the current direction, so the sort state is announced.",[118,4557,4558],{},"The selection checkboxes have accessible names (localised \"Select row\" \u002F \"Select all rows\"), and the select-all control reports an indeterminate state when only some rows on the page are selected.",[118,4560,4561,4562,4564],{},"Clickable rows are keyboard-operable (Enter \u002F Space) and expose the row action to assistive technology; only rows allowed by ",[37,4563,1385],{}," are focusable and activatable.",[118,4566,4567,4568,4572,4573,4575,4576,620],{},"The loading overlay uses a labelled ",[19,4569,4571],{"href":4570},"\u002Fcomponents\u002Fspinner\u002F","Spinner","; the empty and no-results states are plain, localisable text you can override via ",[37,4574,1333],{}," or the ",[37,4577,1337],{},[118,4579,4580],{},"All visible strings — sort labels, selection labels, expand\u002Fcollapse, resize\u002Freorder handles, pagination controls, and loading\u002Fempty text — are localised through the design system's localization, so set the document language and provide translations as usual.",[4582,4583,4584],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":73,"searchDepth":199,"depth":199,"links":4586},[4587,4590,4597,4625,4631,4632,4633,4634,4635],{"id":12,"depth":199,"text":13,"children":4588},[4589],{"id":109,"depth":325,"text":110},{"id":247,"depth":199,"text":248,"children":4591},[4592,4593,4594,4595,4596],{"id":607,"depth":325,"text":255},{"id":103,"depth":325,"text":5},{"id":647,"depth":325,"text":62},{"id":677,"depth":325,"text":29},{"id":641,"depth":325,"text":266},{"id":727,"depth":199,"text":728,"children":4598},[4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624],{"id":731,"depth":325,"text":105},{"id":739,"depth":325,"text":740},{"id":863,"depth":325,"text":864},{"id":884,"depth":325,"text":885},{"id":901,"depth":325,"text":902},{"id":924,"depth":325,"text":925},{"id":1041,"depth":325,"text":1042},{"id":1056,"depth":325,"text":1057},{"id":1076,"depth":325,"text":1077},{"id":1087,"depth":325,"text":1088},{"id":1103,"depth":325,"text":1104},{"id":720,"depth":325,"text":1126},{"id":1145,"depth":325,"text":1146},{"id":1163,"depth":325,"text":1164},{"id":1177,"depth":325,"text":1178},{"id":1199,"depth":325,"text":1200},{"id":1210,"depth":325,"text":1211},{"id":1246,"depth":325,"text":1247},{"id":1267,"depth":325,"text":1268},{"id":1290,"depth":325,"text":1291},{"id":1307,"depth":325,"text":1308},{"id":1326,"depth":325,"text":1327},{"id":1345,"depth":325,"text":1346},{"id":1360,"depth":325,"text":1361},{"id":1379,"depth":325,"text":1380},{"id":1397,"depth":325,"text":1398},{"id":1411,"depth":199,"text":1412,"children":4626},[4627,4628,4629,4630],{"id":1415,"depth":325,"text":1416},{"id":1818,"depth":325,"text":1819},{"id":2128,"depth":325,"text":2129},{"id":2379,"depth":325,"text":2380},{"id":2501,"depth":199,"text":2502},{"id":2687,"depth":199,"text":2688},{"id":2762,"depth":199,"text":2763},{"id":3655,"depth":199,"text":3656},{"id":4523,"depth":199,"text":4524},"Renders tabular data from a TanStack column model with sorting, selection, pagination and filtering — your app owns the data, Nord owns the table.","md",{},"\u002Fcomponent-docs\u002Fdata-table",{"title":5,"description":4636},"alpha","component-docs\u002Fdata-table",null,"f-fRt7qcVAIoSzRku4912kHH2w3csAHlJRvbyqDetHs",{"name":4646,"tagName":207,"description":4647,"status":4648,"isNew":4649,"category":4650,"properties":4651,"slots":4714,"events":4721,"cssProperties":4752,"stateAttributes":4753,"methods":4754,"dependencies":4755},"DataTable","Data Table renders tabular data from a TanStack column model with sorting,\nselection, pagination and filtering. It is **controlled and headless**: feed\nit \u003Ccode>columns\u003C\u002Fcode>, \u003Ccode>data\u003C\u002Fcode> and \u003Ccode>state\u003C\u002Fcode> and react to its \u003Ccode>*-change\u003C\u002Fcode> events — it owns\nno data fetching, serialization or persistence. Filters and pagination are\ndeclared as config (\u003Ccode>filters\u003C\u002Fcode>, \u003Ccode>pagination\u003C\u002Fcode>) and rendered by the table.\n\nConsumer content for the slots below is captured from light-DOM \u003Ccode>slot=\"…\"\u003C\u002Fcode>\nchildren and re-projected into the rendered table (this element is light-DOM,\nso native \u003Ccode>&lt;slot&gt;\u003C\u002Fcode> projection isn't available).","ready",false,"list",[4652,4655,4658,4661,4665,4666,4668,4670,4673,4676,4681,4684,4687,4690,4693,4696,4699,4702,4705,4708,4711],{"name":1740,"attribute":1113,"type":4653,"description":4654,"fieldRelated":4649},"number | undefined","Total row count for server-side pagination.",{"name":179,"attribute":179,"type":1859,"default":4656,"description":4657,"reflects":367,"fieldRelated":4649},"false","Server-side mode: skip client sort\u002Ffilter\u002Fpaginate row models.",{"name":94,"attribute":94,"type":1845,"default":4659,"description":4660,"fieldRelated":4649},"''","Accessible caption (required).",{"name":690,"attribute":690,"type":4662,"default":4663,"description":4664,"reflects":367,"fieldRelated":4649},"'condensed' | 'default' | 'relaxed'","'default'","Row density, forwarded to the inner \u003Ccode>nord-table\u003C\u002Fcode>.",{"name":693,"attribute":693,"type":1859,"default":4656,"description":1895,"reflects":367,"fieldRelated":4649},{"name":4667,"attribute":696,"type":1859,"default":4656,"description":1908,"reflects":367,"fieldRelated":4649},"hideHeader",{"name":1314,"attribute":1314,"type":1859,"default":4656,"description":4669,"reflects":367,"fieldRelated":4649},"Show the loading overlay.",{"name":4671,"attribute":1333,"type":4672,"description":1934,"fieldRelated":4649},"emptyMessage","string | undefined",{"name":4674,"attribute":1290,"type":1859,"default":4656,"description":4675,"reflects":367,"fieldRelated":4649},"stickyHeader","Pin the header row to the top of the scroll container while the body scrolls.",{"name":4677,"attribute":1299,"type":4678,"default":4679,"description":4680,"fieldRelated":4649},"stickyHeaderOffset","number | 'auto'","'auto'","Top offset (px) for the sticky header. \u003Ccode>'auto'\u003C\u002Fcode> keeps the header flush with\nthe scroll container; a number sets an explicit \u003Ccode>inset-block-start\u003C\u002Fcode> so the\nheader can clear a fixed app chrome.",{"name":4682,"attribute":1318,"type":826,"default":1979,"description":4683,"fieldRelated":4649},"skeletonRows","Number of placeholder rows rendered while \u003Ccode>loading\u003C\u002Fcode> with no data yet.",{"name":4685,"attribute":666,"type":1859,"default":4656,"description":4686,"reflects":367,"fieldRelated":4649},"noFilterBar","Opt out of rendering the embedded filter bar.",{"name":4688,"attribute":713,"type":1859,"default":4656,"description":4689,"reflects":367,"fieldRelated":4649},"noPagination","Opt out of rendering the embedded paginator.",{"name":4691,"attribute":720,"type":1859,"default":4656,"description":4692,"reflects":367,"fieldRelated":4649},"infiniteScroll","Client-side infinite scroll: reveal the next page of rows automatically as\nthe body is scrolled near the bottom (also emits \u003Ccode>reached-bottom\u003C\u002Fcode>). Mutually\nexclusive with a numbered paginator.",{"name":4694,"attribute":724,"type":1859,"default":4656,"description":4695,"reflects":367,"fieldRelated":4649},"manualInfiniteScroll","Server-side infinite scroll: emit \u003Ccode>reached-bottom\u003C\u002Fcode> near the bottom so the\nconsumer can append the next page. Does not advance the page itself.",{"name":4697,"attribute":908,"type":1859,"default":4656,"description":4698,"reflects":367,"fieldRelated":4649},"enableRowSelection","Enable multi-select row checkboxes.",{"name":4700,"attribute":1048,"type":1859,"default":4656,"description":4701,"reflects":367,"fieldRelated":4649},"enableRowSingleSelection","Enable single-select row radios instead of checkboxes: selecting a row\nreplaces any previous selection (at most one row selected at a time) and no\nselect-all control is rendered. Implies row selection.",{"name":4703,"attribute":2072,"type":1859,"default":4656,"description":4704,"reflects":367,"fieldRelated":4649},"enableSelectAllMatching","Opt into a \"select all N matching\" affordance in the bulk-actions bar when\nevery row on the current page is selected but more rows match than are on the\npage (\u003Ccode>rowCount\u003C\u002Fcode> exceeds the page). The component only emits\n\u003Ccode>select-all-matching\u003C\u002Fcode> with the total; the consumer resolves the ids.",{"name":4706,"attribute":1252,"type":1859,"default":4656,"description":4707,"reflects":367,"fieldRelated":4649},"enableColumnResizing","Enable drag-to-resize column handles in the header (resize mode \u003Ccode>onChange\u003C\u002Fcode>).",{"name":4709,"attribute":1267,"type":1859,"default":4656,"description":4710,"reflects":367,"fieldRelated":4649},"columnsMenu","Render the built-in column-visibility (and reorder) menu in the toolbar.",{"name":4712,"attribute":1276,"type":1859,"default":4656,"description":4713,"reflects":367,"fieldRelated":4649},"enableColumnReorder","Add drag-to-reorder handles to the columns menu (updates \u003Ccode>columnOrder\u003C\u002Fcode>).",[4715,4716,4717,4719],{"name":674,"description":2424},{"name":924,"description":2415},{"name":670,"description":4718},"Replaces the embedded filter bar (pair with \u003Ccode>no-filter-bar\u003C\u002Fcode>).",{"name":641,"description":4720},"Replaces the embedded paginator (pair with \u003Ccode>no-pagination\u003C\u002Fcode>).",[4722,4725,4728,4731,4734,4737,4740,4743,4746,4749],{"name":146,"type":4723,"description":4724},"NordDataTableSortingChangeEvent","Sorting changed.",{"name":149,"type":4726,"description":4727},"NordDataTablePaginationChangeEvent","Pagination changed.",{"name":2192,"type":4729,"description":4730},"NordDataTableColumnFiltersChangeEvent","Column filters changed.",{"name":2207,"type":4732,"description":4733},"NordDataTableGlobalFilterChangeEvent","The global (search) filter changed.",{"name":658,"type":4735,"description":4736},"NordDataTableFiltersChangeEvent","The embedded filter bar committed a change (re-emitted from the table).",{"name":662,"type":4738,"description":4739},"NordDataTableFilterResetEvent","Filters were reset (via the filter bar or the empty-state clear action).",{"name":916,"type":4741,"description":4742},"NordDataTableRowSelectionChangeEvent","Row selection changed.",{"name":1156,"type":4744,"description":4745},"NordDataTableExpandedChangeEvent","Expanded rows changed.",{"name":1389,"type":4747,"description":4748},"NordDataTableRowClickEvent","A clickable row was activated.",{"name":1138,"type":4750,"description":4751},"NordDataTableReachedBottomEvent","The table body was scrolled near the bottom (infinite scroll).",[],[],[],[641,677,4756,4757,4758,4759,4760,4761,4762,848,4763,4764,4765,4766],"banner","button","checkbox","radio","dropdown","dropdown-item","empty-state","select","skeleton","spinner","visually-hidden",{"hasPlayground":367,"playgroundId":4768,"stories":4769},"components-data-table--playground",[4770,4774,4779,4783,4787,4791,4795,4800,4804,4809,4814,4819,4824,4830,4834,4839,4845,4850,4856,4862,4867,4871,4876,4881,4886,4891,4896,4901,4906,4912,4917,4922,4927,4932,4937,4943,4948,4953,4958,4964,4970,4976,4981,4987,4993,4998],{"id":4771,"name":4772,"exportName":4772,"html":4773},"components-data-table--default","Default","\u003Cnord-data-table caption=\"Patients\">\u003C\u002Fnord-data-table>",{"id":4775,"name":4776,"exportName":4777,"html":4778},"components-data-table--with-filters","With Filters","WithFilters","\u003Cnord-data-table\n      caption=\"Patients\"\n    >\u003C\u002Fnord-data-table>",{"id":4780,"name":4781,"exportName":4781,"html":4782},"components-data-table--selectable","Selectable","\u003Cnord-data-table caption=\"Patients\" enable-row-selection>\u003C\u002Fnord-data-table>",{"id":4784,"name":4785,"exportName":4785,"html":4786},"components-data-table--loading","Loading","\u003Cnord-data-table caption=\"Patients\" loading>\u003C\u002Fnord-data-table>",{"id":4788,"name":4789,"exportName":4789,"html":4790},"components-data-table--empty","Empty","\u003Cnord-data-table\n      caption=\"Patients\"\n      empty-message=\"No patients found\"\n    >\u003C\u002Fnord-data-table>",{"id":4792,"name":4793,"exportName":105,"html":4773,"js":4794},"components-data-table--overview","Basic usage","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', owner: 'Sofia Nieminen', status: 'active' },\n      { id: 102, name: 'Milo', species: 'Cat', owner: 'Aleksi Korhonen', status: 'active' },\n      { id: 103, name: 'Coco', species: 'Rabbit', owner: 'Emma Virtanen', status: 'inactive' },\n      { id: 104, name: 'Rex', species: 'Dog', owner: 'Juho Mäkinen', status: 'active' },\n    ]\n\n    const statusBadge = (status               ) => {\n      const badge = document.createElement('nord-badge')\n      badge.setAttribute('variant', status === 'active' ? 'success' : 'warning')\n      badge.textContent = status === 'active' ? 'Active' : 'Inactive'\n      return badge\n    }\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      \u002F\u002F Accessor column, end-aligned numeric preset.\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      \u002F\u002F Plain string cells.\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n      \u002F\u002F Nord web component cell (created via createElement, not lit html).\n      { accessorKey: 'status', header: 'Status', cell: (info     ) => statusBadge(info.getValue()) },\n      \u002F\u002F Display column (no accessor) rendering an actions node.\n      {\n        id: 'actions',\n        header: '',\n        enableHiding: false,\n        meta: { cellType: 'actions', isActionCell: true, hideFromColumnsMenu: true },\n        cell: (info     ) => {\n          const button = document.createElement('nord-button')\n          button.setAttribute('size', 's')\n          button.setAttribute('variant', 'plain')\n          button.textContent = 'View'\n          button.addEventListener('click', () => console.log('view', info.row.original.id))\n          return button\n        },\n      },\n    ]\n    table.data = rows",{"id":4796,"name":4797,"exportName":860,"html":4798,"js":4799},"components-data-table--cell-renderers","Cell content patterns","\u003Cnord-data-table caption=\"Patients — cell presentation\">\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', lastVisit: '2026-05-14', status: 'active' },\n      { id: 102, name: 'Milo', lastVisit: '2026-06-02', status: 'active' },\n      { id: 103, name: 'Coco', lastVisit: '2026-03-21', status: 'inactive' },\n    ]\n\n    \u002F\u002F Link cell.\n    const link = (label        , href        ) => {\n      const a = document.createElement('a')\n      a.className = 'n-data-table-link'\n      a.href = href\n      a.textContent = label\n      return a\n    }\n    \u002F\u002F Badge cell.\n    const badge = (label        , variant        ) => {\n      const el = document.createElement('nord-badge')\n      el.setAttribute('variant', variant)\n      el.textContent = label\n      return el\n    }\n    \u002F\u002F Localized date cell.\n    const date = (iso        ) => {\n      const time = document.createElement('time')\n      time.dateTime = iso\n      time.textContent = new Intl.DateTimeFormat(undefined, { year: 'numeric', month: 'short', day: 'numeric' }).format(new Date(iso))\n      return time\n    }\n    \u002F\u002F Actions dropdown cell.\n    const actions = (id        ) => {\n      const dropdown = document.createElement('nord-dropdown')\n      const toggle = document.createElement('nord-button')\n      toggle.setAttribute('slot', 'toggle')\n      toggle.setAttribute('variant', 'plain')\n      toggle.setAttribute('square', '')\n      toggle.setAttribute('aria-label', 'Actions')\n      const icon = document.createElement('nord-icon')\n      icon.setAttribute('name', 'interface-menu-small')\n      toggle.append(icon)\n      const view = document.createElement('nord-dropdown-item')\n      view.textContent = 'View'\n      view.addEventListener('click', () => console.log('view', id))\n      const archive = document.createElement('nord-dropdown-item')\n      archive.setAttribute('destructive', '')\n      archive.textContent = 'Archive'\n      archive.addEventListener('click', () => console.log('archive', id))\n      dropdown.append(toggle, view, archive)\n      return dropdown\n    }\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => link(String(info.getValue()), `#patient-${info.row.original.id}`) },\n      { accessorKey: 'lastVisit', header: 'Last visit', cell: (info     ) => date(info.getValue()), meta: { cellType: 'date' } },\n      { accessorKey: 'status', header: 'Status', cell: (info     ) => badge(info.getValue() === 'active' ? 'Active' : 'Inactive', info.getValue() === 'active' ? 'success' : 'warning') },\n      {\n        id: 'actions',\n        header: '',\n        enableHiding: false,\n        meta: { cellType: 'actions', isActionCell: true, hideFromColumnsMenu: true },\n        cell: (info     ) => actions(info.row.original.id),\n      },\n    ]\n    table.data = rows",{"id":4801,"name":864,"exportName":864,"html":4802,"js":4803},"components-data-table--sorting","\u003Cnord-data-table caption=\"Patients — sortable columns\">\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', lastVisit: '2026-05-14' },\n      { id: 102, name: 'Milo', species: 'Cat', lastVisit: '2026-06-02' },\n      { id: 103, name: 'Coco', species: 'Rabbit', lastVisit: '2026-03-21' },\n      { id: 104, name: 'Rex', species: 'Dog', lastVisit: '2026-06-18' },\n      { id: 105, name: 'Luna', species: 'Cat', lastVisit: '2026-02-09' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'lastVisit', header: 'Last visit', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    \u002F\u002F Start sorted by name ascending; clicking a header cycles asc → desc → none.\n    table.state = { sorting: [{ id: 'name', desc: false }] }\n    table.addEventListener('sorting-change', (e     ) => {\n      table.state = { ...table.state, sorting: e.detail }\n    })",{"id":4805,"name":4806,"exportName":898,"html":4807,"js":4808},"components-data-table--multi-sort","Multi Sort","\u003Cnord-data-table caption=\"Patients — multi-column sort (shift-click)\">\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', weightKg: 28.4 },\n      { id: 102, name: 'Milo', species: 'Cat', weightKg: 4.1 },\n      { id: 103, name: 'Coco', species: 'Rabbit', weightKg: 1.8 },\n      { id: 104, name: 'Rex', species: 'Dog', weightKg: 34.9 },\n      { id: 105, name: 'Luna', species: 'Cat', weightKg: 5.6 },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'weightKg', header: 'Weight (kg)', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'number' } },\n      \u002F\u002F Display column (no accessor) made sortable via meta.sortable + sortingFn.\n      {\n        id: 'summary',\n        header: 'Summary',\n        meta: { sortable: true },\n        sortingFn: (a     , b     ) => a.original.name.localeCompare(b.original.name),\n        cell: (info     ) => `${info.row.original.name} the ${info.row.original.species}`,\n      },\n    ]\n    table.data = rows\n    \u002F\u002F Multi-sort is on by default: sort by species, then weight within species.\n    table.state = { sorting: [{ id: 'species', desc: false }, { id: 'weightKg', desc: true }] }\n    table.addEventListener('sorting-change', (e     ) => {\n      table.state = { ...table.state, sorting: e.detail }\n    })",{"id":4810,"name":4811,"exportName":921,"html":4812,"js":4813},"components-data-table--row-selection","Row Selection","\u003Cnord-data-table caption=\"Patients — selectable rows\" enable-row-selection>\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', owner: 'Sofia Nieminen' },\n      { id: 102, name: 'Milo', species: 'Cat', owner: 'Aleksi Korhonen' },\n      { id: 103, name: 'Coco', species: 'Rabbit', owner: 'Emma Virtanen' },\n      { id: 104, name: 'Rex', species: 'Dog', owner: 'Juho Mäkinen' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    \u002F\u002F Stable row ids are required for selection to survive re-renders.\n    table.getRowId = (row     ) => String(row.id)\n    table.addEventListener('row-selection-change', (e     ) => {\n      console.log('selected ids', Object.keys(e.detail))\n    })",{"id":4815,"name":4816,"exportName":1038,"html":4817,"js":4818},"components-data-table--bulk-actions","Bulk Actions","\u003Cnord-data-table caption=\"Patients — bulk actions\" enable-row-selection>\n        \u003Cnord-data-table-bulk-actions>\n          \u003Cnord-button size=\"s\">\n            \u003Cnord-icon slot=\"start\" name=\"interface-download\">\u003C\u002Fnord-icon>\n            Export\n          \u003C\u002Fnord-button>\n          \u003Cnord-button size=\"s\" variant=\"danger\">\n            \u003Cnord-icon slot=\"start\" name=\"interface-delete\">\u003C\u002Fnord-icon>\n            Archive\n          \u003C\u002Fnord-button>\n        \u003C\u002Fnord-data-table-bulk-actions>\n      \u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', owner: 'Sofia Nieminen' },\n      { id: 102, name: 'Milo', species: 'Cat', owner: 'Aleksi Korhonen' },\n      { id: 103, name: 'Coco', species: 'Rabbit', owner: 'Emma Virtanen' },\n      { id: 104, name: 'Rex', species: 'Dog', owner: 'Juho Mäkinen' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.getRowId = (row     ) => String(row.id)\n    table.addEventListener('row-selection-change', (e     ) => {\n      console.log('bulk selection', Object.keys(e.detail))\n    })",{"id":4820,"name":4821,"exportName":1053,"html":4822,"js":4823},"components-data-table--single-select","Single Select","\u003Cnord-data-table caption=\"Choose a patient\" enable-row-single-selection>\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', owner: 'Sofia Nieminen' },\n      { id: 102, name: 'Milo', species: 'Cat', owner: 'Aleksi Korhonen' },\n      { id: 103, name: 'Coco', species: 'Rabbit', owner: 'Emma Virtanen' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.getRowId = (row     ) => String(row.id)\n    table.addEventListener('row-selection-change', (e     ) => {\n      console.log('selected id', Object.keys(e.detail)[0])\n    })",{"id":4825,"name":4826,"exportName":4827,"html":4828,"js":4829},"components-data-table--selection-column","Custom selection column","SelectionColumn","\u003Cnord-data-table caption=\"Patients — explicit selection column\" enable-row-selection>\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog' },\n      { id: 102, name: 'Milo', species: 'Cat' },\n      { id: 103, name: 'Coco', species: 'Rabbit' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      \u002F\u002F An explicit selection column authored inline (mirrors selectionColumn()).\n      {\n        id: 'select',\n        enableSorting: false,\n        enableHiding: false,\n        meta: { cellType: 'selection', hideFromColumnsMenu: true },\n        header: (ctx     ) => {\n          const cb = document.createElement('nord-checkbox')\n          cb.setAttribute('size', 's')\n          cb.setAttribute('hide-label', '')\n          cb.setAttribute('label', 'Select all')\n          cb.checked = ctx.table.getIsAllPageRowsSelected()\n          cb.indeterminate = ctx.table.getIsSomePageRowsSelected()\n          cb.addEventListener('change', ctx.table.getToggleAllPageRowsSelectedHandler())\n          return cb\n        },\n        cell: (ctx     ) => {\n          const cb = document.createElement('nord-checkbox')\n          cb.setAttribute('size', 's')\n          cb.setAttribute('hide-label', '')\n          cb.setAttribute('label', 'Select row')\n          cb.checked = ctx.row.getIsSelected()\n          cb.disabled = !ctx.row.getCanSelect()\n          cb.addEventListener('change', ctx.row.getToggleSelectedHandler())\n          return cb\n        },\n      },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.getRowId = (row     ) => String(row.id)",{"id":4831,"name":1057,"exportName":1057,"html":4832,"js":4833},"components-data-table--filtering","\u003Cnord-data-table caption=\"Patients — filterable\">\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'dog', owner: 'Sofia Nieminen', status: 'active' },\n      { id: 102, name: 'Milo', species: 'cat', owner: 'Aleksi Korhonen', status: 'active' },\n      { id: 103, name: 'Coco', species: 'rabbit', owner: 'Emma Virtanen', status: 'inactive' },\n      { id: 104, name: 'Rex', species: 'dog', owner: 'Juho Mäkinen', status: 'active' },\n      { id: 105, name: 'Luna', species: 'cat', owner: 'Noora Laine', status: 'inactive' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'status', header: 'Status', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    \u002F\u002F A search descriptor drives the global filter; other descriptors drive\n    \u002F\u002F column filters (matched by `key` to the column id).\n    table.filters = [\n      { type: 'search', key: 'name', label: 'Search', placeholder: 'Search patients' },\n      {\n        type: 'dropdown',\n        key: 'species',\n        label: 'Species',\n        searchable: true,\n        options: [\n          { value: 'dog', label: 'Dog' },\n          { value: 'cat', label: 'Cat' },\n          { value: 'rabbit', label: 'Rabbit' },\n        ],\n      },\n      {\n        type: 'dropdown',\n        key: 'status',\n        label: 'Status',\n        options: [\n          { value: 'active', label: 'Active' },\n          { value: 'inactive', label: 'Inactive' },\n        ],\n      },\n    ]\n    table.addEventListener('filters-change', (e     ) => console.log('filters', e.detail))\n    table.addEventListener('filter-reset', () => console.log('filters reset'))",{"id":4835,"name":4836,"exportName":1084,"html":4837,"js":4838},"components-data-table--all-filter-types","All Filter Types","\u003Cnord-data-table caption=\"Every filter type\" manual row-count=\"0\" no-pagination>\u003C\u002Fnord-data-table>","const rows        = []\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.filters = [\n      { type: 'search', key: 'q', label: 'Search', placeholder: 'Search…' },\n      {\n        type: 'dropdown',\n        key: 'species',\n        label: 'Species',\n        options: [\n          { value: 'dog', label: 'Dog' },\n          { value: 'cat', label: 'Cat' },\n        ],\n      },\n      {\n        type: 'dropdown',\n        key: 'tags',\n        label: 'Tags',\n        multiple: true,\n        searchable: true,\n        options: [\n          { value: 'vaccinated', label: 'Vaccinated' },\n          { value: 'neutered', label: 'Neutered' },\n          { value: 'microchipped', label: 'Microchipped' },\n        ],\n      },\n      {\n        type: 'dropdown',\n        key: 'owner',\n        label: 'Owner',\n        async: true,\n        searchable: true,\n        options: [\n          { value: 'o1', label: 'Sofia Nieminen' },\n          { value: 'o2', label: 'Aleksi Korhonen' },\n        ],\n      },\n      { type: 'date', key: 'dob', label: 'Date of birth' },\n      { type: 'date-range', key: 'visited', label: 'Visited', presets: true },\n      { type: 'boolean', key: 'insured', label: 'Insured', trueLabel: 'Insured', falseLabel: 'Uninsured' },\n      {\n        type: 'segmented',\n        key: 'size',\n        label: 'Size',\n        options: [\n          { value: 's', label: 'Small' },\n          { value: 'm', label: 'Medium' },\n          { value: 'l', label: 'Large' },\n        ],\n      },\n      {\n        type: 'tag-group',\n        key: 'clinics',\n        label: 'Clinics',\n        options: [\n          { value: 'north', label: 'North' },\n          { value: 'south', label: 'South' },\n        ],\n      },\n      \u002F\u002F Optional filter offered via the add-filter (+) button.\n      {\n        type: 'dropdown',\n        key: 'status',\n        label: 'Status',\n        optional: true,\n        removable: true,\n        options: [\n          { value: 'active', label: 'Active' },\n          { value: 'inactive', label: 'Inactive' },\n        ],\n      },\n    ]\n    \u002F\u002F Async dropdown: refresh options when the consumer sees a search change.\n    table.addEventListener('filters-change', (e     ) => console.log('filters', e.detail))\n    table.addEventListener('filter-add', (e     ) => console.log('added filter', e.detail))",{"id":4840,"name":4841,"exportName":4842,"html":4843,"js":4844},"components-data-table--standalone-filter-bar","Standalone Filter Bar","StandaloneFilterBar","\u003Cnord-stack gap=\"m\">\n        \u003Cnord-data-table-filter-bar for=\"patients-table\">\u003C\u002Fnord-data-table-filter-bar>\n        \u003Cnord-data-table id=\"patients-table\" caption=\"Patients\" no-filter-bar>\u003C\u002Fnord-data-table>\n      \u003C\u002Fnord-stack>","const rows        = [\n      { id: 101, name: 'Bella', species: 'dog', owner: 'Sofia Nieminen' },\n      { id: 102, name: 'Milo', species: 'cat', owner: 'Aleksi Korhonen' },\n      { id: 103, name: 'Coco', species: 'rabbit', owner: 'Emma Virtanen' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n\n    const bar = document.querySelector('nord-data-table-filter-bar')\n    bar.filters = [\n      { type: 'search', key: 'name', label: 'Search', placeholder: 'Search patients' },\n      {\n        type: 'dropdown',\n        key: 'species',\n        label: 'Species',\n        options: [\n          { value: 'dog', label: 'Dog' },\n          { value: 'cat', label: 'Cat' },\n          { value: 'rabbit', label: 'Rabbit' },\n        ],\n      },\n    ]",{"id":4846,"name":4847,"exportName":1100,"html":4848,"js":4849},"components-data-table--client-pagination","Client Pagination","\u003Cnord-data-table caption=\"Patients — client pagination\">\u003C\u002Fnord-data-table>","const names = ['Bella', 'Milo', 'Coco', 'Rex', 'Luna']\n    const species = ['Dog', 'Cat', 'Rabbit', 'Dog', 'Cat']\n    const owners = ['Sofia Nieminen', 'Aleksi Korhonen', 'Emma Virtanen', 'Juho Mäkinen', 'Noora Laine']\n    const rows        = Array.from({ length: 42 }, (_, i) => ({\n      id: 100 + i,\n      name: `${names[i % names.length]} ${i + 1}`,\n      species: species[i % species.length],\n      owner: owners[i % owners.length],\n    }))\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    \u002F\u002F pageSize seeds the paginator; pageSizeOptions populates the size select.\n    table.pagination = { pageSize: 10, pageSizeOptions: [10, 25, 50] }",{"id":4851,"name":4852,"exportName":4853,"html":4854,"js":4855},"components-data-table--simple-pagination","Simple Pagination","SimplePagination","\u003Cnord-data-table caption=\"Patients — simple pagination\">\u003C\u002Fnord-data-table>","const names = ['Bella', 'Milo', 'Coco', 'Rex', 'Luna']\n    const species = ['Dog', 'Cat', 'Rabbit', 'Dog', 'Cat']\n    const rows        = Array.from({ length: 24 }, (_, i) => ({\n      id: 100 + i,\n      name: `${names[i % names.length]} ${i + 1}`,\n      species: species[i % species.length],\n    }))\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.pagination = { pageSize: 8, type: 'simple' }",{"id":4857,"name":4858,"exportName":4859,"html":4860,"js":4861},"components-data-table--standalone-pagination","Custom pagination slot","StandalonePagination","\u003Cnord-data-table caption=\"Patients — standalone paginator\" no-pagination>\n        \u003Cnord-pagination slot=\"pagination\" aria-label=\"Patients pages\">\n          \u003Cnord-pagination-content>\n            \u003Cnord-pagination-item>\n              \u003Cnord-pagination-link current>\n                \u003Cnord-button variant=\"primary\" data-page=\"1\">1\u003C\u002Fnord-button>\n              \u003C\u002Fnord-pagination-link>\n            \u003C\u002Fnord-pagination-item>\n            \u003Cnord-pagination-item>\n              \u003Cnord-pagination-link>\n                \u003Cnord-button variant=\"plain\" data-page=\"2\">2\u003C\u002Fnord-button>\n              \u003C\u002Fnord-pagination-link>\n            \u003C\u002Fnord-pagination-item>\n            \u003Cnord-pagination-item>\n              \u003Cnord-pagination-link>\n                \u003Cnord-button variant=\"plain\" data-page=\"3\">3\u003C\u002Fnord-button>\n              \u003C\u002Fnord-pagination-link>\n            \u003C\u002Fnord-pagination-item>\n            \u003Cnord-pagination-item>\n              \u003Cnord-pagination-link>\n                \u003Cnord-button variant=\"plain\" data-page=\"4\">4\u003C\u002Fnord-button>\n              \u003C\u002Fnord-pagination-link>\n            \u003C\u002Fnord-pagination-item>\n          \u003C\u002Fnord-pagination-content>\n        \u003C\u002Fnord-pagination>\n      \u003C\u002Fnord-data-table>","const names = ['Bella', 'Milo', 'Coco', 'Rex', 'Luna']\n    const rows        = Array.from({ length: 20 }, (_, i) => ({\n      id: 100 + i,\n      name: `${names[i % names.length]} ${i + 1}`,\n      species: i % 2 === 0 ? 'Dog' : 'Cat',\n    }))\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n    ]\n    const pageSize = 5\n    const showPage = (page        ) => {\n      table.data = rows.slice((page - 1) * pageSize, page * pageSize)\n      document.querySelectorAll             ('[data-page]').forEach((button) => {\n        const current = Number(button.dataset.page) === page\n        button.setAttribute('variant', current ? 'primary' : 'plain')\n        button.closest('nord-pagination-link')?.toggleAttribute('current', current)\n      })\n    }\n    document.querySelectorAll             ('[data-page]').forEach((button) => {\n      button.addEventListener('click', () => showPage(Number(button.dataset.page)))\n    })\n    showPage(1)",{"id":4863,"name":4864,"exportName":1123,"html":4865,"js":4866},"components-data-table--server-side-pagination","Server Side Pagination","\u003Cnord-data-table caption=\"Patients — server pagination\" manual>\u003C\u002Fnord-data-table>","const names = ['Bella', 'Milo', 'Coco', 'Rex', 'Luna']\n    const owners = ['Sofia Nieminen', 'Aleksi Korhonen', 'Emma Virtanen', 'Juho Mäkinen', 'Noora Laine']\n    const total = 42\n    const allRows        = Array.from({ length: total }, (_, i) => ({\n      id: 100 + i,\n      name: `${names[i % names.length]} ${i + 1}`,\n      species: i % 2 === 0 ? 'Dog' : 'Cat',\n      owner: owners[i % owners.length],\n    }))\n    \u002F\u002F Stand-in for a network fetch of one page.\n    const fetchPage = (pageIndex        , pageSize        ) =>\n      allRows.slice(pageIndex * pageSize, pageIndex * pageSize + pageSize)\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.rowCount = total\n    table.pagination = { pageSize: 5, pageSizeOptions: [5, 10, 25] }\n\n    let pageIndex = 0\n    let pageSize = 5\n    const load = () => {\n      table.data = fetchPage(pageIndex, pageSize)\n      table.state = { pagination: { pageIndex, pageSize } }\n    }\n    load()\n    \u002F\u002F In manual mode the table does NOT paginate; it asks the consumer to fetch.\n    table.addEventListener('pagination-change', (e     ) => {\n      pageIndex = e.detail.pageIndex\n      pageSize = e.detail.pageSize\n      load()\n    })",{"id":4868,"name":1126,"exportName":1142,"html":4869,"js":4870},"components-data-table--infinite-scroll-example","\u003Cdiv style=\"block-size: 360px\">\n        \u003Cnord-data-table caption=\"Patients — infinite scroll\" infinite-scroll sticky-header>\u003C\u002Fnord-data-table>\n      \u003C\u002Fdiv>","const names = ['Bella', 'Milo', 'Coco', 'Rex', 'Luna']\n    const owners = ['Sofia Nieminen', 'Aleksi Korhonen', 'Emma Virtanen', 'Juho Mäkinen', 'Noora Laine']\n    const rows        = Array.from({ length: 60 }, (_, i) => ({\n      id: 300 + i,\n      name: `${names[i % names.length]} ${i + 1}`,\n      species: i % 2 === 0 ? 'Dog' : 'Cat',\n      owner: owners[i % owners.length],\n    }))\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.getRowId = (row     ) => String(row.id)\n    \u002F\u002F Seed the batch size; the table retains prior rows as you scroll.\n    table.pagination = { pageSize: 15 }\n    table.addEventListener('reached-bottom', () => console.log('reached bottom'))",{"id":4872,"name":4873,"exportName":1160,"html":4874,"js":4875},"components-data-table--tree-expansion","Tree Expansion","\u003Cnord-data-table caption=\"Owners and pets\">\u003C\u002Fnord-data-table>","const rows         = [\n      {\n        id: 'o1',\n        name: 'Sofia Nieminen',\n        pets: [\n          { id: 'o1-p1', name: 'Bella', species: 'Dog', breed: 'Golden Retriever' },\n          { id: 'o1-p2', name: 'Coco', species: 'Rabbit', breed: 'Lionhead' },\n        ],\n      },\n      {\n        id: 'o2',\n        name: 'Aleksi Korhonen',\n        pets: [{ id: 'o2-p1', name: 'Milo', species: 'Cat', breed: 'British Shorthair' }],\n      },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => info.getValue() ?? '' },\n      { accessorKey: 'breed', header: 'Breed', cell: (info     ) => info.getValue() ?? '' },\n    ]\n    table.data = rows\n    table.getRowId = (row      ) => row.id\n    \u002F\u002F Returning child rows enables the leading expander + depth (level-{depth}).\n    table.getSubRows = (row      ) => row.pets",{"id":4877,"name":4878,"exportName":1174,"html":4879,"js":4880},"components-data-table--master-detail","Master Detail","\u003Cnord-data-table caption=\"Patients with detail rows\">\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', owner: 'Sofia Nieminen', lastVisit: '2026-05-14', status: 'active' },\n      { id: 102, name: 'Milo', species: 'Cat', owner: 'Aleksi Korhonen', lastVisit: '2026-06-02', status: 'active' },\n      { id: 103, name: 'Coco', species: 'Rabbit', owner: 'Emma Virtanen', lastVisit: '2026-03-21', status: 'inactive' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()), meta: { isExpandCell: true } },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.getRowId = (row     ) => String(row.id)\n    table.getRowCanExpand = () => true\n    \u002F\u002F Full-width detail row content, returned as a DOM node.\n    table.renderSubRow = (row     ) => {\n      const wrap = document.createElement('div')\n      wrap.style.display = 'grid'\n      wrap.style.gap = 'var(--n-space-s)'\n      wrap.style.padding = 'var(--n-space-s)'\n      const name = document.createElement('strong')\n      name.textContent = row.original.name\n      const owner = document.createElement('span')\n      owner.textContent = `Owner: ${row.original.owner}`\n      const visit = document.createElement('span')\n      visit.textContent = `Last visit: ${new Intl.DateTimeFormat(undefined, { dateStyle: 'medium' }).format(new Date(row.original.lastVisit))}`\n      wrap.append(name, owner, visit)\n      return wrap\n    }",{"id":4882,"name":4883,"exportName":1196,"html":4884,"js":4885},"components-data-table--custom-rows","Custom Rows","\u003Cnord-data-table caption=\"Patients grouped by species\">\u003C\u002Fnord-data-table>","\u002F\u002F Full-width group-header row.\n    const groupHeader = (label        )      => ({\n      id: `group-${label}`,\n      customRow: () => {\n        const el = document.createElement('strong')\n        el.textContent = label\n        return el\n      },\n    })\n\n    const rows        = [\n      groupHeader('Dogs'),\n      { id: '101', name: 'Bella', breed: 'Golden Retriever', owner: 'Sofia Nieminen' },\n      { id: '104', name: 'Rex', breed: 'German Shepherd', owner: 'Juho Mäkinen' },\n      groupHeader('Cats'),\n      { id: '102', name: 'Milo', breed: 'British Shorthair', owner: 'Aleksi Korhonen' },\n      { id: '105', name: 'Luna', breed: 'Maine Coon', owner: 'Noora Laine' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => info.getValue() ?? '' },\n      { accessorKey: 'breed', header: 'Breed', cell: (info     ) => info.getValue() ?? '' },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => info.getValue() ?? '' },\n    ]\n    table.data = rows\n    table.getRowId = (row     ) => row.id",{"id":4887,"name":4888,"exportName":1207,"html":4889,"js":4890},"components-data-table--column-pinning","Column Pinning","\u003Cdiv style=\"max-inline-size: 640px\">\n        \u003Cnord-data-table caption=\"Patients with pinned columns\">\u003C\u002Fnord-data-table>\n      \u003C\u002Fdiv>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', breed: 'Golden Retriever', owner: 'Sofia Nieminen', lastVisit: '2026-05-14', status: 'Active' },\n      { id: 102, name: 'Milo', species: 'Cat', breed: 'British Shorthair', owner: 'Aleksi Korhonen', lastVisit: '2026-06-02', status: 'Active' },\n      { id: 103, name: 'Coco', species: 'Rabbit', breed: 'Lionhead', owner: 'Emma Virtanen', lastVisit: '2026-03-21', status: 'Inactive' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()), meta: { cellType: 'text' } },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()), meta: { cellType: 'text' } },\n      { accessorKey: 'breed', header: 'Breed', cell: (info     ) => String(info.getValue()), meta: { cellType: 'wide' } },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()), meta: { cellType: 'wide' } },\n      { accessorKey: 'lastVisit', header: 'Last visit', cell: (info     ) => String(info.getValue()), meta: { cellType: 'date' } },\n      { accessorKey: 'status', header: 'Status', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.getRowId = (row     ) => String(row.id)\n    \u002F\u002F Pin Name to the start and Status to the end.\n    table.state = { columnPinning: { left: ['name'], right: ['status'] } }",{"id":4892,"name":4893,"exportName":1243,"html":4894,"js":4895},"components-data-table--column-sizing","Column Sizing","\u003Cnord-data-table caption=\"Patients — sized columns\">\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', lastVisit: '2026-05-14' },\n      { id: 102, name: 'Milo', species: 'Cat', lastVisit: '2026-06-02' },\n      { id: 103, name: 'Coco', species: 'Rabbit', lastVisit: '2026-03-21' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      \u002F\u002F number preset (fixed narrow).\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      \u002F\u002F explicit size wins over the preset.\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()), size: 280 },\n      \u002F\u002F text preset.\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()), meta: { cellType: 'text' } },\n      \u002F\u002F date preset.\n      { accessorKey: 'lastVisit', header: 'Last visit', cell: (info     ) => String(info.getValue()), meta: { cellType: 'date' } },\n    ]\n    table.data = rows",{"id":4897,"name":4898,"exportName":1264,"html":4899,"js":4900},"components-data-table--column-resizing","Column Resizing","\u003Cnord-data-table caption=\"Patients — resizable columns\" enable-column-resizing>\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', owner: 'Sofia Nieminen' },\n      { id: 102, name: 'Milo', species: 'Cat', owner: 'Aleksi Korhonen' },\n      { id: 103, name: 'Coco', species: 'Rabbit', owner: 'Emma Virtanen' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      \u002F\u002F Individual columns can opt out while the rest remain resizable.\n      { accessorKey: 'name', header: 'Name (fixed)', cell: (info     ) => String(info.getValue()), enableResizing: false, meta: { cellType: 'text' } },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()), meta: { cellType: 'text' } },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()), meta: { cellType: 'wide' } },\n    ]\n    table.data = rows\n    table.addEventListener('column-sizing-change', (e     ) => console.log('sizing', e.detail))",{"id":4902,"name":4903,"exportName":1287,"html":4904,"js":4905},"components-data-table--columns-menu","Columns Menu","\u003Cnord-data-table caption=\"Patients — columns menu\" columns-menu enable-column-reorder>\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', breed: 'Golden Retriever', owner: 'Sofia Nieminen', lastVisit: '2026-05-14', status: 'Active' },\n      { id: 102, name: 'Milo', species: 'Cat', breed: 'British Shorthair', owner: 'Aleksi Korhonen', lastVisit: '2026-06-02', status: 'Active' },\n      { id: 103, name: 'Coco', species: 'Rabbit', breed: 'Lionhead', owner: 'Emma Virtanen', lastVisit: '2026-03-21', status: 'Inactive' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      \u002F\u002F enableHiding: false keeps Name always visible (no menu toggle).\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()), enableHiding: false },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'breed', header: 'Breed', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'lastVisit', header: 'Last visit', cell: (info     ) => String(info.getValue()), meta: { cellType: 'date' } },\n      { accessorKey: 'status', header: 'Status', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.getRowId = (row     ) => String(row.id)\n    table.addEventListener('column-visibility-change', (e     ) => console.log('visibility', e.detail))\n    table.addEventListener('column-order-change', (e     ) => console.log('order', e.detail))",{"id":4907,"name":4908,"exportName":4909,"html":4910,"js":4911},"components-data-table--columns-menu-fixed-columns","Columns Menu Fixed Columns","ColumnsMenuFixedColumns","\u003Cnord-data-table caption=\"Patients — fixed columns in the menu\" columns-menu>\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', breed: 'Golden Retriever', owner: 'Sofia Nieminen', lastVisit: '2026-05-14', status: 'Active' },\n      { id: 102, name: 'Milo', species: 'Cat', breed: 'British Shorthair', owner: 'Aleksi Korhonen', lastVisit: '2026-06-02', status: 'Active' },\n      { id: 103, name: 'Coco', species: 'Rabbit', breed: 'Lionhead', owner: 'Emma Virtanen', lastVisit: '2026-03-21', status: 'Inactive' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'breed', header: 'Breed', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'lastVisit', header: 'Last visit', cell: (info     ) => String(info.getValue()), meta: { cellType: 'date' } },\n      { accessorKey: 'status', header: 'Status', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.getRowId = (row     ) => String(row.id)\n    \u002F\u002F Pin ID (start) and Status (end): both appear under \"Fixed columns\" in the\n    \u002F\u002F menu, listed as read-only rows above the toggleable \"Available columns\".\n    table.state = { columnPinning: { left: ['id'], right: ['status'] } }",{"id":4913,"name":4914,"exportName":1304,"html":4915,"js":4916},"components-data-table--sticky-header","Sticky Header","\u003Cdiv style=\"block-size: 320px\">\n        \u003Cnord-data-table caption=\"Patients — sticky header\" sticky-header>\u003C\u002Fnord-data-table>\n      \u003C\u002Fdiv>","const names = ['Bella', 'Milo', 'Coco', 'Rex', 'Luna']\n    const owners = ['Sofia Nieminen', 'Aleksi Korhonen', 'Emma Virtanen', 'Juho Mäkinen', 'Noora Laine']\n    const rows        = Array.from({ length: 30 }, (_, i) => ({\n      id: 100 + i,\n      name: `${names[i % names.length]} ${i + 1}`,\n      species: i % 2 === 0 ? 'Dog' : 'Cat',\n      owner: owners[i % owners.length],\n    }))\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.noPagination = true",{"id":4918,"name":4919,"exportName":1323,"html":4920,"js":4921},"components-data-table--loading-skeleton","Loading Skeleton","\u003Cnord-data-table caption=\"Patients — loading\" loading skeleton-rows=\"5\">\u003C\u002Fnord-data-table>","const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    \u002F\u002F No data yet + loading → skeleton rows. Supply rows to instead show the\n    \u002F\u002F spinner overlay over the existing content.\n    table.data = []",{"id":4923,"name":4924,"exportName":1342,"html":4925,"js":4926},"components-data-table--empty-and-no-results","Empty And No Results","\u003Cnord-data-table caption=\"Patients — no results\">\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'dog' },\n      { id: 102, name: 'Milo', species: 'cat' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.filters = [\n      { type: 'search', key: 'name', label: 'Search', placeholder: 'Search patients' },\n    ]\n    \u002F\u002F A search value that matches nothing → the no-results state with a\n    \u002F\u002F clear-filters CTA (as opposed to the plain empty state for no data).\n    table.filterValues = { name: 'no-such-patient' }\n    table.state = { globalFilter: 'no-such-patient' }\n    table.addEventListener('filter-reset', () => {\n      table.filterValues = {}\n      table.state = { globalFilter: '' }\n    })",{"id":4928,"name":4929,"exportName":1357,"html":4930,"js":4931},"components-data-table--row-errors","Row Errors","\u003Cnord-data-table caption=\"Invoices — with row errors\">\u003C\u002Fnord-data-table>","const rows            = [\n      { id: 'INV-1001', patient: 'Bella', owner: 'Sofia Nieminen', amount: 120.5 },\n      { id: 'INV-1002', patient: 'Milo', owner: 'Aleksi Korhonen', amount: 64 },\n      { id: 'INV-1003', patient: 'Coco', owner: 'Emma Virtanen', amount: 0 },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'Invoice', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'patient', header: 'Patient', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'amount', header: 'Amount', cell: (info     ) => `€${Number(info.getValue()).toFixed(2)}`, meta: { textAlign: 'end', cellType: 'number' } },\n    ]\n    table.data = rows\n    table.getRowId = (row         ) => row.id\n    \u002F\u002F Keyed by row id; each row with entries gets a danger banner beneath it.\n    table.rowErrors = {\n      'INV-1002': ['Owner has an overdue balance.'],\n      'INV-1003': ['Amount must be greater than zero.', 'Missing line items.'],\n    }",{"id":4933,"name":4934,"exportName":1376,"html":4935,"js":4936},"components-data-table--column-footers","Column Footers","\u003Cnord-data-table caption=\"Invoices — with totals\">\u003C\u002Fnord-data-table>","const rows            = [\n      { id: 'INV-1001', patient: 'Bella', amount: 120.5 },\n      { id: 'INV-1002', patient: 'Milo', amount: 64 },\n      { id: 'INV-1003', patient: 'Coco', amount: 220.75 },\n    ]\n\n    const total = rows.reduce((sum, r) => sum + r.amount, 0)\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'Invoice', cell: (info     ) => String(info.getValue()), footer: () => 'Total' },\n      { accessorKey: 'patient', header: 'Patient', cell: (info     ) => String(info.getValue()) },\n      {\n        accessorKey: 'amount',\n        header: 'Amount',\n        cell: (info     ) => `€${Number(info.getValue()).toFixed(2)}`,\n        \u002F\u002F A footer on any visible column renders the \u003Ctfoot> totals row.\n        footer: () => `€${total.toFixed(2)}`,\n        meta: { textAlign: 'end', cellType: 'number' },\n      },\n    ]\n    table.data = rows",{"id":4938,"name":4939,"exportName":4940,"html":4941,"js":4942},"components-data-table--cell-presentation","Cell Presentation","CellPresentation","\u003Cnord-data-table caption=\"Patients — cell presentation via meta\">\u003C\u002Fnord-data-table>","const long = 'A longer clinical note that would overflow a single line and demonstrates clamping behaviour across two or three lines depending on the meta.lineClamp value.'\n    const rows        = [\n      { id: 101, name: 'Bella', notes: long, amount: 120.5 },\n      { id: 102, name: 'Milo', notes: 'Routine check-up.', amount: 64 },\n      { id: 103, name: 'Coco', notes: long, amount: 220.75 },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()), meta: { verticalAlign: 'top' } },\n      \u002F\u002F Clamp overflowing note text to two lines.\n      { accessorKey: 'notes', header: 'Notes', cell: (info     ) => String(info.getValue()), meta: { lineClamp: 2 } },\n      \u002F\u002F End-aligned numeric.\n      { accessorKey: 'amount', header: 'Amount', cell: (info     ) => `€${Number(info.getValue()).toFixed(2)}`, meta: { textAlign: 'end', cellType: 'number' } },\n    ]\n    table.data = rows",{"id":4944,"name":4945,"exportName":1394,"html":4946,"js":4947},"components-data-table--clickable-rows","Clickable Rows","\u003Cnord-data-table caption=\"Patients — clickable rows\">\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', status: 'active' },\n      { id: 102, name: 'Milo', species: 'Cat', status: 'active' },\n      { id: 103, name: 'Coco', species: 'Rabbit', status: 'inactive' },\n      { id: 104, name: 'Rex', species: 'Dog', status: 'active' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'status', header: 'Status', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.getRowId = (row     ) => String(row.id)\n    \u002F\u002F Only active patients are clickable.\n    table.isRowClickable = (row     ) => row.original.status === 'active'\n    table.addEventListener('row-click', (e     ) => console.log('row clicked', e.detail.id))",{"id":4949,"name":4950,"exportName":4950,"html":4951,"js":4952},"components-data-table--controlled","Controlled","\u003Cnord-data-table caption=\"Patients — controlled state\">\u003C\u002Fnord-data-table>","const names = ['Bella', 'Milo', 'Coco', 'Rex', 'Luna']\n    const owners = ['Sofia Nieminen', 'Aleksi Korhonen', 'Emma Virtanen', 'Juho Mäkinen', 'Noora Laine']\n    const rows        = Array.from({ length: 18 }, (_, i) => ({\n      id: 100 + i,\n      name: `${names[i % names.length]} ${i + 1}`,\n      species: i % 2 === 0 ? 'Dog' : 'Cat',\n      owner: owners[i % owners.length],\n    }))\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.pagination = { pageSize: 5 }\n    \u002F\u002F The consumer holds all state and writes it back on every change.\n    let state = { sorting: [{ id: 'name', desc: false }], pagination: { pageIndex: 0, pageSize: 5 } }\n    table.state = state\n    table.addEventListener('sorting-change', (e     ) => {\n      state = { ...state, sorting: e.detail }\n      table.state = state\n    })\n    table.addEventListener('pagination-change', (e     ) => {\n      state = { ...state, pagination: e.detail }\n      table.state = state\n    })",{"id":4954,"name":4955,"exportName":4955,"html":4956,"js":4957},"components-data-table--uncontrolled","Uncontrolled","\u003Cnord-data-table caption=\"Patients — uncontrolled\">\u003C\u002Fnord-data-table>","const names = ['Bella', 'Milo', 'Coco', 'Rex', 'Luna']\n    const owners = ['Sofia Nieminen', 'Aleksi Korhonen', 'Emma Virtanen', 'Juho Mäkinen', 'Noora Laine']\n    const rows        = Array.from({ length: 18 }, (_, i) => ({\n      id: 100 + i,\n      name: `${names[i % names.length]} ${i + 1}`,\n      species: i % 2 === 0 ? 'Dog' : 'Cat',\n      owner: owners[i % owners.length],\n    }))\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    \u002F\u002F No .state: sorting\u002Fpagination are managed internally.\n    table.pagination = { pageSize: 5, pageSizeOptions: [5, 10] }",{"id":4959,"name":4960,"exportName":4961,"html":4962,"js":4963},"components-data-table--manual-infinite-scroll","Manual Infinite Scroll","ManualInfiniteScroll","\u003Cdiv style=\"block-size: 360px\">\n        \u003Cnord-data-table caption=\"Patients — server infinite scroll\" manual manual-infinite-scroll sticky-header>\u003C\u002Fnord-data-table>\n      \u003C\u002Fdiv>","const names = ['Bella', 'Milo', 'Coco', 'Rex', 'Luna']\n    const owners = ['Sofia Nieminen', 'Aleksi Korhonen', 'Emma Virtanen', 'Juho Mäkinen', 'Noora Laine']\n    const total = 80\n    const makeRow = (i        )      => ({\n      id: 400 + i,\n      name: `${names[i % names.length]} ${i + 1}`,\n      species: i % 2 === 0 ? 'Dog' : 'Cat',\n      owner: owners[i % owners.length],\n    })\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.rowCount = total\n    table.noPagination = true\n\n    let loaded = 20\n    const refresh = () => {\n      table.data = Array.from({ length: Math.min(loaded, total) }, (_, i) => makeRow(i))\n    }\n    refresh()\n    \u002F\u002F The consumer appends the next page when the table nears the bottom.\n    table.addEventListener('reached-bottom', () => {\n      if (loaded \u003C total) {\n        loaded += 20\n        refresh()\n      }\n    })",{"id":4965,"name":4966,"exportName":4967,"html":4968,"js":4969},"components-data-table--escape-hatch","Escape Hatch","EscapeHatch","\u003Cnord-data-table caption=\"Patients — external table instance\">\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', owner: 'Sofia Nieminen' },\n      { id: 102, name: 'Milo', species: 'Cat', owner: 'Aleksi Korhonen' },\n      { id: 103, name: 'Coco', species: 'Rabbit', owner: 'Emma Virtanen' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    \u002F\u002F In a real app the consumer builds this with createTable\u002FuseReactTable and\n    \u002F\u002F passes it through unchanged. Here we let the component build it from\n    \u002F\u002F columns\u002Fdata — the point is that .table would override that entirely.\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows",{"id":4971,"name":4972,"exportName":4973,"html":4974,"js":4975},"components-data-table--fully-controlled","Fully Controlled","FullyControlled","\u003Cnord-data-table caption=\"Patients — single-state escape hatch\">\u003C\u002Fnord-data-table>","const names = ['Bella', 'Milo', 'Coco', 'Rex', 'Luna']\n    const rows        = Array.from({ length: 15 }, (_, i) => ({\n      id: 100 + i,\n      name: `${names[i % names.length]} ${i + 1}`,\n      species: i % 2 === 0 ? 'Dog' : 'Cat',\n      owner: 'Sofia Nieminen',\n    }))\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows\n    table.pagination = { pageSize: 5 }\n    table.state = { sorting: [], pagination: { pageIndex: 0, pageSize: 5 } }\n    \u002F\u002F A single event carrying the entire table state.\n    table.addEventListener('state-change', (e     ) => {\n      table.state = e.detail\n    })",{"id":4977,"name":4978,"exportName":1408,"html":4979,"js":4980},"components-data-table--server-side-complete","Server Side Complete","\u003Cnord-data-table caption=\"Patients — full server-side\" manual>\u003C\u002Fnord-data-table>","const names = ['Bella', 'Milo', 'Coco', 'Rex', 'Luna']\n    const owners = ['Sofia Nieminen', 'Aleksi Korhonen', 'Emma Virtanen', 'Juho Mäkinen', 'Noora Laine']\n    const allRows        = Array.from({ length: 120 }, (_, i) => ({\n      id: 100 + i,\n      name: `${names[i % names.length]} ${i + 1}`,\n      species: i % 2 === 0 ? 'dog' : 'cat',\n      owner: owners[i % owners.length],\n    }))\n\n    \u002F\u002F Simulated server: applies global filter, species filter, sort and paging.\n    const query = { q: '', species: '', sort: { id: 'name', desc: false }                                        , pageIndex: 0, pageSize: 10 }\n    const runQuery = () => {\n      let result = allRows.slice()\n      if (query.q) {\n        const needle = String(query.q).toLowerCase()\n        result = result.filter(r => r.name.toLowerCase().includes(needle))\n      }\n      if (query.species) {\n        result = result.filter(r => r.species === query.species)\n      }\n      if (query.sort) {\n        const { id, desc } = query.sort\n        result.sort((a     , b     ) => String(a[id]).localeCompare(String(b[id])) * (desc ? -1 : 1))\n      }\n      const totalCount = result.length\n      const page = result.slice(query.pageIndex * query.pageSize, query.pageIndex * query.pageSize + query.pageSize)\n      return { page, totalCount }\n    }\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.pagination = { pageSize: 10, pageSizeOptions: [10, 25, 50] }\n    table.filters = [\n      { type: 'search', key: 'q', label: 'Search', placeholder: 'Search patients' },\n      {\n        type: 'dropdown',\n        key: 'species',\n        label: 'Species',\n        options: [\n          { value: 'dog', label: 'Dog' },\n          { value: 'cat', label: 'Cat' },\n        ],\n      },\n    ]\n\n    const refetch = () => {\n      const { page, totalCount } = runQuery()\n      table.data = page\n      table.rowCount = totalCount\n      table.state = {\n        pagination: { pageIndex: query.pageIndex, pageSize: query.pageSize },\n        sorting: query.sort ? [query.sort] : [],\n      }\n    }\n    refetch()\n\n    \u002F\u002F Every change is a server round-trip in manual mode.\n    table.addEventListener('sorting-change', (e     ) => {\n      query.sort = e.detail[0] ?? null\n      query.pageIndex = 0\n      refetch()\n    })\n    table.addEventListener('pagination-change', (e     ) => {\n      query.pageIndex = e.detail.pageIndex\n      query.pageSize = e.detail.pageSize\n      refetch()\n    })\n    table.addEventListener('filters-change', (e     ) => {\n      query.q = (e.detail.values.q          ) ?? ''\n      const species = e.detail.values.species\n      query.species = Array.isArray(species) ? (species[0] ?? '') : ((species          ) ?? '')\n      query.pageIndex = 0\n      refetch()\n    })\n    table.addEventListener('filter-reset', () => {\n      query.q = ''\n      query.species = ''\n      query.pageIndex = 0\n      refetch()\n    })",{"id":4982,"name":4983,"exportName":4984,"html":4985,"js":4986},"components-data-table--density-striped-rtl","Density Striped Rtl","DensityStripedRtl","\u003Cnord-data-table caption=\"Patients — dense, striped, RTL\" density=\"condensed\" striped dir=\"rtl\">\u003C\u002Fnord-data-table>","const rows        = [\n      { id: 101, name: 'Bella', species: 'Dog', owner: 'Sofia Nieminen' },\n      { id: 102, name: 'Milo', species: 'Cat', owner: 'Aleksi Korhonen' },\n      { id: 103, name: 'Coco', species: 'Rabbit', owner: 'Emma Virtanen' },\n      { id: 104, name: 'Rex', species: 'Dog', owner: 'Juho Mäkinen' },\n    ]\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = [\n      { accessorKey: 'id', header: 'ID', cell: (info     ) => String(info.getValue()), meta: { textAlign: 'end', cellType: 'smallId' } },\n      { accessorKey: 'name', header: 'Name', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'species', header: 'Species', cell: (info     ) => String(info.getValue()) },\n      { accessorKey: 'owner', header: 'Owner', cell: (info     ) => String(info.getValue()) },\n    ]\n    table.data = rows",{"id":4988,"name":4989,"exportName":4990,"html":4991,"js":4992},"components-data-table--server-side","Server Side","ServerSide","\u003Cnord-data-table caption=\"Patients (server-side)\" manual>\u003C\u002Fnord-data-table>","const total = 42\n    const pageSize = 5\n    let pageIndex = 0\n    const makeRow = (i        )          => {\n      const base = data[i % data.length]\n      return { ...base, id: 200 + i, name: `${base.name} ${i + 1}` }\n    }\n    const all = Array.from({ length: total }, (_, i) => makeRow(i))\n\n    const table = document.querySelector('nord-data-table')\n    table.columns = columns\n    table.rowCount = total\n    table.pagination = { pageSize, pageSizeOptions: [5, 10, 25] }\n\n    \u002F\u002F Server-side: keep pageIndex controlled and swap in the current page. In a\n    \u002F\u002F real app the slice would be a fetch keyed by the requested page.\n    const showPage = () => {\n      table.data = all.slice(pageIndex * pageSize, pageIndex * pageSize + pageSize)\n      table.state = { pagination: { pageIndex, pageSize } }\n    }\n    showPage()\n    table.addEventListener('pagination-change', (e             ) => {\n      pageIndex = (e.detail       ).pageIndex\n      showPage()\n    })",{"id":4994,"name":4995,"exportName":4996,"html":4997},"components-data-table--explicit-selection-column","selectionColumn() helper","ExplicitSelectionColumn","\u003Cnord-data-table\n      caption=\"Patients\"\n      enable-row-selection\n    >\u003C\u002Fnord-data-table>",{"id":4999,"name":5000,"exportName":5001,"html":5002},"components-data-table--all-features","All Features","AllFeatures","\u003Cnord-data-table\n      caption=\"Patients — all features\"\n      enable-row-selection\n      enable-column-resizing\n      enable-column-reorder\n      enable-select-all-matching\n      columns-menu\n    >\n      \u003Cnord-data-table-bulk-actions>\n        \u003Cnord-button size=\"s\">\n          \u003Cnord-icon slot=\"start\" name=\"interface-download\">\u003C\u002Fnord-icon>\n          Export\n        \u003C\u002Fnord-button>\n        \u003Cnord-button size=\"s\" variant=\"danger\">\n          \u003Cnord-icon slot=\"start\" name=\"interface-delete\">\u003C\u002Fnord-icon>\n          Delete\n        \u003C\u002Fnord-button>\n      \u003C\u002Fnord-data-table-bulk-actions>\n    \u003C\u002Fnord-data-table>",[5004,5196,5312,5330],{"title":5005,"children":5006,"path":5194,"stem":5195,"page":4649},"Docs",[5007,5108],{"path":5008,"title":5009,"icon":5010,"keywords":5011,"children":5012},"\u002Fdocs\u002Fdeveloper","Developer","file-code","docs developer start install setup web components ai faq",[5013,5017,5022,5027,5031,5035,5076,5098,5103],{"path":5008,"title":5014,"icon":5015,"keywords":5016},"Getting started","navigation-dashboard","docs start install setup npm",{"path":5018,"title":5019,"icon":5020,"keywords":5021},"\u002Fdocs\u002Fdeveloper\u002Fweb-components","Using Web Components","generic-module","web components setup install usage custom elements",{"path":5023,"title":5024,"icon":5025,"keywords":5026},"\u002Fdocs\u002Fdeveloper\u002Fwebfonts","Webfonts","interface-content-book","fonts typography webfonts",{"path":5028,"title":5029,"icon":5020,"keywords":5030},"\u002Fdocs\u002Fdeveloper\u002Fcdn","CDN","cdn package delivery script link",{"path":5032,"title":5033,"icon":5025,"keywords":5034},"\u002Fdocs\u002Fdeveloper\u002Flocalization","Localization","localization translation rtl ltr",{"path":5036,"title":5037,"icon":5010,"keywords":5038,"badge":5039,"children":5040},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework","CSS Framework","css framework legacy utilities","legacy",[5041,5044,5046,5049,5052,5055,5058,5061,5064,5067,5070,5073],{"path":5042,"title":5043},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#installation","Installation",{"path":5045,"title":13},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#usage",{"path":5047,"title":5048},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#utilities","Utilities",{"path":5050,"title":5051},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#reset-utility","Reset Utility",{"path":5053,"title":5054},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#typographic-utilities","Typographic Utilities",{"path":5056,"title":5057},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#font-size-utilities","Font Size Utilities",{"path":5059,"title":5060},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#color-utilities","Color Utilities",{"path":5062,"title":5063},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#border-utilities","Border Utilities",{"path":5065,"title":5066},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#box-shadow-utilities","Box Shadow Utilities",{"path":5068,"title":5069},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#grid-and-container-utilities","Grid & Container Utilities",{"path":5071,"title":5072},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#spacing-utilities","Spacing Utilities",{"path":5074,"title":5075},"\u002Fdocs\u002Fdeveloper\u002Fcss-framework\u002F#css-custom-properties","CSS Custom Properties",{"path":5077,"title":5078,"icon":5079,"keywords":5080,"children":5081},"\u002Fdocs\u002Fdeveloper\u002Feslint","ESLint Plugin","interface-checked","eslint lint rules css tailwind",[5082,5084,5086,5089,5092,5095],{"path":5083,"title":5043},"\u002Fdocs\u002Fdeveloper\u002Feslint\u002F#installation",{"path":5085,"title":13},"\u002Fdocs\u002Fdeveloper\u002Feslint\u002F#usage",{"path":5087,"title":5088},"\u002Fdocs\u002Fdeveloper\u002Feslint\u002F#nord-rules","Nord Rules",{"path":5090,"title":5091},"\u002Fdocs\u002Fdeveloper\u002Feslint\u002F#tailwind-rules","Tailwind Rules",{"path":5093,"title":5094},"\u002Fdocs\u002Fdeveloper\u002Feslint\u002F#custom-configuration","Custom Configuration",{"path":5096,"title":5097},"\u002Fdocs\u002Fdeveloper\u002Feslint\u002F#class-detection","Class Detection",{"path":5099,"title":5100,"icon":5101,"keywords":5102},"\u002Fdocs\u002Fdeveloper\u002Fworking-with-ai","Working with AI","interface-ai","ai llms skills agents",{"path":5104,"title":5105,"icon":5106,"keywords":5107},"\u002Fdocs\u002Fdeveloper\u002Ffaq","FAQ","interface-help","questions answers support",{"path":5109,"title":5110,"icon":5025,"keywords":5111,"children":5112},"\u002Fdesign","Design","design foundations themes brand tools figma",[5113,5115,5148,5184,5189],{"path":5109,"title":5014,"icon":5015,"keywords":5114},"design start foundations figma",{"path":5116,"title":5117,"icon":5025,"keywords":5118,"children":5119},"\u002Fdesign\u002Ffoundations","Foundations","principles accessibility colors typography grid naming",[5120,5122,5125,5127,5130,5133,5136,5139,5142,5145],{"path":5121,"title":4524},"\u002Fdesign\u002Ffoundations\u002Faccessibility-checklist",{"path":5123,"title":5124},"\u002Fdesign\u002Ffoundations\u002Fcolors","Color System",{"path":5126,"title":5060},"\u002Fdesign\u002Ffoundations\u002Fcolor-utilities",{"path":5128,"title":5129},"\u002Fdesign\u002Ffoundations\u002Fprinciples","Principles",{"path":5131,"title":5132},"\u002Fdesign\u002Ffoundations\u002Ffigma","Figma Toolkit",{"path":5134,"title":5135},"\u002Fdesign\u002Ffoundations\u002Fgrid","Grid",{"path":5137,"title":5138},"\u002Fdesign\u002Ffoundations\u002Ficonography","Iconography",{"path":5140,"title":5141},"\u002Fdesign\u002Ffoundations\u002Fnaming","Naming",{"path":5143,"title":5144},"\u002Fdesign\u002Ffoundations\u002Fbrand","Nordhealth Brand",{"path":5146,"title":5147},"\u002Fdesign\u002Ffoundations\u002Ftypography","Typography",{"path":5149,"title":5150,"icon":5151,"keywords":5152,"children":5153},"\u002Fdesign\u002Fthemes","Themes","interface-mode-light","themes brand dark light contrast",[5154,5156,5158,5161,5163,5166,5169,5172,5175,5178,5181],{"path":5155,"title":105},"#top",{"path":5157,"title":5043},"#installation",{"path":5159,"title":5160},"#available-themes","Available Themes",{"path":5162,"title":728},"#examples",{"path":5164,"title":5165},"#dark-mode","Dark Mode",{"path":5167,"title":5168},"#creating-themes","Creating Themes",{"path":5170,"title":5171},"#accent-color","Accent Color",{"path":5173,"title":5174},"#top-bar-theming","Top Bar theming",{"path":5176,"title":5177},"#logo-usage","Logo Usage",{"path":5179,"title":5180},"#theming-in-figma","Theming in Figma",{"path":5182,"title":5183},"#theme-builder","Theme Builder",{"path":5185,"title":5186,"icon":5187,"keywords":5188},"\u002Fdesign\u002Fassets","Brand assets","interface-attachment","assets downloads logo brand figma",{"path":5190,"title":5191,"icon":5192,"keywords":5193},"\u002Fdesign\u002Ftools","Tools","navigation-settings","tools color generator theme builder accessibility checklist","\u002Fdocs","docs",{"title":5197,"children":5198,"path":5310,"stem":5311},"Core",[5199,5204,5242,5290,5295,5300,5305],{"path":5200,"title":5201,"icon":5202,"keywords":5203},"\u002Fcomponents","Components","interface-grid","components web components reference api examples",{"path":5205,"title":5206,"icon":5207,"keywords":5208,"children":5209},"\u002Fcore\u002Ftokens","Design Tokens","interface-tag","tokens variables color space typography",[5210,5213,5216,5219,5222,5225,5228,5231,5234,5237,5240],{"path":5211,"title":5212},"#color","Color",{"path":5214,"title":5215},"#border-radius","Border Radius",{"path":5217,"title":5218},"#box-shadow","Box Shadow",{"path":5220,"title":5221},"#font-size","Font Size",{"path":5223,"title":5224},"#font","Font",{"path":5226,"title":5227},"#line-height","Line Height",{"path":5229,"title":5230},"#size","Size",{"path":5232,"title":5233},"#space","Space",{"path":5235,"title":5236},"#transition","Transition",{"path":5238,"title":5239},"#z-index","Z-index",{"path":5241,"title":13},"#usage",{"path":5243,"title":5244,"icon":5245,"keywords":5246,"children":5247},"\u002Fcore\u002Fcss\u002Ftailwind","Tailwind CSS","interface-edit","tailwind utilities css tokens",[5248,5250,5252,5255,5258,5261,5264,5267,5270,5273,5276,5279,5282,5284,5287],{"path":5249,"title":5043},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#installation",{"path":5251,"title":13},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#usage",{"path":5253,"title":5254},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#peer-dependencies","Peer Dependencies",{"path":5256,"title":5257},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#theme-variables","Theme Variables",{"path":5259,"title":5260},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#logical-properties","Logical Properties",{"path":5262,"title":5263},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#typography-examples","Typography Examples",{"path":5265,"title":5266},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#color-examples","Color Examples",{"path":5268,"title":5269},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#border-examples","Border Examples",{"path":5271,"title":5272},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#shadow-examples","Shadow Examples",{"path":5274,"title":5275},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#miscellaneous-utilities","Miscellaneous Utilities",{"path":5277,"title":5278},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#nord-components","Nord Components",{"path":5280,"title":5281},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#form-utilities","Form Utilities",{"path":5283,"title":5135},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#grid",{"path":5285,"title":5286},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#states-hover-focus-etc","States (Hover, Focus, etc.)",{"path":5288,"title":5289},"\u002Fcore\u002Fcss\u002Ftailwind\u002F#extending-the-theme","Extending the Theme",{"path":5291,"title":5292,"icon":5293,"keywords":5294},"\u002Fblocks","Blocks","interface-table","blocks patterns sections examples",{"path":5296,"title":5297,"icon":5298,"keywords":5299},"\u002Ftemplates","Templates","navigation-catalog","templates pages layouts examples",{"path":5301,"title":5302,"icon":5303,"keywords":5304},"\u002Ficons","Icons","interface-bookmark","icons nordicons symbols",{"path":5306,"title":5307,"icon":5308,"native":367,"keywords":5309},"\u002Fstorybook","Playground","interface-play","playground storybook examples","\u002Fcore","core",{"title":5313,"path":5314,"stem":5315,"children":5316},"Updates","\u002Fupdates","updates\u002Findex",[5317,5321,5326],{"path":5314,"title":5318,"icon":5319,"keywords":5320},"Latest Updates","file-notes","latest updates blog announcements news",{"path":5322,"title":5323,"icon":5324,"keywords":5325},"\u002Fchangelogs","Changelog","text-list","changelog releases packages versions",{"path":5327,"title":5328,"icon":5010,"keywords":5329},"\u002Fmigrations","Migration guides","migrations upgrade guides breaking changes",{"title":5331,"children":5332,"path":5362,"stem":5363},"Resources",[5333,5338,5342,5346,5350,5354,5358],{"path":5334,"title":5335,"icon":5336,"keywords":5337},"\u002Fresources\u002Fabout","About the design system","interface-info","about nord design system team goals",{"path":5339,"title":5340,"icon":5106,"keywords":5341},"\u002Fresources\u002Fsupport","Support","help feedback support slack office hours status",{"path":5343,"title":5344,"icon":5245,"keywords":5345},"\u002Fresources\u002Fcontributing","Contributing","contributing contribution proposal process",{"path":5347,"title":5348,"icon":5324,"keywords":5349},"\u002Fresources\u002Fbacklog-prioritization","Backlog prioritization","backlog prioritization roadmap requests",{"path":5351,"title":5352,"icon":5106,"keywords":5353},"\u002Fresources\u002Faccessibility-statement","Accessibility statement","accessibility statement wcag website",{"path":5355,"title":5356,"icon":5336,"keywords":5357},"\u002Fresources\u002Fcareers","Careers","careers jobs team",{"path":5359,"title":5360,"icon":5319,"keywords":5361},"\u002Fresources\u002Fterms","Terms of use","terms legal license usage","\u002Fresources","resources",[5365,5387,5401,5406,5411,5416,5420,5424,5428,5432,5447,5492,5496,5509,5522,5531,5541,5545,5549,5553,5574,5592,5596,5637,5641,5674,5678,5682,5686,5690,5699,5740,5749,5753,5757,5761,5782,5800,5809,5813,5817,5826,5839,5867,5871,5875,5879,5883,5887,5891,5904,5925,5929,5938,5942,5946,5949,5953,5966,5968,5977,5981,5985,5989,5998,6002,6006,6010,6014],{"name":5366,"tagName":5367,"description":5368,"category":5369,"status":4648,"isNew":4649,"lightDom":367,"parts":5370},"Accordion","nord-accordion","Accordion is a set of collapsible sections, each with a header that toggles\nthe visibility of its content. It coordinates a group of\nAccordion Item elements, keyboard focus\nmovement between them, and which items are open.","container",[5371,5375,5379,5383],{"name":5372,"tagName":5373,"description":5374},"AccordionHeader","nord-accordion-header","Accordion Header is the heading that labels an\nAccordion Panel. Following the WAI-ARIA\naccordion pattern, its Accordion Trigger\nbutton is wrapped in a heading element.",{"name":5376,"tagName":5377,"description":5378},"AccordionItem","nord-accordion-item","Accordion Item groups an Accordion Header and\nits Accordion Panel within an\nAccordion.",{"name":5380,"tagName":5381,"description":5382},"AccordionPanel","nord-accordion-panel","Accordion Panel holds the content revealed by its\nAccordion Trigger. It must be placed inside\nan Accordion Item and animates its height as it\nopens and closes.",{"name":5384,"tagName":5385,"description":5386},"AccordionTrigger","nord-accordion-trigger","Accordion Trigger is the button that opens and closes its\nAccordion Panel. It must be placed inside an\nAccordion Header.",{"name":5388,"tagName":5389,"description":5390,"category":5391,"status":4648,"isNew":4649,"lightDom":4649,"parts":5392},"Aside","nord-aside","Container for the right-side rail + drawer pattern in the app shell.","layout",[5393,5397],{"name":5394,"tagName":5395,"description":5396},"AsideDrawer","nord-aside-drawer","A drawer panel inside \u003Cnord-aside>.",{"name":5398,"tagName":5399,"description":5400},"AsideTrigger","nord-aside-trigger","Rail button that toggles a \u003Cnord-aside-drawer> inside \u003Cnord-aside>,\nor navigates like a link when href is set.",{"name":5402,"tagName":5403,"description":5404,"category":5405,"status":4648,"isNew":4649,"lightDom":367},"Autocomplete","nord-autocomplete","Autocomplete is a free-text input with suggestions: the text the user types\nis itself the committed value (a string), and the options are completion\naids. Picking a suggestion fills the input with the option's label and commits\nthat label. Use it when the answer is open-ended text but you can offer\nhelpful completions (a city, a tag, a username); reach for\nCombobox instead when the value must be one of a\nfixed set of options.\n\nAutocomplete is a control only — it has no built-in label, hint or error.\nCompose it inside a Field to give it a label, hint and\nerror message, the same way you would a native input.\n\nBase UI parity: Autocomplete is the Combobox primitive with\nselectionMode=\"none\" + fillInputOnItemPress.","form",{"name":5407,"tagName":5408,"description":5409,"category":5410,"status":4648,"isNew":4649,"lightDom":4649},"Avatar","nord-avatar","Avatar is used for showing a thumbnail representation of a single user or entity.\nDefault avatar illustration is displayed when no src is specified.","content",{"name":5412,"tagName":5413,"description":5414,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},"Badge","nord-badge","Badges are used to inform users of the status of an object\nor of an action that’s been taken. Commonly used in tabular\ndata to indicate status.","feedback",{"name":5417,"tagName":5418,"description":5419,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},"Banner","nord-banner","Banner informs users about important changes or conditions in the\ninterface. Use this component if you need to communicate to users\nin a prominent way.",{"name":5421,"tagName":975,"description":5422,"category":5423,"status":4648,"isNew":4649,"lightDom":4649},"Button","Buttons are used for interface actions. Primary style should be\nused only once per section for main call-to-action, while other\nstyles can appear more frequently.","action",{"name":5425,"tagName":5426,"description":5427,"category":5423,"status":4648,"isNew":4649,"lightDom":4649},"ButtonGroup","nord-button-group","Button groups are designed to bring together button controls that are of a similar nature. For example text formatting controls.",{"name":5429,"tagName":5430,"description":5431,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},"Calendar","nord-calendar","Calendar allows user to pick a date. It comes with built-in\nfunctionality that allows you to set a minimum and a maximum allowed date.\nPlease note that the date must be passed in ISO-8601 format.",{"name":255,"tagName":290,"description":5433,"category":5369,"status":4648,"isNew":4649,"lightDom":4649,"parts":5434},"Cards are shadowed surfaces that display content and actions on a\nsingle topic. They should be easy to scan for relevant and\nactionable information.",[5435,5439,5443],{"name":5436,"tagName":5437,"description":5438},"CardBody","nord-card-body","The main content region of a composed Card. Applies the\ncard's body padding and grows to fill the available space between the\nCard Header and Card Footer.\n\nPlace it as a direct child of nord-card.",{"name":5440,"tagName":5441,"description":5442},"CardFooter","nord-card-footer","The footer region of a composed Card. Typically holds\nactions or supplementary information.\n\nPlace it as a direct child of nord-card, after\nCard Body. Set divider to draw a separating\nborder above the footer.",{"name":5444,"tagName":5445,"description":5446},"CardHeader","nord-card-header","The header region of a composed Card. Lays a heading and\noptional actions out in a row (heading at the start, actions at the end) and\ndraws the divider beneath the header.\n\nPlace it as a direct child of nord-card, before\nCard Body. Direct child heading elements use the\nsame typography as the legacy Card header slot.",{"name":5448,"tagName":5449,"description":5450,"category":5410,"status":4648,"isNew":4649,"lightDom":4649,"parts":5451},"Chart","nord-chart","Chart owns a renderer-independent declarative chart composition.",[5452,5456,5460,5464,5468,5472,5476,5480,5484,5488],{"name":5453,"tagName":5454,"description":5455},"ChartArea","nord-chart-area","Chart Area emphasizes magnitude as well as change.",{"name":5457,"tagName":5458,"description":5459},"ChartAxis","nord-chart-axis","Chart Axis describes one Cartesian axis.",{"name":5461,"tagName":5462,"description":5463},"ChartCrosshair","nord-chart-crosshair","Chart Crosshair enables the supported Cartesian crosshair interaction.",{"name":5465,"tagName":5466,"description":5467},"ChartDonut","nord-chart-donut","Chart Donut shows a part-to-whole comparison around a centre.",{"name":5469,"tagName":5470,"description":5471},"ChartGroupedBar","nord-chart-grouped-bar","Chart Grouped Bar compares multiple values side by side.",{"name":5473,"tagName":5474,"description":5475},"ChartLegend","nord-chart-legend","Chart Legend configures semantic legend presentation for a Chart.",{"name":5477,"tagName":5478,"description":5479},"ChartLine","nord-chart-line","Chart Line shows change over an ordered Cartesian scale.",{"name":5481,"tagName":5482,"description":5483},"ChartPie","nord-chart-pie","Chart Pie shows a small part-to-whole comparison.",{"name":5485,"tagName":5486,"description":5487},"ChartStackedBar","nord-chart-stacked-bar","Chart Stacked Bar compares contributions to a total.",{"name":5489,"tagName":5490,"description":5491},"ChartTooltip","nord-chart-tooltip","Chart Tooltip configures supplementary pointer content.",{"name":5493,"tagName":5494,"description":5495,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},"Checkbox","nord-checkbox","Checkboxes allow user to choose one or more options from a limited set of options.\nIf you have more than 10 options, please use Select component instead.",{"name":5497,"tagName":5498,"description":5499,"category":5369,"status":4648,"isNew":4649,"lightDom":367,"parts":5500},"Collapsible","nord-collapsible","Collapsible is a disclosure that shows or hides a section of content. It wires\ntogether a Collapsible Trigger and a\nCollapsible Panel, animating the panel\nheight as it opens and closes.",[5501,5505],{"name":5502,"tagName":5503,"description":5504},"CollapsiblePanel","nord-collapsible-panel","Collapsible Panel holds the content revealed by its\nCollapsible Trigger. It must be placed\ninside a Collapsible and animates its height as it\nopens and closes.",{"name":5506,"tagName":5507,"description":5508},"CollapsibleTrigger","nord-collapsible-trigger","Collapsible Trigger is the interactive control that opens and closes its\nCollapsible panel. It must be placed inside a\nCollapsible.",{"name":5510,"tagName":5511,"description":5512,"category":5405,"status":4648,"isNew":4649,"lightDom":367,"parts":5513},"Combobox","nord-combobox","Combobox lets users choose one option (or several) from a list by typing to\nfilter, then picking with the keyboard or pointer. Use it when a Select\nwould be unwieldy because there are many options to scan.\n\nCombobox is a control only — it has no built-in label, hint or error. Compose\nit inside a Field to give it a label, hint and error\nmessage, the same way you would a native input.\n\nThe committed value is an option's value (or an array of them with\nmultiple); the input is a filter\u002Fsearch field whose text is discarded on\ncommit. For a free-text input with suggestions where the typed text is the\nvalue, use Autocomplete instead.",[5514,5518],{"name":5515,"tagName":5516,"description":5517},"ComboboxGroup","nord-combobox-group","Groups declarative \u003Cnord-combobox-option> children under a heading inside a\nCombobox:\n\n``html\n\u003Cnord-combobox>\n  \u003Cnord-combobox-group label=\"Frameworks\">\n    \u003Cnord-combobox-option value=\"next\">Next.js\u003C\u002Fnord-combobox-option>\n  \u003C\u002Fnord-combobox-group>\n\u003C\u002Fnord-combobox>\n`\n\nContained options inherit this label as their group. The element renders\nnothing itself and is hidden with display: none`.",{"name":5519,"tagName":5520,"description":5521},"ComboboxOption","nord-combobox-option","A declarative option for a Combobox. Place these as\nchildren of \u003Cnord-combobox> instead of (or as an alternative to) setting the\n.options property:\n\n``html\n\u003Cnord-combobox>\n  \u003Cnord-combobox-option value=\"bug\">Bug\u003C\u002Fnord-combobox-option>\n  \u003Cnord-combobox-option value=\"feature\">Feature\u003C\u002Fnord-combobox-option>\n\u003C\u002Fnord-combobox>\n`\n\nThe option's child markup becomes the rendered row, so you can author custom\nitems (e.g. an avatar + text) without an html string or a render function.\nSet the label attribute when the visible markup isn't plain text, so\nfiltering and the accessible name have something to match on.\n\nThe element renders nothing itself — it is a data source the combobox reads via\ncontext and is hidden with display: none`.",{"name":5523,"tagName":5524,"description":5525,"category":5423,"status":4648,"isNew":4649,"lightDom":4649,"parts":5526},"CommandMenu","nord-command-menu","Command Menu allows users to navigate and use an app without\ntouching the mouse and helps them transform into “power users”\nwho can harness more advanced features far faster.",[5527],{"name":5528,"tagName":5529,"description":5530},"CommandMenuAction","nord-command-menu-action","Command Menu Action displays a single action that can be executed by the user. For usage examples, please see Command Menu component.",{"name":4646,"tagName":207,"description":5532,"category":4650,"status":4648,"isNew":4649,"lightDom":4649,"parts":5533},"Data Table renders tabular data from a TanStack column model with sorting,\nselection, pagination and filtering. It is **controlled and headless**: feed\nit columns, data and state and react to its *-change events — it owns\nno data fetching, serialization or persistence. Filters and pagination are\ndeclared as config (filters, pagination) and rendered by the table.\n\nConsumer content for the slots below is captured from light-DOM slot=\"…\"\nchildren and re-projected into the rendered table (this element is light-DOM,\nso native \u003Cslot> projection isn't available).",[5534,5537],{"name":5535,"tagName":965,"description":5536},"DataTableBulkActions","Actions for a Data Table's bulk-selection state.\nPlace it as a direct child of nord-data-table and put your action buttons\ninside; the table captures it and renders it in the header-row takeover that\nappears while rows are selected (next to the \"N selected\" count).\n\nIt's a light-DOM marker (styled display: contents by the parent table) — it\nhosts your controls without adding a box, so they sit inline in the takeover.",{"name":5538,"tagName":5539,"description":5540},"DataTableFilterBar","nord-data-table-filter-bar","Data Table Filter Bar renders a row of filter controls from a declarative\nfilters config — the filter equivalent of a column model. Each descriptor\nmaps to the matching nord-filter-* control; the bar tracks the value map and\nemits a single filters-change event. It owns no data fetching or\nserialization. Used embedded by Data Table, or\nstandalone (bind to a table via for=).",{"name":5542,"tagName":5543,"description":5544,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},"DatePicker","nord-date-picker","\nDate Picker allows user to enter a date either through text input,\nor by choosing a date from the calendar. Please note that the date\nmust be passed in ISO-8601 format: YYYY-MM-DD.",{"name":5546,"tagName":5547,"description":5548,"category":5405,"status":4648,"isNew":4649,"lightDom":367},"DateRangePicker","nord-date-range-picker","Date Range Picker lets people choose a start and end date as a single range,\neither from a built-in list of presets (Today, Last 7 days, This month, …) or\nfrom a range calendar. It is a control only — compose it inside a\nField for a label, hint or error, like a native input.\n\nThe committed value is an ISO-8601 interval string YYYY-MM-DD\u002FYYYY-MM-DD;\nthe convenience start-date \u002F end-date props and the valueAsDateRange\ngetter\u002Fsetter stay in sync with it. Selecting in the popout builds a *pending*\nrange; **Apply** commits it (firing change), **Cancel** reverts to the last\ncommitted value, and **Clear** empties it.",{"name":5550,"tagName":5551,"description":5552,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},"Divider","nord-divider","Divider components are used to separate and distinguish sections of\ncontent or groups of menu items. Visually, they look like\nhorizontal or vertical lines.",{"name":5554,"tagName":5555,"description":5556,"category":5391,"status":4648,"isNew":4649,"lightDom":4649,"parts":5557},"Drawer","nord-drawer","Drawer is used to display context-sensitive actions and  information.\nDrawer doesn’t block users from completing their task, like a modal would.",[5558,5562,5566,5570],{"name":5559,"tagName":5560,"description":5561},"DrawerBody","nord-drawer-body","The main content region of a composed Drawer. This is\nthe scrolling zone between the fixed header and footer; the drawer's padding\nattribute applies here.\n\nIt occupies the drawer's default slot, so place it as a direct child of\nnord-drawer (no slot attribute).",{"name":5563,"tagName":5564,"description":5565},"DrawerClose","nord-drawer-close","A standalone close control for a composed Drawer.\n\nWhen left empty it renders a default close icon button. Give it your own\ncontrol and it becomes a transparent wrapper that removes the nearest\nnord-drawer when clicked.",{"name":5567,"tagName":5568,"description":5569},"DrawerFooter","nord-drawer-footer","The footer region of a composed Drawer. A fixed zone at\nthe bottom of the drawer, typically holding actions.\n\nAuto-assigns itself to the drawer's footer slot, so place it as a direct\nchild of nord-drawer (no slot attribute needed).",{"name":5571,"tagName":5572,"description":5573},"DrawerHeader","nord-drawer-header","The header region of a composed Drawer. A fixed zone\nat the top of the drawer; bring your own heading element or use it directly\nfor a title.\n\nAuto-assigns itself to the drawer's header slot, so place it as a direct\nchild of nord-drawer (no slot attribute needed).",{"name":5575,"tagName":5576,"description":5577,"category":5578,"status":4648,"isNew":4649,"lightDom":4649,"parts":5579},"Dropdown","nord-dropdown","Dropdown menu displays a list of actions or selectable options for\na user. Dropdown uses popout component internally to create\nthe overlay functionality.","overlay",[5580,5584,5588],{"name":5581,"tagName":5582,"description":5583},"DropdownGroup","nord-dropdown-group","Dropdown group includes all the actions or items in a single dropdown\ngroup and is used for grouping items into related categories.",{"name":5585,"tagName":5586,"description":5587},"DropdownItem","nord-dropdown-item","Dropdown item populates dropdown with actions. Items can be\nplaced either inside a dropdown group or directly inside a\ndropdown component.",{"name":5589,"tagName":5590,"description":5591},"DropdownSubmenu","nord-dropdown-submenu","Dropdown submenu nests a secondary menu within a parent dropdown.",{"name":5593,"tagName":5594,"description":5595,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},"EmptyState","nord-empty-state","Empty state can be used when there is no data to display to\ndescribe what the user can do next. Empty state provides\nexplanation and guidance to help user progress.",{"name":5597,"tagName":5598,"description":5599,"category":5405,"status":4648,"isNew":4649,"lightDom":367,"parts":5600},"Field","nord-field","Field is the wrapper for a single form control. It lays out a\nField Label, a control (such as an\nInput), an optional\nField Description and a\nField Error with consistent spacing.\n\nCombine several together in a Field Group and\ngroup related groups with a Field Set.\n\nThe Field shares its state with the control through context: a Nord control\nplaced inside a Field suppresses its own built-in label\u002Fhint\u002Ferror and takes\nits accessible name, description and invalid\u002Fdisabled state from the Field.",[5601,5605,5609,5613,5617,5621,5625,5629,5633],{"name":5602,"tagName":5603,"description":5604},"FieldContent","nord-field-content","Field Content wraps a Field Label and\nField Description so they stay aligned as a\nsingle text block, which is especially useful in horizontal\nField layouts.",{"name":5606,"tagName":5607,"description":5608},"FieldDescription","nord-field-description","Field Description is the helper or hint text for a Field.\nIt is styled to match the hint text used by Nord form controls such as\nInput.",{"name":5610,"tagName":5611,"description":5612},"FieldError","nord-field-error","Field Error displays validation error text for a Field.\nIt is styled to match the error text used by Nord form controls such as\nInput.\n\nExposes itself as a live region (role=\"alert\", aria-live=\"polite\") so the\nmessage is announced when it appears. The message is supplied as the\nelement's children.",{"name":5614,"tagName":5615,"description":5616},"FieldGroup","nord-field-group","Field Group stacks a set of Field controls vertically\nwith consistent spacing. Separate sections with a\nField Separator when needed.",{"name":5618,"tagName":5619,"description":5620},"FieldLabel","nord-field-label","Field Label is the label for a control inside a Field.\nIt is styled to match the labels used by Nord form controls such as\nInput.\n\nThe enclosing Field shares this label's id and text with the control through\ncontext, so the control names itself (aria-labelledby for light-DOM controls,\naria-label for shadow-DOM ones) — no wiring needed. Set the for attribute to\na control's id to additionally get native-style click-to-focus.\n\nThe required indicator is driven by the control: mark the control required\nand the Field toggles this label's required attribute automatically.",{"name":5622,"tagName":5623,"description":5624},"FieldLegend","nord-field-legend","Field Legend labels a Field Set, naming the group of\nfields for assistive technology. Place it as the first child of a Field Set.",{"name":5626,"tagName":5627,"description":5628},"FieldSeparator","nord-field-separator","Field Separator draws a thin divider between sections inside a\nField Group.",{"name":5630,"tagName":5631,"description":5632},"FieldSet","nord-field-set","Field Set groups related fields under a Field Legend\nfor semantic, accessible grouping. It exposes role=\"group\" named by its\nlegend; wrap a Field Group inside.",{"name":5634,"tagName":5635,"description":5636},"FieldTitle","nord-field-title","Field Title is an emphasized inline title used inside choice-card style\nField layouts, where a Field Label\nwraps a whole selectable field.",{"name":5638,"tagName":5639,"description":5640,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},"Fieldset","nord-fieldset","Deprecated: for new code, group related controls with the composable Field\nfamily — see grouping fields with Field.\nnord-fieldset remains supported for backwards compatibility and is not\nscheduled for removal.\n\nFieldset is used for grouping sets of input components. It is necessary to use a\nfieldset with radio and checkbox components, and can also be useful for logically\ngrouping other types of inputs.",{"name":5642,"tagName":5643,"description":5644,"category":5405,"status":4648,"isNew":4649,"lightDom":367,"parts":5645},"FilterBar","nord-filter-bar","Filter Bar is a layout wrapper for a row of filter controls. It lays its\nchildren out in a wrapping flex row with a consistent gap, so you can drop in\nFilter Field, Filter Input,\nFilter Add Button and\nFilter Reset Button (or any controls) and\nhave them align without extra styling.\n\nLike Pagination, it is composition-first: it owns no\nfilter state and emits no events. Your app owns the active filters and any URL\nor query-string syncing; the filter primitives only emit intent.",[5646,5650,5654,5658,5662,5666,5670],{"name":5647,"tagName":5648,"description":5649},"FilterAddButton","nord-filter-add-button","Filter Add Button opens a popout of available filters and emits the chosen one\nso your app can add it to the bar. Pass a flat list of options, or group them\nunder headings; selecting one fires a select event with the option's id\nand closes the popout.\n\nLike the other filter primitives it is intent-only: it does not track which\nfilters are active. Your app owns the active filters and decides what to do on\nselect (typically render a new Filter Field).\nMirrors the Provet Cloud filter add button.",{"name":5651,"tagName":5652,"description":5653},"FilterDate","nord-filter-date","Filter Date is a self-contained single-date **filter**: a chip that opens a\npopout containing an inline Calendar. It is the\nsingle-date counterpart to Filter Date Range\nand renders the shared filter chip via Filter Field.\n\nComposition-first: it emits change\u002Fclear\u002Fremove and leaves the active\nfilters and any URL\u002Fquery state to your app.",{"name":5655,"tagName":5656,"description":5657},"FilterDateRange","nord-filter-date-range","Filter Date Range is a self-contained date-range **filter**: a chip that opens\na popout containing an inline Date Range Picker\n(presets + two-month calendar + Apply). It is the date-range counterpart to\nFilter Dropdown and renders the shared filter\nchip via Filter Field.\n\nComposition-first: it emits change\u002Fclear\u002Fremove and leaves the active\nfilters and any URL\u002Fquery state to your app.",{"name":5659,"tagName":5660,"description":5661},"FilterDropdown","nord-filter-dropdown","Filter Dropdown is a full-featured filter control: a chip trigger that opens a\npopout list of options. It owns its selection and tracks value, unlike the\ncomposition-first Filter Field — pass it options\nand listen for change. It ports the Provet Cloud filter dropdown.\n\nOptions come in three shapes: a flat list ({ value, label }), groups\n({ heading, children }) rendered with dividers, and tree-style options\n(a selectable option with children) where the parent stays selectable and the\nchildren render indented. Single mode tracks a string value and closes on\nselect; multiple tracks an array, shows checkboxes and keeps the popout open.",{"name":5663,"tagName":5664,"description":5665},"FilterField","nord-filter-field","Filter Field is the presentation-only filter **chip**: a joined pill showing a\nleading icon, the filter's label, the active selection summary (value) and\na clear or remove affordance, dashed while inactive. It is the shared chip used\nacross the filter family and the building block for custom filters.\n\nIt owns no popout and tracks no value — drop it into a popout-owning control as\nits slot=\"trigger\" (the host opens\u002Fpositions the popout and sets\naria-controls\u002Faria-haspopup\u002Faria-expanded on this element). Show the\nactive selection with value, reset it in response to clear, and remove the\nwhole field in response to remove. Your app owns the active filters and any\nURL\u002Fquery state.",{"name":5667,"tagName":5668,"description":5669},"FilterInput","nord-filter-input","Filter Input is a compact search\u002Ftext field for filtering a collection. It\nreplaces the small ad-hoc search inputs that sit in toolbars and table\nheaders. By default it renders inline as a small search field with a leading\nsearch icon; set mode=\"chip\" to collapse it behind a chip button that opens\nthe input in a popout, which is handy in a crowded Filter Bar.\n\nIt emits intent only: input as the user types and change when the value is\ncommitted. Your app owns the active filters and any URL\u002Fquery state — read the\nvalue from the event target (or bind value) and filter accordingly.\n\nIt is a control only, like Combobox: compose it inside\na Field for a visible label, or set label for an\naccessible name when used standalone.",{"name":5671,"tagName":5672,"description":5673},"FilterResetButton","nord-filter-reset-button","Filter Reset Button clears every active filter at once. It is a thin,\nintent-only control: it renders a plain button and dispatches a reset event\nwhen pressed. Your app owns the active filters and is responsible for clearing\nthem (and any URL\u002Fquery state) in the handler — the button holds no state of\nits own.\n\nDisable it while there is nothing to reset by binding disabled to whether any\nfilter is active (e.g. ?disabled=${!hasFilters}). Mirrors the Provet Cloud\nfilter reset button.",{"name":5675,"tagName":5676,"description":5677,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},"Footer","nord-footer","The footer is a block of designated space for providing additional information or actions that are positioned below the main content.",{"name":5679,"tagName":5680,"description":5681,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},"Header","nord-header","The header is a block of designated space for labelling the currently\nviewed context as well as providing primary actions.",{"name":5683,"tagName":5684,"description":5685,"category":5410,"status":4648,"isNew":4649,"lightDom":4649},"Icon","nord-icon","Icons are used to provide additional meaning or in places where text label doesn’t fit.\nIcon component allows you to display an icon from the Nordicons library.",{"name":5687,"tagName":5688,"description":5689,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},"Input","nord-input","Inputs are used to allow users to provide text input when the expected input is short.\nAs well as plain text, Input supports various types of text, including passwords and numbers.",{"name":5691,"tagName":5692,"description":5693,"category":5405,"status":4648,"isNew":4649,"lightDom":367,"parts":5694},"InputGroup","nord-input-group","Input Group composes exactly one Nord Input or Textarea with reusable add-ons\nwhile leaving the editable control, form state, and all consumer nodes owned\nby the consumer.",[5695],{"name":5696,"tagName":5697,"description":5698},"InputGroupAddon","nord-input-group-addon","Positions reusable Nord content around the text control in an Input Group.\nIts children retain their native semantics and interaction behavior.",{"name":5700,"tagName":5701,"description":5702,"category":4650,"status":4648,"isNew":4649,"lightDom":367,"parts":5703},"Item","nord-item","Item is a flexible, composable row used to display a piece of content such as\na person, a file or a setting. Combine it with Item Media,\nItem Content, Item Title,\nItem Description and Item Actions\nto build rich list rows. Stack several together with Item Group.\n\nTo make a whole Item act as a link, wrap it in an \u003Ca> element. The row\nhighlights on hover when wrapped this way.",[5704,5708,5712,5716,5720,5724,5728,5732,5736],{"name":5705,"tagName":5706,"description":5707},"ItemActions","nord-item-actions","Item Actions holds the trailing controls of an Item,\nsuch as buttons or a chevron.",{"name":5709,"tagName":5710,"description":5711},"ItemContent","nord-item-content","Item Content holds the textual content of an Item,\ntypically an Item Title and an\nItem Description. It grows to fill the\navailable space.",{"name":5713,"tagName":5714,"description":5715},"ItemDescription","nord-item-description","Item Description is the secondary, muted line of text in an\nItem. It is clamped to two lines.",{"name":5717,"tagName":5718,"description":5719},"ItemFooter","nord-item-footer","Item Footer spans the full width at the bottom of an Item,\nuseful for a row of metadata or trailing actions.",{"name":5721,"tagName":5722,"description":5723},"ItemGroup","nord-item-group","Item Group stacks a set of Item rows vertically and\nexposes them to assistive technology as a list. Separate individual items\nwith Item Separator.",{"name":5725,"tagName":5726,"description":5727},"ItemHeader","nord-item-header","Item Header spans the full width at the top of an Item,\nuseful for a leading image or a row of metadata.",{"name":5729,"tagName":5730,"description":5731},"ItemMedia","nord-item-media","Item Media holds the leading visual of an Item, such as\nan icon, an avatar or an image.",{"name":5733,"tagName":5734,"description":5735},"ItemSeparator","nord-item-separator","Item Separator draws a horizontal divider between Item\nrows inside an Item Group.",{"name":5737,"tagName":5738,"description":5739},"ItemTitle","nord-item-title","Item Title is the primary line of text in an Item.",{"name":5741,"tagName":5742,"description":5743,"category":5410,"status":4648,"isNew":4649,"lightDom":367,"parts":5744},"Kbd","nord-kbd","Kbd is used to display a keyboard key, such as a shortcut or a key the user\nshould press. Group related keys together with Kbd Group.",[5745],{"name":5746,"tagName":5747,"description":5748},"KbdGroup","nord-kbd-group","Kbd Group lays out a set of Kbd keys together, for example\nto represent a multi-key shortcut such as \u003Ckbd>Ctrl\u003C\u002Fkbd> \u003Ckbd>K\u003C\u002Fkbd>.",{"name":5750,"tagName":5751,"description":5752,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},"Layout","nord-layout","Layout component is used to create the main layout of an app. Layout\ncurrently comes with one main configuration: two-column.",{"name":5754,"tagName":5755,"description":5756,"category":5423,"status":4648,"isNew":4649,"lightDom":4649},"Message","nord-message","Message represents a specific item within a collection,\nsuch as notifications, tasks or conversations. Message\ncan be placed directly inside a dropdown component.",{"name":5758,"tagName":5759,"description":5760,"category":5415,"status":4648,"isNew":4649,"lightDom":367},"Meter","nord-meter","Meter is a graphical display of a numeric value within a known range,\nsuch as disk usage, a battery level or a score. Unlike Progress Bar, it\nrepresents a static measurement rather than the completion of a task.",{"name":5762,"tagName":5763,"description":5764,"category":5578,"status":4648,"isNew":4649,"lightDom":4649,"parts":5765},"Modal","nord-modal","Modal component is used to display content that temporarily blocks interactions\nwith the main view of an application. Modal should be used sparingly and\nonly when necessary.",[5766,5770,5774,5778],{"name":5767,"tagName":5768,"description":5769},"ModalBody","nord-modal-body","The main content region of a composed Modal. This is the\nscrolling zone (when the modal is scrollable) between the fixed header and\nfooter, and carries the modal's body padding.\n\nIt occupies the modal's default slot, so place it as a direct child of\nnord-modal (no slot attribute).",{"name":5771,"tagName":5772,"description":5773},"ModalClose","nord-modal-close","A standalone close control for a composed Modal.\n\nUnlike the modal's built-in close button (which is locked into the header\nzone), this part can be placed **anywhere** inside nord-modal — floated over\ncompletely custom content, dropped into a footer as a \"Cancel\" button, or\nnested inside your own layout. Clicking it dismisses the nearest\nnord-modal through the same cancelable flow as the built-in button (the\nmodal's cancel event still fires and can be prevented).\n\nWhen left empty it renders the default close \"✕\" icon button. Give it your own\ncontrol (a nord-button, button, or link) and it becomes a transparent\nwrapper that turns that control into a close trigger:\n\nThe part is unpositioned by default — place it with your own styles (the\nmodal frame is position: relative, so it is the positioning context):\n\n``html\n\u003C!-- floating icon button over custom content -->\n\u003Cnord-modal-close\n  style=\"position: absolute; inset-block-start: var(--n-space-s); inset-inline-end: var(--n-space-s)\"\n>\u003C\u002Fnord-modal-close>\n\n\u003C!-- any control becomes a close trigger -->\n\u003Cnord-modal-close>\u003Cnord-button>Cancel\u003C\u002Fnord-button>\u003C\u002Fnord-modal-close>\n``",{"name":5775,"tagName":5776,"description":5777},"ModalFooter","nord-modal-footer","The footer region of a composed Modal. A fixed zone at\nthe bottom for call-to-action buttons; stacks on narrow viewports and lays\nout as an end-aligned row on wider ones.\n\nAuto-assigns itself to the modal's footer slot, so place it as a direct\nchild of nord-modal (no slot attribute needed).",{"name":5779,"tagName":5780,"description":5781},"ModalHeader","nord-modal-header","The header region of a composed Modal. A fixed zone that\nsits beside the modal's close button; bring your own heading element.\n\nAuto-assigns itself to the modal's header slot, so place it as a direct\nchild of nord-modal (no slot attribute needed).",{"name":5783,"tagName":5784,"description":5785,"category":5786,"status":4648,"isNew":4649,"lightDom":4649,"parts":5787},"Navigation","nord-navigation","Navigation is used to display the primary navigation in the sidebar\nof an application. Navigation includes a list of links that users\nuse to move between sections of the application.","navigation",[5788,5792,5796],{"name":5789,"tagName":5790,"description":5791},"NavGroup","nord-nav-group","Navigation group includes all the actions or items in a single\ngroup and is used for grouping items into related categories.",{"name":5793,"tagName":5794,"description":5795},"NavItem","nord-nav-item","Navigation item populates sidebar navigation with links.\nEvery item should be placed inside a navigation group.",{"name":5797,"tagName":5798,"description":5799},"NavToggle","nord-nav-toggle","Nav toggle hides and shows the primary navigation inside \u003Cnord-layout>.",{"name":5801,"tagName":5802,"description":5803,"category":5415,"status":4648,"isNew":4649,"lightDom":4649,"parts":5804},"Notification","nord-notification","Notifications provide important information that requires action or acknowledgement.\nA notification is displayed until the user dismisses it.",[5805],{"name":5806,"tagName":5807,"description":5808},"NotificationGroup","nord-notification-group","Notification group is used to position and style a group of notifications.",{"name":5810,"tagName":5811,"description":5812,"category":5405,"status":4648,"isNew":4649,"lightDom":367},"NumberField","nord-number-field","Number Field is a control for entering a numeric value, with decrement and\nincrement stepper buttons, optional drag-to-scrub, and locale-aware\nformatting. It ports the behaviour of Base UI's Number Field: arrow\u002FPage\nstepping, Home\u002FEnd to the bounds, press-and-hold auto-repeat, optional\nwheel\u002Fscrub, clamping, and Intl.NumberFormat formatting.\n\nNumber Field is a control only — it has no built-in label, hint or error.\nCompose it inside a Field with a\nField Label to give it a label, hint and error,\nthe same way you would a native input.\n\nFORM PARTICIPATION: the value is submitted as the raw numeric string under the\nhost name via FormDataController (the inner input has no name, avoiding a\ndouble submit). Unlike Base UI there is no hidden native number input, and —\nlike the other new Nord controls — Number Field does NOT use\nElementInternals, so it performs no native constraint validation: required,\nmin, max and step are NOT enforced as form-blocking validity. min\u002Fmax\ngovern interactive stepping and (unless allow-out-of-range is set) clamp the\nvalue; required only surfaces as required\u002Faria-required on the inner input\nfor assistive technology. Authors must validate constraints themselves and\nreflect failures via invalid and a nord-field-error.\n\nACCESSIBILITY NOTE: the inner control is a text input (with inputmode) and\naria-roledescription=\"Number field\", NOT role=\"spinbutton\" and NOT a\nnative type=\"number\". A text input lets us show locale-formatted text\n(currency, percent, grouping) while keeping full text editing — assistive tech\nreads the formatted value from the input's text. We do NOT add\naria-valuenow\u002Fvaluemin\u002Fvaluemax\u002Fvaluetext: those are only valid on a\nrange role (e.g. spinbutton\u002Fslider) and would fail aria-allowed-attr\nvalidation on a text input. This mirrors what Base UI's NumberFieldInput\nactually ships (only aria-roledescription).",{"name":5814,"tagName":5815,"description":5816,"category":5405,"status":4648,"isNew":4649,"lightDom":367},"OtpField","nord-otp-field","OTP Field is a segmented one-time-code input: it renders length individual\ncharacter cells plus a visually-hidden input that holds the full value, enabling\nSMS \u002F keychain autofill and native pattern\u002Frequired validation. Typing fills\nand auto-advances, Backspace clears and moves back, the arrow keys navigate, and\npasting a code distributes its characters across the cells.\n\nOTP Field is a control only — it has no built-in label, hint or error. Compose\nit inside a Field with a Field Label\n(connected with for) to give it an accessible name, helper text and an error\nmessage, exactly like a native input.",{"name":5818,"tagName":5819,"description":5820,"category":5786,"status":4648,"isNew":4649,"lightDom":4649,"parts":5821},"Outline","nord-outline","Outline is an in-page table of contents that lists a page's headings and\nhighlights the section currently in view as you scroll.\n\nProvide Outline Item children, or point for at\na container to build the list from its headings.",[5822],{"name":5823,"tagName":5824,"description":5825},"OutlineItem","nord-outline-item","Outline Item is a single link within an Outline. It\npoints at an in-page heading via its href and indents according to its\nlevel. Its active state is managed by the parent Outline — you normally\ndon't set it yourself.",{"name":5827,"tagName":5828,"description":5829,"category":5391,"status":4648,"isNew":4649,"lightDom":367,"parts":5830},"OverflowList","nord-overflow-list","Overflow List shows the contiguous set of direct child items that fits in\nthe available inline size and exposes the remaining items to a consumer-owned\noverflow affordance.",[5831,5835],{"name":5832,"tagName":5833,"description":5834},"OverflowListCount","nord-overflow-list-count","Displays the number of items currently hidden by the nearest Overflow List.",{"name":5836,"tagName":5837,"description":5838},"OverflowListMenu","nord-overflow-list-menu","Provides a declarative menu for actions hidden by the nearest Overflow List.",{"name":266,"tagName":5840,"description":5841,"category":5786,"status":4648,"isNew":4649,"lightDom":367,"parts":5842},"nord-pagination","Pagination is the navigation root for a paginated collection. It is\ncomposition-first: it owns no page state, renders no controls, and emits no\nevents. Your app owns the page state, URL\u002Fquery syncing, cursors and any data\nfetching; Nord supplies the semantic\u002Flayout primitives, the styling and the\npaginate() math utility for building the page window.\n\nAs a root it is a navigation landmark — it sets role=\"navigation\" and a\ndefault accessible label so screen-reader users can jump to it. Compose the\nlower-level primitives inside it:\n\n- Pagination Content — the list row.\n- Pagination Item — a slot in the row.\n- Pagination Link — a page link (set current).\n- Pagination Previous — the previous control.\n- Pagination Next — the next control.\n- Pagination Ellipsis — the collapsed-pages marker.\n\nBring your own interactive element — an \u003Ca> (e.g. a framework \u003CLink> \u002F\n\u003CNuxtLink>) or a nord-button — and own its href, navigation and\ndisabled state. See the framework adapters in the docs.",[5843,5847,5851,5855,5859,5863],{"name":5844,"tagName":5845,"description":5846},"PaginationContent","nord-pagination-content","The list container for composed Pagination controls.\nLays its Pagination Item children out in a row.\n\nPlace it inside Pagination, which is already the\nnavigation landmark (it sets role=\"navigation\" and an accessible label).\nDo not add your own \u003Cnav> wrapper — a second landmark around the same\ncontrols would be a duplicate that screen-reader users have to wade through.",{"name":5848,"tagName":5849,"description":5850},"PaginationEllipsis","nord-pagination-ellipsis","The collapsed-pages marker (…) in a composed Pagination.\nThe glyph is decorative; a visually-hidden label gives it meaning for\nassistive tech. Set label to localise it.",{"name":5852,"tagName":5853,"description":5854},"PaginationItem","nord-pagination-item","A single slot in a composed Pagination Content\nrow. Wrap each control — a Pagination Link,\nPagination Previous, Pagination Next\nor Pagination Ellipsis — in its own item.",{"name":5856,"tagName":5857,"description":5858},"PaginationLink","nord-pagination-link","A page link in a composed Pagination. A layout\nwrapper around your own interactive element — provide an \u003Ca> (e.g. a\nframework \u003CLink> for crawlable, SSR-friendly links) or a nord-button. Set\ncurrent on the link for the active page; it mirrors aria-current=\"page\"\nonto the interactive child so assistive tech announces it.",{"name":5860,"tagName":5861,"description":5862},"PaginationNext","nord-pagination-next","The \"next page\" control in a composed Pagination. A\nlayout wrapper around your own interactive element — provide an \u003Ca> (e.g. a\nframework \u003CLink>) or a nord-button with its own icon, label and\nnavigation, and disable it when there is no next page.",{"name":5864,"tagName":5865,"description":5866},"PaginationPrevious","nord-pagination-previous","The \"previous page\" control in a composed Pagination.\nA layout wrapper around your own interactive element — provide an \u003Ca>\n(e.g. a framework \u003CLink>) or a nord-button with its own icon, label and\nnavigation, and disable it when there is no previous page.",{"name":5868,"tagName":5869,"description":5870,"category":5578,"status":4648,"isNew":4649,"lightDom":4649},"Popout","nord-popout","Popouts are small overlays that open on demand. They let users access additional content and actions without cluttering the page.",{"name":5872,"tagName":5873,"description":5874,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},"Progress","nord-progress","Progress component is used to display a circular pie-chart style progress indicator.\nYou can customize the size and color of the progress indicator with the\nprovided properties.",{"name":5876,"tagName":5877,"description":5878,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},"ProgressBar","nord-progress-bar","Progress Bar is used to visually represent the completion\nof a task or process. It shows how much of the task has\nbeen completed and how much is still left.",{"name":5880,"tagName":5881,"description":5882,"category":5410,"status":4648,"isNew":4649,"lightDom":4649},"Qrcode","nord-qrcode","QR Code component is used for providing information or links\nto users which they can quickly scan with their smartphone.",{"name":5884,"tagName":5885,"description":5886,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},"Radio","nord-radio","Radio buttons are graphical user interface elements that allow user to choose only one option from\na predefined set of mutually exclusive options.",{"name":5888,"tagName":5889,"description":5890,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},"Range","nord-range","Range input lets user specify a numeric value using a slider which\nmust be no less than a given value, and no more than another given value.",{"name":5892,"tagName":5893,"description":5894,"category":5391,"status":4648,"isNew":4649,"lightDom":367,"parts":5895},"Resizable","nord-resizable","Resizable coordinates an alternating sequence of panels and handles using\nimmutable percentage layouts and native pointer\u002Fkeyboard interactions.",[5896,5900],{"name":5897,"tagName":5898,"description":5899},"ResizableHandle","nord-resizable-handle","Resizable Handle is an accessible window splitter placed between two direct\nResizable Panels.",{"name":5901,"tagName":5902,"description":5903},"ResizablePanel","nord-resizable-panel","Resizable Panel contains consumer-owned content whose percentage size is\ncoordinated by its direct Resizable parent.",{"name":5905,"tagName":5906,"description":5907,"category":5405,"status":4648,"isNew":4649,"lightDom":4649,"parts":5908},"RichTextEditor","nord-rich-text-editor","Rich text editor lets users create structured, formatted HTML content.",[5909,5913,5917,5921],{"name":5910,"tagName":5911,"description":5912},"RichTextEditorCommand","nord-rich-text-editor-command","Command renders one formatting control for the nearest Rich Text Editor.",{"name":5914,"tagName":5915,"description":5916},"RichTextEditorContent","nord-rich-text-editor-content","Content provides the editable surface within a composed Rich Text Editor.\n\nPlace it before or after a Rich Text Editor Toolbar to control the visual order.",{"name":5918,"tagName":5919,"description":5920},"RichTextEditorToolbar","nord-rich-text-editor-toolbar","Toolbar composes formatting commands and application controls for a Rich Text Editor.",{"name":5922,"tagName":5923,"description":5924},"RichTextEditorToolbarGroup","nord-rich-text-editor-toolbar-group","Toolbar Group groups related Rich Text Editor commands.",{"name":5926,"tagName":5927,"description":5928,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},"ScrollArea","nord-scroll-area","Scroll Area is a container that wraps overflowing content in a custom scroll\nviewport with consistently-styled scrollbars. Native scrollbars are hidden and\nreplaced with a thin overlay thumb that appears on hover or while scrolling.\n\nIt also exposes the distance from each edge as CSS custom properties\n(--scroll-area-overflow-*), which can drive an edge-fade mask on\n::part(viewport) — see the docs example.\n\nThe scroll machinery lives in shadow DOM; slot your content directly inside.",{"name":5930,"tagName":5931,"description":5932,"category":5423,"status":4648,"isNew":4649,"lightDom":4649,"parts":5933},"SegmentedControl","nord-segmented-control","Segmented control is used to pick one choice from a set of\nclosely related choices, and immediately apply that selection.",[5934],{"name":5935,"tagName":5936,"description":5937},"SegmentedControlItem","nord-segmented-control-item","Segmented control items populate a segmented control with options.\nEvery item should be placed inside a segmented control.",{"name":5939,"tagName":5940,"description":5941,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},"Select","nord-select","Select lets users choose one option from an options menu.\nConsider using select when you have 5 or more options to choose from.",{"name":5943,"tagName":5944,"description":5945,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},"Skeleton","nord-skeleton","Skeletons are used to provide a low fidelity representation of content\nbefore it appears in a view. This improves the perceived loading time\nfor our users.",{"name":4571,"tagName":5947,"description":5948,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},"nord-spinner","Spinner component is used to indicate users that their action is being\nprocessed. You can customize the size and color of the spinner with the\nprovided properties.",{"name":5950,"tagName":5951,"description":5952,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},"Stack","nord-stack","Stack component manages layout of immediate children along the\nvertical or horizontal axis with optional spacing between each child.",{"name":5954,"tagName":5955,"description":5956,"category":5786,"status":4648,"isNew":4649,"lightDom":4649,"parts":5957},"Tab","nord-tab","The interactive tab button for use within the tab group component.",[5958,5962],{"name":5959,"tagName":5960,"description":5961},"TabGroup","nord-tab-group","Tab Group allows multiple panels to be contained within a single window,\nusing tabs as a navigational element.",{"name":5963,"tagName":5964,"description":5965},"TabPanel","nord-tab-panel","The panel which contains content that can be revealed using a tab\nin the tab group component.",{"name":29,"tagName":2532,"description":5967,"category":4650,"status":4648,"isNew":4649,"lightDom":4649},"Table is used to organize and display information from a data set.\nProvides table styles in addition to features like sticky\nheaders and support for narrow viewports.",{"name":5969,"tagName":5970,"description":5971,"category":5410,"status":4648,"isNew":4649,"lightDom":4649,"parts":5972},"Tag","nord-tag","Tags represent a set of keywords that help label, categorize,\nand organize objects. Commonly used to signify the attributes of an object.",[5973],{"name":5974,"tagName":5975,"description":5976},"TagGroup","nord-tag-group","Tag groups are designed to bring together selectable tags that are of a similar nature. For example categories you can filter by.",{"name":5978,"tagName":5979,"description":5980,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},"Textarea","nord-textarea","Textarea is a component that allows user to write text over\nmultiple rows. Used when the expected user input is long.\nFor shorter input, use the Input component.",{"name":5982,"tagName":5983,"description":5984,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},"TimePicker","nord-time-picker","Time Picker pairs the browser's native time field with a dropdown of quick\noptions, generated at a configurable interval between start and end.\nThe native field handles typing, locale-aware display and validation; the\ndropdown is a shortcut for common times.\n\nThe value is held in ISO HH:mm format.\n\nLike a native input, Time Picker is a control only — it has no built-in\nlabel, hint or error. Compose it inside a Field (with a\nField Label, Field Description\nand Field Error) to label it and add help or error text.",{"name":5986,"tagName":5987,"description":5988,"category":5410,"status":4648,"isNew":4649,"lightDom":367},"Timestamp","nord-timestamp","Timestamp presents an instant as localized, stable system, relative, or\nautomatically selected text while retaining native date-time semantics.",{"name":5990,"tagName":5991,"description":5992,"category":5415,"status":4648,"isNew":4649,"lightDom":4649,"parts":5993},"Toast","nord-toast","Toasts are non-disruptive messages that appear in the interface\nto provide quick, at-a-glance feedback on the outcome of an action.",[5994],{"name":5995,"tagName":5996,"description":5997},"ToastGroup","nord-toast-group","Toast group is used to position and style a group of toasts, whilst ensuring they are announced by screen readers.",{"name":5999,"tagName":6000,"description":6001,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},"Toggle","nord-toggle","Toggle switch gives control over a feature or option that can be\nturned on or off. If a physical switch would work for the action, a\ntoggle is probably the best component to use.",{"name":6003,"tagName":6004,"description":6005,"category":5578,"status":4648,"isNew":4649,"lightDom":4649},"Tooltip","nord-tooltip","Tooltips are floating containers for displaying additional information\nfor the currently focused element. A tooltip can be useful when you want\nto e.g. give a hint about an existing Command Menu shortcut.",{"name":6007,"tagName":6008,"description":6009,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},"TopBar","nord-top-bar","Top bar is a header component that is always visible at the top of the interface. Top bar allows functionality such as search and contextual menus to be placed at the top of the interface.",{"name":6011,"tagName":6012,"description":6013,"category":5410,"status":4648,"isNew":4649,"lightDom":4649},"Truncate","nord-truncate","Truncate clips text with a single- or multi-line ellipsis and reveals a tooltip with the full text when the content overflows.",{"name":6015,"tagName":6016,"description":6017,"category":5410,"status":4648,"isNew":4649,"lightDom":4649},"VisuallyHidden","nord-visually-hidden","Visually hidden is used when an element needs to be available\nto assistive technologies like screen readers, but be otherwise\nhidden.",[6019,6082,6119,6124],{"title":5005,"children":6020,"path":5194,"stem":5195,"page":4649},[6021,6052],{"path":5008,"title":5009,"icon":5010,"keywords":5011,"children":6022},[6023,6024,6025,6026,6027,6028,6042,6050,6051],{"path":5008,"title":5014,"icon":5015,"keywords":5016},{"path":5018,"title":5019,"icon":5020,"keywords":5021},{"path":5023,"title":5024,"icon":5025,"keywords":5026},{"path":5028,"title":5029,"icon":5020,"keywords":5030},{"path":5032,"title":5033,"icon":5025,"keywords":5034},{"path":5036,"title":5037,"icon":5010,"keywords":5038,"badge":5039,"children":6029},[6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041],{"path":5042,"title":5043},{"path":5045,"title":13},{"path":5047,"title":5048},{"path":5050,"title":5051},{"path":5053,"title":5054},{"path":5056,"title":5057},{"path":5059,"title":5060},{"path":5062,"title":5063},{"path":5065,"title":5066},{"path":5068,"title":5069},{"path":5071,"title":5072},{"path":5074,"title":5075},{"path":5077,"title":5078,"icon":5079,"keywords":5080,"children":6043},[6044,6045,6046,6047,6048,6049],{"path":5083,"title":5043},{"path":5085,"title":13},{"path":5087,"title":5088},{"path":5090,"title":5091},{"path":5093,"title":5094},{"path":5096,"title":5097},{"path":5099,"title":5100,"icon":5101,"keywords":5102},{"path":5104,"title":5105,"icon":5106,"keywords":5107},{"path":5109,"title":5110,"icon":5025,"keywords":5111,"children":6053},[6054,6055,6067,6080,6081],{"path":5109,"title":5014,"icon":5015,"keywords":5114},{"path":5116,"title":5117,"icon":5025,"keywords":5118,"children":6056},[6057,6058,6059,6060,6061,6062,6063,6064,6065,6066],{"path":5121,"title":4524},{"path":5123,"title":5124},{"path":5126,"title":5060},{"path":5128,"title":5129},{"path":5131,"title":5132},{"path":5134,"title":5135},{"path":5137,"title":5138},{"path":5140,"title":5141},{"path":5143,"title":5144},{"path":5146,"title":5147},{"path":5149,"title":5150,"icon":5151,"keywords":5152,"children":6068},[6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079],{"path":5155,"title":105},{"path":5157,"title":5043},{"path":5159,"title":5160},{"path":5162,"title":728},{"path":5164,"title":5165},{"path":5167,"title":5168},{"path":5170,"title":5171},{"path":5173,"title":5174},{"path":5176,"title":5177},{"path":5179,"title":5180},{"path":5182,"title":5183},{"path":5185,"title":5186,"icon":5187,"keywords":5188},{"path":5190,"title":5191,"icon":5192,"keywords":5193},{"title":5197,"children":6083,"path":5310,"stem":5311},[6084,6085,6098,6115,6116,6117,6118],{"path":5200,"title":5201,"icon":5202,"keywords":5203},{"path":5205,"title":5206,"icon":5207,"keywords":5208,"children":6086},[6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097],{"path":5211,"title":5212},{"path":5214,"title":5215},{"path":5217,"title":5218},{"path":5220,"title":5221},{"path":5223,"title":5224},{"path":5226,"title":5227},{"path":5229,"title":5230},{"path":5232,"title":5233},{"path":5235,"title":5236},{"path":5238,"title":5239},{"path":5241,"title":13},{"path":5243,"title":5244,"icon":5245,"keywords":5246,"children":6099},[6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114],{"path":5249,"title":5043},{"path":5251,"title":13},{"path":5253,"title":5254},{"path":5256,"title":5257},{"path":5259,"title":5260},{"path":5262,"title":5263},{"path":5265,"title":5266},{"path":5268,"title":5269},{"path":5271,"title":5272},{"path":5274,"title":5275},{"path":5277,"title":5278},{"path":5280,"title":5281},{"path":5283,"title":5135},{"path":5285,"title":5286},{"path":5288,"title":5289},{"path":5291,"title":5292,"icon":5293,"keywords":5294},{"path":5296,"title":5297,"icon":5298,"keywords":5299},{"path":5301,"title":5302,"icon":5303,"keywords":5304},{"path":5306,"title":5307,"icon":5308,"native":367,"keywords":5309},{"title":5313,"path":5314,"stem":5315,"children":6120},[6121,6122,6123],{"path":5314,"title":5318,"icon":5319,"keywords":5320},{"path":5322,"title":5323,"icon":5324,"keywords":5325},{"path":5327,"title":5328,"icon":5010,"keywords":5329},{"title":5331,"children":6125,"path":5362,"stem":5363},[6126,6127,6128,6129,6130,6131,6132],{"path":5334,"title":5335,"icon":5336,"keywords":5337},{"path":5339,"title":5340,"icon":5106,"keywords":5341},{"path":5343,"title":5344,"icon":5245,"keywords":5345},{"path":5347,"title":5348,"icon":5324,"keywords":5349},{"path":5351,"title":5352,"icon":5106,"keywords":5353},{"path":5355,"title":5356,"icon":5336,"keywords":5357},{"path":5359,"title":5360,"icon":5319,"keywords":5361},[6134,6140,6144,6145,6146,6147,6148,6149,6150,6151,6156,6168,6169,6173,6177,6180,6184,6185,6186,6187,6193,6198,6199,6210,6211,6220,6221,6222,6223,6224,6227,6238,6241,6242,6243,6244,6250,6255,6258,6259,6260,6263,6267,6275,6276,6277,6278,6279,6280,6281,6285,6291,6292,6295,6296,6297,6298,6299,6303,6304,6307,6308,6309,6310,6313,6314,6315,6316,6317],{"name":5366,"tagName":5367,"description":5368,"category":5369,"status":4648,"isNew":4649,"lightDom":367,"parts":6135},[6136,6137,6138,6139],{"name":5372,"tagName":5373,"description":5374},{"name":5376,"tagName":5377,"description":5378},{"name":5380,"tagName":5381,"description":5382},{"name":5384,"tagName":5385,"description":5386},{"name":5388,"tagName":5389,"description":5390,"category":5391,"status":4648,"isNew":4649,"lightDom":4649,"parts":6141},[6142,6143],{"name":5394,"tagName":5395,"description":5396},{"name":5398,"tagName":5399,"description":5400},{"name":5402,"tagName":5403,"description":5404,"category":5405,"status":4648,"isNew":4649,"lightDom":367},{"name":5407,"tagName":5408,"description":5409,"category":5410,"status":4648,"isNew":4649,"lightDom":4649},{"name":5412,"tagName":5413,"description":5414,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},{"name":5417,"tagName":5418,"description":5419,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},{"name":5421,"tagName":975,"description":5422,"category":5423,"status":4648,"isNew":4649,"lightDom":4649},{"name":5425,"tagName":5426,"description":5427,"category":5423,"status":4648,"isNew":4649,"lightDom":4649},{"name":5429,"tagName":5430,"description":5431,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},{"name":255,"tagName":290,"description":5433,"category":5369,"status":4648,"isNew":4649,"lightDom":4649,"parts":6152},[6153,6154,6155],{"name":5436,"tagName":5437,"description":5438},{"name":5440,"tagName":5441,"description":5442},{"name":5444,"tagName":5445,"description":5446},{"name":5448,"tagName":5449,"description":5450,"category":5410,"status":4648,"isNew":4649,"lightDom":4649,"parts":6157},[6158,6159,6160,6161,6162,6163,6164,6165,6166,6167],{"name":5453,"tagName":5454,"description":5455},{"name":5457,"tagName":5458,"description":5459},{"name":5461,"tagName":5462,"description":5463},{"name":5465,"tagName":5466,"description":5467},{"name":5469,"tagName":5470,"description":5471},{"name":5473,"tagName":5474,"description":5475},{"name":5477,"tagName":5478,"description":5479},{"name":5481,"tagName":5482,"description":5483},{"name":5485,"tagName":5486,"description":5487},{"name":5489,"tagName":5490,"description":5491},{"name":5493,"tagName":5494,"description":5495,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},{"name":5497,"tagName":5498,"description":5499,"category":5369,"status":4648,"isNew":4649,"lightDom":367,"parts":6170},[6171,6172],{"name":5502,"tagName":5503,"description":5504},{"name":5506,"tagName":5507,"description":5508},{"name":5510,"tagName":5511,"description":5512,"category":5405,"status":4648,"isNew":4649,"lightDom":367,"parts":6174},[6175,6176],{"name":5515,"tagName":5516,"description":5517},{"name":5519,"tagName":5520,"description":5521},{"name":5523,"tagName":5524,"description":5525,"category":5423,"status":4648,"isNew":4649,"lightDom":4649,"parts":6178},[6179],{"name":5528,"tagName":5529,"description":5530},{"name":4646,"tagName":207,"description":5532,"category":4650,"status":4648,"isNew":4649,"lightDom":4649,"parts":6181},[6182,6183],{"name":5535,"tagName":965,"description":5536},{"name":5538,"tagName":5539,"description":5540},{"name":5542,"tagName":5543,"description":5544,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},{"name":5546,"tagName":5547,"description":5548,"category":5405,"status":4648,"isNew":4649,"lightDom":367},{"name":5550,"tagName":5551,"description":5552,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},{"name":5554,"tagName":5555,"description":5556,"category":5391,"status":4648,"isNew":4649,"lightDom":4649,"parts":6188},[6189,6190,6191,6192],{"name":5559,"tagName":5560,"description":5561},{"name":5563,"tagName":5564,"description":5565},{"name":5567,"tagName":5568,"description":5569},{"name":5571,"tagName":5572,"description":5573},{"name":5575,"tagName":5576,"description":5577,"category":5578,"status":4648,"isNew":4649,"lightDom":4649,"parts":6194},[6195,6196,6197],{"name":5581,"tagName":5582,"description":5583},{"name":5585,"tagName":5586,"description":5587},{"name":5589,"tagName":5590,"description":5591},{"name":5593,"tagName":5594,"description":5595,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},{"name":5597,"tagName":5598,"description":5599,"category":5405,"status":4648,"isNew":4649,"lightDom":367,"parts":6200},[6201,6202,6203,6204,6205,6206,6207,6208,6209],{"name":5602,"tagName":5603,"description":5604},{"name":5606,"tagName":5607,"description":5608},{"name":5610,"tagName":5611,"description":5612},{"name":5614,"tagName":5615,"description":5616},{"name":5618,"tagName":5619,"description":5620},{"name":5622,"tagName":5623,"description":5624},{"name":5626,"tagName":5627,"description":5628},{"name":5630,"tagName":5631,"description":5632},{"name":5634,"tagName":5635,"description":5636},{"name":5638,"tagName":5639,"description":5640,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},{"name":5642,"tagName":5643,"description":5644,"category":5405,"status":4648,"isNew":4649,"lightDom":367,"parts":6212},[6213,6214,6215,6216,6217,6218,6219],{"name":5647,"tagName":5648,"description":5649},{"name":5651,"tagName":5652,"description":5653},{"name":5655,"tagName":5656,"description":5657},{"name":5659,"tagName":5660,"description":5661},{"name":5663,"tagName":5664,"description":5665},{"name":5667,"tagName":5668,"description":5669},{"name":5671,"tagName":5672,"description":5673},{"name":5675,"tagName":5676,"description":5677,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},{"name":5679,"tagName":5680,"description":5681,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},{"name":5683,"tagName":5684,"description":5685,"category":5410,"status":4648,"isNew":4649,"lightDom":4649},{"name":5687,"tagName":5688,"description":5689,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},{"name":5691,"tagName":5692,"description":5693,"category":5405,"status":4648,"isNew":4649,"lightDom":367,"parts":6225},[6226],{"name":5696,"tagName":5697,"description":5698},{"name":5700,"tagName":5701,"description":5702,"category":4650,"status":4648,"isNew":4649,"lightDom":367,"parts":6228},[6229,6230,6231,6232,6233,6234,6235,6236,6237],{"name":5705,"tagName":5706,"description":5707},{"name":5709,"tagName":5710,"description":5711},{"name":5713,"tagName":5714,"description":5715},{"name":5717,"tagName":5718,"description":5719},{"name":5721,"tagName":5722,"description":5723},{"name":5725,"tagName":5726,"description":5727},{"name":5729,"tagName":5730,"description":5731},{"name":5733,"tagName":5734,"description":5735},{"name":5737,"tagName":5738,"description":5739},{"name":5741,"tagName":5742,"description":5743,"category":5410,"status":4648,"isNew":4649,"lightDom":367,"parts":6239},[6240],{"name":5746,"tagName":5747,"description":5748},{"name":5750,"tagName":5751,"description":5752,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},{"name":5754,"tagName":5755,"description":5756,"category":5423,"status":4648,"isNew":4649,"lightDom":4649},{"name":5758,"tagName":5759,"description":5760,"category":5415,"status":4648,"isNew":4649,"lightDom":367},{"name":5762,"tagName":5763,"description":5764,"category":5578,"status":4648,"isNew":4649,"lightDom":4649,"parts":6245},[6246,6247,6248,6249],{"name":5767,"tagName":5768,"description":5769},{"name":5771,"tagName":5772,"description":5773},{"name":5775,"tagName":5776,"description":5777},{"name":5779,"tagName":5780,"description":5781},{"name":5783,"tagName":5784,"description":5785,"category":5786,"status":4648,"isNew":4649,"lightDom":4649,"parts":6251},[6252,6253,6254],{"name":5789,"tagName":5790,"description":5791},{"name":5793,"tagName":5794,"description":5795},{"name":5797,"tagName":5798,"description":5799},{"name":5801,"tagName":5802,"description":5803,"category":5415,"status":4648,"isNew":4649,"lightDom":4649,"parts":6256},[6257],{"name":5806,"tagName":5807,"description":5808},{"name":5810,"tagName":5811,"description":5812,"category":5405,"status":4648,"isNew":4649,"lightDom":367},{"name":5814,"tagName":5815,"description":5816,"category":5405,"status":4648,"isNew":4649,"lightDom":367},{"name":5818,"tagName":5819,"description":5820,"category":5786,"status":4648,"isNew":4649,"lightDom":4649,"parts":6261},[6262],{"name":5823,"tagName":5824,"description":5825},{"name":5827,"tagName":5828,"description":5829,"category":5391,"status":4648,"isNew":4649,"lightDom":367,"parts":6264},[6265,6266],{"name":5832,"tagName":5833,"description":5834},{"name":5836,"tagName":5837,"description":5838},{"name":266,"tagName":5840,"description":5841,"category":5786,"status":4648,"isNew":4649,"lightDom":367,"parts":6268},[6269,6270,6271,6272,6273,6274],{"name":5844,"tagName":5845,"description":5846},{"name":5848,"tagName":5849,"description":5850},{"name":5852,"tagName":5853,"description":5854},{"name":5856,"tagName":5857,"description":5858},{"name":5860,"tagName":5861,"description":5862},{"name":5864,"tagName":5865,"description":5866},{"name":5868,"tagName":5869,"description":5870,"category":5578,"status":4648,"isNew":4649,"lightDom":4649},{"name":5872,"tagName":5873,"description":5874,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},{"name":5876,"tagName":5877,"description":5878,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},{"name":5880,"tagName":5881,"description":5882,"category":5410,"status":4648,"isNew":4649,"lightDom":4649},{"name":5884,"tagName":5885,"description":5886,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},{"name":5888,"tagName":5889,"description":5890,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},{"name":5892,"tagName":5893,"description":5894,"category":5391,"status":4648,"isNew":4649,"lightDom":367,"parts":6282},[6283,6284],{"name":5897,"tagName":5898,"description":5899},{"name":5901,"tagName":5902,"description":5903},{"name":5905,"tagName":5906,"description":5907,"category":5405,"status":4648,"isNew":4649,"lightDom":4649,"parts":6286},[6287,6288,6289,6290],{"name":5910,"tagName":5911,"description":5912},{"name":5914,"tagName":5915,"description":5916},{"name":5918,"tagName":5919,"description":5920},{"name":5922,"tagName":5923,"description":5924},{"name":5926,"tagName":5927,"description":5928,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},{"name":5930,"tagName":5931,"description":5932,"category":5423,"status":4648,"isNew":4649,"lightDom":4649,"parts":6293},[6294],{"name":5935,"tagName":5936,"description":5937},{"name":5939,"tagName":5940,"description":5941,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},{"name":5943,"tagName":5944,"description":5945,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},{"name":4571,"tagName":5947,"description":5948,"category":5415,"status":4648,"isNew":4649,"lightDom":4649},{"name":5950,"tagName":5951,"description":5952,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},{"name":5954,"tagName":5955,"description":5956,"category":5786,"status":4648,"isNew":4649,"lightDom":4649,"parts":6300},[6301,6302],{"name":5959,"tagName":5960,"description":5961},{"name":5963,"tagName":5964,"description":5965},{"name":29,"tagName":2532,"description":5967,"category":4650,"status":4648,"isNew":4649,"lightDom":4649},{"name":5969,"tagName":5970,"description":5971,"category":5410,"status":4648,"isNew":4649,"lightDom":4649,"parts":6305},[6306],{"name":5974,"tagName":5975,"description":5976},{"name":5978,"tagName":5979,"description":5980,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},{"name":5982,"tagName":5983,"description":5984,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},{"name":5986,"tagName":5987,"description":5988,"category":5410,"status":4648,"isNew":4649,"lightDom":367},{"name":5990,"tagName":5991,"description":5992,"category":5415,"status":4648,"isNew":4649,"lightDom":4649,"parts":6311},[6312],{"name":5995,"tagName":5996,"description":5997},{"name":5999,"tagName":6000,"description":6001,"category":5405,"status":4648,"isNew":4649,"lightDom":4649},{"name":6003,"tagName":6004,"description":6005,"category":5578,"status":4648,"isNew":4649,"lightDom":4649},{"name":6007,"tagName":6008,"description":6009,"category":5391,"status":4648,"isNew":4649,"lightDom":4649},{"name":6011,"tagName":6012,"description":6013,"category":5410,"status":4648,"isNew":4649,"lightDom":4649},{"name":6015,"tagName":6016,"description":6017,"category":5410,"status":4648,"isNew":4649,"lightDom":4649},{"components":6319,"css":6322,"themes":6325},{"url":6320,"version":6321},"https:\u002F\u002Fnordcdn.net\u002Fds\u002Fcomponents\u002F5.0.3\u002Findex.js","5.0.3",{"url":6323,"version":6324},"https:\u002F\u002Fnordcdn.net\u002Fds\u002Fcss\u002F5.2.3\u002Fnord.min.css","5.2.3",{"nord":6326,"nordDark":6328,"vet":6330,"vetDark":6332},{"url":6327},"https:\u002F\u002Fnordcdn.net\u002Fds\u002Fthemes\u002F10.0.3\u002Fnord.css",{"url":6329},"https:\u002F\u002Fnordcdn.net\u002Fds\u002Fthemes\u002F10.0.3\u002Fnord-dark.css",{"url":6331},"https:\u002F\u002Fnordcdn.net\u002Fds\u002Fthemes\u002F10.0.3\u002Fvet.css",{"url":6333},"https:\u002F\u002Fnordcdn.net\u002Fds\u002Fthemes\u002F10.0.3\u002Fvet-dark.css","\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">nord-data-table\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">nord-data-table\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",[6336,6338,6340,6343,6345,6347,6349,6351,6353,6355,6358,6360,6362,6364,6366,6368,6369,6371,6373,6375,6377,6379,6381,6383,6385,6387,6389,6391,6393,6395,6397,6399,6402,6404,6406,6408,6410,6412,6414,6416,6418,6420,6422,6424,6426,6428,6430,6432,6434,6436,6438,6440,6442,6444,6446,6448,6450,6452,6454,6457,6459,6461,6463,6465,6467,6469,6471,6473,6475,6477,6479,6481,6483,6485,6487,6489,6491],{"path":6337,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Faccordion",{"path":6339,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Faside",{"path":6341,"isNew":367,"updated":6342},"\u002Fcomponent-docs\u002Fautocomplete","2026-07-06",{"path":6344,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Favatar",{"path":6346,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fbadge",{"path":6348,"isNew":4649,"updated":6342},"\u002Fcomponent-docs\u002Fbanner",{"path":6350,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fbutton",{"path":6352,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fbutton-group",{"path":6354,"isNew":4649,"updated":6342},"\u002Fcomponent-docs\u002Fcalendar",{"path":6356,"isNew":4649,"updated":6357},"\u002Fcomponent-docs\u002Fcard","2026-07-24",{"path":6359,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Fchart",{"path":6361,"isNew":4649,"updated":6342},"\u002Fcomponent-docs\u002Fcheckbox",{"path":6363,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Fcollapsible",{"path":6365,"isNew":367,"updated":6342},"\u002Fcomponent-docs\u002Fcombobox",{"path":6367,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fcommand-menu",{"path":4639,"isNew":367,"updated":4643},{"path":6370,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Fdata-table-filter-bar",{"path":6372,"isNew":4649,"updated":6342},"\u002Fcomponent-docs\u002Fdate-picker",{"path":6374,"isNew":367,"updated":6342},"\u002Fcomponent-docs\u002Fdate-range-picker",{"path":6376,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fdivider",{"path":6378,"isNew":4649,"updated":6357},"\u002Fcomponent-docs\u002Fdrawer",{"path":6380,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fdropdown",{"path":6382,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fempty-state",{"path":6384,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Ffield",{"path":6386,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Ffieldset",{"path":6388,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Ffilter-bar",{"path":6390,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Ffilter-date-range",{"path":6392,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Ffilter-dropdown",{"path":6394,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Ffooter",{"path":6396,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fheader",{"path":6398,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Ficon",{"path":6400,"isNew":4649,"updated":6401},"\u002Fcomponent-docs\u002Finput","2026-07-07",{"path":6403,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Finput-group",{"path":6405,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Finput-group-addon",{"path":6407,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Fitem",{"path":6409,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Fkbd",{"path":6411,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Flayout",{"path":6413,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fmessage",{"path":6415,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Fmeter",{"path":6417,"isNew":4649,"updated":6357},"\u002Fcomponent-docs\u002Fmodal",{"path":6419,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fnavigation",{"path":6421,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fnotification",{"path":6423,"isNew":367,"updated":6342},"\u002Fcomponent-docs\u002Fnumber-field",{"path":6425,"isNew":367,"updated":6342},"\u002Fcomponent-docs\u002Fotp-field",{"path":6427,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Foutline",{"path":6429,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Foverflow-list",{"path":6431,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Foverflow-list-count",{"path":6433,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Foverflow-list-menu",{"path":6435,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Fpagination",{"path":6437,"isNew":4649,"updated":6342},"\u002Fcomponent-docs\u002Fpopout",{"path":6439,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fprogress",{"path":6441,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fprogress-bar",{"path":6443,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fqrcode",{"path":6445,"isNew":4649,"updated":6342},"\u002Fcomponent-docs\u002Fradio",{"path":6447,"isNew":4649,"updated":6342},"\u002Fcomponent-docs\u002Frange",{"path":6449,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Fresizable",{"path":6451,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fresizable-handle",{"path":6453,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fresizable-panel",{"path":6455,"isNew":367,"updated":6456},"\u002Fcomponent-docs\u002Frich-text-editor","2026-07-22",{"path":6458,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Fscroll-area",{"path":6460,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fsegmented-control",{"path":6462,"isNew":4649,"updated":6342},"\u002Fcomponent-docs\u002Fselect",{"path":6464,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fskeleton",{"path":6466,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fspinner",{"path":6468,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fstack",{"path":6470,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Ftab",{"path":6472,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Ftable",{"path":6474,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Ftag",{"path":6476,"isNew":4649,"updated":6342},"\u002Fcomponent-docs\u002Ftextarea",{"path":6478,"isNew":367,"updated":6342},"\u002Fcomponent-docs\u002Ftime-picker",{"path":6480,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Ftimestamp",{"path":6482,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Ftoast",{"path":6484,"isNew":4649,"updated":6342},"\u002Fcomponent-docs\u002Ftoggle",{"path":6486,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Ftooltip",{"path":6488,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Ftop-bar",{"path":6490,"isNew":367,"updated":4643},"\u002Fcomponent-docs\u002Ftruncate",{"path":6492,"isNew":4649,"updated":4643},"\u002Fcomponent-docs\u002Fvisually-hidden",[6494],{"title":6495,"path":6496,"stem":6497,"children":6498,"page":4649},"Component Docs","\u002Fcomponent-docs","component-docs",[6499,6501,6503,6505,6507,6509,6511,6513,6516,6518,6520,6522,6524,6526,6528,6531,6532,6534,6537,6540,6542,6544,6546,6549,6551,6553,6556,6559,6562,6564,6566,6568,6570,6573,6576,6578,6580,6582,6584,6586,6588,6590,6592,6595,6598,6600,6603,6606,6609,6611,6613,6615,6618,6621,6623,6625,6627,6630,6633,6636,6639,6642,6644,6646,6648,6650,6653,6655,6657,6659,6662,6664,6666,6668,6670,6673,6675],{"title":5366,"path":6337,"stem":6500},"component-docs\u002Faccordion",{"title":5388,"path":6339,"stem":6502},"component-docs\u002Faside",{"title":5402,"path":6341,"stem":6504},"component-docs\u002Fautocomplete",{"title":5407,"path":6344,"stem":6506},"component-docs\u002Favatar",{"title":5412,"path":6346,"stem":6508},"component-docs\u002Fbadge",{"title":5417,"path":6348,"stem":6510},"component-docs\u002Fbanner",{"title":5421,"path":6350,"stem":6512},"component-docs\u002Fbutton",{"title":6514,"path":6352,"stem":6515},"Button Group","component-docs\u002Fbutton-group",{"title":5429,"path":6354,"stem":6517},"component-docs\u002Fcalendar",{"title":255,"path":6356,"stem":6519},"component-docs\u002Fcard",{"title":5448,"path":6359,"stem":6521},"component-docs\u002Fchart",{"title":5493,"path":6361,"stem":6523},"component-docs\u002Fcheckbox",{"title":5497,"path":6363,"stem":6525},"component-docs\u002Fcollapsible",{"title":5510,"path":6365,"stem":6527},"component-docs\u002Fcombobox",{"title":6529,"path":6367,"stem":6530},"Command Menu","component-docs\u002Fcommand-menu",{"title":5,"path":4639,"stem":4642},{"title":62,"path":6370,"stem":6533},"component-docs\u002Fdata-table-filter-bar",{"title":6535,"path":6372,"stem":6536},"Date Picker","component-docs\u002Fdate-picker",{"title":6538,"path":6374,"stem":6539},"Date Range Picker","component-docs\u002Fdate-range-picker",{"title":5550,"path":6376,"stem":6541},"component-docs\u002Fdivider",{"title":5554,"path":6378,"stem":6543},"component-docs\u002Fdrawer",{"title":5575,"path":6380,"stem":6545},"component-docs\u002Fdropdown",{"title":6547,"path":6382,"stem":6548},"Empty State","component-docs\u002Fempty-state",{"title":5597,"path":6384,"stem":6550},"component-docs\u002Ffield",{"title":5638,"path":6386,"stem":6552},"component-docs\u002Ffieldset",{"title":6554,"path":6388,"stem":6555},"Filter Bar","component-docs\u002Ffilter-bar",{"title":6557,"path":6390,"stem":6558},"Filter Date Range","component-docs\u002Ffilter-date-range",{"title":6560,"path":6392,"stem":6561},"Filter Dropdown","component-docs\u002Ffilter-dropdown",{"title":5675,"path":6394,"stem":6563},"component-docs\u002Ffooter",{"title":5679,"path":6396,"stem":6565},"component-docs\u002Fheader",{"title":5683,"path":6398,"stem":6567},"component-docs\u002Ficon",{"title":5687,"path":6400,"stem":6569},"component-docs\u002Finput",{"title":6571,"path":6403,"stem":6572},"Input Group","component-docs\u002Finput-group",{"title":6574,"path":6405,"stem":6575},"Input Group Add-on","component-docs\u002Finput-group-addon",{"title":5700,"path":6407,"stem":6577},"component-docs\u002Fitem",{"title":5741,"path":6409,"stem":6579},"component-docs\u002Fkbd",{"title":5750,"path":6411,"stem":6581},"component-docs\u002Flayout",{"title":5754,"path":6413,"stem":6583},"component-docs\u002Fmessage",{"title":5758,"path":6415,"stem":6585},"component-docs\u002Fmeter",{"title":5762,"path":6417,"stem":6587},"component-docs\u002Fmodal",{"title":5783,"path":6419,"stem":6589},"component-docs\u002Fnavigation",{"title":5801,"path":6421,"stem":6591},"component-docs\u002Fnotification",{"title":6593,"path":6423,"stem":6594},"Number Field","component-docs\u002Fnumber-field",{"title":6596,"path":6425,"stem":6597},"OTP Field","component-docs\u002Fotp-field",{"title":5818,"path":6427,"stem":6599},"component-docs\u002Foutline",{"title":6601,"path":6429,"stem":6602},"Overflow List","component-docs\u002Foverflow-list",{"title":6604,"path":6431,"stem":6605},"Overflow List Count","component-docs\u002Foverflow-list-count",{"title":6607,"path":6433,"stem":6608},"Overflow List Menu","component-docs\u002Foverflow-list-menu",{"title":266,"path":6435,"stem":6610},"component-docs\u002Fpagination",{"title":5868,"path":6437,"stem":6612},"component-docs\u002Fpopout",{"title":5872,"path":6439,"stem":6614},"component-docs\u002Fprogress",{"title":6616,"path":6441,"stem":6617},"Progress Bar","component-docs\u002Fprogress-bar",{"title":6619,"path":6443,"stem":6620},"QR Code","component-docs\u002Fqrcode",{"title":5884,"path":6445,"stem":6622},"component-docs\u002Fradio",{"title":5888,"path":6447,"stem":6624},"component-docs\u002Frange",{"title":5892,"path":6449,"stem":6626},"component-docs\u002Fresizable",{"title":6628,"path":6451,"stem":6629},"Resizable Handle","component-docs\u002Fresizable-handle",{"title":6631,"path":6453,"stem":6632},"Resizable Panel","component-docs\u002Fresizable-panel",{"title":6634,"path":6455,"stem":6635},"Rich Text Editor","component-docs\u002Frich-text-editor",{"title":6637,"path":6458,"stem":6638},"Scroll Area","component-docs\u002Fscroll-area",{"title":6640,"path":6460,"stem":6641},"Segmented control","component-docs\u002Fsegmented-control",{"title":5939,"path":6462,"stem":6643},"component-docs\u002Fselect",{"title":5943,"path":6464,"stem":6645},"component-docs\u002Fskeleton",{"title":4571,"path":6466,"stem":6647},"component-docs\u002Fspinner",{"title":5950,"path":6468,"stem":6649},"component-docs\u002Fstack",{"title":6651,"path":6470,"stem":6652},"Tabs","component-docs\u002Ftab",{"title":29,"path":6472,"stem":6654},"component-docs\u002Ftable",{"title":5969,"path":6474,"stem":6656},"component-docs\u002Ftag",{"title":5978,"path":6476,"stem":6658},"component-docs\u002Ftextarea",{"title":6660,"path":6478,"stem":6661},"Time Picker","component-docs\u002Ftime-picker",{"title":5986,"path":6480,"stem":6663},"component-docs\u002Ftimestamp",{"title":5990,"path":6482,"stem":6665},"component-docs\u002Ftoast",{"title":5999,"path":6484,"stem":6667},"component-docs\u002Ftoggle",{"title":6003,"path":6486,"stem":6669},"component-docs\u002Ftooltip",{"title":6671,"path":6488,"stem":6672},"Top Bar","component-docs\u002Ftop-bar",{"title":6011,"path":6490,"stem":6674},"component-docs\u002Ftruncate",{"title":6676,"path":6492,"stem":6677},"Visually Hidden","component-docs\u002Fvisually-hidden",{"hasPlayground":367,"playgroundId":4768,"stories":6679},[6680,6681,6682,6683,6684,6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721,6722,6723,6724,6725],{"id":4771,"name":4772,"exportName":4772,"html":4773},{"id":4775,"name":4776,"exportName":4777,"html":4778},{"id":4780,"name":4781,"exportName":4781,"html":4782},{"id":4784,"name":4785,"exportName":4785,"html":4786},{"id":4788,"name":4789,"exportName":4789,"html":4790},{"id":4792,"name":4793,"exportName":105,"html":4773,"js":4794},{"id":4796,"name":4797,"exportName":860,"html":4798,"js":4799},{"id":4801,"name":864,"exportName":864,"html":4802,"js":4803},{"id":4805,"name":4806,"exportName":898,"html":4807,"js":4808},{"id":4810,"name":4811,"exportName":921,"html":4812,"js":4813},{"id":4815,"name":4816,"exportName":1038,"html":4817,"js":4818},{"id":4820,"name":4821,"exportName":1053,"html":4822,"js":4823},{"id":4825,"name":4826,"exportName":4827,"html":4828,"js":4829},{"id":4831,"name":1057,"exportName":1057,"html":4832,"js":4833},{"id":4835,"name":4836,"exportName":1084,"html":4837,"js":4838},{"id":4840,"name":4841,"exportName":4842,"html":4843,"js":4844},{"id":4846,"name":4847,"exportName":1100,"html":4848,"js":4849},{"id":4851,"name":4852,"exportName":4853,"html":4854,"js":4855},{"id":4857,"name":4858,"exportName":4859,"html":4860,"js":4861},{"id":4863,"name":4864,"exportName":1123,"html":4865,"js":4866},{"id":4868,"name":1126,"exportName":1142,"html":4869,"js":4870},{"id":4872,"name":4873,"exportName":1160,"html":4874,"js":4875},{"id":4877,"name":4878,"exportName":1174,"html":4879,"js":4880},{"id":4882,"name":4883,"exportName":1196,"html":4884,"js":4885},{"id":4887,"name":4888,"exportName":1207,"html":4889,"js":4890},{"id":4892,"name":4893,"exportName":1243,"html":4894,"js":4895},{"id":4897,"name":4898,"exportName":1264,"html":4899,"js":4900},{"id":4902,"name":4903,"exportName":1287,"html":4904,"js":4905},{"id":4907,"name":4908,"exportName":4909,"html":4910,"js":4911},{"id":4913,"name":4914,"exportName":1304,"html":4915,"js":4916},{"id":4918,"name":4919,"exportName":1323,"html":4920,"js":4921},{"id":4923,"name":4924,"exportName":1342,"html":4925,"js":4926},{"id":4928,"name":4929,"exportName":1357,"html":4930,"js":4931},{"id":4933,"name":4934,"exportName":1376,"html":4935,"js":4936},{"id":4938,"name":4939,"exportName":4940,"html":4941,"js":4942},{"id":4944,"name":4945,"exportName":1394,"html":4946,"js":4947},{"id":4949,"name":4950,"exportName":4950,"html":4951,"js":4952},{"id":4954,"name":4955,"exportName":4955,"html":4956,"js":4957},{"id":4959,"name":4960,"exportName":4961,"html":4962,"js":4963},{"id":4965,"name":4966,"exportName":4967,"html":4968,"js":4969},{"id":4971,"name":4972,"exportName":4973,"html":4974,"js":4975},{"id":4977,"name":4978,"exportName":1408,"html":4979,"js":4980},{"id":4982,"name":4983,"exportName":4984,"html":4985,"js":4986},{"id":4988,"name":4989,"exportName":4990,"html":4991,"js":4992},{"id":4994,"name":4995,"exportName":4996,"html":4997},{"id":4999,"name":5000,"exportName":5001,"html":5002},[6727,6743],{"slug":6728,"title":6729,"meta":6730},"data-table-bulk-actions","Data Table Bulk Actions",{"name":5535,"tagName":965,"description":6731,"status":4648,"isNew":4649,"category":4650,"lightDom":6732,"properties":6733,"slots":6734,"events":6738,"cssProperties":6739,"stateAttributes":6740,"methods":6741,"dependencies":6742},"Actions for a \u003Ca href=\"\u002Fcomponents\u002Fdata-table\u002F\">Data Table\u003C\u002Fa>'s bulk-selection state.\nPlace it as a direct child of \u003Ccode>nord-data-table\u003C\u002Fcode> and put your action buttons\ninside; the table captures it and renders it in the header-row takeover that\nappears while rows are selected (next to the \"N selected\" count).\n\nIt's a light-DOM marker (styled \u003Ccode>display: contents\u003C\u002Fcode> by the parent table) — it\nhosts your controls without adding a box, so they sit inline in the takeover.","true",[],[6735],{"name":6736,"description":6737},"(default)","The bulk action controls (typically \u003Ccode>nord-button\u003C\u002Fcode>s).",[],[],[],[],[],{"slug":647,"title":62,"meta":6744},{"name":5538,"tagName":5539,"description":6745,"status":4648,"isNew":4649,"category":4650,"properties":6746,"slots":6760,"events":6761,"cssProperties":6776,"stateAttributes":6777,"methods":6778,"dependencies":6779},"Data Table Filter Bar renders a row of filter controls from a declarative\n\u003Ccode>filters\u003C\u002Fcode> config — the filter equivalent of a column model. Each descriptor\nmaps to the matching \u003Ccode>nord-filter-*\u003C\u002Fcode> control; the bar tracks the value map and\nemits a single \u003Ccode>filters-change\u003C\u002Fcode> event. It owns no data fetching or\nserialization. Used embedded by \u003Ca href=\"\u002Fcomponents\u002Fdata-table\u002F\">Data Table\u003C\u002Fa>, or\nstandalone (bind to a table via \u003Ccode>for=\u003C\u002Fcode>).",[6747,6752,6755],{"name":6748,"attribute":6748,"type":6749,"default":6750,"description":6751,"fieldRelated":4649},"align","'start' | 'center' | 'end'","'center'","Cross-axis alignment, forwarded to \u003Ccode>nord-filter-bar\u003C\u002Fcode>.",{"name":6753,"attribute":6753,"type":4672,"description":6754,"fieldRelated":4649},"for","Id of the \u003Ccode>&lt;nord-data-table&gt;\u003C\u002Fcode> this bar controls when used standalone.",{"name":6756,"attribute":6757,"type":826,"default":6758,"description":6759,"fieldRelated":4649},"collapseBreakpoint","collapse-breakpoint","640","Inline-size below which segmented and tag filters use dropdown presentation.",[],[6762,6766,6769,6771,6773],{"name":6763,"type":6764,"description":6765},"search-change","CustomEvent","An async dropdown search changed; detail contains its filter key and value.",{"name":6767,"type":6764,"description":6768},"load-more","An async dropdown requested another options page; detail contains its filter key.",{"name":658,"type":4735,"description":6770},"A filter committed a change.",{"name":662,"type":4738,"description":6772},"The reset affordance was used.",{"name":2372,"type":6774,"description":6775},"NordDataTableFilterAddEvent","An optional filter was added from the add-filter menu.",[],[],[],[670,6780,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,4766],"filter-input","filter-dropdown","filter-date","filter-date-range","filter-reset-button","filter-add-button","input","segmented-control","segmented-control-item","tag-group","tag","tooltip","\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">nord-data-table-bulk-actions\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">nord-data-table-bulk-actions\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>","\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">&#x3C;\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">nord-data-table-filter-bar\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>&#x3C;\u002F\u003C\u002Fspan>\u003Cspan style=\"color:#22863A;--shiki-dark:#85E89D\">nord-data-table-filter-bar\u003C\u002Fspan>\u003Cspan style=\"color:#24292E;--shiki-dark:#E1E4E8\">>\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",{"hasPlayground":367,"playgroundId":4768,"stories":6795},[6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,6837,6838,6839,6840,6841],{"id":4771,"name":4772,"exportName":4772,"html":4773},{"id":4775,"name":4776,"exportName":4777,"html":4778},{"id":4780,"name":4781,"exportName":4781,"html":4782},{"id":4784,"name":4785,"exportName":4785,"html":4786},{"id":4788,"name":4789,"exportName":4789,"html":4790},{"id":4792,"name":4793,"exportName":105,"html":4773,"js":4794},{"id":4796,"name":4797,"exportName":860,"html":4798,"js":4799},{"id":4801,"name":864,"exportName":864,"html":4802,"js":4803},{"id":4805,"name":4806,"exportName":898,"html":4807,"js":4808},{"id":4810,"name":4811,"exportName":921,"html":4812,"js":4813},{"id":4815,"name":4816,"exportName":1038,"html":4817,"js":4818},{"id":4820,"name":4821,"exportName":1053,"html":4822,"js":4823},{"id":4825,"name":4826,"exportName":4827,"html":4828,"js":4829},{"id":4831,"name":1057,"exportName":1057,"html":4832,"js":4833},{"id":4835,"name":4836,"exportName":1084,"html":4837,"js":4838},{"id":4840,"name":4841,"exportName":4842,"html":4843,"js":4844},{"id":4846,"name":4847,"exportName":1100,"html":4848,"js":4849},{"id":4851,"name":4852,"exportName":4853,"html":4854,"js":4855},{"id":4857,"name":4858,"exportName":4859,"html":4860,"js":4861},{"id":4863,"name":4864,"exportName":1123,"html":4865,"js":4866},{"id":4868,"name":1126,"exportName":1142,"html":4869,"js":4870},{"id":4872,"name":4873,"exportName":1160,"html":4874,"js":4875},{"id":4877,"name":4878,"exportName":1174,"html":4879,"js":4880},{"id":4882,"name":4883,"exportName":1196,"html":4884,"js":4885},{"id":4887,"name":4888,"exportName":1207,"html":4889,"js":4890},{"id":4892,"name":4893,"exportName":1243,"html":4894,"js":4895},{"id":4897,"name":4898,"exportName":1264,"html":4899,"js":4900},{"id":4902,"name":4903,"exportName":1287,"html":4904,"js":4905},{"id":4907,"name":4908,"exportName":4909,"html":4910,"js":4911},{"id":4913,"name":4914,"exportName":1304,"html":4915,"js":4916},{"id":4918,"name":4919,"exportName":1323,"html":4920,"js":4921},{"id":4923,"name":4924,"exportName":1342,"html":4925,"js":4926},{"id":4928,"name":4929,"exportName":1357,"html":4930,"js":4931},{"id":4933,"name":4934,"exportName":1376,"html":4935,"js":4936},{"id":4938,"name":4939,"exportName":4940,"html":4941,"js":4942},{"id":4944,"name":4945,"exportName":1394,"html":4946,"js":4947},{"id":4949,"name":4950,"exportName":4950,"html":4951,"js":4952},{"id":4954,"name":4955,"exportName":4955,"html":4956,"js":4957},{"id":4959,"name":4960,"exportName":4961,"html":4962,"js":4963},{"id":4965,"name":4966,"exportName":4967,"html":4968,"js":4969},{"id":4971,"name":4972,"exportName":4973,"html":4974,"js":4975},{"id":4977,"name":4978,"exportName":1408,"html":4979,"js":4980},{"id":4982,"name":4983,"exportName":4984,"html":4985,"js":4986},{"id":4988,"name":4989,"exportName":4990,"html":4991,"js":4992},{"id":4994,"name":4995,"exportName":4996,"html":4997},{"id":4999,"name":5000,"exportName":5001,"html":5002},1785006784707]