@krizaka/ui 3.22.0 → 3.24.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 (453) hide show
  1. package/README.md +6 -1
  2. package/dist/achievement.js +1 -1
  3. package/dist/action-bar.js +4 -4
  4. package/dist/app-header.d.ts +79 -0
  5. package/dist/app-header.js +32 -0
  6. package/dist/app-header.js.map +1 -0
  7. package/dist/app-shell.d.ts +20 -2
  8. package/dist/app-shell.js +34 -19
  9. package/dist/app-shell.js.map +1 -1
  10. package/dist/argument-card.d.ts +4 -1
  11. package/dist/argument-card.js +10 -7
  12. package/dist/argument-card.js.map +1 -1
  13. package/dist/audio-player.d.ts +3 -2
  14. package/dist/audio-player.js +14 -10
  15. package/dist/audio-player.js.map +1 -1
  16. package/dist/blocks.css +28 -0
  17. package/dist/button.js +2 -1
  18. package/dist/captcha.d.ts +81 -0
  19. package/dist/captcha.js +162 -0
  20. package/dist/captcha.js.map +1 -0
  21. package/dist/card-grid.d.ts +10 -1
  22. package/dist/card-grid.js +3 -2
  23. package/dist/card-grid.js.map +1 -1
  24. package/dist/card.js +3 -3
  25. package/dist/changelog-page.d.ts +57 -3
  26. package/dist/changelog-page.js +117 -1
  27. package/dist/changelog-page.js.map +1 -1
  28. package/dist/choice-grid.js +1 -1
  29. package/dist/{chunk-YCIBJ6OQ.js → chunk-4DH2HW3D.js} +3 -1
  30. package/dist/{chunk-3IN6TOPM.js → chunk-6ZYRUOTA.js} +6 -3
  31. package/dist/chunk-6ZYRUOTA.js.map +1 -0
  32. package/dist/chunk-APNIVNIX.js +54 -0
  33. package/dist/chunk-APNIVNIX.js.map +1 -0
  34. package/dist/{chunk-FKBHWS4N.js → chunk-CEJDH6SA.js} +2 -2
  35. package/dist/{chunk-OWC2LZD2.js → chunk-CHOJUCVE.js} +6 -3
  36. package/dist/chunk-CHOJUCVE.js.map +1 -0
  37. package/dist/{chunk-3BC4XQ6C.js → chunk-DZU6RMYD.js} +6 -3
  38. package/dist/chunk-DZU6RMYD.js.map +1 -0
  39. package/dist/{chunk-R6NK6ZNY.js → chunk-F7FVPPBB.js} +4 -4
  40. package/dist/{chunk-2L67YTNV.js → chunk-FTX66XZY.js} +2 -2
  41. package/dist/{chunk-5Z7FWCV2.js → chunk-HBZPJ3EP.js} +2 -2
  42. package/dist/{chunk-C2BRIFJG.js → chunk-HJFRHYCI.js} +2 -2
  43. package/dist/{chunk-ZNMFG62E.js → chunk-KH3JOEPY.js} +3 -2
  44. package/dist/chunk-KH3JOEPY.js.map +1 -0
  45. package/dist/{chunk-BTMFZ66D.js → chunk-KM6VAKIE.js} +2 -2
  46. package/dist/{chunk-DGQMDJXK.js → chunk-LZNZLCOE.js} +2 -2
  47. package/dist/{chunk-AQSZJJAJ.js → chunk-MQPC3P4T.js} +2 -2
  48. package/dist/{chunk-2FRWNSRO.js → chunk-NSLXEDIS.js} +3 -2
  49. package/dist/chunk-NSLXEDIS.js.map +1 -0
  50. package/dist/{chunk-4LOMIQVX.js → chunk-W675RFOA.js} +3 -2
  51. package/dist/chunk-W675RFOA.js.map +1 -0
  52. package/dist/{chunk-G3ETON2A.js → chunk-WU4VLSEA.js} +3 -2
  53. package/dist/chunk-WU4VLSEA.js.map +1 -0
  54. package/dist/{chunk-IZ7MV6HM.js → chunk-XVFQZ3ZG.js} +3 -2
  55. package/dist/chunk-XVFQZ3ZG.js.map +1 -0
  56. package/dist/cn.js +1 -1
  57. package/dist/code-block.js +2 -2
  58. package/dist/code-block.js.map +1 -1
  59. package/dist/command.js +3 -3
  60. package/dist/comparison-table.js +1 -1
  61. package/dist/confirm-button.js +2 -2
  62. package/dist/continue-prompt.js +3 -3
  63. package/dist/continue-prompt.js.map +1 -1
  64. package/dist/cta-panel.js +1 -1
  65. package/dist/data-table.js +4 -4
  66. package/dist/date-picker.js +2 -2
  67. package/dist/decision-list.js +1 -1
  68. package/dist/dialog.js +3 -2
  69. package/dist/dialog.js.map +1 -1
  70. package/dist/docs-nav.d.ts +36 -0
  71. package/dist/docs-nav.js +44 -0
  72. package/dist/docs-nav.js.map +1 -0
  73. package/dist/dropdown-menu.js +1 -1
  74. package/dist/error-page.js +1 -1
  75. package/dist/field.js +1 -1
  76. package/dist/filter-bar.js +2 -2
  77. package/dist/force-update-screen.js +2 -1
  78. package/dist/force-update-screen.js.map +1 -1
  79. package/dist/gallery-page.js +1 -1
  80. package/dist/genui.d.ts +3 -1
  81. package/dist/genui.js +33 -6
  82. package/dist/genui.js.map +1 -1
  83. package/dist/glow-card.js +1 -1
  84. package/dist/goal-gauge.js +1 -1
  85. package/dist/how-it-works-page.js +1 -1
  86. package/dist/image-cropper.js +3 -3
  87. package/dist/index.d.ts +15 -1
  88. package/dist/index.js +65 -5
  89. package/dist/index.js.map +1 -1
  90. package/dist/landscape.js +1 -1
  91. package/dist/link-card.d.ts +9 -2
  92. package/dist/link-card.js +5 -44
  93. package/dist/link-card.js.map +1 -1
  94. package/dist/longform-page.js +1 -1
  95. package/dist/maintenance-screen.js +2 -1
  96. package/dist/maintenance-screen.js.map +1 -1
  97. package/dist/map.js +3 -3
  98. package/dist/map.js.map +1 -1
  99. package/dist/markdown.js +2 -1
  100. package/dist/markdown.js.map +1 -1
  101. package/dist/marquee.js +1 -1
  102. package/dist/mascot-quote.js +1 -1
  103. package/dist/match-dialog.js +2 -1
  104. package/dist/match-dialog.js.map +1 -1
  105. package/dist/media-grid.d.ts +26 -4
  106. package/dist/media-grid.js +144 -77
  107. package/dist/media-grid.js.map +1 -1
  108. package/dist/native/map.js +3 -3
  109. package/dist/native/map.js.map +1 -1
  110. package/dist/native.d.ts +18 -1
  111. package/dist/native.js +105 -24
  112. package/dist/native.js.map +1 -1
  113. package/dist/nav-bar.js +3 -3
  114. package/dist/page-hero.js +6 -6
  115. package/dist/page.js +2 -2
  116. package/dist/popover.js +1 -1
  117. package/dist/pricing-page.js +1 -1
  118. package/dist/product-page.js +1 -1
  119. package/dist/profile-card.js +1 -1
  120. package/dist/promise-card.js +1 -1
  121. package/dist/radio-group.js +2 -2
  122. package/dist/rail-nav.d.ts +149 -0
  123. package/dist/rail-nav.js +177 -0
  124. package/dist/rail-nav.js.map +1 -0
  125. package/dist/scroll-stage.js +1 -1
  126. package/dist/settings-layout.d.ts +75 -62
  127. package/dist/settings-layout.js +39 -6
  128. package/dist/settings-layout.js.map +1 -1
  129. package/dist/showcase.js +1 -1
  130. package/dist/site-footer.d.ts +48 -67
  131. package/dist/site-footer.js +36 -12
  132. package/dist/site-footer.js.map +1 -1
  133. package/dist/slider.js +2 -2
  134. package/dist/stage-banner.js +1 -1
  135. package/dist/step-showcase.js +1 -1
  136. package/dist/tabs.js +1 -1
  137. package/dist/tabs.js.map +1 -1
  138. package/dist/terminal-replay.js +1 -1
  139. package/dist/theme.js +2 -1
  140. package/dist/theme.js.map +1 -1
  141. package/dist/toast.js +1 -1
  142. package/dist/toc.js +1 -1
  143. package/dist/tooltip.js +1 -1
  144. package/dist/update-prompt.js +2 -1
  145. package/dist/update-prompt.js.map +1 -1
  146. package/dist/vertical-video.js +2 -2
  147. package/dist/video-player.js +3 -3
  148. package/dist/waveform.d.ts +93 -0
  149. package/dist/waveform.js +95 -0
  150. package/dist/waveform.js.map +1 -0
  151. package/package.json +81 -10
  152. package/registry/achievement.json +1 -1
  153. package/registry/action-bar.json +1 -1
  154. package/registry/activity-feed.json +1 -1
  155. package/registry/alert.json +1 -1
  156. package/registry/app-header.json +202 -0
  157. package/registry/app-shell.json +33 -9
  158. package/registry/argument-card.json +37 -5
  159. package/registry/audio-player.json +5 -3
  160. package/registry/auth-layout.json +1 -1
  161. package/registry/avatar.json +1 -1
  162. package/registry/badge.json +1 -1
  163. package/registry/button.json +3 -2
  164. package/registry/captcha.json +300 -0
  165. package/registry/card-grid.json +27 -3
  166. package/registry/card.json +1 -1
  167. package/registry/catalogue-page.json +1 -1
  168. package/registry/changelog-page.json +11 -7
  169. package/registry/chat.json +1 -1
  170. package/registry/checkbox.json +1 -1
  171. package/registry/chip-link.json +1 -1
  172. package/registry/chip.json +1 -1
  173. package/registry/choice-grid.json +1 -1
  174. package/registry/cn.json +1 -1
  175. package/registry/code-block.json +1 -1
  176. package/registry/combobox.json +1 -1
  177. package/registry/command.json +1 -1
  178. package/registry/comparison-table.json +1 -1
  179. package/registry/component-page.json +1 -1
  180. package/registry/confirm-button.json +1 -1
  181. package/registry/contact-page.json +1 -1
  182. package/registry/continue-prompt.json +1 -1
  183. package/registry/countdown.json +1 -1
  184. package/registry/cta-panel.json +1 -1
  185. package/registry/dashboard-layout.json +1 -1
  186. package/registry/data-table.json +1 -1
  187. package/registry/date-picker.json +1 -1
  188. package/registry/decision-list.json +1 -1
  189. package/registry/description-list.json +1 -1
  190. package/registry/detail-layout.json +1 -1
  191. package/registry/dialog.json +1 -1
  192. package/registry/docs-article-page.json +1 -1
  193. package/registry/docs-hub-page.json +1 -1
  194. package/registry/docs-layout.json +1 -1
  195. package/registry/docs-nav.json +177 -0
  196. package/registry/document-viewer.json +1 -1
  197. package/registry/dropdown-menu.json +1 -1
  198. package/registry/empty-state.json +1 -1
  199. package/registry/error-page.json +1 -1
  200. package/registry/examples/activity-feed/native/notifications.light.png +0 -0
  201. package/registry/examples/app-header/basic.d.ts +4 -0
  202. package/registry/examples/app-header/basic.js +23 -0
  203. package/registry/examples/app-header/basic.tsx +17 -0
  204. package/registry/examples/app-shell/desktop.d.ts +4 -0
  205. package/registry/examples/app-shell/desktop.js +41 -0
  206. package/registry/examples/app-shell/desktop.tsx +37 -0
  207. package/registry/examples/argument-card/hover-light.d.ts +4 -0
  208. package/registry/examples/argument-card/hover-light.js +17 -0
  209. package/registry/examples/argument-card/hover-light.tsx +19 -0
  210. package/registry/examples/argument-card/hover-quiet.d.ts +4 -0
  211. package/registry/examples/argument-card/hover-quiet.js +17 -0
  212. package/registry/examples/argument-card/hover-quiet.tsx +19 -0
  213. package/registry/examples/avatar/native/group.light.png +0 -0
  214. package/registry/examples/avatar/native/presence.light.png +0 -0
  215. package/registry/examples/avatar/native/sizes.light.png +0 -0
  216. package/registry/examples/badge/native/tones.light.png +0 -0
  217. package/registry/examples/button/native/ghost.light.png +0 -0
  218. package/registry/examples/captcha/disclosure.d.ts +4 -0
  219. package/registry/examples/captcha/disclosure.js +14 -0
  220. package/registry/examples/captcha/disclosure.tsx +11 -0
  221. package/registry/examples/captcha/form.d.ts +4 -0
  222. package/registry/examples/captcha/form.js +18 -0
  223. package/registry/examples/captcha/form.tsx +17 -0
  224. package/registry/examples/card/native/body.light.png +0 -0
  225. package/registry/examples/card/native/default.light.png +0 -0
  226. package/registry/examples/card/native/elevated.light.png +0 -0
  227. package/registry/examples/card/native/pressable.light.png +0 -0
  228. package/registry/examples/card-grid/hover-quiet.d.ts +4 -0
  229. package/registry/examples/card-grid/hover-quiet.js +18 -0
  230. package/registry/examples/card-grid/hover-quiet.tsx +20 -0
  231. package/registry/examples/changelog-page/releases.js +1 -1
  232. package/registry/examples/changelog-page/releases.tsx +1 -1
  233. package/registry/examples/chat/native/conversation.light.png +0 -0
  234. package/registry/examples/chat/native/inbox.light.png +0 -0
  235. package/registry/examples/chip/native/multiple.light.png +0 -0
  236. package/registry/examples/chip/native/removable.light.png +0 -0
  237. package/registry/examples/chip/native/single.light.png +0 -0
  238. package/registry/examples/chip/native/toggle.light.png +0 -0
  239. package/registry/examples/combobox/native/multiple.light.png +0 -0
  240. package/registry/examples/combobox/native/search.light.png +0 -0
  241. package/registry/examples/countdown/native/days.light.png +0 -0
  242. package/registry/examples/countdown/native/hours.light.png +0 -0
  243. package/registry/examples/countdown/native/sizes.light.png +0 -0
  244. package/registry/examples/countdown/native/urgent.light.png +0 -0
  245. package/registry/examples/countdown/native/with-label.light.png +0 -0
  246. package/registry/examples/date-picker/native/birth-date-wheel.light.png +0 -0
  247. package/registry/examples/date-picker/native/birth-date.light.png +0 -0
  248. package/registry/examples/date-picker/native/calendar.dark.png +0 -0
  249. package/registry/examples/date-picker/native/calendar.light.png +0 -0
  250. package/registry/examples/date-picker/native/day-strip.dark.png +0 -0
  251. package/registry/examples/date-picker/native/day-strip.light.png +0 -0
  252. package/registry/examples/date-picker/native/time-slots.dark.png +0 -0
  253. package/registry/examples/date-picker/native/time-slots.light.png +0 -0
  254. package/registry/examples/date-picker/native/time-wheel.light.png +0 -0
  255. package/registry/examples/description-list/native/job-details.light.png +0 -0
  256. package/registry/examples/docs-nav/groups.d.ts +4 -0
  257. package/registry/examples/docs-nav/groups.js +21 -0
  258. package/registry/examples/docs-nav/groups.tsx +15 -0
  259. package/registry/examples/empty-state/native/default.light.png +0 -0
  260. package/registry/examples/field/native/default.light.png +0 -0
  261. package/registry/examples/field/native/select.light.png +0 -0
  262. package/registry/examples/force-update-screen/native/default.light.png +0 -0
  263. package/registry/examples/form/native/amount.light.png +0 -0
  264. package/registry/examples/form/native/audience.light.png +0 -0
  265. package/registry/examples/form/native/profile.light.png +0 -0
  266. package/registry/examples/form/native/settings.light.png +0 -0
  267. package/registry/examples/form/native/sign-up.light.png +0 -0
  268. package/registry/examples/form/native/upload.dark.png +0 -0
  269. package/registry/examples/form/native/upload.light.png +0 -0
  270. package/registry/examples/goal-gauge/native/default.light.png +0 -0
  271. package/registry/examples/header/native/large-title.light.png +0 -0
  272. package/registry/examples/link-card/hover-light.d.ts +4 -0
  273. package/registry/examples/link-card/hover-light.js +18 -0
  274. package/registry/examples/link-card/hover-light.tsx +20 -0
  275. package/registry/examples/link-card/hover-quiet.d.ts +4 -0
  276. package/registry/examples/link-card/hover-quiet.js +18 -0
  277. package/registry/examples/link-card/hover-quiet.tsx +20 -0
  278. package/registry/examples/loader/native/job-wait.light.png +0 -0
  279. package/registry/examples/maintenance-screen/native/default.light.png +0 -0
  280. package/registry/examples/map/native/places.light.png +0 -0
  281. package/registry/examples/markdown/native/basic.light.png +0 -0
  282. package/registry/examples/mascot-state/native/default.light.png +0 -0
  283. package/registry/examples/media-picker/native/story.light.png +0 -0
  284. package/registry/examples/meta-row/native/video.light.png +0 -0
  285. package/registry/examples/meter/native/credits.light.png +0 -0
  286. package/registry/examples/meter/native/split-ring.light.png +0 -0
  287. package/registry/examples/number-ticker/native/balance.light.png +0 -0
  288. package/registry/examples/onboarding/native/first-launch.light.png +0 -0
  289. package/registry/examples/otp-input/native/verify.light.png +0 -0
  290. package/registry/examples/pagination/native/cursor.light.png +0 -0
  291. package/registry/examples/pagination/native/pages.light.png +0 -0
  292. package/registry/examples/permission-prompt/native/blocked.light.png +0 -0
  293. package/registry/examples/permission-prompt/native/camera.light.png +0 -0
  294. package/registry/examples/profile-card/native/default.light.png +0 -0
  295. package/registry/examples/radio-group/native/buttons.light.png +0 -0
  296. package/registry/examples/radio-group/native/cards.light.png +0 -0
  297. package/registry/examples/radio-group/native/list.light.png +0 -0
  298. package/registry/examples/radio-group/native/segmented.light.png +0 -0
  299. package/registry/examples/rail-nav/expandable.d.ts +4 -0
  300. package/registry/examples/rail-nav/expandable.js +34 -0
  301. package/registry/examples/rail-nav/expandable.tsx +28 -0
  302. package/registry/examples/rail-nav/studio.d.ts +4 -0
  303. package/registry/examples/rail-nav/studio.js +43 -0
  304. package/registry/examples/rail-nav/studio.tsx +38 -0
  305. package/registry/examples/screen/native/app-shell.light.png +0 -0
  306. package/registry/examples/screen/native/auth.light.png +0 -0
  307. package/registry/examples/screen/native/map.light.png +0 -0
  308. package/registry/examples/screen/native/notifications.light.png +0 -0
  309. package/registry/examples/screen/native/profile.light.png +0 -0
  310. package/registry/examples/segmented/native/default.light.png +0 -0
  311. package/registry/examples/segmented/native/small.light.png +0 -0
  312. package/registry/examples/settings-layout/flat.d.ts +4 -0
  313. package/registry/examples/settings-layout/flat.js +26 -0
  314. package/registry/examples/settings-layout/flat.tsx +30 -0
  315. package/registry/examples/showcase/native/slides.light.png +0 -0
  316. package/registry/examples/site-footer/app.d.ts +4 -0
  317. package/registry/examples/site-footer/app.js +25 -0
  318. package/registry/examples/site-footer/app.tsx +22 -0
  319. package/registry/examples/site-footer/docs.d.ts +4 -0
  320. package/registry/examples/site-footer/docs.js +31 -0
  321. package/registry/examples/site-footer/docs.tsx +24 -0
  322. package/registry/examples/slider/native/default.light.png +0 -0
  323. package/registry/examples/slider/native/stepped.light.png +0 -0
  324. package/registry/examples/step-progress/native/sign-up.light.png +0 -0
  325. package/registry/examples/stepper/native/run.light.png +0 -0
  326. package/registry/examples/swipeable-row/native/conversation.light.png +0 -0
  327. package/registry/examples/switch/native/settings.light.png +0 -0
  328. package/registry/examples/tab-bar/native/main-sections.light.png +0 -0
  329. package/registry/examples/tabs/native/sections.light.png +0 -0
  330. package/registry/examples/tabs/native/segmented.light.png +0 -0
  331. package/registry/examples/tag-selector/native/interests.light.png +0 -0
  332. package/registry/examples/toast/native/tones.light.png +0 -0
  333. package/registry/examples/txt/native/tones.dark.png +0 -0
  334. package/registry/examples/txt/native/tones.light.png +0 -0
  335. package/registry/examples/update-prompt/native/default.light.png +0 -0
  336. package/registry/examples/waveform/card.d.ts +4 -0
  337. package/registry/examples/waveform/card.js +18 -0
  338. package/registry/examples/waveform/card.tsx +16 -0
  339. package/registry/examples/waveform/native/card.d.ts +4 -0
  340. package/registry/examples/waveform/native/card.dark.png +0 -0
  341. package/registry/examples/waveform/native/card.js +19 -0
  342. package/registry/examples/waveform/native/card.light.png +0 -0
  343. package/registry/examples/waveform/native/card.tsx +19 -0
  344. package/registry/examples/waveform/sizes.d.ts +4 -0
  345. package/registry/examples/waveform/sizes.js +16 -0
  346. package/registry/examples/waveform/sizes.tsx +14 -0
  347. package/registry/field.json +1 -1
  348. package/registry/file-upload.json +1 -1
  349. package/registry/filter-bar.json +1 -1
  350. package/registry/force-update-screen.json +1 -1
  351. package/registry/form.json +1 -1
  352. package/registry/gallery-page.json +1 -1
  353. package/registry/genui.json +3 -3
  354. package/registry/glow-card.json +1 -1
  355. package/registry/goal-gauge.json +1 -1
  356. package/registry/how-it-works-page.json +1 -1
  357. package/registry/image-cropper.json +1 -1
  358. package/registry/index.json +197 -14
  359. package/registry/iso.json +1 -1
  360. package/registry/kanban.json +1 -1
  361. package/registry/kbd.json +1 -1
  362. package/registry/landing-page.json +1 -1
  363. package/registry/landscape.json +1 -1
  364. package/registry/legal-page.json +1 -1
  365. package/registry/link-card.json +38 -6
  366. package/registry/list.json +1 -1
  367. package/registry/loader.json +1 -1
  368. package/registry/longform-page.json +1 -1
  369. package/registry/maintenance-screen.json +1 -1
  370. package/registry/map.json +2 -2
  371. package/registry/markdown.json +1 -1
  372. package/registry/marketing-layout.json +1 -1
  373. package/registry/marquee.json +1 -1
  374. package/registry/mascot-quote.json +1 -1
  375. package/registry/mascot-state.json +1 -1
  376. package/registry/mascots.json +1 -1
  377. package/registry/match-dialog.json +1 -1
  378. package/registry/media-capture.json +1 -1
  379. package/registry/media-grid.json +92 -6
  380. package/registry/meta-row.json +1 -1
  381. package/registry/meter.json +1 -1
  382. package/registry/nav-bar.json +2 -2
  383. package/registry/number-ticker.json +1 -1
  384. package/registry/page-header.json +1 -1
  385. package/registry/page-hero.json +1 -1
  386. package/registry/page.json +1 -1
  387. package/registry/pagination.json +1 -1
  388. package/registry/photo-grid.json +1 -1
  389. package/registry/pointer-light.json +1 -1
  390. package/registry/popover.json +1 -1
  391. package/registry/pricing-page.json +1 -1
  392. package/registry/product-page.json +1 -1
  393. package/registry/profile-card.json +1 -1
  394. package/registry/progress.json +1 -1
  395. package/registry/promise-card.json +1 -1
  396. package/registry/radio-group.json +1 -1
  397. package/registry/rail-nav.json +493 -0
  398. package/registry/recipes.json +1 -1
  399. package/registry/scroll-stage.json +1 -1
  400. package/registry/search-field.json +1 -1
  401. package/registry/section-backdrop.json +1 -1
  402. package/registry/separator.json +1 -1
  403. package/registry/settings-layout.json +104 -9
  404. package/registry/showcase.json +1 -1
  405. package/registry/site-footer.json +38 -6
  406. package/registry/sites.json +1 -1
  407. package/registry/skeleton.json +1 -1
  408. package/registry/skip-link.json +1 -1
  409. package/registry/slider.json +1 -1
  410. package/registry/slot.json +1 -1
  411. package/registry/spinner.json +1 -1
  412. package/registry/split-view.json +1 -1
  413. package/registry/stage-banner.json +1 -1
  414. package/registry/stat.json +1 -1
  415. package/registry/status-page.json +1 -1
  416. package/registry/step-progress.json +1 -1
  417. package/registry/step-showcase.json +1 -1
  418. package/registry/stepper.json +1 -1
  419. package/registry/swipe-deck.json +1 -1
  420. package/registry/switch.json +1 -1
  421. package/registry/tabs.json +2 -2
  422. package/registry/tag-input.json +1 -1
  423. package/registry/tag-selector.json +1 -1
  424. package/registry/terminal-replay.json +1 -1
  425. package/registry/theme.json +1 -1
  426. package/registry/toast.json +1 -1
  427. package/registry/toc.json +1 -1
  428. package/registry/tooltip.json +1 -1
  429. package/registry/tree-view.json +1 -1
  430. package/registry/update-prompt.json +1 -1
  431. package/registry/verified-badge.json +1 -1
  432. package/registry/vertical-video.json +1 -1
  433. package/registry/video-player.json +1 -1
  434. package/registry/video-trimmer.json +1 -1
  435. package/registry/virtual.json +1 -1
  436. package/registry/waveform.json +296 -0
  437. package/dist/chunk-2FRWNSRO.js.map +0 -1
  438. package/dist/chunk-3BC4XQ6C.js.map +0 -1
  439. package/dist/chunk-3IN6TOPM.js.map +0 -1
  440. package/dist/chunk-4LOMIQVX.js.map +0 -1
  441. package/dist/chunk-G3ETON2A.js.map +0 -1
  442. package/dist/chunk-IZ7MV6HM.js.map +0 -1
  443. package/dist/chunk-OWC2LZD2.js.map +0 -1
  444. package/dist/chunk-ZNMFG62E.js.map +0 -1
  445. /package/dist/{chunk-YCIBJ6OQ.js.map → chunk-4DH2HW3D.js.map} +0 -0
  446. /package/dist/{chunk-FKBHWS4N.js.map → chunk-CEJDH6SA.js.map} +0 -0
  447. /package/dist/{chunk-R6NK6ZNY.js.map → chunk-F7FVPPBB.js.map} +0 -0
  448. /package/dist/{chunk-2L67YTNV.js.map → chunk-FTX66XZY.js.map} +0 -0
  449. /package/dist/{chunk-5Z7FWCV2.js.map → chunk-HBZPJ3EP.js.map} +0 -0
  450. /package/dist/{chunk-C2BRIFJG.js.map → chunk-HJFRHYCI.js.map} +0 -0
  451. /package/dist/{chunk-BTMFZ66D.js.map → chunk-KM6VAKIE.js.map} +0 -0
  452. /package/dist/{chunk-DGQMDJXK.js.map → chunk-LZNZLCOE.js.map} +0 -0
  453. /package/dist/{chunk-AQSZJJAJ.js.map → chunk-MQPC3P4T.js.map} +0 -0
