@krizaka/ui 3.53.0 → 3.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) hide show
  1. package/README.md +1 -0
  2. package/dist/account-menu.d.ts +6 -2
  3. package/dist/account-menu.js +8 -1
  4. package/dist/account-menu.js.map +1 -1
  5. package/dist/account-settings.js +28 -88
  6. package/dist/account-settings.js.map +1 -1
  7. package/dist/anatomy-plate.d.ts +4 -1
  8. package/dist/anatomy-plate.js +4 -0
  9. package/dist/anatomy-plate.js.map +1 -1
  10. package/dist/app-header/search.d.ts +63 -0
  11. package/dist/app-header/search.js +70 -0
  12. package/dist/app-header/search.js.map +1 -0
  13. package/dist/app-header.d.ts +88 -4
  14. package/dist/app-header.js +63 -5
  15. package/dist/app-header.js.map +1 -1
  16. package/dist/app-shell.js +31 -40
  17. package/dist/app-shell.js.map +1 -1
  18. package/dist/argument-card.js +3 -3
  19. package/dist/bird-plate.d.ts +3 -1
  20. package/dist/bird-plate.js +2 -2
  21. package/dist/bird-plate.js.map +1 -1
  22. package/dist/blocks.css +202 -27
  23. package/dist/chapter.d.ts +20 -3
  24. package/dist/chapter.js +82 -31
  25. package/dist/chapter.js.map +1 -1
  26. package/dist/chat.js +2 -2
  27. package/dist/chat.js.map +1 -1
  28. package/dist/checkbox.js +1 -1
  29. package/dist/checkbox.js.map +1 -1
  30. package/dist/chip.js +5 -98
  31. package/dist/chip.js.map +1 -1
  32. package/dist/choice-grid.js +28 -88
  33. package/dist/choice-grid.js.map +1 -1
  34. package/dist/{chunk-YGIN2YIY.js → chunk-3X3OF4TI.js} +2 -2
  35. package/dist/chunk-3X3OF4TI.js.map +1 -0
  36. package/dist/chunk-5VEVYDVC.js +11 -0
  37. package/dist/chunk-5VEVYDVC.js.map +1 -0
  38. package/dist/chunk-7U5TXA5Q.js +105 -0
  39. package/dist/chunk-7U5TXA5Q.js.map +1 -0
  40. package/dist/{chunk-KBQD6HE3.js → chunk-AEP3K4YD.js} +3 -3
  41. package/dist/{chunk-KBQD6HE3.js.map → chunk-AEP3K4YD.js.map} +1 -1
  42. package/dist/chunk-BDIU5LZB.js +18 -0
  43. package/dist/chunk-BDIU5LZB.js.map +1 -0
  44. package/dist/chunk-CSRKYZ53.js +39 -0
  45. package/dist/chunk-CSRKYZ53.js.map +1 -0
  46. package/dist/chunk-HEKDKM5Y.js +128 -0
  47. package/dist/chunk-HEKDKM5Y.js.map +1 -0
  48. package/dist/chunk-KGLRZMCY.js +16 -0
  49. package/dist/chunk-KGLRZMCY.js.map +1 -0
  50. package/dist/chunk-KID32IRJ.js +18 -0
  51. package/dist/chunk-KID32IRJ.js.map +1 -0
  52. package/dist/{chunk-ZQW7LF4Y.js → chunk-OIMXKRXF.js} +2 -2
  53. package/dist/{chunk-YHKTYFOQ.js → chunk-QWKCNSPF.js} +271 -47
  54. package/dist/chunk-QWKCNSPF.js.map +1 -0
  55. package/dist/{chunk-4LYKBSOG.js → chunk-USPOIQV5.js} +2 -2
  56. package/dist/chunk-USPOIQV5.js.map +1 -0
  57. package/dist/{chunk-7NRSPHAF.js → chunk-VB7MWE2N.js} +2 -2
  58. package/dist/{chunk-7NRSPHAF.js.map → chunk-VB7MWE2N.js.map} +1 -1
  59. package/dist/chunk-VIPSZXO4.js +103 -0
  60. package/dist/chunk-VIPSZXO4.js.map +1 -0
  61. package/dist/chunk-YCZ7N6Q6.js +385 -0
  62. package/dist/chunk-YCZ7N6Q6.js.map +1 -0
  63. package/dist/code-block.js +81 -98
  64. package/dist/code-block.js.map +1 -1
  65. package/dist/combobox.js +2 -2
  66. package/dist/component-page.d.ts +4 -1
  67. package/dist/component-page.js +5 -0
  68. package/dist/component-page.js.map +1 -1
  69. package/dist/continue-prompt.d.ts +4 -1
  70. package/dist/continue-prompt.js +4 -0
  71. package/dist/continue-prompt.js.map +1 -1
  72. package/dist/data-table.d.ts +60 -4
  73. package/dist/data-table.js +19 -7
  74. package/dist/date-picker.js +2 -2
  75. package/dist/date-picker.js.map +1 -1
  76. package/dist/detail-layout.d.ts +28 -17
  77. package/dist/detail-layout.js +73 -16
  78. package/dist/detail-layout.js.map +1 -1
  79. package/dist/doodle.d.ts +21 -0
  80. package/dist/doodle.js +39 -0
  81. package/dist/doodle.js.map +1 -0
  82. package/dist/drop-overlay.d.ts +12 -4
  83. package/dist/drop-overlay.js +16 -6
  84. package/dist/drop-overlay.js.map +1 -1
  85. package/dist/elephant.d.ts +2 -0
  86. package/dist/elephant.js +4 -0
  87. package/dist/elephant.js.map +1 -1
  88. package/dist/field.js +1 -1
  89. package/dist/field.js.map +1 -1
  90. package/dist/filter-bar.js +2 -2
  91. package/dist/force-update-screen.d.ts +5 -1
  92. package/dist/force-update-screen.js +4 -0
  93. package/dist/force-update-screen.js.map +1 -1
  94. package/dist/gallery-page.d.ts +4 -1
  95. package/dist/gallery-page.js +4 -0
  96. package/dist/gallery-page.js.map +1 -1
  97. package/dist/genui.js +5 -5
  98. package/dist/image-cropper.d.ts +10 -2
  99. package/dist/image-cropper.js +4 -0
  100. package/dist/image-cropper.js.map +1 -1
  101. package/dist/kanban.d.ts +3 -0
  102. package/dist/kanban.js +4 -0
  103. package/dist/kanban.js.map +1 -1
  104. package/dist/landscape.d.ts +4 -1
  105. package/dist/landscape.js +4 -0
  106. package/dist/landscape.js.map +1 -1
  107. package/dist/list.js +1 -1
  108. package/dist/maintenance-screen.d.ts +5 -1
  109. package/dist/maintenance-screen.js +4 -0
  110. package/dist/maintenance-screen.js.map +1 -1
  111. package/dist/map.js +6 -0
  112. package/dist/map.js.map +1 -1
  113. package/dist/markdown.d.ts +5 -1
  114. package/dist/markdown.js +12 -5
  115. package/dist/markdown.js.map +1 -1
  116. package/dist/match-dialog.d.ts +4 -1
  117. package/dist/match-dialog.js +4 -0
  118. package/dist/match-dialog.js.map +1 -1
  119. package/dist/media-capture.d.ts +6 -1
  120. package/dist/media-capture.js +4 -0
  121. package/dist/media-capture.js.map +1 -1
  122. package/dist/meter.js +5 -121
  123. package/dist/meter.js.map +1 -1
  124. package/dist/native/map.js +6 -0
  125. package/dist/native/map.js.map +1 -1
  126. package/dist/native/markdown.d.ts +9 -2
  127. package/dist/native/markdown.js +46 -7
  128. package/dist/native/markdown.js.map +1 -1
  129. package/dist/native/media-capture.d.ts +1 -0
  130. package/dist/native/media-capture.js +5 -0
  131. package/dist/native/media-capture.js.map +1 -1
  132. package/dist/native/vertical-video.d.ts +8 -2
  133. package/dist/native/vertical-video.js +6 -0
  134. package/dist/native/vertical-video.js.map +1 -1
  135. package/dist/native.d.ts +94 -4
  136. package/dist/native.js +1236 -1110
  137. package/dist/native.js.map +1 -1
  138. package/dist/nav-bar/me.d.ts +32 -0
  139. package/dist/nav-bar/me.js +23 -0
  140. package/dist/nav-bar/me.js.map +1 -0
  141. package/dist/nav-bar.d.ts +60 -2
  142. package/dist/nav-bar.js +92 -48
  143. package/dist/nav-bar.js.map +1 -1
  144. package/dist/notification-preferences.d.ts +151 -0
  145. package/dist/notification-preferences.js +77 -0
  146. package/dist/notification-preferences.js.map +1 -0
  147. package/dist/page-header.js +1 -1
  148. package/dist/page-header.js.map +1 -1
  149. package/dist/pointer-light.js +5 -0
  150. package/dist/pointer-light.js.map +1 -1
  151. package/dist/product-page.d.ts +4 -1
  152. package/dist/product-page.js +4 -0
  153. package/dist/product-page.js.map +1 -1
  154. package/dist/profile-card.d.ts +119 -1
  155. package/dist/profile-card.js +68 -21
  156. package/dist/profile-card.js.map +1 -1
  157. package/dist/promise-card.d.ts +4 -1
  158. package/dist/promise-card.js +4 -0
  159. package/dist/promise-card.js.map +1 -1
  160. package/dist/quota-meter.d.ts +113 -0
  161. package/dist/quota-meter.js +58 -0
  162. package/dist/quota-meter.js.map +1 -0
  163. package/dist/radio-group.js +6 -8
  164. package/dist/radio-group.js.map +1 -1
  165. package/dist/rail-nav.d.ts +18 -2
  166. package/dist/rail-nav.js +25 -2
  167. package/dist/rail-nav.js.map +1 -1
  168. package/dist/retro-tv.d.ts +30 -0
  169. package/dist/retro-tv.js +124 -0
  170. package/dist/retro-tv.js.map +1 -0
  171. package/dist/router.d.ts +12 -1
  172. package/dist/router.js +85 -8
  173. package/dist/router.js.map +1 -1
  174. package/dist/scroll-stage.d.ts +5 -1
  175. package/dist/scroll-stage.js +5 -0
  176. package/dist/scroll-stage.js.map +1 -1
  177. package/dist/search-field.js +1 -1
  178. package/dist/showcase.d.ts +9 -2
  179. package/dist/showcase.js +5 -0
  180. package/dist/showcase.js.map +1 -1
  181. package/dist/signature.d.ts +19 -0
  182. package/dist/signature.js +39 -0
  183. package/dist/signature.js.map +1 -0
  184. package/dist/site-footer.js +1 -1
  185. package/dist/sites.js +1 -1
  186. package/dist/sites.js.map +1 -1
  187. package/dist/slot.d.ts +1 -1
  188. package/dist/stat.js +1 -1
  189. package/dist/stat.js.map +1 -1
  190. package/dist/status-page.d.ts +4 -1
  191. package/dist/status-page.js +5 -0
  192. package/dist/status-page.js.map +1 -1
  193. package/dist/stuck.d.ts +27 -0
  194. package/dist/stuck.js +26 -0
  195. package/dist/stuck.js.map +1 -0
  196. package/dist/swipe-deck.d.ts +9 -2
  197. package/dist/swipe-deck.js +5 -0
  198. package/dist/swipe-deck.js.map +1 -1
  199. package/dist/switch.js +4 -32
  200. package/dist/switch.js.map +1 -1
  201. package/dist/tabs.d.ts +47 -8
  202. package/dist/tabs.js +62 -12
  203. package/dist/tabs.js.map +1 -1
  204. package/dist/tag-input.js +2 -2
  205. package/dist/tag-selector.js +1 -1
  206. package/dist/terminal-replay.d.ts +4 -1
  207. package/dist/terminal-replay.js +4 -0
  208. package/dist/terminal-replay.js.map +1 -1
  209. package/dist/tree-view.js +4 -0
  210. package/dist/tree-view.js.map +1 -1
  211. package/dist/update-prompt.d.ts +5 -1
  212. package/dist/update-prompt.js +4 -0
  213. package/dist/update-prompt.js.map +1 -1
  214. package/dist/video-player.js +7 -376
  215. package/dist/video-player.js.map +1 -1
  216. package/dist/video-trimmer.d.ts +6 -1
  217. package/dist/video-trimmer.js +4 -0
  218. package/dist/video-trimmer.js.map +1 -1
  219. package/package.json +143 -31
  220. package/registry/account-menu.json +9 -8
  221. package/registry/account-settings.json +2 -2
  222. package/registry/achievement.json +3 -4
  223. package/registry/action-bar.json +3 -3
  224. package/registry/action-sheet.json +1 -0
  225. package/registry/activity-feed.json +2 -1
  226. package/registry/agenda.json +1 -1
  227. package/registry/alert.json +1 -1
  228. package/registry/anatomy-plate.json +13 -5
  229. package/registry/app-header.json +470 -23
  230. package/registry/app-shell.json +2 -2
  231. package/registry/argument-card.json +1 -1
  232. package/registry/audio-player.json +1 -1
  233. package/registry/auth-layout.json +1 -1
  234. package/registry/avatar.json +3 -2
  235. package/registry/badge.json +2 -1
  236. package/registry/bird-plate.json +16 -2
  237. package/registry/button.json +7 -6
  238. package/registry/captcha.json +1 -1
  239. package/registry/card-grid.json +1 -1
  240. package/registry/card.json +7 -6
  241. package/registry/catalogue-page.json +3 -4
  242. package/registry/changelog-page.json +3 -5
  243. package/registry/chapter.json +46 -10
  244. package/registry/chat.json +3 -2
  245. package/registry/checkbox.json +4 -3
  246. package/registry/chip-link.json +2 -2
  247. package/registry/chip-row.json +2 -2
  248. package/registry/chip.json +3 -2
  249. package/registry/choice-grid.json +3 -4
  250. package/registry/code-block.json +1 -1
  251. package/registry/combobox.json +3 -2
  252. package/registry/command.json +2 -2
  253. package/registry/comparison-table.json +1 -1
  254. package/registry/component-page.json +14 -5
  255. package/registry/confirm-button.json +4 -4
  256. package/registry/contact-page.json +1 -1
  257. package/registry/continue-prompt.json +13 -5
  258. package/registry/countdown.json +4 -3
  259. package/registry/cover-hero.json +3 -4
  260. package/registry/cta-panel.json +1 -1
  261. package/registry/dashboard-layout.json +1 -1
  262. package/registry/data-table.json +63 -7
  263. package/registry/date-picker.json +5 -4
  264. package/registry/decision-list.json +1 -1
  265. package/registry/description-list.json +2 -1
  266. package/registry/detail-layout.json +30 -6
  267. package/registry/dialog.json +7 -6
  268. package/registry/docs-article-page.json +3 -4
  269. package/registry/docs-hub-page.json +1 -1
  270. package/registry/docs-layout.json +1 -1
  271. package/registry/docs-nav.json +1 -1
  272. package/registry/document-viewer.json +3 -5
  273. package/registry/doodle.json +209 -0
  274. package/registry/drop-overlay.json +30 -16
  275. package/registry/dropdown-menu.json +2 -2
  276. package/registry/elephant.json +15 -7
  277. package/registry/empty-state.json +2 -1
  278. package/registry/engine-flow.json +1 -1
  279. package/registry/error-page.json +3 -5
  280. package/registry/examples/app-header/family.d.ts +4 -0
  281. package/registry/examples/app-header/family.js +41 -0
  282. package/registry/examples/app-header/family.tsx +37 -0
  283. package/registry/examples/app-header/native/family.d.ts +4 -0
  284. package/registry/examples/app-header/native/family.dark.png +0 -0
  285. package/registry/examples/app-header/native/family.js +25 -0
  286. package/registry/examples/app-header/native/family.light.png +0 -0
  287. package/registry/examples/app-header/native/family.tsx +33 -0
  288. package/registry/examples/chapter/album.d.ts +4 -0
  289. package/registry/examples/chapter/album.js +34 -0
  290. package/registry/examples/chapter/album.tsx +30 -0
  291. package/registry/examples/chapter/in-ruled-page.d.ts +4 -0
  292. package/registry/examples/chapter/in-ruled-page.js +23 -0
  293. package/registry/examples/chapter/in-ruled-page.tsx +19 -0
  294. package/registry/examples/data-table/applicant-files.d.ts +4 -0
  295. package/registry/examples/data-table/applicant-files.js +24 -0
  296. package/registry/examples/data-table/applicant-files.tsx +23 -0
  297. package/registry/examples/data-table/checks.d.ts +4 -0
  298. package/registry/examples/data-table/checks.js +25 -0
  299. package/registry/examples/data-table/checks.tsx +24 -0
  300. package/registry/examples/detail-layout/profile.d.ts +4 -0
  301. package/registry/examples/detail-layout/profile.js +26 -0
  302. package/registry/examples/detail-layout/profile.tsx +21 -0
  303. package/registry/examples/doodle/kinds.d.ts +4 -0
  304. package/registry/examples/doodle/kinds.js +17 -0
  305. package/registry/examples/doodle/kinds.tsx +14 -0
  306. package/registry/examples/doodle/margin.d.ts +4 -0
  307. package/registry/examples/doodle/margin.js +17 -0
  308. package/registry/examples/doodle/margin.tsx +17 -0
  309. package/registry/examples/markdown/native/basic.dark.png +0 -0
  310. package/registry/examples/markdown/native/basic.light.png +0 -0
  311. package/registry/examples/markdown/native/wide-table.d.ts +4 -0
  312. package/registry/examples/markdown/native/wide-table.dark.png +0 -0
  313. package/registry/examples/markdown/native/wide-table.js +23 -0
  314. package/registry/examples/markdown/native/wide-table.light.png +0 -0
  315. package/registry/examples/markdown/native/wide-table.tsx +22 -0
  316. package/registry/examples/markdown/wide-table.d.ts +4 -0
  317. package/registry/examples/markdown/wide-table.js +28 -0
  318. package/registry/examples/markdown/wide-table.tsx +23 -0
  319. package/registry/examples/nav-bar/family-product.js +2 -4
  320. package/registry/examples/nav-bar/family-product.tsx +3 -5
  321. package/registry/examples/notification-preferences/default.d.ts +4 -0
  322. package/registry/examples/notification-preferences/default.js +29 -0
  323. package/registry/examples/notification-preferences/default.tsx +28 -0
  324. package/registry/examples/profile-card/banner.d.ts +4 -0
  325. package/registry/examples/profile-card/banner.js +28 -0
  326. package/registry/examples/profile-card/banner.tsx +24 -0
  327. package/registry/examples/profile-card/native/banner.d.ts +4 -0
  328. package/registry/examples/profile-card/native/banner.dark.png +0 -0
  329. package/registry/examples/profile-card/native/banner.js +22 -0
  330. package/registry/examples/profile-card/native/banner.light.png +0 -0
  331. package/registry/examples/profile-card/native/banner.tsx +18 -0
  332. package/registry/examples/quota-meter/default.d.ts +4 -0
  333. package/registry/examples/quota-meter/default.js +26 -0
  334. package/registry/examples/quota-meter/default.tsx +20 -0
  335. package/registry/examples/quota-meter/full.d.ts +4 -0
  336. package/registry/examples/quota-meter/full.js +25 -0
  337. package/registry/examples/quota-meter/full.tsx +18 -0
  338. package/registry/examples/rail-nav/shortcuts.d.ts +4 -0
  339. package/registry/examples/rail-nav/shortcuts.js +49 -0
  340. package/registry/examples/rail-nav/shortcuts.tsx +40 -0
  341. package/registry/examples/retro-tv/cabinet.d.ts +4 -0
  342. package/registry/examples/retro-tv/cabinet.js +12 -0
  343. package/registry/examples/retro-tv/cabinet.tsx +7 -0
  344. package/registry/examples/retro-tv/portable.d.ts +4 -0
  345. package/registry/examples/retro-tv/portable.js +12 -0
  346. package/registry/examples/retro-tv/portable.tsx +7 -0
  347. package/registry/examples/signature/both.d.ts +4 -0
  348. package/registry/examples/signature/both.js +11 -0
  349. package/registry/examples/signature/both.tsx +6 -0
  350. package/registry/examples/signature/variants.d.ts +4 -0
  351. package/registry/examples/signature/variants.js +14 -0
  352. package/registry/examples/signature/variants.tsx +11 -0
  353. package/registry/examples/stuck/card.d.ts +4 -0
  354. package/registry/examples/stuck/card.js +13 -0
  355. package/registry/examples/stuck/card.tsx +14 -0
  356. package/registry/examples/stuck/holds.d.ts +4 -0
  357. package/registry/examples/stuck/holds.js +12 -0
  358. package/registry/examples/stuck/holds.tsx +16 -0
  359. package/registry/examples/stuck/tag.d.ts +4 -0
  360. package/registry/examples/stuck/tag.js +12 -0
  361. package/registry/examples/stuck/tag.tsx +13 -0
  362. package/registry/examples/tabs/binder.d.ts +4 -0
  363. package/registry/examples/tabs/binder.js +22 -0
  364. package/registry/examples/tabs/binder.tsx +20 -0
  365. package/registry/examples/tabs/native/binder.d.ts +4 -0
  366. package/registry/examples/tabs/native/binder.dark.png +0 -0
  367. package/registry/examples/tabs/native/binder.js +26 -0
  368. package/registry/examples/tabs/native/binder.light.png +0 -0
  369. package/registry/examples/tabs/native/binder.tsx +22 -0
  370. package/registry/fab.json +1 -0
  371. package/registry/field.json +3 -2
  372. package/registry/file-upload.json +6 -11
  373. package/registry/filter-bar.json +2 -2
  374. package/registry/flock.json +3 -4
  375. package/registry/footnote.json +2 -3
  376. package/registry/force-update-screen.json +14 -5
  377. package/registry/form.json +5 -4
  378. package/registry/gallery-page.json +14 -5
  379. package/registry/genui.json +2 -2
  380. package/registry/glossary-term.json +1 -1
  381. package/registry/glossary.json +1 -1
  382. package/registry/glow-card.json +2 -2
  383. package/registry/goal-gauge.json +2 -1
  384. package/registry/header.json +1 -0
  385. package/registry/how-it-works-page.json +3 -5
  386. package/registry/image-cropper.json +13 -5
  387. package/registry/image-viewer.json +3 -4
  388. package/registry/index.json +306 -91
  389. package/registry/iso.json +1 -1
  390. package/registry/kanban.json +13 -5
  391. package/registry/kbd.json +1 -1
  392. package/registry/kpi-explained.json +2 -2
  393. package/registry/landing-page.json +3 -5
  394. package/registry/landscape.json +13 -5
  395. package/registry/language-switch.json +1 -1
  396. package/registry/legal-page.json +1 -1
  397. package/registry/link-card.json +1 -1
  398. package/registry/list.json +2 -1
  399. package/registry/loader.json +2 -1
  400. package/registry/longform-page.json +1 -1
  401. package/registry/maintenance-screen.json +14 -5
  402. package/registry/map.json +3 -2
  403. package/registry/markdown.json +86 -9
  404. package/registry/marketing-layout.json +1 -1
  405. package/registry/marquee.json +1 -1
  406. package/registry/mascot-quote.json +1 -1
  407. package/registry/mascot-state.json +12 -11
  408. package/registry/mascots.json +2 -1
  409. package/registry/match-dialog.json +14 -5
  410. package/registry/media-capture.json +14 -5
  411. package/registry/media-gallery.json +3 -5
  412. package/registry/media-grid.json +1 -1
  413. package/registry/media-picker.json +2 -3
  414. package/registry/meta-row.json +2 -1
  415. package/registry/meter.json +4 -3
  416. package/registry/nav-bar.json +100 -9
  417. package/registry/next-actions.json +1 -1
  418. package/registry/notification-preferences.json +250 -0
  419. package/registry/number-ticker.json +2 -1
  420. package/registry/onboarding.json +1 -0
  421. package/registry/opening-hours.json +1 -1
  422. package/registry/otp-input.json +1 -0
  423. package/registry/page-header.json +2 -2
  424. package/registry/page-hero.json +1 -1
  425. package/registry/page-index.json +1 -1
  426. package/registry/page.json +3 -3
  427. package/registry/pagination.json +2 -1
  428. package/registry/permission-prompt.json +2 -2
  429. package/registry/photo-grid.json +4 -4
  430. package/registry/pointer-light.json +6 -2
  431. package/registry/popover.json +2 -2
  432. package/registry/pricing-page.json +4 -6
  433. package/registry/product-page.json +14 -5
  434. package/registry/profile-card.json +232 -8
  435. package/registry/progress.json +4 -3
  436. package/registry/promise-card.json +13 -5
  437. package/registry/pull-to-refresh.json +1 -0
  438. package/registry/quota-meter.json +308 -0
  439. package/registry/radio-group.json +4 -3
  440. package/registry/rail-nav.json +48 -10
  441. package/registry/recipes.json +1 -1
  442. package/registry/retro-tv.json +478 -0
  443. package/registry/router.json +3 -3
  444. package/registry/screen.json +1 -0
  445. package/registry/scroll-stage.json +14 -5
  446. package/registry/search-field.json +3 -2
  447. package/registry/section-backdrop.json +1 -1
  448. package/registry/segmented.json +1 -0
  449. package/registry/separator.json +2 -2
  450. package/registry/service-card.json +1 -1
  451. package/registry/settings-layout.json +2 -1
  452. package/registry/showcase.json +14 -5
  453. package/registry/signature.json +185 -0
  454. package/registry/site-footer.json +3 -3
  455. package/registry/sites.json +2 -2
  456. package/registry/skeleton.json +2 -1
  457. package/registry/skip-link.json +1 -1
  458. package/registry/slider.json +5 -4
  459. package/registry/slot-picker.json +1 -1
  460. package/registry/slot.json +2 -2
  461. package/registry/specimen-tag.json +1 -1
  462. package/registry/spinner.json +4 -3
  463. package/registry/splash-handoff.json +1 -0
  464. package/registry/split-view.json +1 -1
  465. package/registry/stage-banner.json +2 -3
  466. package/registry/stat.json +2 -2
  467. package/registry/status-page.json +13 -5
  468. package/registry/step-progress.json +2 -1
  469. package/registry/step-showcase.json +3 -5
  470. package/registry/stepper.json +2 -1
  471. package/registry/sticky-action.json +1 -1
  472. package/registry/stuck.json +219 -0
  473. package/registry/swipe-deck.json +14 -5
  474. package/registry/swipeable-row.json +1 -0
  475. package/registry/switch.json +3 -2
  476. package/registry/tab-bar.json +1 -0
  477. package/registry/tabs.json +154 -22
  478. package/registry/tag-input.json +1 -1
  479. package/registry/tag-selector.json +2 -1
  480. package/registry/taped-photo.json +1 -1
  481. package/registry/terminal-replay.json +14 -5
  482. package/registry/text-style.json +5 -5
  483. package/registry/theme.json +2 -1
  484. package/registry/toast.json +2 -1
  485. package/registry/toc.json +1 -1
  486. package/registry/tooltip.json +2 -2
  487. package/registry/tree-view.json +6 -2
  488. package/registry/txt.json +1 -0
  489. package/registry/update-prompt.json +14 -5
  490. package/registry/upload-queue.json +1 -1
  491. package/registry/verified-badge.json +6 -6
  492. package/registry/vertical-video.json +8 -3
  493. package/registry/video-player.json +5 -6
  494. package/registry/video-trimmer.json +13 -5
  495. package/registry/virtual.json +2 -2
  496. package/registry/waveform.json +4 -3
  497. package/dist/chunk-4LYKBSOG.js.map +0 -1
  498. package/dist/chunk-HHFWK2HH.js +0 -163
  499. package/dist/chunk-HHFWK2HH.js.map +0 -1
  500. package/dist/chunk-R3LTSMS5.js +0 -75
  501. package/dist/chunk-R3LTSMS5.js.map +0 -1
  502. package/dist/chunk-YGIN2YIY.js.map +0 -1
  503. package/dist/chunk-YHKTYFOQ.js.map +0 -1
  504. /package/dist/{chunk-ZQW7LF4Y.js.map → chunk-OIMXKRXF.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  Checkbox
4
- } from "./chunk-YGIN2YIY.js";
4
+ } from "./chunk-3X3OF4TI.js";
5
5
  import {
6
6
  Button
7
7
  } from "./chunk-3DHNN5V7.js";