@@ -9,16 +9,16 @@ import {
9
9
  dataTableCsv,
10
10
  dataTableLabels,
11
11
  useDataTable
12
- } from "./chunk-R6NK6ZNY.js";
12
+ } from "./chunk-F7FVPPBB.js";
13
13
  import "./chunk-7Z4KHPFC.js";
14
14
  import "./chunk-JXLDUDTD.js";
15
- import "./chunk-3BC4XQ6C.js";
15
+ import "./chunk-DZU6RMYD.js";
16
16
  import "./chunk-KVDB4GXV.js";
17
- import "./chunk-FKBHWS4N.js";
17
+ import "./chunk-CEJDH6SA.js";
18
18
  import "./chunk-7UCPGXKN.js";
19
19
  import "./chunk-D3T54RSL.js";
20
20
  import "./chunk-J3NC6ER4.js";
21
- import "./chunk-2FRWNSRO.js";
21
+ import "./chunk-NSLXEDIS.js";
22
22
  import "./chunk-REPTKUJ6.js";
23
23
  import "./chunk-ZIXB33X7.js";
24
24
  import "./chunk-FZBWEDQI.js";
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import {
3
3
  tv
4
- } from "./chunk-C2BRIFJG.js";
4
+ } from "./chunk-HJFRHYCI.js";
5
5
  import {
6
6
  floating
7
7
  } from "./chunk-J3NC6ER4.js";
8
8
  import {
9
9
  cn
10
- } from "./chunk-2FRWNSRO.js";
10
+ } from "./chunk-NSLXEDIS.js";
11
11
  import {
12
12
  useControllable,
13
13
  usePrefersReducedMotion
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-XCBVFMNV.js";
7
7
  import {
8
8
  cn
9
- } from "./chunk-4LOMIQVX.js";
9
+ } from "./chunk-W675RFOA.js";
10
10
 
11
11
  // src/decision-list/decision-list.tsx
12
12
  import { jsx, jsxs } from "react/jsx-runtime";
package/dist/dialog.js CHANGED
@@ -10,12 +10,13 @@ import {
10
10
  Sheet,
11
11
  dialog,
12
12
  useReturnFocus
13
- } from "./chunk-5Z7FWCV2.js";
13
+ } from "./chunk-HBZPJ3EP.js";
14
14
  import {
15
15
  Button
16
- } from "./chunk-OWC2LZD2.js";
16
+ } from "./chunk-CHOJUCVE.js";
17
17
  import "./chunk-D3T54RSL.js";
18
18
  import "./chunk-WEVYKZIF.js";
19
+ import "./chunk-NSLXEDIS.js";
19
20
 
20
21
  // src/dialog/alert-dialog.tsx
21
22
  import { AlertDialog as AlertDialogPrimitive } from "radix-ui";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dialog/alert-dialog.tsx"],"sourcesContent":["// Client. A confirmation that interrupts: Radix AlertDialog (role=\"alertdialog\", no outside click, focus on Cancel).\n// `onConfirm` may be async: the dialog stays open with the confirm button loading until it settles, closes when it\n// resolves, and stays open when it rejects (the product shows the error).\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { Button } from \"../button/button\";\nimport { dialog } from \"./dialog\";\nimport { useReturnFocus } from \"./return-focus\";\n\nconst s = dialog({ placement: \"center\", size: \"sm\" });\n\n/** Radix's content, mounted only while open: it remembers the opener then and gives focus back on close (WCAG 2.4.3). */\nfunction ReturnFocusContent({ onCloseAutoFocus, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return <AlertDialogPrimitive.Content onCloseAutoFocus={useReturnFocus(onCloseAutoFocus)} {...props} />;\n}\n\nexport type AlertDialogProps = {\n /** Open or closed (controlled), with `onOpenChange`. */\n open?: boolean;\n /** Open at first, uncontrolled. */\n defaultOpen?: boolean;\n /** Called when it opens or closes (never while `onConfirm` is pending). */\n onOpenChange?: (open: boolean) => void;\n /** The element that opens the dialog (rendered as is, `asChild`): a Button, an IconButton. */\n trigger?: React.ReactNode;\n /** The question asked (\"Delete this video?\"): the dialog's accessible name. */\n title: React.ReactNode;\n /** What the action does and what it costs: the dialog's description. */\n description?: React.ReactNode;\n /** More content between the description and the actions. */\n children?: React.ReactNode;\n /** The words of the confirm button — passed translated. */\n confirmLabel: string;\n /** The words of the cancel button (it takes the focus at open) — passed translated. */\n cancelLabel: string;\n /** `danger` for a destructive action (delete, leave, cancel a payment). */\n tone?: \"danger\" | \"primary\";\n /** Runs on confirm. A promise keeps the dialog open and the button loading until it settles. */\n onConfirm: () => void | Promise<unknown>;\n /** The element the portal renders into (default: document.body). */\n container?: HTMLElement | null;\n /** Classes of the dialog's content, merged last. */\n className?: string;\n};\n\nexport function AlertDialog({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n trigger,\n title,\n description,\n children,\n confirmLabel,\n cancelLabel,\n tone = \"primary\",\n onConfirm,\n container,\n className,\n}: AlertDialogProps) {\n const [openState, setOpenState] = React.useState(defaultOpen);\n const [pending, setPending] = React.useState(false);\n const open = openProp ?? openState;\n\n const setOpen = (next: boolean) => {\n if (openProp === undefined) setOpenState(next);\n onOpenChange?.(next);\n };\n\n const confirm = async () => {\n setPending(true);\n try {\n await onConfirm();\n setOpen(false);\n } catch {\n // Stays open: the product reports the failure (a toast, an inline error) and the person may retry.\n } finally {\n setPending(false);\n }\n };\n\n return (\n <AlertDialogPrimitive.Root open={open} onOpenChange={(next) => (pending ? undefined : setOpen(next))}>\n {trigger && <AlertDialogPrimitive.Trigger asChild>{trigger}</AlertDialogPrimitive.Trigger>}\n <AlertDialogPrimitive.Portal container={container}>\n <AlertDialogPrimitive.Overlay className={s.overlay()} />\n <ReturnFocusContent\n data-tone={tone}\n aria-busy={pending || undefined}\n className={s.content({ className })}\n onEscapeKeyDown={(event) => pending && event.preventDefault()}\n >\n <div className={s.header({ className: \"pr-5\" })}>\n <AlertDialogPrimitive.Title className={s.title()}>{title}</AlertDialogPrimitive.Title>\n {description && <AlertDialogPrimitive.Description className={s.description()}>{description}</AlertDialogPrimitive.Description>}\n </div>\n {children && <div className={s.body()}>{children}</div>}\n <div className={s.footer()}>\n <AlertDialogPrimitive.Cancel asChild>\n <Button variant=\"ghost\" disabled={pending}>\n {cancelLabel}\n </Button>\n </AlertDialogPrimitive.Cancel>\n <Button variant={tone === \"danger\" ? \"danger\" : \"primary\"} loading={pending} onClick={confirm}>\n {confirmLabel}\n </Button>\n </div>\n </ReturnFocusContent>\n </AlertDialogPrimitive.Portal>\n </AlertDialogPrimitive.Root>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA,SAAS,eAAe,4BAA4B;AACpD,YAAY,WAAW;AAUd,cA+EC,YA/ED;AAJT,IAAM,IAAI,OAAO,EAAE,WAAW,UAAU,MAAM,KAAK,CAAC;AAGpD,SAAS,mBAAmB,EAAE,kBAAkB,GAAG,MAAM,GAA8D;AACrH,SAAO,oBAAC,qBAAqB,SAArB,EAA6B,kBAAkB,eAAe,gBAAgB,GAAI,GAAG,OAAO;AACtG;AA+BO,SAAS,YAAY;AAAA,EAC1B,MAAM;AAAA,EACN,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,CAAC,WAAW,YAAY,IAAU,eAAS,WAAW;AAC5D,QAAM,CAAC,SAAS,UAAU,IAAU,eAAS,KAAK;AAClD,QAAM,OAAO,YAAY;AAEzB,QAAM,UAAU,CAAC,SAAkB;AACjC,QAAI,aAAa,OAAW,cAAa,IAAI;AAC7C,mBAAe,IAAI;AAAA,EACrB;AAEA,QAAM,UAAU,YAAY;AAC1B,eAAW,IAAI;AACf,QAAI;AACF,YAAM,UAAU;AAChB,cAAQ,KAAK;AAAA,IACf,QAAQ;AAAA,IAER,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SACE,qBAAC,qBAAqB,MAArB,EAA0B,MAAY,cAAc,CAAC,SAAU,UAAU,SAAY,QAAQ,IAAI,GAC/F;AAAA,eAAW,oBAAC,qBAAqB,SAArB,EAA6B,SAAO,MAAE,mBAAQ;AAAA,IAC3D,qBAAC,qBAAqB,QAArB,EAA4B,WAC3B;AAAA,0BAAC,qBAAqB,SAArB,EAA6B,WAAW,EAAE,QAAQ,GAAG;AAAA,MACtD;AAAA,QAAC;AAAA;AAAA,UACC,aAAW;AAAA,UACX,aAAW,WAAW;AAAA,UACtB,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC;AAAA,UAClC,iBAAiB,CAAC,UAAU,WAAW,MAAM,eAAe;AAAA,UAE5D;AAAA,iCAAC,SAAI,WAAW,EAAE,OAAO,EAAE,WAAW,OAAO,CAAC,GAC5C;AAAA,kCAAC,qBAAqB,OAArB,EAA2B,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,cACxD,eAAe,oBAAC,qBAAqB,aAArB,EAAiC,WAAW,EAAE,YAAY,GAAI,uBAAY;AAAA,eAC7F;AAAA,YACC,YAAY,oBAAC,SAAI,WAAW,EAAE,KAAK,GAAI,UAAS;AAAA,YACjD,qBAAC,SAAI,WAAW,EAAE,OAAO,GACvB;AAAA,kCAAC,qBAAqB,QAArB,EAA4B,SAAO,MAClC,8BAAC,UAAO,SAAQ,SAAQ,UAAU,SAC/B,uBACH,GACF;AAAA,cACA,oBAAC,UAAO,SAAS,SAAS,WAAW,WAAW,WAAW,SAAS,SAAS,SAAS,SACnF,wBACH;AAAA,eACF;AAAA;AAAA;AAAA,MACF;AAAA,OACF;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../src/dialog/alert-dialog.tsx"],"sourcesContent":["// Client. A confirmation that interrupts: Radix AlertDialog (role=\"alertdialog\", no outside click, focus on Cancel).\n// `onConfirm` may be async: the dialog stays open with the confirm button loading until it settles, closes when it\n// resolves, and stays open when it rejects (the product shows the error).\nimport { AlertDialog as AlertDialogPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { Button } from \"../button/button\";\nimport { dialog } from \"./dialog\";\nimport { useReturnFocus } from \"./return-focus\";\n\nconst s = dialog({ placement: \"center\", size: \"sm\" });\n\n/** Radix's content, mounted only while open: it remembers the opener then and gives focus back on close (WCAG 2.4.3). */\nfunction ReturnFocusContent({ onCloseAutoFocus, ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Content>) {\n return <AlertDialogPrimitive.Content onCloseAutoFocus={useReturnFocus(onCloseAutoFocus)} {...props} />;\n}\n\nexport type AlertDialogProps = {\n /** Open or closed (controlled), with `onOpenChange`. */\n open?: boolean;\n /** Open at first, uncontrolled. */\n defaultOpen?: boolean;\n /** Called when it opens or closes (never while `onConfirm` is pending). */\n onOpenChange?: (open: boolean) => void;\n /** The element that opens the dialog (rendered as is, `asChild`): a Button, an IconButton. */\n trigger?: React.ReactNode;\n /** The question asked (\"Delete this video?\"): the dialog's accessible name. */\n title: React.ReactNode;\n /** What the action does and what it costs: the dialog's description. */\n description?: React.ReactNode;\n /** More content between the description and the actions. */\n children?: React.ReactNode;\n /** The words of the confirm button — passed translated. */\n confirmLabel: string;\n /** The words of the cancel button (it takes the focus at open) — passed translated. */\n cancelLabel: string;\n /** `danger` for a destructive action (delete, leave, cancel a payment). */\n tone?: \"danger\" | \"primary\";\n /** Runs on confirm. A promise keeps the dialog open and the button loading until it settles. */\n onConfirm: () => void | Promise<unknown>;\n /** The element the portal renders into (default: document.body). */\n container?: HTMLElement | null;\n /** Classes of the dialog's content, merged last. */\n className?: string;\n};\n\nexport function AlertDialog({\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n trigger,\n title,\n description,\n children,\n confirmLabel,\n cancelLabel,\n tone = \"primary\",\n onConfirm,\n container,\n className,\n}: AlertDialogProps) {\n const [openState, setOpenState] = React.useState(defaultOpen);\n const [pending, setPending] = React.useState(false);\n const open = openProp ?? openState;\n\n const setOpen = (next: boolean) => {\n if (openProp === undefined) setOpenState(next);\n onOpenChange?.(next);\n };\n\n const confirm = async () => {\n setPending(true);\n try {\n await onConfirm();\n setOpen(false);\n } catch {\n // Stays open: the product reports the failure (a toast, an inline error) and the person may retry.\n } finally {\n setPending(false);\n }\n };\n\n return (\n <AlertDialogPrimitive.Root open={open} onOpenChange={(next) => (pending ? undefined : setOpen(next))}>\n {trigger && <AlertDialogPrimitive.Trigger asChild>{trigger}</AlertDialogPrimitive.Trigger>}\n <AlertDialogPrimitive.Portal container={container}>\n <AlertDialogPrimitive.Overlay className={s.overlay()} />\n <ReturnFocusContent\n data-tone={tone}\n aria-busy={pending || undefined}\n className={s.content({ className })}\n onEscapeKeyDown={(event) => pending && event.preventDefault()}\n >\n <div className={s.header({ className: \"pr-5\" })}>\n <AlertDialogPrimitive.Title className={s.title()}>{title}</AlertDialogPrimitive.Title>\n {description && <AlertDialogPrimitive.Description className={s.description()}>{description}</AlertDialogPrimitive.Description>}\n </div>\n {children && <div className={s.body()}>{children}</div>}\n <div className={s.footer()}>\n <AlertDialogPrimitive.Cancel asChild>\n <Button variant=\"ghost\" disabled={pending}>\n {cancelLabel}\n </Button>\n </AlertDialogPrimitive.Cancel>\n <Button variant={tone === \"danger\" ? \"danger\" : \"primary\"} loading={pending} onClick={confirm}>\n {confirmLabel}\n </Button>\n </div>\n </ReturnFocusContent>\n </AlertDialogPrimitive.Portal>\n </AlertDialogPrimitive.Root>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAGA,SAAS,eAAe,4BAA4B;AACpD,YAAY,WAAW;AAUd,cA+EC,YA/ED;AAJT,IAAM,IAAI,OAAO,EAAE,WAAW,UAAU,MAAM,KAAK,CAAC;AAGpD,SAAS,mBAAmB,EAAE,kBAAkB,GAAG,MAAM,GAA8D;AACrH,SAAO,oBAAC,qBAAqB,SAArB,EAA6B,kBAAkB,eAAe,gBAAgB,GAAI,GAAG,OAAO;AACtG;AA+BO,SAAS,YAAY;AAAA,EAC1B,MAAM;AAAA,EACN,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,CAAC,WAAW,YAAY,IAAU,eAAS,WAAW;AAC5D,QAAM,CAAC,SAAS,UAAU,IAAU,eAAS,KAAK;AAClD,QAAM,OAAO,YAAY;AAEzB,QAAM,UAAU,CAAC,SAAkB;AACjC,QAAI,aAAa,OAAW,cAAa,IAAI;AAC7C,mBAAe,IAAI;AAAA,EACrB;AAEA,QAAM,UAAU,YAAY;AAC1B,eAAW,IAAI;AACf,QAAI;AACF,YAAM,UAAU;AAChB,cAAQ,KAAK;AAAA,IACf,QAAQ;AAAA,IAER,UAAE;AACA,iBAAW,KAAK;AAAA,IAClB;AAAA,EACF;AAEA,SACE,qBAAC,qBAAqB,MAArB,EAA0B,MAAY,cAAc,CAAC,SAAU,UAAU,SAAY,QAAQ,IAAI,GAC/F;AAAA,eAAW,oBAAC,qBAAqB,SAArB,EAA6B,SAAO,MAAE,mBAAQ;AAAA,IAC3D,qBAAC,qBAAqB,QAArB,EAA4B,WAC3B;AAAA,0BAAC,qBAAqB,SAArB,EAA6B,WAAW,EAAE,QAAQ,GAAG;AAAA,MACtD;AAAA,QAAC;AAAA;AAAA,UACC,aAAW;AAAA,UACX,aAAW,WAAW;AAAA,UACtB,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC;AAAA,UAClC,iBAAiB,CAAC,UAAU,WAAW,MAAM,eAAe;AAAA,UAE5D;AAAA,iCAAC,SAAI,WAAW,EAAE,OAAO,EAAE,WAAW,OAAO,CAAC,GAC5C;AAAA,kCAAC,qBAAqB,OAArB,EAA2B,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,cACxD,eAAe,oBAAC,qBAAqB,aAArB,EAAiC,WAAW,EAAE,YAAY,GAAI,uBAAY;AAAA,eAC7F;AAAA,YACC,YAAY,oBAAC,SAAI,WAAW,EAAE,KAAK,GAAI,UAAS;AAAA,YACjD,qBAAC,SAAI,WAAW,EAAE,OAAO,GACvB;AAAA,kCAAC,qBAAqB,QAArB,EAA4B,SAAO,MAClC,8BAAC,UAAO,SAAQ,SAAQ,UAAU,SAC/B,uBACH,GACF;AAAA,cACA,oBAAC,UAAO,SAAS,SAAS,WAAW,WAAW,WAAW,SAAS,SAAS,SAAS,SACnF,wBACH;AAAA,eACF;AAAA;AAAA;AAAA,MACF;AAAA,OACF;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,36 @@