@@ -13,13 +13,13 @@ import {
13
13
  DropdownMenu,
14
14
  FilterBar,
15
15
  FilterMenu
16
- } from "./chunk-ZQW7LF4Y.js";
16
+ } from "./chunk-OIMXKRXF.js";
17
17
  import {
18
18
  cn
19
19
  } from "./chunk-NSLXEDIS.js";
20
20
  import {
21
21
  SearchField
22
- } from "./chunk-7NRSPHAF.js";
22
+ } from "./chunk-VB7MWE2N.js";
23
23
  import {
24
24
  useControllable
25
25
  } from "./chunk-FZBWEDQI.js";
@@ -45,7 +45,7 @@ function dataTableCsv(rows, columns, separator = ",") {
45
45
 
46
46
  // src/data-table/data-table.tsx
47
47
  import { useTable } from "@tanstack/react-table";
48
- import * as React from "react";
48
+ import * as React2 from "react";
49
49
  import { tv as tv2 } from "tailwind-variants";
50
50
 
51
51
  // src/pagination/pagination.tsx
@@ -250,6 +250,122 @@ var filterRange = (row, id, [min, max]) => {
250
250
  filterRange.autoRemove = (value) => !Array.isArray(value) || value[0] == null && value[1] == null;
251
251
  var FILTERS = { text: filterText, facet: filterFacet, range: filterRange };
252
252
 
253
+ // src/data-table/use-route-table.ts
254
+ import * as React from "react";
255
+ import { useRouteSearch } from "@krizaka/ui/router";
256
+
257
+ // src/data-table/route-codec.ts
258
+ var NONE = "none";
259
+ function encodeSort(sort) {
260
+ return sort ? `${sort.column}.${sort.direction}` : NONE;
261
+ }
262
+ function decodeSort(raw, fallback, columns) {
263
+ if (raw === null) return fallback;
264
+ if (raw === NONE) return null;
265
+ const dot = raw.lastIndexOf(".");
266
+ const column = raw.slice(0, dot);
267
+ const direction = raw.slice(dot + 1);
268
+ if (dot < 1 || direction !== "ascending" && direction !== "descending" || columns && !columns.includes(column)) return fallback;
269
+ return { column, direction };
270
+ }
271
+ var ESCAPE = "\\";
272
+ function encodeFilter(value) {
273
+ if (typeof value !== "string") return JSON.stringify(value);
274
+ return value.startsWith("[") || value.startsWith(ESCAPE) ? `${ESCAPE}${value}` : value;
275
+ }
276
+ function decodeFilter(raw) {
277
+ if (raw.startsWith(ESCAPE)) return raw.slice(1);
278
+ if (raw.startsWith("[")) {
279
+ try {
280
+ const parsed = JSON.parse(raw);
281
+ if (Array.isArray(parsed)) return parsed;
282
+ } catch {
283
+ }
284
+ }
285
+ return raw;
286
+ }
287
+ var sameSort = (a, b) => a?.column === b?.column && a?.direction === b?.direction;
288
+ var filterPrefix = (key) => `${key}.q.`;
289
+ var clearedFilters = (key) => `${key}.q`;
290
+ var sameFilters = (a, b) => {
291
+ const written = (f) => JSON.stringify(Object.entries(f).map(([column, value]) => [column, encodeFilter(value)]).filter(([, v]) => v !== "" && v !== "[]").sort(([a2], [b2]) => String(a2).localeCompare(String(b2))));
292
+ return written(a) === written(b);
293
+ };
294
+ function readTable(search, key, defaults, columns) {
295
+ const params = new URLSearchParams(search);
296
+ const filters = {};
297
+ let explicit = params.has(clearedFilters(key));
298
+ for (const [name, raw2] of params) {
299
+ if (!name.startsWith(filterPrefix(key)) || raw2 === "") continue;
300
+ explicit = true;
301
+ filters[name.slice(filterPrefix(key).length)] = decodeFilter(raw2);
302
+ }
303
+ const raw = params.get(`${key}.page`);
304
+ const page = raw !== null && /^[1-9]\d*$/.test(raw) ? Number(raw) : defaults.page;
305
+ return {
306
+ sort: decodeSort(params.get(`${key}.sort`), defaults.sort, columns),
307
+ filters: explicit ? filters : defaults.filters ?? {},
308
+ page
309
+ };
310
+ }
311
+ function writeTable(search, key, change, defaults) {
312
+ const params = new URLSearchParams(search);
313
+ if (change.sort !== void 0) {
314
+ if (sameSort(change.sort, defaults.sort)) params.delete(`${key}.sort`);
315
+ else params.set(`${key}.sort`, encodeSort(change.sort));
316
+ }
317
+ if (change.filters !== void 0) {
318
+ for (const name of [...params.keys()]) if (name.startsWith(filterPrefix(key)) || name === clearedFilters(key)) params.delete(name);
319
+ if (!sameFilters(change.filters, defaults.filters ?? {})) {
320
+ let written = 0;
321
+ for (const [column, value] of Object.entries(change.filters)) {
322
+ const encoded = encodeFilter(value);
323
+ if (encoded !== "" && encoded !== "[]") {
324
+ params.set(`${filterPrefix(key)}${column}`, encoded);
325
+ written += 1;
326
+ }
327
+ }
328
+ if (written === 0) params.set(clearedFilters(key), "");
329
+ }
330
+ }
331
+ const page = change.page ?? (change.sort !== void 0 || change.filters !== void 0 ? 1 : void 0);
332
+ if (page !== void 0) {
333
+ if (page === defaults.page) params.delete(`${key}.page`);
334
+ else params.set(`${key}.page`, String(page));
335
+ }
336
+ const text = params.toString();
337
+ return text ? `?${text}` : "";
338
+ }
339
+
340
+ // src/data-table/use-route-table.ts
341
+ function useRouteTable(routeKey, defaults, columns) {
342
+ const { search, write } = useRouteSearch();
343
+ const key = routeKey;
344
+ const sortKey = encodeSort(defaults.sort);
345
+ const filtersKey = JSON.stringify(defaults.filters);
346
+ const columnKey = columns.join();
347
+ const page = defaults.page;
348
+ const stable = React.useMemo(
349
+ () => ({ sort: decodeSort(sortKey, null), page, filters: JSON.parse(filtersKey) }),
350
+ [sortKey, filtersKey, page]
351
+ );
352
+ const table = React.useMemo(
353
+ () => key === void 0 ? null : readTable(search, key, stable, columnKey.split(",")),
354
+ [search, key, stable, columnKey]
355
+ );
356
+ if (key === void 0 || table === null) return null;
357
+ return {
358
+ sort: table.sort,
359
+ filters: table.filters,
360
+ page: table.page,
361
+ // Typing in a filter is not a place to come back to: it replaces the entry; a sort or a page is a step. A sort or a
362
+ // filter goes back to the first page in the same navigation.
363
+ onSortChange: (sort) => write((s2) => writeTable(s2, key, { sort }, stable)),
364
+ onFiltersChange: (filters) => write((s2) => writeTable(s2, key, { filters }, stable), { replace: true }),
365
+ onPageChange: (next) => write((s2) => writeTable(s2, key, { page: next }, stable))
366
+ };
367
+ }
368
+
253
369
  // src/data-table/data-table.tsx
254
370
  import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
255
371
  var dataTable = tv2({
@@ -291,7 +407,7 @@ var dataTable = tv2({
291
407
  th: "@max-xl:sr-only @max-xl:data-[keep]:not-sr-only @max-xl:data-[keep]:block @max-xl:p-0 @xl:data-[pin]:sticky @xl:data-[pin]:z-[2] @xl:data-[pin]:bg-surface-2 @xl:data-[pin=start]:left-(--dt-pin) @xl:data-[pin=end]:right-(--dt-pin)",
292
408
  tbody: "@max-xl:grid @max-xl:gap-3 @max-xl:p-3",
293
409
  tr: "@max-xl:relative @max-xl:grid @max-xl:gap-1.5 @max-xl:rounded-xl @max-xl:border @max-xl:border-border-default @max-xl:bg-surface-0 @max-xl:p-4 @max-xl:last:border-b",
294
- td: "@max-xl:flex @max-xl:items-baseline @max-xl:justify-between @max-xl:gap-4 @max-xl:p-0 @max-xl:text-right @max-xl:before:shrink-0 @max-xl:before:text-xs @max-xl:before:font-semibold @max-xl:before:text-fg-secondary @max-xl:before:content-[attr(data-label)] @max-xl:data-[card=title]:order-first @max-xl:data-[card=title]:pr-8 @max-xl:data-[card=title]:text-left @max-xl:data-[card=title]:text-base @max-xl:data-[card=title]:font-semibold @max-xl:data-[card=title]:before:content-none @max-xl:data-[card=hidden]:hidden @max-xl:data-[card=message]:block @max-xl:data-[card=message]:text-center @max-xl:data-[card=message]:before:content-none @xl:data-[pin]:sticky @xl:data-[pin]:z-[1] @xl:data-[pin]:bg-surface-1 @xl:data-[pin=start]:left-(--dt-pin) @xl:data-[pin=end]:right-(--dt-pin)",
410
+ td: "@max-xl:flex @max-xl:min-w-0 @max-xl:items-baseline @max-xl:justify-between @max-xl:gap-4 @max-xl:p-0 @max-xl:text-right @max-xl:[overflow-wrap:anywhere] @max-xl:[&>*]:min-w-0 @max-xl:[&>*]:shrink @max-xl:[&>*]:whitespace-normal @max-xl:before:shrink-0 @max-xl:before:text-xs @max-xl:before:font-semibold @max-xl:before:text-fg-secondary @max-xl:before:content-[attr(data-label)] @max-xl:data-[card=title]:order-first @max-xl:data-[card=title]:pr-8 @max-xl:data-[card=title]:text-left @max-xl:data-[card=title]:text-base @max-xl:data-[card=title]:font-semibold @max-xl:data-[card=title]:before:content-none @max-xl:data-[card=hidden]:hidden @max-xl:data-[card=message]:block @max-xl:data-[card=message]:text-center @max-xl:data-[card=message]:before:content-none @xl:data-[pin]:sticky @xl:data-[pin]:z-[1] @xl:data-[pin]:bg-surface-1 @xl:data-[pin=start]:left-(--dt-pin) @xl:data-[pin=end]:right-(--dt-pin)",
295
411
  select: "@max-xl:absolute @max-xl:right-3 @max-xl:top-3 @max-xl:w-auto @max-xl:before:content-none",
296
412
  expander: "@max-xl:before:content-none"
297
413
  },
@@ -303,7 +419,7 @@ var dataTable = tv2({
303
419
  th: "sr-only p-0 data-[keep]:not-sr-only data-[keep]:block",
304
420
  tbody: "grid gap-3 p-3",
305
421
  tr: "relative grid gap-1.5 rounded-xl border border-border-default bg-surface-0 p-4 last:border-b",
306
- td: "flex items-baseline justify-between gap-4 p-0 text-right before:shrink-0 before:text-xs before:font-semibold before:text-fg-secondary before:content-[attr(data-label)] data-[card=title]:order-first data-[card=title]:pr-8 data-[card=title]:text-left data-[card=title]:text-base data-[card=title]:font-semibold data-[card=title]:before:content-none data-[card=hidden]:hidden data-[card=message]:block data-[card=message]:text-center data-[card=message]:before:content-none",
422
+ td: "flex min-w-0 items-baseline justify-between gap-4 p-0 text-right [overflow-wrap:anywhere] before:shrink-0 before:text-xs before:font-semibold before:text-fg-secondary before:content-[attr(data-label)] [&>*]:min-w-0 [&>*]:shrink [&>*]:whitespace-normal data-[card=title]:order-first data-[card=title]:pr-8 data-[card=title]:text-left data-[card=title]:text-base data-[card=title]:font-semibold data-[card=title]:before:content-none data-[card=hidden]:hidden data-[card=message]:block data-[card=message]:text-center data-[card=message]:before:content-none",
307
423
  select: "absolute right-3 top-3 w-auto before:content-none",
308
424
  expander: "before:content-none"
309
425
  }
@@ -317,7 +433,9 @@ var dataTable = tv2({
317
433
  // Zebra rows (the table layouts); the cards keep their frame.
318
434
  striped: { true: {}, false: {} },
319
435
  // Typed columns: one height per row (`typed`); untyped tables keep the height of their content.
320
- typed: { true: {}, false: {} }
436
+ typed: { true: {}, false: {} },
437
+ // What a row becomes on a phone (under 36 rem, or with `layout="cards"`): a card, or a list row (#636).
438
+ phone: { cards: {}, list: {} }
321
439
  },
322
440
  compoundVariants: [
323
441
  { layout: "table", sticky: true, class: { th: "sticky top-(--dt-top,0px) z-[3] bg-surface-2" } },
@@ -328,9 +446,33 @@ var dataTable = tv2({
328
446
  { layout: "table", density: "comfortable", typed: true, class: { td: "h-15" } },
329
447
  { layout: "auto", density: "comfortable", typed: true, class: { td: "@xl:h-15" } },
330
448
  { layout: "table", density: "compact", typed: true, class: { td: "h-12" } },
331
- { layout: "auto", density: "compact", typed: true, class: { td: "@xl:h-12" } }
449
+ { layout: "auto", density: "compact", typed: true, class: { td: "@xl:h-12" } },
450
+ // The list rows (#636): no box in the box, no label/value lines — the checkbox, the title and its line of facts, the
451
+ // status at the end, a hairline between rows. Each cell says its place in `data-list` (title · status · away).
452
+ {
453
+ layout: "auto",
454
+ phone: "list",
455
+ class: {
456
+ tbody: "@max-xl:gap-0 @max-xl:p-0",
457
+ tr: "@max-xl:flex @max-xl:items-center @max-xl:gap-3 @max-xl:rounded-none @max-xl:border-0 @max-xl:border-b @max-xl:border-border-subtle @max-xl:bg-transparent @max-xl:px-4 @max-xl:py-3 @max-xl:last:border-b-0",
458
+ td: "@max-xl:block @max-xl:text-left @max-xl:before:content-none @max-xl:data-[list=title]:min-w-0 @max-xl:data-[list=title]:flex-1 @max-xl:data-[list=status]:shrink-0 @max-xl:data-[list=away]:hidden @max-xl:data-[card=message]:w-full",
459
+ select: "@max-xl:relative @max-xl:right-auto @max-xl:top-auto @max-xl:z-[1] @max-xl:shrink-0 @max-xl:self-center",
460
+ expander: "@max-xl:relative @max-xl:z-[1] @max-xl:shrink-0"
461
+ }
462
+ },
463
+ {
464
+ layout: "cards",
465
+ phone: "list",
466
+ class: {
467
+ tbody: "gap-0 p-0",
468
+ tr: "flex items-center gap-3 rounded-none border-0 border-b border-border-subtle bg-transparent px-4 py-3 last:border-b-0",
469
+ td: "block text-left before:content-none data-[list=title]:min-w-0 data-[list=title]:flex-1 data-[list=status]:shrink-0 data-[list=away]:hidden data-[card=message]:w-full",
470
+ select: "relative right-auto top-auto z-[1] shrink-0 self-center",
471
+ expander: "relative z-[1] shrink-0"
472
+ }
473
+ }
332
474
  ],
333
- defaultVariants: { layout: "auto", density: "comfortable", sticky: false, striped: false, typed: false }
475
+ defaultVariants: { layout: "auto", density: "comfortable", sticky: false, striped: false, typed: false, phone: "cards" }
334
476
  });
335
477
  var NO_CLASS = { 2: "", 3: "", 4: "", 5: "", 6: "", 7: "" };
336
478
  var LEAVES = {
@@ -358,6 +500,11 @@ var PANEL = {
358
500
  table: { 2: "hidden @max-2xl:block", 3: "hidden @max-3xl:block", 4: "hidden @max-4xl:block", 5: "hidden @max-5xl:block", 6: "hidden @max-6xl:block", 7: "hidden @max-7xl:block" },
359
501
  cards: { 2: "hidden", 3: "block", 4: "block", 5: "block", 6: "block", 7: "block" }
360
502
  };
503
+ var LIST_FACTS = { auto: "hidden @max-xl:mt-0.5 @max-xl:block @max-xl:truncate text-xs font-normal text-fg-secondary", table: "hidden", cards: "mt-0.5 block truncate text-xs font-normal text-fg-secondary" };
504
+ var LIST_IN_DETAIL = { auto: "hidden @max-xl:grid", table: "hidden", cards: "grid" };
505
+ var LIST_TOGGLE = { auto: "@max-xl:inline-flex", table: "", cards: "inline-flex" };
506
+ var LIST_PANEL = { auto: "@max-xl:block", table: "", cards: "block" };
507
+ var LIST_LINK = { auto: "@max-xl:after:absolute @max-xl:after:inset-0 @max-xl:after:content-['']", table: "", cards: "after:absolute after:inset-0 after:content-['']" };
361
508
  var TYPE_CELL = {
362
509
  title: { auto: "@xl:w-full @xl:max-w-0 @xl:min-w-44", table: "w-full max-w-0 min-w-44", cards: "" },
363
510
  badge: { auto: "@xl:w-px", table: "w-px", cards: "" },
@@ -389,18 +536,19 @@ var dataTableLabels = {
389
536
  showMore: (name) => `Show more about ${name}`,
390
537
  export: "Export CSV"
391
538
  };
392
- var DataTableContext = React.createContext(null);
539
+ var DataTableContext = React2.createContext(null);
393
540
  function useDataTable() {
394
- const context = React.useContext(DataTableContext);
541
+ const context = React2.useContext(DataTableContext);
395
542
  if (!context) throw new Error("useDataTable: call it inside a DataTable (its `toolbar`, `footer` or a cell)");
396
543
  return context;
397
544
  }
545
+ var CARD_CLIP = { auto: "@max-xl:overflow-x-clip!", table: void 0, cards: "overflow-x-clip!" };
398
546
  var TRUNCATE = { auto: "@xl:truncate", table: "truncate", cards: "" };
399
547
  var MIN = { auto: "@xl:min-w-(--dt-min)!", table: "min-w-(--dt-min)!", cards: "" };
400
548
  var MAX = { auto: "@xl:max-w-(--dt-max)!", table: "max-w-(--dt-max)!", cards: "" };
401
549
  var SHADOWS = "[background:linear-gradient(to_right,var(--kz-surface-1),transparent)_left/24px_100%_no-repeat_local,linear-gradient(to_left,var(--kz-surface-1),transparent)_right/24px_100%_no-repeat_local,linear-gradient(to_right,rgb(0_0_0/0.18),transparent)_left/10px_100%_no-repeat_scroll,linear-gradient(to_left,rgb(0_0_0/0.18),transparent)_right/10px_100%_no-repeat_scroll]";
402
550
  var ALIGN = { start: "text-left", center: "text-center", end: "text-right" };
403
- var NONE = [];
551
+ var NONE2 = [];
404
552
  var NO_RECORD = {};
405
553
  var apply = (updater, old) => typeof updater === "function" ? updater(old) : updater;
406
554
  var valueOf = (column, row) => column.value ? column.value(row) : row[column.id];
@@ -412,6 +560,7 @@ function DataTable({
412
560
  caption,
413
561
  showCaption,
414
562
  sort: sortProp,
563
+ routeKey,
415
564
  defaultSort = null,
416
565
  onSortChange,
417
566
  filters: filtersProp,
@@ -419,11 +568,11 @@ function DataTable({
419
568
  onFiltersChange,
420
569
  selectable,
421
570
  selected: selectedProp,
422
- defaultSelected = NONE,
571
+ defaultSelected = NONE2,
423
572
  onSelectedChange,
424
573
  rowLabel,
425
574
  groupBy: groupByProp,
426
- defaultGroupBy = NONE,
575
+ defaultGroupBy = NONE2,
427
576
  onGroupByChange,
428
577
  columnVisibility: visibilityProp,
429
578
  defaultColumnVisibility = NO_RECORD,
@@ -450,6 +599,7 @@ function DataTable({
450
599
  error,
451
600
  empty: empty2,
452
601
  layout = "auto",
602
+ phone = "cards",
453
603
  density,
454
604
  stickyHeader,
455
605
  striped,
@@ -465,29 +615,42 @@ function DataTable({
465
615
  const effectiveLayout = virtualized ? "table" : layout;
466
616
  const L = effectiveLayout;
467
617
  const typed = columns.some((c) => c.type || c.priority);
468
- const s2 = dataTable({ layout: L, density, sticky: Boolean(stickyHeader), striped: Boolean(striped), typed });
469
- const [sort, setSort] = useControllable(sortProp, defaultSort, onSortChange);
470
- const [filters, setFiltersState] = useControllable(filtersProp, defaultFilters, onFiltersChange);
618
+ const list = phone === "list" && L !== "table";
619
+ const s2 = dataTable({ layout: L, density, sticky: Boolean(stickyHeader), striped: Boolean(striped), typed, phone: list ? "list" : "cards" });
620
+ const route = useRouteTable(routeKey, { sort: defaultSort, page: defaultPage, filters: defaultFilters }, columns.map((c) => c.id));
621
+ const [sort, setSort] = useControllable(route ? route.sort : sortProp, defaultSort, route?.onSortChange ?? onSortChange);
622
+ const [filters, setFiltersState] = useControllable(route ? route.filters : filtersProp, defaultFilters, route?.onFiltersChange ?? onFiltersChange);
471
623
  const [selected, setSelected] = useControllable(selectedProp, defaultSelected, onSelectedChange);
472
624
  const [groupBy, setGroupBy] = useControllable(groupByProp, defaultGroupBy, onGroupByChange);
473
625
  const [visibility, setVisibility] = useControllable(visibilityProp, defaultColumnVisibility, onColumnVisibilityChange);
474
626
  const [expanded, setExpanded] = useControllable(expandedProp, defaultExpanded, onExpandedChange);
475
627
  const paginated = pageSizeProp !== void 0 || defaultPageSize !== void 0;
476
628
  const [pageSize, setPageSize] = useControllable(pageSizeProp, defaultPageSize ?? Number.POSITIVE_INFINITY, onPageSizeChange);
477
- const [page, setPage] = useControllable(pageProp, defaultPage, onPageChange);
478
- const [sizing, setSizing] = React.useState({});
479
- const [resizeState, setResizeState] = React.useState(void 0);
480
- const announce = (next) => onStateChange?.({ sort, filters, page: paginated ? page : 1, pageSize: paginated ? pageSize : Number.POSITIVE_INFINITY, ...next });
629
+ const [page, setPage] = useControllable(route ? route.page : pageProp, defaultPage, route?.onPageChange ?? onPageChange);
630
+ const [sizing, setSizing] = React2.useState({});
631
+ const [resizeState, setResizeState] = React2.useState(void 0);
632
+ const announced = React2.useRef(JSON.stringify([defaultSort, defaultFilters, paginated ? defaultPage : 1, paginated ? pageSize : null]));
633
+ const announce = (next) => {
634
+ const query = { sort, filters, page: paginated ? page : 1, pageSize: paginated ? pageSize : Number.POSITIVE_INFINITY, ...next };
635
+ if (route) announced.current = JSON.stringify([query.sort, query.filters, query.page, paginated ? query.pageSize : null]);
636
+ onStateChange?.(query);
637
+ };
481
638
  const changeSort = (next) => {
482
639
  setSort(next);
483
- if (paginated && page !== 1) setPage(1);
640
+ if (paginated && page !== 1 && !route) setPage(1);
484
641
  announce({ sort: next, page: 1 });
485
642
  };
486
643
  const changeFilters = (next) => {
487
644
  setFiltersState(next);
488
- if (paginated && page !== 1) setPage(1);
645
+ if (paginated && page !== 1 && !route) setPage(1);
489
646
  announce({ filters: next, page: 1 });
490
647
  };
648
+ const routeQuery = route ? JSON.stringify([route.sort, route.filters, paginated ? route.page : 1, paginated ? pageSize : null]) : null;
649
+ React2.useEffect(() => {
650
+ if (routeQuery === null || routeQuery === announced.current) return;
651
+ announced.current = routeQuery;
652
+ announce({});
653
+ }, [routeQuery]);
491
654
  const changePage = (next) => {
492
655
  setPage(next);
493
656
  announce({ page: next });
@@ -500,9 +663,18 @@ function DataTable({
500
663
  const hasExpander = Boolean(renderDetail || getSubRows);
501
664
  const priorityOf = (column) => column.priority && column.priority > 1 ? column.priority : 1;
502
665
  const maxPriority = columns.reduce((max, column) => priorityOf(column) > max ? priorityOf(column) : max, 1);
503
- const inlineToggle = maxPriority > 1 && !hasExpander;
666
+ const titleColumn = columns.find((c) => c.card === "title" || !c.card && c.type === "title") ?? columns[0];
667
+ const placeOf = (column) => {
668
+ if (column.card === "hidden") return "hidden";
669
+ if (column === titleColumn) return "title";
670
+ if (column.type === "status" || column.type === "badge") return "status";
671
+ return priorityOf(column) === 2 ? "facts" : "away";
672
+ };
673
+ const listAway = list ? columns.filter((c) => placeOf(c) === "away" && priorityOf(c) === 1) : [];
674
+ const facts = list ? columns.filter((c) => placeOf(c) === "facts") : [];
675
+ const inlineToggle = (maxPriority > 1 || listAway.length > 0) && !hasExpander;
504
676
  const detailed = Boolean(renderDetail) || inlineToggle;
505
- const defs = React.useMemo(
677
+ const defs = React2.useMemo(
506
678
  () => columns.map((column) => ({
507
679
  id: column.id,
508
680
  accessorFn: (row) => valueOf(column, row),
@@ -579,7 +751,7 @@ function DataTable({
579
751
  const pageRows = table.getRowModel().rows;
580
752
  const leafCount = (manual?.pagination || manual?.filtering) && rowCount !== void 0 ? rowCount : table.getFilteredRowModel().rows.length;
581
753
  const pageCount = paginated ? Math.max(1, manual?.pagination ? Math.ceil((rowCount ?? rows.length) / pageSize) : table.getPageCount()) : 1;
582
- React.useEffect(() => {
754
+ React2.useEffect(() => {
583
755
  if (paginated && !loading && page > pageCount) changePage(pageCount);
584
756
  }, [pageCount]);
585
757
  const selectableIds = pageRows.filter((r) => !r.getIsGrouped()).map((r) => r.id);
@@ -591,7 +763,7 @@ function DataTable({
591
763
  const fixedLayout = Boolean(resizing || pinned?.start?.length || pinned?.end?.length);
592
764
  const sideways = scroll ?? (!typed && !stickyHeader);
593
765
  const nameOf = (row) => rowLabel ? rowLabel(row.original) : row.id;
594
- const scroller = React.useRef(null);
766
+ const scroller = React2.useRef(null);
595
767
  const fallbacks = useLayoutFallbacks(virtualized?.height ?? 0, virtualized?.estimateRowHeight ?? 44);
596
768
  const virtualizer = useVirtualizer({
597
769
  ...fallbacks,
@@ -623,8 +795,9 @@ function DataTable({
623
795
  switch (column.type) {
624
796
  case "title": {
625
797
  const sub = column.subtitle?.(original);
798
+ const href = column.href?.(original);
626
799
  return /* @__PURE__ */ jsxs2("span", { className: "block min-w-0", children: [
627
- /* @__PURE__ */ jsx2("span", { className: cn("block font-semibold text-fg", cut), title: text, children: text }),
800
+ href ? /* @__PURE__ */ jsx2("a", { href, className: cn("block font-semibold text-fg no-underline hover:underline focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring", cut, list && LIST_LINK[L]), title: text, children: text }) : /* @__PURE__ */ jsx2("span", { className: cn("block font-semibold text-fg", cut), title: text, children: text }),
628
801
  sub ? /* @__PURE__ */ jsx2("span", { className: cn("block font-mono text-xs text-fg-tertiary", cut), children: sub }) : null
629
802
  ] });
630
803
  }
@@ -644,6 +817,11 @@ function DataTable({
644
817
  }
645
818
  }
646
819
  };
820
+ const listPlace = (row, column) => {
821
+ if (row?.getIsGrouped()) return row.groupingColumnId === column.id ? "title" : column.aggregate ? "status" : "away";
822
+ const place = placeOf(column);
823
+ return place === "facts" || place === "hidden" ? "away" : place;
824
+ };
647
825
  const dataCell = (row, cell, first) => {
648
826
  const column = byId.get(cell.column.id);
649
827
  if (!column) return null;
@@ -660,13 +838,22 @@ function DataTable({
660
838
  } else content = column.aggregate ? column.aggregate(leaves) : null;
661
839
  } else {
662
840
  content = contentOf(column, row.original);
841
+ if (list && column === titleColumn && facts.length > 0) {
842
+ content = /* @__PURE__ */ jsxs2("span", { className: "block min-w-0", children: [
843
+ content,
844
+ /* @__PURE__ */ jsx2("span", { "data-facts": "", className: LIST_FACTS[L], children: facts.map((c, i) => /* @__PURE__ */ jsxs2(React2.Fragment, { children: [
845
+ i > 0 ? /* @__PURE__ */ jsx2("span", { "aria-hidden": true, children: " \xB7 " }) : null,
846
+ contentOf(c, row.original)
847
+ ] }, c.id)) })
848
+ ] });
849
+ }
663
850
  if (first && inlineToggle) {
664
851
  content = /* @__PURE__ */ jsxs2("span", { className: "flex min-w-0 items-center gap-1", children: [
665
852
  /* @__PURE__ */ jsx2(
666
853
  "button",
667
854
  {
668
855
  type: "button",
669
- className: s2.toggle({ className: TOGGLE[L][maxPriority] }),
856
+ className: s2.toggle({ className: cn(maxPriority > 1 ? TOGGLE[L][maxPriority] : "hidden", listAway.length > 0 && LIST_TOGGLE[L], list && "relative z-[1]") }),
670
857
  "aria-expanded": row.getIsExpanded(),
671
858
  "aria-label": labels.showMore(nameOf(row)),
672
859
  onClick: row.getToggleExpandedHandler(),
@@ -691,7 +878,8 @@ function DataTable({
691
878
  {
692
879
  role: "cell",
693
880
  "data-label": column.header,
694
- "data-card": row.getIsGrouped() ? cell.column.id === row.groupingColumnId ? "title" : column.aggregate ? void 0 : "hidden" : cardOf(column),
881
+ "data-card": list ? placeOf(column) === "hidden" ? "hidden" : void 0 : row.getIsGrouped() ? cell.column.id === row.groupingColumnId ? "title" : column.aggregate ? void 0 : "hidden" : cardOf(column),
882
+ "data-list": list ? listPlace(row, column) : void 0,
695
883
  ...pinnedProps,
696
884
  className: s2.td({ className: cellClass }),
697
885
  style: {
@@ -728,14 +916,17 @@ function DataTable({
728
916
  ]
729
917
  }
730
918
  );
731
- if (!showDetail) return /* @__PURE__ */ jsx2(React.Fragment, { children: main }, row.id);
732
- const left = visibleColumns.filter((c) => priorityOf(byId.get(c.id)) > 1);
733
- return /* @__PURE__ */ jsxs2(React.Fragment, { children: [
919
+ if (!showDetail) return /* @__PURE__ */ jsx2(React2.Fragment, { children: main }, row.id);
920
+ const left = visibleColumns.filter((c) => {
921
+ const column = byId.get(c.id);
922
+ return priorityOf(column) > 1 || listAway.includes(column);
923
+ });
924
+ return /* @__PURE__ */ jsxs2(React2.Fragment, { children: [
734
925
  main,
735
926
  /* @__PURE__ */ jsx2("tr", { role: "row", className: s2.tr({ className: "hover:bg-transparent" }), children: /* @__PURE__ */ jsxs2("td", { role: "cell", colSpan: span, "data-card": "message", className: s2.td({ className: renderDetail ? s2.detail() : "bg-surface-0 p-0 text-left" }), children: [
736
- left.length > 0 ? /* @__PURE__ */ jsx2("dl", { className: cn("m-0 grid gap-3 text-left", renderDetail ? "mb-4" : cn("px-4 py-4", PANEL[L][maxPriority])), children: left.map((c) => {
927
+ left.length > 0 ? /* @__PURE__ */ jsx2("dl", { className: cn("m-0 grid gap-3 text-left", renderDetail ? "mb-4" : cn("px-4 py-4", maxPriority > 1 ? PANEL[L][maxPriority] : "hidden", listAway.length > 0 && LIST_PANEL[L])), children: left.map((c) => {
737
928
  const column = byId.get(c.id);
738
- return /* @__PURE__ */ jsxs2("div", { className: cn(IN_DETAIL[L][priorityOf(column)], "grid-cols-[minmax(5rem,8rem)_minmax(0,1fr)] items-baseline gap-3"), children: [
929
+ return /* @__PURE__ */ jsxs2("div", { className: cn(listAway.includes(column) ? LIST_IN_DETAIL[L] : IN_DETAIL[L][priorityOf(column)], "grid-cols-[minmax(5rem,8rem)_minmax(0,1fr)] items-baseline gap-3"), children: [
739
930
  /* @__PURE__ */ jsx2("dt", { className: "text-xs font-semibold text-fg-secondary", children: column.header }),
740
931
  /* @__PURE__ */ jsx2("dd", { className: "m-0 min-w-0 text-sm text-fg", children: contentOf(column, row.original) })
741
932
  ] }, c.id);
@@ -749,7 +940,7 @@ function DataTable({
749
940
  body = Array.from({ length: loadingRows }, (_, i) => /* @__PURE__ */ jsxs2("tr", { role: "row", "aria-hidden": true, className: s2.tr(), children: [
750
941
  selectable && /* @__PURE__ */ jsx2("td", { role: "cell", className: s2.td({ className: s2.select() }) }),
751
942
  hasExpander && /* @__PURE__ */ jsx2("td", { role: "cell", className: s2.td({ className: s2.expander() }) }),
752
- visibleColumns.map((column) => /* @__PURE__ */ jsx2("td", { role: "cell", "data-card": cardOf(byId.get(column.id)), className: s2.td(), children: /* @__PURE__ */ jsx2("div", { className: s2.skeleton() }) }, column.id))
943
+ visibleColumns.map((column) => /* @__PURE__ */ jsx2("td", { role: "cell", "data-card": list ? void 0 : cardOf(byId.get(column.id)), "data-list": list ? listPlace(null, byId.get(column.id)) : void 0, className: s2.td(), children: /* @__PURE__ */ jsx2("div", { className: s2.skeleton() }) }, column.id))
753
944
  ] }, `loading-${i}`));
754
945
  } else if (error) body = message(error, true);
755
946
  else if (pageRows.length === 0) body = message(empty2 ?? labels.empty);
@@ -867,7 +1058,7 @@ function DataTable({
867
1058
  children: tableElement
868
1059
  }
869
1060
  )
870
- ) : /* @__PURE__ */ jsx2("div", { className: s2.scroller({ className: sideways ? scroll ? SHADOWS : void 0 : "overflow-x-clip" }), children: tableElement }),
1061
+ ) : /* @__PURE__ */ jsx2("div", { className: s2.scroller({ className: sideways ? scroll ? SHADOWS : CARD_CLIP[L] : "overflow-x-clip" }), children: tableElement }),
871
1062
  pagination2 || footer ? /* @__PURE__ */ jsxs2("div", { className: s2.footer({ className: "flex flex-col gap-3" }), children: [
872
1063
  pagination2,
873
1064
  footer
@@ -911,6 +1102,9 @@ function ResizeHandle({
911
1102
  );
912
1103
  }
913
1104
 
1105
+ // src/data-table/toolbar.tsx
1106
+ import * as React3 from "react";
1107
+
914
1108
  // src/field/field.tsx
915
1109
  import { tv as tv3 } from "tailwind-variants";
916
1110
  import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
@@ -918,7 +1112,7 @@ var field2 = tv3({
918
1112
  slots: {
919
1113
  root: "flex flex-col gap-1.5",
920
1114
  label: "text-xs font-semibold text-fg-secondary",
921
- control: "flex h-11 w-full rounded-lg border border-border-default bg-surface-2 px-3 text-sm text-fg placeholder:text-fg-muted transition-[border-color,box-shadow] focus-visible:border-accent focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger aria-invalid:ring-danger/30",
1115
+ control: "flex h-11 w-full rounded-lg border border-border-control bg-surface-2 px-3 text-sm text-fg placeholder:text-fg-muted transition-[border-color,box-shadow] focus-visible:border-accent focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger aria-invalid:ring-danger/30",
922
1116
  hint: "text-xs text-fg-secondary",
923
1117
  // The message reads in the danger text role (≥ 4.5:1 on every surface, both themes); the dot is the danger fill.
924
1118
  error: "flex items-center gap-1.5 text-xs font-medium text-fg-danger before:h-1.5 before:w-1.5 before:shrink-0 before:rounded-full before:bg-danger",
@@ -979,17 +1173,12 @@ function DataTableFilters({ debounce = 250, children, className }) {
979
1173
  filterable.map((column) => {
980
1174
  if (column.filter === "text")
981
1175
  return /* @__PURE__ */ jsx4(
982
- SearchField,
1176
+ TextFilter,
983
1177
  {
984
1178
  label: labels.search(column.header),
985
- placeholder: labels.search(column.header),
986
- value: typeof filters[column.id] === "string" ? void 0 : "",
987
- defaultValue: typeof filters[column.id] === "string" ? filters[column.id] : void 0,
1179
+ value: typeof filters[column.id] === "string" ? filters[column.id] : "",
988
1180
  debounce,
989
- onSearch: (query) => set(column.id, query),
990
- landmark: false,
991
- size: "sm",
992
- className: "min-w-48 flex-1"
1181
+ onCommit: (query) => set(column.id, query)
993
1182
  },
994
1183
  column.id
995
1184
  );
@@ -1065,10 +1254,45 @@ function DataTableExport({ filename = "export.csv", onExport, className }) {
1065
1254
  };
1066
1255
  return /* @__PURE__ */ jsx4(Button, { variant: "outline", size: "sm", className, onClick: run, children: labels.export });
1067
1256
  }
1257
+ function TextFilter({ label, value, debounce, onCommit }) {
1258
+ const [draft, setDraft] = React3.useState(value);
1259
+ const [seen, setSeen] = React3.useState(value);
1260
+ const [committed, setCommitted] = React3.useState(value);
1261
+ if (value !== seen) {
1262
+ setSeen(value);
1263
+ if (value !== committed) {
1264
+ setCommitted(value);
1265
+ setDraft(value);
1266
+ }
1267
+ }
1268
+ return /* @__PURE__ */ jsx4(
1269
+ SearchField,
1270
+ {
1271
+ label,
1272
+ placeholder: label,
1273
+ value: draft,
1274
+ onValueChange: setDraft,
1275
+ debounce,
1276
+ onSearch: (query) => {
1277
+ setCommitted(query);
1278
+ onCommit(query);
1279
+ },
1280
+ landmark: false,
1281
+ size: "sm",
1282
+ className: "min-w-48 flex-1"
1283
+ }
1284
+ );
1285
+ }
1068
1286
 
1069
1287
  export {
1070
1288
  dataTableCsv,
1071
1289
  compareValues,
1290
+ encodeSort,
1291
+ decodeSort,
1292
+ encodeFilter,
1293
+ decodeFilter,
1294
+ readTable,
1295
+ writeTable,
1072
1296
  dataTable,
1073
1297
  dataTableLabels,
1074
1298
  useDataTable,
@@ -1077,4 +1301,4 @@ export {
1077
1301
  DataTableColumnsMenu,
1078
1302
  DataTableExport
1079
1303
  };
1080
- //# sourceMappingURL=chunk-YHKTYFOQ.js.map
1304
+ //# sourceMappingURL=chunk-QWKCNSPF.js.map