1
+ import * as React from 'react';
2
+
3
+ /** The app's link component (Next's `Link`, React Router's `Link`…): receives `href`, `className` and the children. */
4
+ type LinkComponent = React.ElementType<{
5
+ href: string;
6
+ className?: string;
7
+ children?: React.ReactNode;
8
+ "aria-label"?: string;
9
+ "aria-describedby"?: string;
10
+ }>;
11
+
12
+ type DocsNavGroup = {
13
+ /** A stable key. */
14
+ id: string;
15
+ /** The group's name — one word or two. */
16
+ title: React.ReactNode;
17
+ /** Its pages: a short, one-line title each. */
18
+ items: readonly {
19
+ href: string;
20
+ label: React.ReactNode;
21
+ }[];
22
+ };
23
+ type DocsNavProps = Omit<React.HTMLAttributes<HTMLElement>, "children"> & {
24
+ /** The navigation's accessible name (`Documentation`). */
25
+ label: string;
26
+ /** The groups, in order. */
27
+ groups: readonly DocsNavGroup[];
28
+ /** The `href` of the page being read. */
29
+ current?: string;
30
+ /** The app's link component (Next's `Link`). */
31
+ linkAs?: LinkComponent;
32
+ };
33
+ /** The pages of the documentation in groups; the group of the current page is open, the others fold. */
34
+ declare function DocsNav({ label, groups, current, linkAs, className, ...props }: DocsNavProps): React.JSX.Element;
35
+
36
+ export { DocsNav, type DocsNavGroup, type DocsNavProps };
@@ -0,0 +1,44 @@
1
+ // src/cn.ts
2
+ import { clsx } from "clsx";
3
+ import { cnMerge } from "tailwind-variants";
4
+ var twMergeConfig = {
5
+ extend: {
6
+ classGroups: {
7
+ "bg-image": ["bg-sheen", "bg-fill-shade", "bg-halo"],
8
+ shadow: ["shadow-raised", "shadow-floating", "shadow-overlay", "shadow-glow", "shadow-glow-lg"],
9
+ "inset-shadow": ["inset-shadow-edge", "inset-shadow-edge-fill", "inset-shadow-well"]
10
+ }
11
+ }
12
+ };
13
+ var mergeConfig = { twMergeConfig };
14
+ function cn(...inputs) {
15
+ return cnMerge(clsx(inputs))(mergeConfig) ?? "";
16
+ }
17
+
18
+ // src/docs-nav/docs-nav.tsx
19
+ import { jsx, jsxs } from "react/jsx-runtime";
20
+ function DocsNav({ label, groups, current, linkAs, className, ...props }) {
21
+ const L = linkAs ?? "a";
22
+ return /* @__PURE__ */ jsx("nav", { "aria-label": label, className: cn("flex flex-col gap-1 text-sm", className), ...props, children: groups.map((g) => {
23
+ const open = g.items.some((i) => i.href === current) || !current;
24
+ return /* @__PURE__ */ jsxs("details", { open, className: "group py-1", children: [
25
+ /* @__PURE__ */ jsxs("summary", { className: "flex cursor-pointer list-none items-center justify-between rounded-md px-3 py-1.5 text-xs font-semibold uppercase tracking-wider text-fg-muted marker:content-none hover:text-fg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden", children: [
26
+ g.title,
27
+ /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", "aria-hidden": "true", focusable: "false", className: "h-3.5 w-3.5 fill-none stroke-current stroke-2 transition-transform group-open:rotate-180 motion-reduce:transition-none", children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6", strokeLinecap: "round", strokeLinejoin: "round" }) })
28
+ ] }),
29
+ /* @__PURE__ */ jsx("ul", { className: "mt-1 flex flex-col gap-0.5 border-l border-border-subtle", children: g.items.map((i) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
30
+ L,
31
+ {
32
+ href: i.href,
33
+ "aria-current": i.href === current ? "page" : void 0,
34
+ className: "-ml-px block truncate border-l border-transparent px-3 py-1.5 text-fg-secondary no-underline transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-ring aria-[current=page]:border-accent aria-[current=page]:font-semibold aria-[current=page]:text-fg",
35
+ children: i.label
36
+ }
37
+ ) }, i.href)) })
38
+ ] }, g.id);
39
+ }) });
40
+ }
41
+ export {
42
+ DocsNav
43
+ };
44
+ //# sourceMappingURL=docs-nav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cn.ts","../src/docs-nav/docs-nav.tsx"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { cnMerge, type TWMergeConfig } from \"tailwind-variants\";\n\nexport type { ClassValue };\n\n/**\n * The preset's own utilities, told to the merge engine: the material (BRAND.md §6: `bg-sheen`, `bg-fill-shade`,\n * `bg-halo` are background images; `shadow-raised` · `-floating` · `-overlay` · `-glow` are shadows; `inset-shadow-edge`\n * · `-edge-fill` · `-well` are inset shadows). Unknown, tailwind-merge would take `bg-sheen` for a colour and drop the\n * `bg-surface-2` it lies on.\n */\nexport const twMergeConfig: TWMergeConfig = {\n extend: {\n classGroups: {\n \"bg-image\": [\"bg-sheen\", \"bg-fill-shade\", \"bg-halo\"],\n shadow: [\"shadow-raised\", \"shadow-floating\", \"shadow-overlay\", \"shadow-glow\", \"shadow-glow-lg\"],\n \"inset-shadow\": [\"inset-shadow-edge\", \"inset-shadow-edge-fill\", \"inset-shadow-well\"],\n },\n },\n};\n\nconst mergeConfig = { twMergeConfig };\n\n/**\n * Merges Tailwind classes: the last one wins — a product's `className` overrides the primitive's. The merge engine is\n * tailwind-merge as tailwind-variants ships it (the one `tv` uses), so the platform carries a single copy of it.\n * tailwind-variants bundles that engine since 3.3 (it never imports the `tailwind-merge` package, an optional peer):\n * hence `tailwind-variants ^3.3.1` and no `tailwind-merge` dependency — `scripts/consumer.mjs` checks it on a clean\n * install of the packed package.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return cnMerge(clsx(inputs))(mergeConfig) ?? \"\";\n}\n\n","// Server-safe. The pages of a documentation, grouped: a quiet list of links, each group a native `details` (open when it\n// holds the current page), only the current page marked. No state: the app tells which page is current.\nimport * as React from \"react\";\n\nimport { cn } from \"../cn\";\nimport type { LinkComponent } from \"../page-hero\";\n\nexport type DocsNavGroup = {\n /** A stable key. */\n id: string;\n /** The group's name — one word or two. */\n title: React.ReactNode;\n /** Its pages: a short, one-line title each. */\n items: readonly { href: string; label: React.ReactNode }[];\n};\n\nexport type DocsNavProps = Omit<React.HTMLAttributes<HTMLElement>, \"children\"> & {\n /** The navigation's accessible name (`Documentation`). */\n label: string;\n /** The groups, in order. */\n groups: readonly DocsNavGroup[];\n /** The `href` of the page being read. */\n current?: string;\n /** The app's link component (Next's `Link`). */\n linkAs?: LinkComponent;\n};\n\n/** The pages of the documentation in groups; the group of the current page is open, the others fold. */\nexport function DocsNav({ label, groups, current, linkAs, className, ...props }: DocsNavProps) {\n const L = linkAs ?? \"a\";\n return (\n <nav aria-label={label} className={cn(\"flex flex-col gap-1 text-sm\", className)} {...props}>\n {groups.map((g) => {\n const open = g.items.some((i) => i.href === current) || !current;\n return (\n <details key={g.id} open={open} className=\"group py-1\">\n <summary className=\"flex cursor-pointer list-none items-center justify-between rounded-md px-3 py-1.5 text-xs font-semibold uppercase tracking-wider text-fg-muted marker:content-none hover:text-fg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden\">\n {g.title}\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" className=\"h-3.5 w-3.5 fill-none stroke-current stroke-2 transition-transform group-open:rotate-180 motion-reduce:transition-none\">\n <path d=\"m6 9 6 6 6-6\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </summary>\n <ul className=\"mt-1 flex flex-col gap-0.5 border-l border-border-subtle\">\n {g.items.map((i) => (\n <li key={i.href}>\n <L\n href={i.href}\n aria-current={i.href === current ? \"page\" : undefined}\n className=\"-ml-px block truncate border-l border-transparent px-3 py-1.5 text-fg-secondary no-underline transition-colors hover:text-fg focus-visible:outline-2 focus-visible:outline-ring aria-[current=page]:border-accent aria-[current=page]:font-semibold aria-[current=page]:text-fg\"\n >\n {i.label}\n </L>\n </li>\n ))}\n </ul>\n </details>\n );\n })}\n </nav>\n );\n}\n"],"mappings":";AAAA,SAA0B,YAAY;AACtC,SAAS,eAAmC;AAUrC,IAAM,gBAA+B;AAAA,EAC1C,QAAQ;AAAA,IACN,aAAa;AAAA,MACX,YAAY,CAAC,YAAY,iBAAiB,SAAS;AAAA,MACnD,QAAQ,CAAC,iBAAiB,mBAAmB,kBAAkB,eAAe,gBAAgB;AAAA,MAC9F,gBAAgB,CAAC,qBAAqB,0BAA0B,mBAAmB;AAAA,IACrF;AAAA,EACF;AACF;AAEA,IAAM,cAAc,EAAE,cAAc;AAS7B,SAAS,MAAM,QAA8B;AAClD,SAAO,QAAQ,KAAK,MAAM,CAAC,EAAE,WAAW,KAAK;AAC/C;;;ACIY,SAGI,KAHJ;AARL,SAAS,QAAQ,EAAE,OAAO,QAAQ,SAAS,QAAQ,WAAW,GAAG,MAAM,GAAiB;AAC7F,QAAM,IAAI,UAAU;AACpB,SACE,oBAAC,SAAI,cAAY,OAAO,WAAW,GAAG,+BAA+B,SAAS,GAAI,GAAG,OAClF,iBAAO,IAAI,CAAC,MAAM;AACjB,UAAM,OAAO,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO,KAAK,CAAC;AACzD,WACE,qBAAC,aAAmB,MAAY,WAAU,cACxC;AAAA,2BAAC,aAAQ,WAAU,ySAChB;AAAA,UAAE;AAAA,QACH,oBAAC,SAAI,SAAQ,aAAY,eAAY,QAAO,WAAU,SAAQ,WAAU,0HACtE,8BAAC,UAAK,GAAE,gBAAe,eAAc,SAAQ,gBAAe,SAAQ,GACtE;AAAA,SACF;AAAA,MACA,oBAAC,QAAG,WAAU,4DACX,YAAE,MAAM,IAAI,CAAC,MACZ,oBAAC,QACC;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,EAAE;AAAA,UACR,gBAAc,EAAE,SAAS,UAAU,SAAS;AAAA,UAC5C,WAAU;AAAA,UAET,YAAE;AAAA;AAAA,MACL,KAPO,EAAE,IAQX,CACD,GACH;AAAA,SAnBY,EAAE,EAoBhB;AAAA,EAEJ,CAAC,GACH;AAEJ;","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-J3NC6ER4.js";
5
5
  import {
6
6
  cn
7
- } from "./chunk-2FRWNSRO.js";
7
+ } from "./chunk-NSLXEDIS.js";
8
8
 
9
9
  // src/dropdown-menu/dropdown-menu.tsx
10
10
  import { DropdownMenu as MenuPrimitive } from "radix-ui";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cn
3
- } from "./chunk-ZNMFG62E.js";
3
+ } from "./chunk-KH3JOEPY.js";
4
4
 
5
5
  // src/error-page/error-page.tsx
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
package/dist/field.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cn
3
- } from "./chunk-4LOMIQVX.js";
3
+ } from "./chunk-W675RFOA.js";
4
4
 
5
5
  // src/field/field.tsx
6
6
  import { tv } from "tailwind-variants";
@@ -5,11 +5,11 @@ import {
5
5
  filterBar,
6
6
  readFilterParams,
7
7
  writeFilterParams
8
- } from "./chunk-FKBHWS4N.js";
8
+ } from "./chunk-CEJDH6SA.js";
9
9
  import "./chunk-7UCPGXKN.js";
10
10
  import "./chunk-D3T54RSL.js";
11
11
  import "./chunk-J3NC6ER4.js";
12
- import "./chunk-2FRWNSRO.js";
12
+ import "./chunk-NSLXEDIS.js";
13
13
  import "./chunk-CPA5CF35.js";
14
14
  export {
15
15
  FilterBar,
@@ -1,9 +1,10 @@
1
1
  import "./chunk-TDG7ED2W.js";
2
2
  import {
3
3
  Button
4
- } from "./chunk-3IN6TOPM.js";
4
+ } from "./chunk-6ZYRUOTA.js";
5
5
  import "./chunk-43PTCDTL.js";
6
6
  import "./chunk-2VNYHG4E.js";
7
+ import "./chunk-W675RFOA.js";
7
8
 
8
9
  // src/force-update-screen/force-update-screen.tsx
9
10
  import { tv } from "tailwind-variants";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/force-update-screen/force-update-screen.tsx"],"sourcesContent":["// Server-safe. The blocking screen: this version can no longer run. It replaces the app, it is not laid over it —\n// nothing behind it is reachable. Every word is a prop; the store URL and the versions come from the backend.\nimport { Button } from \"@krizaka/ui/button\";\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nexport const forceUpdateScreen = tv({\n slots: {\n root: \"mx-auto flex min-h-dvh w-full max-w-md flex-col items-center justify-center gap-4 px-6 py-12 text-center text-fg\",\n mark: \"flex h-24 w-24 items-center justify-center [&>svg]:h-24 [&>svg]:w-24\",\n title: \"text-2xl font-semibold text-fg\",\n message: \"text-fg-secondary\",\n version: \"font-mono text-xs text-fg-tertiary\",\n actions: \"mt-2 flex w-full flex-col gap-2\",\n },\n});\n\nexport type ForceUpdateScreenProps = Omit<React.ComponentProps<\"main\">, \"title\"> & {\n /** The headline (“Update to keep going”). */\n title: React.ReactNode;\n /** Why, in a sentence — the backend's localized `message`. */\n message?: React.ReactNode;\n /** The versions, in words and mono (“You have 1.1.0 · 1.2.0 or later is required”). */\n versionLabel?: React.ReactNode;\n /** The product's mark or mascot (decorative). */\n mark?: React.ReactNode;\n /** The button that updates (“Update the app”). */\n updateLabel: string;\n /** Opens the store page. */\n onUpdate: () => void;\n /** A secondary way (“Check again”) once the update is installed — optional. */\n retryLabel?: string;\n /** Checks the backend again. */\n onRetry?: () => void;\n};\n\n/** The forced update: one thing to do, and the way to do it. */\nexport function ForceUpdateScreen({ title, message, versionLabel, mark, updateLabel, onUpdate, retryLabel, onRetry, className, ...props }: ForceUpdateScreenProps) {\n const s = forceUpdateScreen();\n return (\n <main data-kind=\"update-force\" className={s.root({ className })} {...props}>\n {mark && (\n <div aria-hidden className={s.mark()}>\n {mark}\n </div>\n )}\n <h1 className={s.title()}>{title}</h1>\n {message && <p className={s.message()}>{message}</p>}\n {versionLabel && <p className={s.version()}>{versionLabel}</p>}\n <div className={s.actions()}>\n <Button variant=\"primary\" size=\"lg\" shape=\"cut\" shimmer autoFocus onClick={onUpdate}>\n {updateLabel}\n </Button>\n {retryLabel && onRetry && (\n <Button variant=\"ghost\" onClick={onRetry}>\n {retryLabel}\n </Button>\n )}\n </div>\n </main>\n );\n}\n"],"mappings":";;;;;;;;AAIA,SAAS,UAAU;AAsCX,cAOF,YAPE;AApCD,IAAM,oBAAoB,GAAG;AAAA,EAClC,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AACF,CAAC;AAsBM,SAAS,kBAAkB,EAAE,OAAO,SAAS,cAAc,MAAM,aAAa,UAAU,YAAY,SAAS,WAAW,GAAG,MAAM,GAA2B;AACjK,QAAM,IAAI,kBAAkB;AAC5B,SACE,qBAAC,UAAK,aAAU,gBAAe,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,GAAI,GAAG,OAClE;AAAA,YACC,oBAAC,SAAI,eAAW,MAAC,WAAW,EAAE,KAAK,GAChC,gBACH;AAAA,IAEF,oBAAC,QAAG,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,IAChC,WAAW,oBAAC,OAAE,WAAW,EAAE,QAAQ,GAAI,mBAAQ;AAAA,IAC/C,gBAAgB,oBAAC,OAAE,WAAW,EAAE,QAAQ,GAAI,wBAAa;AAAA,IAC1D,qBAAC,SAAI,WAAW,EAAE,QAAQ,GACxB;AAAA,0BAAC,UAAO,SAAQ,WAAU,MAAK,MAAK,OAAM,OAAM,SAAO,MAAC,WAAS,MAAC,SAAS,UACxE,uBACH;AAAA,MACC,cAAc,WACb,oBAAC,UAAO,SAAQ,SAAQ,SAAS,SAC9B,sBACH;AAAA,OAEJ;AAAA,KACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../src/force-update-screen/force-update-screen.tsx"],"sourcesContent":["// Server-safe. The blocking screen: this version can no longer run. It replaces the app, it is not laid over it —\n// nothing behind it is reachable. Every word is a prop; the store URL and the versions come from the backend.\nimport { Button } from \"@krizaka/ui/button\";\nimport type * as React from \"react\";\nimport { tv } from \"tailwind-variants\";\n\nexport const forceUpdateScreen = tv({\n slots: {\n root: \"mx-auto flex min-h-dvh w-full max-w-md flex-col items-center justify-center gap-4 px-6 py-12 text-center text-fg\",\n mark: \"flex h-24 w-24 items-center justify-center [&>svg]:h-24 [&>svg]:w-24\",\n title: \"text-2xl font-semibold text-fg\",\n message: \"text-fg-secondary\",\n version: \"font-mono text-xs text-fg-tertiary\",\n actions: \"mt-2 flex w-full flex-col gap-2\",\n },\n});\n\nexport type ForceUpdateScreenProps = Omit<React.ComponentProps<\"main\">, \"title\"> & {\n /** The headline (“Update to keep going”). */\n title: React.ReactNode;\n /** Why, in a sentence — the backend's localized `message`. */\n message?: React.ReactNode;\n /** The versions, in words and mono (“You have 1.1.0 · 1.2.0 or later is required”). */\n versionLabel?: React.ReactNode;\n /** The product's mark or mascot (decorative). */\n mark?: React.ReactNode;\n /** The button that updates (“Update the app”). */\n updateLabel: string;\n /** Opens the store page. */\n onUpdate: () => void;\n /** A secondary way (“Check again”) once the update is installed — optional. */\n retryLabel?: string;\n /** Checks the backend again. */\n onRetry?: () => void;\n};\n\n/** The forced update: one thing to do, and the way to do it. */\nexport function ForceUpdateScreen({ title, message, versionLabel, mark, updateLabel, onUpdate, retryLabel, onRetry, className, ...props }: ForceUpdateScreenProps) {\n const s = forceUpdateScreen();\n return (\n <main data-kind=\"update-force\" className={s.root({ className })} {...props}>\n {mark && (\n <div aria-hidden className={s.mark()}>\n {mark}\n </div>\n )}\n <h1 className={s.title()}>{title}</h1>\n {message && <p className={s.message()}>{message}</p>}\n {versionLabel && <p className={s.version()}>{versionLabel}</p>}\n <div className={s.actions()}>\n <Button variant=\"primary\" size=\"lg\" shape=\"cut\" shimmer autoFocus onClick={onUpdate}>\n {updateLabel}\n </Button>\n {retryLabel && onRetry && (\n <Button variant=\"ghost\" onClick={onRetry}>\n {retryLabel}\n </Button>\n )}\n </div>\n </main>\n );\n}\n"],"mappings":";;;;;;;;;AAIA,SAAS,UAAU;AAsCX,cAOF,YAPE;AApCD,IAAM,oBAAoB,GAAG;AAAA,EAClC,OAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AACF,CAAC;AAsBM,SAAS,kBAAkB,EAAE,OAAO,SAAS,cAAc,MAAM,aAAa,UAAU,YAAY,SAAS,WAAW,GAAG,MAAM,GAA2B;AACjK,QAAM,IAAI,kBAAkB;AAC5B,SACE,qBAAC,UAAK,aAAU,gBAAe,WAAW,EAAE,KAAK,EAAE,UAAU,CAAC,GAAI,GAAG,OAClE;AAAA,YACC,oBAAC,SAAI,eAAW,MAAC,WAAW,EAAE,KAAK,GAChC,gBACH;AAAA,IAEF,oBAAC,QAAG,WAAW,EAAE,MAAM,GAAI,iBAAM;AAAA,IAChC,WAAW,oBAAC,OAAE,WAAW,EAAE,QAAQ,GAAI,mBAAQ;AAAA,IAC/C,gBAAgB,oBAAC,OAAE,WAAW,EAAE,QAAQ,GAAI,wBAAa;AAAA,IAC1D,qBAAC,SAAI,WAAW,EAAE,QAAQ,GACxB;AAAA,0BAAC,UAAO,SAAQ,WAAU,MAAK,MAAK,OAAM,OAAM,SAAO,MAAC,WAAS,MAAC,SAAS,UACxE,uBACH;AAAA,MACC,cAAc,WACb,oBAAC,UAAO,SAAQ,SAAQ,SAAS,SAC9B,sBACH;AAAA,OAEJ;AAAA,KACF;AAEJ;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cn
3
- } from "./chunk-ZNMFG62E.js";
3
+ } from "./chunk-KH3JOEPY.js";
4
4
 
5
5
  // src/gallery-page/gallery-page.tsx
6
6
  import { CtaPanel } from "@krizaka/ui/cta-panel";
package/dist/genui.d.ts CHANGED
@@ -122,6 +122,8 @@ declare const emptyGenUiState: GenUiState;
122
122
  declare function readPath(data: unknown, path: string): unknown;
123
123
  /** The state after one validated message. */
124
124
  declare function applyMessage(state: GenUiState, message: GenUiMessage): GenUiState;
125
+ /** The first complete JSON object of a line when only stray `}` / `]` follow it, else null. Strings are skipped. */
126
+ declare function leadingObject(text: string): string | null;
125
127
  /** The state after a line of JSON (one message), the line refused with its reason when it is not valid. */
126
128
  declare function applyLine(state: GenUiState, line: string, catalog: Readonly<Record<string, {
127
129
  readonly check: GenUiPropsCheck;
@@ -216,4 +218,4 @@ declare function formatGenUiValue(value: unknown, format: GenUiFormat | undefine
216
218
  /** `Column`, `Row`, `Text`, `Card`, `Callout`, `Table` — the catalog @krizaka/ui draws on its own. */
217
219
  declare const baseGenUiCatalog: GenUiCatalog;
218
220
 
219
- export { GENUI_CATALOG_ID, GENUI_FORMATS, GENUI_LIMITS, GENUI_VERSION, type GenUiBinding, type GenUiCatalog, type GenUiComponent, type GenUiEntry, type GenUiExtract, type GenUiFormat, type GenUiLabels, type GenUiMessage, type GenUiPropsCheck, type GenUiRenderContext, type GenUiResult, type GenUiState, GenUiStream, type GenUiStreamProps, GenUiSurface, type GenUiSurfaceProps, type GenUiSurfaceState, allowKeys, applyLine, applyMessage, baseGenUiCatalog, checkBinding, checkChildren, checkCurrency, checkEnum, checkId, checkNumber, checkText, emptyGenUiState, extractGenUi, formatGenUiValue, genUiLabels, isBinding, parsePath, readPath, readStream, sanitizeData, validateMessage };
221
+ export { GENUI_CATALOG_ID, GENUI_FORMATS, GENUI_LIMITS, GENUI_VERSION, type GenUiBinding, type GenUiCatalog, type GenUiComponent, type GenUiEntry, type GenUiExtract, type GenUiFormat, type GenUiLabels, type GenUiMessage, type GenUiPropsCheck, type GenUiRenderContext, type GenUiResult, type GenUiState, GenUiStream, type GenUiStreamProps, GenUiSurface, type GenUiSurfaceProps, type GenUiSurfaceState, allowKeys, applyLine, applyMessage, baseGenUiCatalog, checkBinding, checkChildren, checkCurrency, checkEnum, checkId, checkNumber, checkText, emptyGenUiState, extractGenUi, formatGenUiValue, genUiLabels, isBinding, leadingObject, parsePath, readPath, readStream, sanitizeData, validateMessage };
package/dist/genui.js CHANGED
@@ -4,21 +4,21 @@ import {
4
4
  CardRoot,
5
5
  CardTitle,
6
6
  Skeleton
7
- } from "./chunk-AQSZJJAJ.js";
7
+ } from "./chunk-MQPC3P4T.js";
8
8
  import {
9
9
  DataTable
10
- } from "./chunk-R6NK6ZNY.js";
10
+ } from "./chunk-F7FVPPBB.js";
11
11
  import "./chunk-7Z4KHPFC.js";
12
12
  import "./chunk-JXLDUDTD.js";
13
- import "./chunk-3BC4XQ6C.js";
13
+ import "./chunk-DZU6RMYD.js";
14
14
  import "./chunk-KVDB4GXV.js";
15
- import "./chunk-FKBHWS4N.js";
15
+ import "./chunk-CEJDH6SA.js";
16
16
  import "./chunk-7UCPGXKN.js";
17
17
  import "./chunk-D3T54RSL.js";
18
18
  import "./chunk-J3NC6ER4.js";
19
19
  import {
20
20
  cn
21
- } from "./chunk-2FRWNSRO.js";
21
+ } from "./chunk-NSLXEDIS.js";
22
22
  import "./chunk-REPTKUJ6.js";
23
23
  import "./chunk-ZIXB33X7.js";
24
24
  import "./chunk-FZBWEDQI.js";
@@ -384,6 +384,26 @@ function applyMessage(state, message) {
384
384
  }
385
385
  return { ...state, surfaces };
386
386
  }
387
+ function leadingObject(text2) {
388
+ if (!text2.startsWith("{")) return null;
389
+ let depth = 0;
390
+ let inString = false;
391
+ for (let i = 0; i < text2.length; i++) {
392
+ const c = text2[i];
393
+ if (inString) {
394
+ if (c === "\\") i++;
395
+ else if (c === '"') inString = false;
396
+ continue;
397
+ }
398
+ if (c === '"') inString = true;
399
+ else if (c === "{" || c === "[") depth++;
400
+ else if (c === "}" || c === "]") {
401
+ depth--;
402
+ if (depth === 0) return /^[\s}\]]*$/.test(text2.slice(i + 1)) ? text2.slice(0, i + 1) : null;
403
+ }
404
+ }
405
+ return null;
406
+ }
387
407
  function applyLine(state, line, catalog) {
388
408
  const text2 = line.trim();
389
409
  if (!text2) return state;
@@ -391,7 +411,13 @@ function applyLine(state, line, catalog) {
391
411
  try {
392
412
  json = JSON.parse(text2);
393
413
  } catch {
394
- return withError(state, "a line is not JSON");
414
+ const head = leadingObject(text2);
415
+ if (head === null) return withError(state, "a line is not JSON");
416
+ try {
417
+ json = JSON.parse(head);
418
+ } catch {
419
+ return withError(state, "a line is not JSON");
420
+ }
395
421
  }
396
422
  const result = validateMessage(json, catalog);
397
423
  return result.ok ? applyMessage(state, result.value) : withError(state, result.error);
@@ -497,6 +523,7 @@ export {
497
523
  formatGenUiValue,
498
524
  genUiLabels,
499
525
  isBinding,
526
+ leadingObject,
500
527
  parsePath,
501
528
  readPath,
502
529
  readStream,