@vamos-ui/react 0.0.0-stage → 0.2.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 (665) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -2
  3. package/dist/blocks/block-heading.d.ts +29 -0
  4. package/dist/blocks/block-heading.js +39 -0
  5. package/dist/blocks/block-image.d.ts +52 -0
  6. package/dist/blocks/block-image.js +48 -0
  7. package/dist/blocks/block-link.d.ts +30 -0
  8. package/dist/blocks/block-link.js +36 -0
  9. package/dist/blocks/create-blocks.d.ts +54 -0
  10. package/dist/blocks/create-blocks.js +52 -0
  11. package/dist/blocks/index.d.ts +55 -0
  12. package/dist/blocks/index.js +59 -0
  13. package/dist/blocks/json-ld.d.ts +18 -0
  14. package/dist/blocks/json-ld.js +44 -0
  15. package/dist/blocks/labels.d.ts +20 -0
  16. package/dist/blocks/labels.js +43 -0
  17. package/dist/blocks/rich-text.d.ts +36 -0
  18. package/dist/blocks/rich-text.js +106 -0
  19. package/dist/blocks/schema/define-block.d.ts +151 -0
  20. package/dist/blocks/schema/define-block.js +120 -0
  21. package/dist/blocks/schema/emphasis.d.ts +17 -0
  22. package/dist/blocks/schema/emphasis.js +69 -0
  23. package/dist/blocks/schema/fields.d.ts +497 -0
  24. package/dist/blocks/schema/fields.js +240 -0
  25. package/dist/blocks/schema/icons.d.ts +2 -0
  26. package/dist/blocks/schema/icons.js +26 -0
  27. package/dist/blocks/schema/index.d.ts +18 -0
  28. package/dist/blocks/schema/index.js +21 -0
  29. package/dist/blocks/schema/lint-types.d.ts +16 -0
  30. package/dist/blocks/schema/lint-types.js +2 -0
  31. package/dist/blocks/schema/lint.d.ts +32 -0
  32. package/dist/blocks/schema/lint.js +164 -0
  33. package/dist/blocks/schema/localize.d.ts +20 -0
  34. package/dist/blocks/schema/localize.js +29 -0
  35. package/dist/blocks/schema/localized.d.ts +25 -0
  36. package/dist/blocks/schema/localized.js +53 -0
  37. package/dist/blocks/schema/migrate.d.ts +24 -0
  38. package/dist/blocks/schema/migrate.js +75 -0
  39. package/dist/blocks/schema/nodes.d.ts +196 -0
  40. package/dist/blocks/schema/nodes.js +78 -0
  41. package/dist/blocks/schema/rich-doc-schema.d.ts +32 -0
  42. package/dist/blocks/schema/rich-doc-schema.js +66 -0
  43. package/dist/blocks/schema/rich-doc.d.ts +90 -0
  44. package/dist/blocks/schema/rich-doc.js +62 -0
  45. package/dist/blocks/schema/safety.d.ts +20 -0
  46. package/dist/blocks/schema/safety.js +49 -0
  47. package/dist/blocks/schema/types.d.ts +172 -0
  48. package/dist/blocks/schema/types.js +3 -0
  49. package/dist/blocks/schema/validate.d.ts +17 -0
  50. package/dist/blocks/schema/validate.js +32 -0
  51. package/dist/blocks/schema/walk.d.ts +22 -0
  52. package/dist/blocks/schema/walk.js +60 -0
  53. package/dist/blocks/section-header.d.ts +38 -0
  54. package/dist/blocks/section-header.js +22 -0
  55. package/dist/blocks/section.d.ts +59 -0
  56. package/dist/blocks/section.js +66 -0
  57. package/dist/blocks/site/_kit-1.d.ts +100 -0
  58. package/dist/blocks/site/_kit-1.js +135 -0
  59. package/dist/blocks/site/_site-icon-1.d.ts +6 -0
  60. package/dist/blocks/site/_site-icon-1.js +15 -0
  61. package/dist/blocks/site/announcement-bar.d.ts +42 -0
  62. package/dist/blocks/site/announcement-bar.js +38 -0
  63. package/dist/blocks/site/announcement-dismiss.d.ts +18 -0
  64. package/dist/blocks/site/announcement-dismiss.js +28 -0
  65. package/dist/blocks/site/article-layout.d.ts +65 -0
  66. package/dist/blocks/site/article-layout.js +88 -0
  67. package/dist/blocks/site/blog-list.d.ts +79 -0
  68. package/dist/blocks/site/blog-list.js +78 -0
  69. package/dist/blocks/site/comparison-table.d.ts +54 -0
  70. package/dist/blocks/site/comparison-table.js +38 -0
  71. package/dist/blocks/site/consent-banner.d.ts +52 -0
  72. package/dist/blocks/site/consent-banner.js +33 -0
  73. package/dist/blocks/site/contact-dock.d.ts +52 -0
  74. package/dist/blocks/site/contact-dock.js +55 -0
  75. package/dist/blocks/site/contact-form.d.ts +60 -0
  76. package/dist/blocks/site/contact-form.js +45 -0
  77. package/dist/blocks/site/cta-booking.d.ts +43 -0
  78. package/dist/blocks/site/cta-booking.js +69 -0
  79. package/dist/blocks/site/cta.d.ts +74 -0
  80. package/dist/blocks/site/cta.js +112 -0
  81. package/dist/blocks/site/embed-facade.d.ts +20 -0
  82. package/dist/blocks/site/embed-facade.js +21 -0
  83. package/dist/blocks/site/faq.d.ts +48 -0
  84. package/dist/blocks/site/faq.js +51 -0
  85. package/dist/blocks/site/feature-grid.d.ts +46 -0
  86. package/dist/blocks/site/feature-grid.js +49 -0
  87. package/dist/blocks/site/feature-tabs.d.ts +22 -0
  88. package/dist/blocks/site/feature-tabs.js +11 -0
  89. package/dist/blocks/site/footer.d.ts +68 -0
  90. package/dist/blocks/site/footer.js +61 -0
  91. package/dist/blocks/site/gallery-section.d.ts +42 -0
  92. package/dist/blocks/site/gallery-section.js +47 -0
  93. package/dist/blocks/site/hero-video.d.ts +15 -0
  94. package/dist/blocks/site/hero-video.js +31 -0
  95. package/dist/blocks/site/hero.d.ts +64 -0
  96. package/dist/blocks/site/hero.js +67 -0
  97. package/dist/blocks/site/logo-strip.d.ts +42 -0
  98. package/dist/blocks/site/logo-strip.js +26 -0
  99. package/dist/blocks/site/map-hours.d.ts +83 -0
  100. package/dist/blocks/site/map-hours.js +125 -0
  101. package/dist/blocks/site/media-text.d.ts +45 -0
  102. package/dist/blocks/site/media-text.js +55 -0
  103. package/dist/blocks/site/menu-list.d.ts +74 -0
  104. package/dist/blocks/site/menu-list.js +84 -0
  105. package/dist/blocks/site/navbar-submenu.d.ts +18 -0
  106. package/dist/blocks/site/navbar-submenu.js +51 -0
  107. package/dist/blocks/site/navbar.d.ts +67 -0
  108. package/dist/blocks/site/navbar.js +64 -0
  109. package/dist/blocks/site/not-found.d.ts +40 -0
  110. package/dist/blocks/site/not-found.js +38 -0
  111. package/dist/blocks/site/page-intro.d.ts +46 -0
  112. package/dist/blocks/site/page-intro.js +44 -0
  113. package/dist/blocks/site/pricing-table.d.ts +67 -0
  114. package/dist/blocks/site/pricing-table.js +82 -0
  115. package/dist/blocks/site/process.d.ts +36 -0
  116. package/dist/blocks/site/process.js +41 -0
  117. package/dist/blocks/site/registry-1.d.ts +720 -0
  118. package/dist/blocks/site/registry-1.js +783 -0
  119. package/dist/blocks/site/registry-2.d.ts +914 -0
  120. package/dist/blocks/site/registry-2.js +563 -0
  121. package/dist/blocks/site/rich-text-section.d.ts +34 -0
  122. package/dist/blocks/site/rich-text-section.js +32 -0
  123. package/dist/blocks/site/shared/brand-icons.d.ts +21 -0
  124. package/dist/blocks/site/shared/brand-icons.js +56 -0
  125. package/dist/blocks/site/shared/consent-gate.d.ts +41 -0
  126. package/dist/blocks/site/shared/consent-gate.js +43 -0
  127. package/dist/blocks/site/shared/consent-island.d.ts +38 -0
  128. package/dist/blocks/site/shared/consent-island.js +63 -0
  129. package/dist/blocks/site/shared/consent.d.ts +49 -0
  130. package/dist/blocks/site/shared/consent.js +130 -0
  131. package/dist/blocks/site/shared/contact-form-island.d.ts +41 -0
  132. package/dist/blocks/site/shared/contact-form-island.js +100 -0
  133. package/dist/blocks/site/shared/copy-link.d.ts +10 -0
  134. package/dist/blocks/site/shared/copy-link.js +25 -0
  135. package/dist/blocks/site/shared/dock-avoid.d.ts +15 -0
  136. package/dist/blocks/site/shared/dock-avoid.js +107 -0
  137. package/dist/blocks/site/shared/dock-hours.d.ts +13 -0
  138. package/dist/blocks/site/shared/dock-hours.js +25 -0
  139. package/dist/blocks/site/shared/gallery-lightbox.d.ts +12 -0
  140. package/dist/blocks/site/shared/gallery-lightbox.js +10 -0
  141. package/dist/blocks/site/shared/island-keys.d.ts +10 -0
  142. package/dist/blocks/site/shared/island-keys.js +44 -0
  143. package/dist/blocks/site/shared/kit-2.d.ts +55 -0
  144. package/dist/blocks/site/shared/kit-2.js +84 -0
  145. package/dist/blocks/site/shared/labels-2.d.ts +209 -0
  146. package/dist/blocks/site/shared/labels-2.js +427 -0
  147. package/dist/blocks/site/shared/open-now.d.ts +22 -0
  148. package/dist/blocks/site/shared/open-now.js +27 -0
  149. package/dist/blocks/site/shared/opening-hours.d.ts +117 -0
  150. package/dist/blocks/site/shared/opening-hours.js +245 -0
  151. package/dist/blocks/site/shared/site-accent.d.ts +48 -0
  152. package/dist/blocks/site/shared/site-accent.js +249 -0
  153. package/dist/blocks/site/shared/site-form.d.ts +79 -0
  154. package/dist/blocks/site/shared/site-form.js +111 -0
  155. package/dist/blocks/site/shared/site-routing.d.ts +54 -0
  156. package/dist/blocks/site/shared/site-routing.js +86 -0
  157. package/dist/blocks/site/shared/testimonials-carousel.d.ts +17 -0
  158. package/dist/blocks/site/shared/testimonials-carousel.js +64 -0
  159. package/dist/blocks/site/site-shell.d.ts +97 -0
  160. package/dist/blocks/site/site-shell.js +227 -0
  161. package/dist/blocks/site/stats-band.d.ts +40 -0
  162. package/dist/blocks/site/stats-band.js +41 -0
  163. package/dist/blocks/site/team.d.ts +44 -0
  164. package/dist/blocks/site/team.js +48 -0
  165. package/dist/blocks/site/testimonials.d.ts +68 -0
  166. package/dist/blocks/site/testimonials.js +65 -0
  167. package/dist/blocks/types.d.ts +63 -0
  168. package/dist/blocks/types.js +2 -0
  169. package/dist/business/approval-flow.d.ts +152 -0
  170. package/dist/business/approval-flow.js +221 -0
  171. package/dist/business/export-core.d.ts +55 -0
  172. package/dist/business/export-core.js +101 -0
  173. package/dist/business/export.d.ts +148 -0
  174. package/dist/business/export.js +264 -0
  175. package/dist/business/import-core.d.ts +104 -0
  176. package/dist/business/import-core.js +281 -0
  177. package/dist/business/import-wizard.d.ts +186 -0
  178. package/dist/business/import-wizard.js +401 -0
  179. package/dist/business/index.d.ts +11 -0
  180. package/dist/business/index.js +20 -0
  181. package/dist/business/line-items-core.d.ts +129 -0
  182. package/dist/business/line-items-core.js +183 -0
  183. package/dist/business/line-items.d.ts +119 -0
  184. package/dist/business/line-items.js +299 -0
  185. package/dist/business/multi-step-form.d.ts +131 -0
  186. package/dist/business/multi-step-form.js +337 -0
  187. package/dist/business/permission-core.d.ts +59 -0
  188. package/dist/business/permission-core.js +99 -0
  189. package/dist/business/permission-matrix.d.ts +158 -0
  190. package/dist/business/permission-matrix.js +341 -0
  191. package/dist/business/setup-checklist.d.ts +80 -0
  192. package/dist/business/setup-checklist.js +92 -0
  193. package/dist/charts/area-chart.d.ts +35 -0
  194. package/dist/charts/area-chart.js +33 -0
  195. package/dist/charts/bar-chart.d.ts +27 -0
  196. package/dist/charts/bar-chart.js +42 -0
  197. package/dist/charts/bar-list.d.ts +47 -0
  198. package/dist/charts/bar-list.js +60 -0
  199. package/dist/charts/chart-shell.d.ts +173 -0
  200. package/dist/charts/chart-shell.js +205 -0
  201. package/dist/charts/chart.d.ts +73 -0
  202. package/dist/charts/chart.js +106 -0
  203. package/dist/charts/combo-chart.d.ts +29 -0
  204. package/dist/charts/combo-chart.js +47 -0
  205. package/dist/charts/donut-chart.d.ts +33 -0
  206. package/dist/charts/donut-chart.js +113 -0
  207. package/dist/charts/funnel.d.ts +51 -0
  208. package/dist/charts/funnel.js +69 -0
  209. package/dist/charts/gauge.d.ts +62 -0
  210. package/dist/charts/gauge.js +104 -0
  211. package/dist/charts/heatmap.d.ts +81 -0
  212. package/dist/charts/heatmap.js +338 -0
  213. package/dist/charts/index.d.ts +12 -0
  214. package/dist/charts/index.js +14 -0
  215. package/dist/charts/line-chart.d.ts +21 -0
  216. package/dist/charts/line-chart.js +36 -0
  217. package/dist/charts/test-utils.d.ts +2 -0
  218. package/dist/charts/test-utils.js +38 -0
  219. package/dist/charts/utils.d.ts +130 -0
  220. package/dist/charts/utils.js +262 -0
  221. package/dist/components/accordion.d.ts +47 -0
  222. package/dist/components/accordion.js +70 -0
  223. package/dist/components/activity-timeline.d.ts +149 -0
  224. package/dist/components/activity-timeline.js +122 -0
  225. package/dist/components/address-field.d.ts +116 -0
  226. package/dist/components/address-field.js +219 -0
  227. package/dist/components/alert-dialog.d.ts +99 -0
  228. package/dist/components/alert-dialog.js +192 -0
  229. package/dist/components/alert.d.ts +42 -0
  230. package/dist/components/alert.js +82 -0
  231. package/dist/components/app-shell.d.ts +159 -0
  232. package/dist/components/app-shell.js +289 -0
  233. package/dist/components/attachment-list.d.ts +96 -0
  234. package/dist/components/attachment-list.js +196 -0
  235. package/dist/components/audit-log.d.ts +150 -0
  236. package/dist/components/audit-log.js +205 -0
  237. package/dist/components/avatar.d.ts +87 -0
  238. package/dist/components/avatar.js +126 -0
  239. package/dist/components/badge.d.ts +41 -0
  240. package/dist/components/badge.js +68 -0
  241. package/dist/components/breadcrumb.d.ts +78 -0
  242. package/dist/components/breadcrumb.js +106 -0
  243. package/dist/components/button-group.d.ts +52 -0
  244. package/dist/components/button-group.js +77 -0
  245. package/dist/components/button.d.ts +58 -0
  246. package/dist/components/button.js +107 -0
  247. package/dist/components/calendar.d.ts +240 -0
  248. package/dist/components/calendar.js +483 -0
  249. package/dist/components/card.d.ts +66 -0
  250. package/dist/components/card.js +76 -0
  251. package/dist/components/carousel.d.ts +170 -0
  252. package/dist/components/carousel.js +348 -0
  253. package/dist/components/checkbox.d.ts +78 -0
  254. package/dist/components/checkbox.js +138 -0
  255. package/dist/components/color-picker.d.ts +112 -0
  256. package/dist/components/color-picker.js +235 -0
  257. package/dist/components/combobox.d.ts +136 -0
  258. package/dist/components/combobox.js +294 -0
  259. package/dist/components/command.d.ts +275 -0
  260. package/dist/components/command.js +493 -0
  261. package/dist/components/comment-thread.d.ts +252 -0
  262. package/dist/components/comment-thread.js +449 -0
  263. package/dist/components/context-menu.d.ts +77 -0
  264. package/dist/components/context-menu.js +82 -0
  265. package/dist/components/currency-input.d.ts +43 -0
  266. package/dist/components/currency-input.js +85 -0
  267. package/dist/components/date-picker.d.ts +141 -0
  268. package/dist/components/date-picker.js +241 -0
  269. package/dist/components/date-range-picker.d.ts +91 -0
  270. package/dist/components/date-range-picker.js +251 -0
  271. package/dist/components/description-list.d.ts +92 -0
  272. package/dist/components/description-list.js +42 -0
  273. package/dist/components/dialog.d.ts +139 -0
  274. package/dist/components/dialog.js +185 -0
  275. package/dist/components/dropdown-menu.d.ts +100 -0
  276. package/dist/components/dropdown-menu.js +102 -0
  277. package/dist/components/editor-layout.d.ts +166 -0
  278. package/dist/components/editor-layout.js +237 -0
  279. package/dist/components/empty-state.d.ts +49 -0
  280. package/dist/components/empty-state.js +68 -0
  281. package/dist/components/entity-card.d.ts +83 -0
  282. package/dist/components/entity-card.js +92 -0
  283. package/dist/components/file-upload.d.ts +256 -0
  284. package/dist/components/file-upload.js +490 -0
  285. package/dist/components/formatted-input.d.ts +177 -0
  286. package/dist/components/formatted-input.js +399 -0
  287. package/dist/components/hierarchy-chart.d.ts +190 -0
  288. package/dist/components/hierarchy-chart.js +890 -0
  289. package/dist/components/hover-card.d.ts +21 -0
  290. package/dist/components/hover-card.js +32 -0
  291. package/dist/components/iban-input.d.ts +38 -0
  292. package/dist/components/iban-input.js +112 -0
  293. package/dist/components/id-input.d.ts +65 -0
  294. package/dist/components/id-input.js +130 -0
  295. package/dist/components/image.d.ts +130 -0
  296. package/dist/components/image.js +168 -0
  297. package/dist/components/input-otp.d.ts +62 -0
  298. package/dist/components/input-otp.js +73 -0
  299. package/dist/components/input.d.ts +141 -0
  300. package/dist/components/input.js +187 -0
  301. package/dist/components/item.d.ts +96 -0
  302. package/dist/components/item.js +113 -0
  303. package/dist/components/kbd.d.ts +64 -0
  304. package/dist/components/kbd.js +119 -0
  305. package/dist/components/list-layout.d.ts +144 -0
  306. package/dist/components/list-layout.js +210 -0
  307. package/dist/components/native-select.d.ts +33 -0
  308. package/dist/components/native-select.js +48 -0
  309. package/dist/components/navigation-menu.d.ts +127 -0
  310. package/dist/components/navigation-menu.js +129 -0
  311. package/dist/components/notification-center.d.ts +164 -0
  312. package/dist/components/notification-center.js +399 -0
  313. package/dist/components/page-header.d.ts +60 -0
  314. package/dist/components/page-header.js +60 -0
  315. package/dist/components/pagination.d.ts +121 -0
  316. package/dist/components/pagination.js +174 -0
  317. package/dist/components/phone-input.d.ts +49 -0
  318. package/dist/components/phone-input.js +266 -0
  319. package/dist/components/popover.d.ts +38 -0
  320. package/dist/components/popover.js +69 -0
  321. package/dist/components/progress.d.ts +79 -0
  322. package/dist/components/progress.js +97 -0
  323. package/dist/components/radio-group.d.ts +43 -0
  324. package/dist/components/radio-group.js +81 -0
  325. package/dist/components/record-detail-layout.d.ts +167 -0
  326. package/dist/components/record-detail-layout.js +233 -0
  327. package/dist/components/record-picker.d.ts +199 -0
  328. package/dist/components/record-picker.js +650 -0
  329. package/dist/components/resizable.d.ts +50 -0
  330. package/dist/components/resizable.js +88 -0
  331. package/dist/components/scroll-area.d.ts +40 -0
  332. package/dist/components/scroll-area.js +56 -0
  333. package/dist/components/select.d.ts +126 -0
  334. package/dist/components/select.js +137 -0
  335. package/dist/components/separator.d.ts +31 -0
  336. package/dist/components/separator.js +41 -0
  337. package/dist/components/settings-layout.d.ts +134 -0
  338. package/dist/components/settings-layout.js +180 -0
  339. package/dist/components/sheet.d.ts +103 -0
  340. package/dist/components/sheet.js +165 -0
  341. package/dist/components/sidebar.d.ts +171 -0
  342. package/dist/components/sidebar.js +421 -0
  343. package/dist/components/signature-pad.d.ts +85 -0
  344. package/dist/components/signature-pad.js +283 -0
  345. package/dist/components/skeleton.d.ts +64 -0
  346. package/dist/components/skeleton.js +53 -0
  347. package/dist/components/slider.d.ts +57 -0
  348. package/dist/components/slider.js +133 -0
  349. package/dist/components/slug-input.d.ts +69 -0
  350. package/dist/components/slug-input.js +201 -0
  351. package/dist/components/sparkline.d.ts +54 -0
  352. package/dist/components/sparkline.js +122 -0
  353. package/dist/components/spinner.d.ts +34 -0
  354. package/dist/components/spinner.js +34 -0
  355. package/dist/components/stat.d.ts +135 -0
  356. package/dist/components/stat.js +130 -0
  357. package/dist/components/status-picker.d.ts +107 -0
  358. package/dist/components/status-picker.js +175 -0
  359. package/dist/components/stepper.d.ts +86 -0
  360. package/dist/components/stepper.js +103 -0
  361. package/dist/components/switch.d.ts +34 -0
  362. package/dist/components/switch.js +70 -0
  363. package/dist/components/table.d.ts +101 -0
  364. package/dist/components/table.js +72 -0
  365. package/dist/components/tabs.d.ts +103 -0
  366. package/dist/components/tabs.js +173 -0
  367. package/dist/components/tag-input.d.ts +77 -0
  368. package/dist/components/tag-input.js +305 -0
  369. package/dist/components/task-list.d.ts +89 -0
  370. package/dist/components/task-list.js +238 -0
  371. package/dist/components/time-picker.d.ts +119 -0
  372. package/dist/components/time-picker.js +399 -0
  373. package/dist/components/toast.d.ts +87 -0
  374. package/dist/components/toast.js +142 -0
  375. package/dist/components/toggle.d.ts +77 -0
  376. package/dist/components/toggle.js +109 -0
  377. package/dist/components/tooltip.d.ts +69 -0
  378. package/dist/components/tooltip.js +105 -0
  379. package/dist/components/top-bar.d.ts +87 -0
  380. package/dist/components/top-bar.js +99 -0
  381. package/dist/components/tree-select.d.ts +89 -0
  382. package/dist/components/tree-select.js +243 -0
  383. package/dist/components/tree-view.d.ts +109 -0
  384. package/dist/components/tree-view.js +170 -0
  385. package/dist/components/typography.d.ts +107 -0
  386. package/dist/components/typography.js +128 -0
  387. package/dist/components/user-picker.d.ts +89 -0
  388. package/dist/components/user-picker.js +162 -0
  389. package/dist/components/version-history.d.ts +191 -0
  390. package/dist/components/version-history.js +431 -0
  391. package/dist/data-table/csv.d.ts +27 -0
  392. package/dist/data-table/csv.js +68 -0
  393. package/dist/data-table/data-table.d.ts +423 -0
  394. package/dist/data-table/data-table.js +1259 -0
  395. package/dist/data-table/filter-bar.d.ts +146 -0
  396. package/dist/data-table/filter-bar.js +569 -0
  397. package/dist/data-table/filter-fns.d.ts +65 -0
  398. package/dist/data-table/filter-fns.js +382 -0
  399. package/dist/data-table/index.d.ts +8 -0
  400. package/dist/data-table/index.js +9 -0
  401. package/dist/data-table/saved-views.d.ts +100 -0
  402. package/dist/data-table/saved-views.js +251 -0
  403. package/dist/data-table/types.d.ts +168 -0
  404. package/dist/data-table/types.js +87 -0
  405. package/dist/data-table/url-state.d.ts +94 -0
  406. package/dist/data-table/url-state.js +303 -0
  407. package/dist/data-table/view-state.d.ts +16 -0
  408. package/dist/data-table/view-state.js +81 -0
  409. package/dist/editor/_test-setup.d.ts +1 -0
  410. package/dist/editor/_test-setup.js +33 -0
  411. package/dist/editor/block-editor.d.ts +137 -0
  412. package/dist/editor/block-editor.js +280 -0
  413. package/dist/editor/commands.d.ts +31 -0
  414. package/dist/editor/commands.js +150 -0
  415. package/dist/editor/context.d.ts +108 -0
  416. package/dist/editor/context.js +30 -0
  417. package/dist/editor/convert.d.ts +66 -0
  418. package/dist/editor/convert.js +567 -0
  419. package/dist/editor/drag-handle.d.ts +10 -0
  420. package/dist/editor/drag-handle.js +69 -0
  421. package/dist/editor/extensions.d.ts +34 -0
  422. package/dist/editor/extensions.js +239 -0
  423. package/dist/editor/index.d.ts +14 -0
  424. package/dist/editor/index.js +17 -0
  425. package/dist/editor/inserter.d.ts +12 -0
  426. package/dist/editor/inserter.js +88 -0
  427. package/dist/editor/inspector.d.ts +17 -0
  428. package/dist/editor/inspector.js +65 -0
  429. package/dist/editor/items.d.ts +62 -0
  430. package/dist/editor/items.js +195 -0
  431. package/dist/editor/labels.d.ts +119 -0
  432. package/dist/editor/labels.js +130 -0
  433. package/dist/editor/markdown.d.ts +14 -0
  434. package/dist/editor/markdown.js +209 -0
  435. package/dist/editor/menus.d.ts +20 -0
  436. package/dist/editor/menus.js +236 -0
  437. package/dist/editor/nodes.d.ts +14 -0
  438. package/dist/editor/nodes.js +201 -0
  439. package/dist/editor/outline.d.ts +11 -0
  440. package/dist/editor/outline.js +52 -0
  441. package/dist/editor/schema-form.d.ts +64 -0
  442. package/dist/editor/schema-form.js +290 -0
  443. package/dist/editor/slash-menu.d.ts +15 -0
  444. package/dist/editor/slash-menu.js +119 -0
  445. package/dist/fonts/catalog.d.ts +53 -0
  446. package/dist/fonts/catalog.js +121 -0
  447. package/dist/fonts/font-picker.d.ts +70 -0
  448. package/dist/fonts/font-picker.js +225 -0
  449. package/dist/fonts/index.d.ts +6 -0
  450. package/dist/fonts/index.js +7 -0
  451. package/dist/fonts/loader.d.ts +66 -0
  452. package/dist/fonts/loader.js +161 -0
  453. package/dist/fonts/pairing-picker.d.ts +31 -0
  454. package/dist/fonts/pairing-picker.js +81 -0
  455. package/dist/fonts/pairings.d.ts +84 -0
  456. package/dist/fonts/pairings.js +149 -0
  457. package/dist/fonts/provider.d.ts +34 -0
  458. package/dist/fonts/provider.js +51 -0
  459. package/dist/form/index.d.ts +1 -0
  460. package/dist/form/index.js +1 -0
  461. package/dist/format/core.d.ts +149 -0
  462. package/dist/format/core.js +357 -0
  463. package/dist/format/index.d.ts +4 -0
  464. package/dist/format/index.js +5 -0
  465. package/dist/format/use-format.d.ts +1 -0
  466. package/dist/format/use-format.js +3 -0
  467. package/dist/index.d.ts +86 -0
  468. package/dist/index.js +87 -0
  469. package/dist/lib/cn.d.ts +3 -0
  470. package/dist/lib/cn.js +16 -0
  471. package/dist/lib/color.d.ts +64 -0
  472. package/dist/lib/color.js +177 -0
  473. package/dist/lib/compose-refs.d.ts +24 -0
  474. package/dist/lib/compose-refs.js +45 -0
  475. package/dist/lib/data-islands.d.ts +194 -0
  476. package/dist/lib/data-islands.js +368 -0
  477. package/dist/lib/date.d.ts +129 -0
  478. package/dist/lib/date.js +386 -0
  479. package/dist/lib/field-context.d.ts +64 -0
  480. package/dist/lib/field-context.js +62 -0
  481. package/dist/lib/floating-arrow.d.ts +18 -0
  482. package/dist/lib/floating-arrow.js +15 -0
  483. package/dist/lib/islands.d.ts +38 -0
  484. package/dist/lib/islands.js +40 -0
  485. package/dist/lib/labels.d.ts +51 -0
  486. package/dist/lib/labels.js +56 -0
  487. package/dist/lib/layer.d.ts +36 -0
  488. package/dist/lib/layer.js +42 -0
  489. package/dist/lib/locale.d.ts +85 -0
  490. package/dist/lib/locale.js +105 -0
  491. package/dist/lib/menu.d.ts +58 -0
  492. package/dist/lib/menu.js +99 -0
  493. package/dist/lib/message-format.d.ts +20 -0
  494. package/dist/lib/message-format.js +116 -0
  495. package/dist/lib/nav.d.ts +132 -0
  496. package/dist/lib/nav.js +178 -0
  497. package/dist/lib/provider.d.ts +100 -0
  498. package/dist/lib/provider.js +105 -0
  499. package/dist/lib/public.d.ts +22 -0
  500. package/dist/lib/public.js +33 -0
  501. package/dist/lib/sr-name.d.ts +18 -0
  502. package/dist/lib/sr-name.js +17 -0
  503. package/dist/lib/text.d.ts +100 -0
  504. package/dist/lib/text.js +233 -0
  505. package/dist/lib/theme-scope.d.ts +58 -0
  506. package/dist/lib/theme-scope.js +59 -0
  507. package/dist/lib/use-async-list.d.ts +60 -0
  508. package/dist/lib/use-async-list.js +119 -0
  509. package/dist/lib/use-container-width.d.ts +19 -0
  510. package/dist/lib/use-container-width.js +39 -0
  511. package/dist/lib/use-controllable-state.d.ts +33 -0
  512. package/dist/lib/use-controllable-state.js +56 -0
  513. package/dist/lib/use-edge-fade.d.ts +13 -0
  514. package/dist/lib/use-edge-fade.js +43 -0
  515. package/dist/lib/use-formatted-input.d.ts +69 -0
  516. package/dist/lib/use-formatted-input.js +152 -0
  517. package/dist/lib/use-hotkeys.d.ts +80 -0
  518. package/dist/lib/use-hotkeys.js +221 -0
  519. package/dist/lib/use-hover-intent.d.ts +44 -0
  520. package/dist/lib/use-hover-intent.js +119 -0
  521. package/dist/lib/use-media-query.d.ts +21 -0
  522. package/dist/lib/use-media-query.js +28 -0
  523. package/dist/lib/use-reduced-motion.d.ts +8 -0
  524. package/dist/lib/use-reduced-motion.js +13 -0
  525. package/dist/lib/use-tree.d.ts +153 -0
  526. package/dist/lib/use-tree.js +534 -0
  527. package/dist/lib/value-format.d.ts +25 -0
  528. package/dist/lib/value-format.js +56 -0
  529. package/dist/lib/variants.d.ts +131 -0
  530. package/dist/lib/variants.js +109 -0
  531. package/dist/locale-data/core/date.d.ts +24 -0
  532. package/dist/locale-data/core/date.js +68 -0
  533. package/dist/locale-data/core/decimal.d.ts +19 -0
  534. package/dist/locale-data/core/decimal.js +79 -0
  535. package/dist/locale-data/core/holidays.d.ts +30 -0
  536. package/dist/locale-data/core/holidays.js +79 -0
  537. package/dist/locale-data/core/iban.d.ts +29 -0
  538. package/dist/locale-data/core/iban.js +74 -0
  539. package/dist/locale-data/core/index.d.ts +7 -0
  540. package/dist/locale-data/core/index.js +6 -0
  541. package/dist/locale-data/core/types.d.ts +173 -0
  542. package/dist/locale-data/core/types.js +6 -0
  543. package/dist/locale-data/core/week-info.d.ts +23 -0
  544. package/dist/locale-data/core/week-info.js +85 -0
  545. package/dist/locale-data/core/working-days.d.ts +27 -0
  546. package/dist/locale-data/core/working-days.js +133 -0
  547. package/dist/locale-data/index.d.ts +2 -0
  548. package/dist/locale-data/index.js +4 -0
  549. package/dist/locale-data/tr/address-tr.json +1 -0
  550. package/dist/locale-data/tr/address.d.ts +23 -0
  551. package/dist/locale-data/tr/address.js +52 -0
  552. package/dist/locale-data/tr/holidays.d.ts +31 -0
  553. package/dist/locale-data/tr/holidays.js +81 -0
  554. package/dist/locale-data/tr/iban.d.ts +21 -0
  555. package/dist/locale-data/tr/iban.js +45 -0
  556. package/dist/locale-data/tr/id.d.ts +36 -0
  557. package/dist/locale-data/tr/id.js +120 -0
  558. package/dist/locale-data/tr/index.d.ts +12 -0
  559. package/dist/locale-data/tr/index.js +33 -0
  560. package/dist/locale-data/tr/kdv.d.ts +91 -0
  561. package/dist/locale-data/tr/kdv.js +222 -0
  562. package/dist/locales/en.d.ts +2102 -0
  563. package/dist/locales/en.js +2088 -0
  564. package/dist/locales/tr.d.ts +2086 -0
  565. package/dist/locales/tr.js +2087 -0
  566. package/dist/media/focal-point.d.ts +42 -0
  567. package/dist/media/focal-point.js +96 -0
  568. package/dist/media/gallery-layout.d.ts +19 -0
  569. package/dist/media/gallery-layout.js +61 -0
  570. package/dist/media/gallery.d.ts +64 -0
  571. package/dist/media/gallery.js +138 -0
  572. package/dist/media/image-cropper.d.ts +86 -0
  573. package/dist/media/image-cropper.js +170 -0
  574. package/dist/media/image-field.d.ts +115 -0
  575. package/dist/media/image-field.js +212 -0
  576. package/dist/media/index.d.ts +19 -0
  577. package/dist/media/index.js +23 -0
  578. package/dist/media/lightbox.d.ts +82 -0
  579. package/dist/media/lightbox.js +171 -0
  580. package/dist/media/link-preview.d.ts +97 -0
  581. package/dist/media/link-preview.js +177 -0
  582. package/dist/media/media-library.d.ts +244 -0
  583. package/dist/media/media-library.js +776 -0
  584. package/dist/media/media-picker.d.ts +96 -0
  585. package/dist/media/media-picker.js +209 -0
  586. package/dist/media/media-provider.d.ts +23 -0
  587. package/dist/media/media-provider.js +44 -0
  588. package/dist/media/media-utils.d.ts +39 -0
  589. package/dist/media/media-utils.js +145 -0
  590. package/dist/media/memory-adapter.d.ts +22 -0
  591. package/dist/media/memory-adapter.js +162 -0
  592. package/dist/media/rest-adapter.d.ts +90 -0
  593. package/dist/media/rest-adapter.js +208 -0
  594. package/dist/media/serp.d.ts +62 -0
  595. package/dist/media/serp.js +108 -0
  596. package/dist/media/test-fixtures.d.ts +3 -0
  597. package/dist/media/test-fixtures.js +37 -0
  598. package/dist/media/types.d.ts +183 -0
  599. package/dist/media/types.js +3 -0
  600. package/dist/media/use-pan-zoom.d.ts +51 -0
  601. package/dist/media/use-pan-zoom.js +156 -0
  602. package/dist/media/use-upload-queue.d.ts +64 -0
  603. package/dist/media/use-upload-queue.js +115 -0
  604. package/dist/media/video-player.d.ts +135 -0
  605. package/dist/media/video-player.js +319 -0
  606. package/dist/next/index.d.ts +42 -0
  607. package/dist/next/index.js +36 -0
  608. package/dist/render/block-renderer.d.ts +56 -0
  609. package/dist/render/block-renderer.js +137 -0
  610. package/dist/render/index.d.ts +6 -0
  611. package/dist/render/index.js +7 -0
  612. package/dist/render/prepare.d.ts +61 -0
  613. package/dist/render/prepare.js +119 -0
  614. package/dist/scheduler/core/duration.d.ts +83 -0
  615. package/dist/scheduler/core/duration.js +174 -0
  616. package/dist/scheduler/core/gantt.d.ts +63 -0
  617. package/dist/scheduler/core/gantt.js +226 -0
  618. package/dist/scheduler/core/index.d.ts +6 -0
  619. package/dist/scheduler/core/index.js +7 -0
  620. package/dist/scheduler/core/layout.d.ts +97 -0
  621. package/dist/scheduler/core/layout.js +249 -0
  622. package/dist/scheduler/core/time-scale.d.ts +89 -0
  623. package/dist/scheduler/core/time-scale.js +173 -0
  624. package/dist/scheduler/gantt.d.ts +125 -0
  625. package/dist/scheduler/gantt.js +532 -0
  626. package/dist/scheduler/index.d.ts +6 -0
  627. package/dist/scheduler/index.js +7 -0
  628. package/dist/scheduler/resource-calendar.d.ts +218 -0
  629. package/dist/scheduler/resource-calendar.js +661 -0
  630. package/dist/scheduler/scheduler.d.ts +168 -0
  631. package/dist/scheduler/scheduler.js +768 -0
  632. package/dist/scheduler/shared.d.ts +63 -0
  633. package/dist/scheduler/shared.js +145 -0
  634. package/dist/scheduler/time-tracker.d.ts +138 -0
  635. package/dist/scheduler/time-tracker.js +403 -0
  636. package/dist/sortable/core.d.ts +67 -0
  637. package/dist/sortable/core.js +167 -0
  638. package/dist/sortable/index.d.ts +8 -0
  639. package/dist/sortable/index.js +10 -0
  640. package/dist/sortable/kanban-core.d.ts +70 -0
  641. package/dist/sortable/kanban-core.js +67 -0
  642. package/dist/sortable/kanban.d.ts +147 -0
  643. package/dist/sortable/kanban.js +472 -0
  644. package/dist/sortable/sortable-list.d.ts +71 -0
  645. package/dist/sortable/sortable-list.js +76 -0
  646. package/dist/sortable/sortable-tree.d.ts +101 -0
  647. package/dist/sortable/sortable-tree.js +450 -0
  648. package/dist/sortable/sortable.d.ts +188 -0
  649. package/dist/sortable/sortable.js +485 -0
  650. package/dist/sortable/use-pointer-drag.d.ts +75 -0
  651. package/dist/sortable/use-pointer-drag.js +173 -0
  652. package/dist/sortable/use-time-scale.d.ts +11 -0
  653. package/dist/sortable/use-time-scale.js +19 -0
  654. package/dist/styles/base.css +51 -0
  655. package/dist/styles/blocks.css +949 -0
  656. package/dist/styles/calendar.css +642 -0
  657. package/dist/styles/charts.css +264 -0
  658. package/dist/styles/data.css +474 -0
  659. package/dist/styles/editors.css +1022 -0
  660. package/dist/styles/forms.css +406 -0
  661. package/dist/styles/media.css +515 -0
  662. package/dist/styles/navigation.css +293 -0
  663. package/dist/styles/overlays.css +244 -0
  664. package/dist/styles.css +742 -0
  665. package/package.json +156 -4
@@ -0,0 +1,233 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Collapsible } from "radix-ui";
5
+ import { ArrowLeft, ChevronDown, ChevronLeft, ChevronRight, LockKeyhole, SearchX } from "lucide-react";
6
+ import { cn } from "../lib/cn.js";
7
+ import { useLabels } from "../lib/labels.js";
8
+ import { useFormat } from "../lib/locale.js";
9
+ import { SmartLink, useNavigation } from "../lib/provider.js";
10
+ import { useHotkeys } from "../lib/use-hotkeys.js";
11
+ import { useContainerWidth } from "../lib/use-container-width.js";
12
+ import { useControllableState } from "../lib/use-controllable-state.js";
13
+ import { useComposedRefs } from "../lib/compose-refs.js";
14
+ import { useEdgeFade } from "../lib/use-edge-fade.js";
15
+ import { Button } from "./button.js";
16
+ import { EmptyStateDescription, EmptyStateIcon, emptyStateVariants } from "./empty-state.js";
17
+ import { Skeleton, SkeletonAvatar, SkeletonText } from "./skeleton.js";
18
+ import { Spinner } from "./spinner.js";
19
+ /* ------------------------------------------------------------------ */
20
+ /* Labels & context */
21
+ /* ------------------------------------------------------------------ */
22
+ const recordLabels = {
23
+ pager: "{index} of {total}",
24
+ pagerLabel: "Record navigation",
25
+ previous: "Previous record",
26
+ next: "Next record",
27
+ details: "Details",
28
+ facts: "Key facts",
29
+ saving: "Saving…",
30
+ notFound: "Record not found",
31
+ notFoundDescription: "It may have been deleted, merged into another record, or the link is out of date.",
32
+ forbidden: "You don't have access to this record",
33
+ forbiddenDescription: "Ask an admin of this workspace to share it with you.",
34
+ loading: "Loading record",
35
+ resizeAside: "Resize side column",
36
+ };
37
+ /** Below this container width (42rem) the side column moves under the header as collapsed sections. Matches navigation.css. */
38
+ const NARROW = 672;
39
+ const RecordLayoutContext = React.createContext({
40
+ narrow: false,
41
+ readOnly: false,
42
+ asidePosition: "end",
43
+ resizable: false,
44
+ asideWidth: 320,
45
+ minAsideWidth: 260,
46
+ maxAsideWidth: 520,
47
+ defaultAsideWidth: 320,
48
+ setAsideWidth: () => { },
49
+ });
50
+ /**
51
+ * The drag edge of a side column (WAI-ARIA window splitter: focusable `separator` with
52
+ * `aria-valuenow`; arrows resize, Shift+arrows in bigger steps, Home/End jump to min/max,
53
+ * double-click resets). Logical: works in RTL.
54
+ */
55
+ export const SidePaneHandle = React.forwardRef(function SidePaneHandle({ value, min = 240, max = 560, defaultValue, onValueChange, edge = "start", step = 16, className, onKeyDown, onDoubleClick, ...props }, ref) {
56
+ const innerRef = React.useRef(null);
57
+ const composed = useComposedRefs(ref, innerRef);
58
+ const [dragging, setDragging] = React.useState(false);
59
+ const clamp = (w) => Math.round(Math.min(max, Math.max(min, w)));
60
+ const dir = () => (innerRef.current && getComputedStyle(innerRef.current).direction === "rtl" ? -1 : 1);
61
+ // dx is a visual (screen) movement of the handle; turn it into a width change.
62
+ const grow = (dx) => (edge === "start" ? -dx : dx) * dir();
63
+ return (_jsx("div", { ref: composed, role: "separator", "aria-orientation": "vertical", "aria-valuenow": value, "aria-valuemin": min, "aria-valuemax": max, tabIndex: 0, "data-slot": "side-pane-handle", "data-dragging": dragging ? "" : undefined, className: cn("vui-pane-handle group/pane absolute inset-y-0 z-[1] w-2 cursor-col-resize touch-none outline-none", edge === "start" ? "-start-[calc(var(--gap)/2+4px)]" : "-end-[calc(var(--gap)/2+4px)]", className), onPointerDown: (e) => {
64
+ if (e.button !== 0)
65
+ return;
66
+ e.preventDefault();
67
+ const el = e.currentTarget;
68
+ el.setPointerCapture?.(e.pointerId);
69
+ const startX = e.clientX;
70
+ const startW = value;
71
+ setDragging(true);
72
+ const move = (ev) => onValueChange(clamp(startW + grow(ev.clientX - startX)));
73
+ const up = () => {
74
+ setDragging(false);
75
+ el.removeEventListener("pointermove", move);
76
+ el.removeEventListener("pointerup", up);
77
+ el.removeEventListener("pointercancel", up);
78
+ };
79
+ el.addEventListener("pointermove", move);
80
+ el.addEventListener("pointerup", up);
81
+ el.addEventListener("pointercancel", up);
82
+ }, onKeyDown: (e) => {
83
+ onKeyDown?.(e);
84
+ if (e.defaultPrevented)
85
+ return;
86
+ const s = e.shiftKey ? step * 4 : step;
87
+ let next = null;
88
+ if (e.key === "ArrowLeft")
89
+ next = value + grow(-s);
90
+ else if (e.key === "ArrowRight")
91
+ next = value + grow(s);
92
+ else if (e.key === "Home")
93
+ next = min;
94
+ else if (e.key === "End")
95
+ next = max;
96
+ else if (e.key === "Enter" && defaultValue !== undefined)
97
+ next = defaultValue;
98
+ if (next === null)
99
+ return;
100
+ e.preventDefault();
101
+ onValueChange(clamp(next));
102
+ }, onDoubleClick: (e) => {
103
+ onDoubleClick?.(e);
104
+ if (defaultValue !== undefined)
105
+ onValueChange(clamp(defaultValue));
106
+ }, ...props, children: _jsx("span", { "aria-hidden": true, className: cn("pointer-events-none absolute inset-y-2 start-1/2 w-px -translate-x-1/2 rounded-full bg-transparent transition-[background-color,width] duration-150 rtl:translate-x-1/2", "group-hover/pane:bg-field-border-hover group-focus-visible/pane:w-0.5 group-focus-visible/pane:bg-ring group-data-dragging/pane:w-0.5 group-data-dragging/pane:bg-accent-ink") }) }));
107
+ });
108
+ /**
109
+ * The "show one record" page: record header (media, title, status, key facts, actions, pager),
110
+ * a main column (tabs, overview, activity, related lists) and a side column of details.
111
+ * Below 42rem (672px) of its own width the side column moves under the header and its
112
+ * sections fold, and the key facts become a horizontal strip. It measures itself, not the
113
+ * viewport, so it works the same beside an App shell sidebar or in a split view.
114
+ *
115
+ * ```tsx
116
+ * <RecordLayout>
117
+ * <RecordHeader media={<Avatar name="Jane Doe" size="xl" />} title="Jane Doe" subtitle="Head of Ops · Acme"
118
+ * status={<Badge tone="success">Customer</Badge>} facts={[{ label: "Owner", value: "Meltem Aydın" }]}
119
+ * pager={<RecordPager index={3} total={128} prevHref="/contacts/41" nextHref="/contacts/43" />} />
120
+ * <RecordMain>{tabs}</RecordMain>
121
+ * <RecordAside><RecordAsideSection title="Details"><DescriptionList … /></RecordAsideSection></RecordAside>
122
+ * </RecordLayout>
123
+ * ```
124
+ */
125
+ export const RecordLayout = React.forwardRef(function RecordLayout({ asidePosition = "end", asideWidth: asideWidthProp, defaultAsideWidth = 320, onAsideWidthChange, resizable = false, minAsideWidth = 260, maxAsideWidth = 520, state = "ready", notFound, forbidden, readOnly = false, labels, className, style, children, ...props }, ref) {
126
+ const t = useLabels("record", recordLabels, labels);
127
+ const { ref: measureRef, width } = useContainerWidth();
128
+ const composed = useComposedRefs(ref, measureRef);
129
+ const [asideWidth, setAsideWidth] = useControllableState({ value: asideWidthProp, defaultValue: defaultAsideWidth, onChange: onAsideWidthChange, name: "RecordLayout" });
130
+ const narrow = width !== undefined && width < NARROW;
131
+ const ctx = React.useMemo(() => ({ narrow, readOnly, asidePosition, resizable, asideWidth, minAsideWidth, maxAsideWidth, defaultAsideWidth, setAsideWidth, labels }), [narrow, readOnly, asidePosition, resizable, asideWidth, minAsideWidth, maxAsideWidth, defaultAsideWidth, setAsideWidth, labels]);
132
+ let content = children;
133
+ if (state === "loading")
134
+ content = _jsx(RecordLayoutSkeleton, { label: t("loading") });
135
+ else if (state === "not-found")
136
+ content = notFound ?? _jsx(RecordStatePage, { kind: "not-found", title: t("notFound"), description: t("notFoundDescription") });
137
+ else if (state === "forbidden")
138
+ content = forbidden ?? _jsx(RecordStatePage, { kind: "forbidden", title: t("forbidden"), description: t("forbiddenDescription") });
139
+ return (_jsx(RecordLayoutContext.Provider, { value: ctx, children: _jsx("div", { ref: composed, "data-slot": "record-layout", "data-state": state, "data-narrow": narrow ? "" : undefined, className: cn("@container/record w-full min-w-0", className), style: { "--record-aside-w": `${asideWidth}px`, ...style }, ...props, children: _jsx("div", { className: "vui-record-grid", "data-aside": asidePosition, children: content }) }) }));
140
+ });
141
+ /** Full-page state with the page's one h1 (EmptyState titles stop at h2). */
142
+ function RecordStatePage({ kind, title, description }) {
143
+ const Icon = kind === "forbidden" ? LockKeyhole : SearchX;
144
+ return (_jsxs("div", { "data-slot": "record-state", "data-kind": kind, className: cn(emptyStateVariants({ size: "lg" }), "[grid-column:1/-1]"), children: [_jsx(EmptyStateIcon, { className: "surface-2 mb-2 text-fg-muted", children: _jsx(Icon, { "aria-hidden": true }) }), _jsx("h1", { className: "font-display max-w-[36ch] text-balance text-[1.75rem] leading-tight text-fg", children: title }), _jsx(EmptyStateDescription, { size: "lg", children: description })] }));
145
+ }
146
+ function RecordLayoutSkeleton({ label }) {
147
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { role: "status", "aria-label": label, "aria-busy": "true", className: "flex items-center gap-4 [grid-area:header]", children: [_jsx(SkeletonAvatar, { size: "xl" }), _jsxs("div", { className: "grid flex-1 gap-2", children: [_jsx(Skeleton, { className: "h-6 w-56 rounded-ui-sm" }), _jsx(Skeleton, { className: "h-4 w-40 rounded-ui-sm" })] })] }), _jsxs("div", { className: "grid gap-(--gap) [grid-area:main]", children: [_jsx("div", { className: "surface rounded-ui-lg p-(--gap)", children: _jsx(SkeletonText, { lines: 4 }) }), _jsx("div", { className: "surface rounded-ui-lg p-(--gap)", children: _jsx(SkeletonText, { lines: 3 }) })] }), _jsx("div", { className: "grid gap-3 [grid-area:aside]", children: _jsx("div", { className: "surface-2 rounded-ui-lg p-4", children: _jsx(SkeletonText, { lines: 5 }) }) })] }));
148
+ }
149
+ /** The record's header: back link + pager, media, h1, status, subtitle, actions and key facts. */
150
+ export const RecordHeader = React.forwardRef(function RecordHeader({ media, title, subtitle, status, facts, actions, back, pager, saving, size = "md", loading, labels, className, children, ...props }, ref) {
151
+ const ctx = React.useContext(RecordLayoutContext);
152
+ const t = useLabels("record", recordLabels, labels ?? ctx.labels);
153
+ const showActions = actions && !ctx.readOnly;
154
+ const factsRef = React.useRef(null);
155
+ useEdgeFade(factsRef, "x", Boolean(facts?.length));
156
+ return (_jsxs("header", { ref: ref, "data-slot": "record-header", "data-size": size, className: cn("flex min-w-0 flex-col gap-4 [grid-area:header]", className), ...props, children: [back || pager ? (_jsxs("div", { className: "flex min-h-8 items-center justify-between gap-3", children: [back ? (_jsxs(SmartLink, { href: back.href, className: "-ms-0.5 inline-flex w-fit items-center gap-1.5 rounded-ui-sm text-[13px] text-fg-muted transition-colors hover:text-fg focus-ring", children: [_jsx(ArrowLeft, { "aria-hidden": true, className: "size-3.5 rtl:-scale-x-100" }), back.label] })) : (_jsx("span", {})), pager] })) : null, _jsxs("div", { className: "flex flex-wrap items-start gap-x-5 gap-y-4", children: [media ? _jsx("div", { "data-slot": "record-header-media", className: "shrink-0", children: media }) : null, _jsxs("div", { className: "min-w-0 flex-[1_1_16rem] self-center", children: [_jsxs("div", { className: "flex flex-wrap items-center gap-x-3 gap-y-1.5", children: [_jsx("h1", { "aria-busy": loading || undefined, className: cn("font-display min-w-0 text-fg [text-wrap:balance]", size === "md" ? "text-[length:calc(28px*var(--display-scale))] leading-[1.1]" : "text-[length:calc(20px*var(--display-scale))] leading-[1.15]"), children: loading ? _jsx(Skeleton, { className: "inline-block h-[0.8em] w-[min(16rem,55vw)] rounded-ui-sm align-middle" }) : title }), status && !loading ? _jsx("span", { className: "inline-flex items-center gap-2", children: status }) : null, saving ? (_jsxs("span", { role: "status", className: "inline-flex items-center gap-1.5 text-[13px] text-fg-subtle", children: [_jsx(Spinner, { size: "xs" }), " ", t("saving")] })) : null] }), loading ? (_jsx(Skeleton, { className: "mt-2 h-4 w-48 rounded-ui-sm" })) : subtitle ? (_jsx("p", { className: "mt-1 text-[14px] text-fg-muted", children: subtitle })) : null] }), showActions ? _jsx("div", { "data-slot": "record-header-actions", className: "flex flex-wrap items-center gap-2 self-center", children: actions }) : null] }), facts?.length ? (_jsx("div", { ref: factsRef, role: "group", "aria-label": t("facts"), tabIndex: 0, "data-slot": "record-facts", "data-edge-fade": "x", className: "-mx-1 overflow-x-auto scrollbar-none rounded-ui-sm px-1 focus-ring @2xl/record:overflow-visible", children: _jsx("dl", { className: "flex w-max min-w-full items-stretch @2xl/record:w-auto @2xl/record:flex-wrap @2xl/record:gap-y-3", children: facts.map((f, i) => (_jsxs("div", { className: "flex min-w-0 shrink-0 flex-col gap-1 border-s border-line px-5 first:border-s-0 first:ps-0", children: [_jsx("dt", { className: "text-[12px] text-fg-subtle", children: f.label }), _jsx("dd", { className: "tabular text-[14px] font-medium text-fg", children: f.value })] }, i))) }) })) : null, children] }));
157
+ });
158
+ /** "3 of 128" with previous/next buttons and `j` / `k` shortcuts. */
159
+ export const RecordPager = React.forwardRef(function RecordPager({ index, total, prevHref, nextHref, onPrevious, onNext, shortcuts = true, labels, className, ...props }, ref) {
160
+ const ctx = React.useContext(RecordLayoutContext);
161
+ const t = useLabels("record", recordLabels, labels ?? ctx.labels);
162
+ const f = useFormat();
163
+ const { navigate } = useNavigation();
164
+ const hasPrev = index > 1 && Boolean(prevHref || onPrevious);
165
+ const hasNext = index < total && Boolean(nextHref || onNext);
166
+ const go = (which) => {
167
+ const href = which === "prev" ? prevHref : nextHref;
168
+ const cb = which === "prev" ? onPrevious : onNext;
169
+ if (cb)
170
+ cb();
171
+ if (href)
172
+ navigate(href);
173
+ };
174
+ useHotkeys("k", () => go("prev"), { enabled: shortcuts && hasPrev });
175
+ useHotkeys("j", () => go("next"), { enabled: shortcuts && hasNext });
176
+ const step = (which) => {
177
+ const enabled = which === "prev" ? hasPrev : hasNext;
178
+ const href = which === "prev" ? prevHref : nextHref;
179
+ const cb = which === "prev" ? onPrevious : onNext;
180
+ const label = which === "prev" ? t("previous") : t("next");
181
+ const Icon = which === "prev" ? ChevronLeft : ChevronRight;
182
+ const common = {
183
+ "aria-label": label,
184
+ title: shortcuts ? `${label} (${which === "prev" ? "K" : "J"})` : label,
185
+ "aria-keyshortcuts": shortcuts ? (which === "prev" ? "k" : "j") : undefined,
186
+ variant: "ghost",
187
+ size: "icon-sm",
188
+ };
189
+ if (href && enabled && !cb) {
190
+ return (_jsx(Button, { asChild: true, ...common, children: _jsx(SmartLink, { href: href, children: _jsx(Icon, { "aria-hidden": true, className: "rtl:-scale-x-100" }) }) }));
191
+ }
192
+ return (_jsx(Button, { ...common, disabled: !enabled, onClick: () => go(which), children: _jsx(Icon, { "aria-hidden": true, className: "rtl:-scale-x-100" }) }));
193
+ };
194
+ return (_jsxs("nav", { ref: ref, "aria-label": t("pagerLabel"), "data-slot": "record-pager", className: cn("inline-flex items-center gap-1", className), ...props, children: [_jsx("span", { className: "tabular me-1 text-[13px] text-fg-muted", children: t("pager", { index: f.number(index), total: f.number(total) }) }), _jsxs("span", { className: "inline-flex items-center rounded-ui-sm border border-line", children: [step("prev"), _jsx("span", { "aria-hidden": true, className: "h-4 w-px bg-line" }), step("next")] })] }));
195
+ });
196
+ /** The main column: tabs, overview, activity, related lists. */
197
+ export const RecordMain = React.forwardRef(function RecordMain({ tabs, className, children, ...props }, ref) {
198
+ return (_jsxs("div", { ref: ref, "data-slot": "record-main", className: cn("flex min-w-0 flex-col gap-(--gap) [grid-area:main]", className), ...props, children: [tabs ? _jsx("div", { "data-slot": "record-main-tabs", className: "-mb-1", children: tabs }) : null, children] }));
199
+ });
200
+ /** A titled card in the main column: overview, activity, related deals. `<section aria-labelledby>`. */
201
+ export const RecordSection = React.forwardRef(function RecordSection({ title, description, action, padding = "md", className, children, id, ...props }, ref) {
202
+ const autoId = React.useId();
203
+ const titleId = `${id ?? `record-section${autoId.replace(/:/g, "")}`}-title`;
204
+ return (_jsxs("section", { ref: ref, id: id, "aria-labelledby": titleId, "data-slot": "record-section", className: cn("surface overflow-hidden rounded-ui-lg", className), ...props, children: [_jsxs("div", { className: "flex items-start justify-between gap-3 px-(--gap) pt-[calc(var(--gap)*0.8)]", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h2", { id: titleId, className: "text-[15px] font-semibold text-fg", children: title }), description ? _jsx("p", { className: "mt-0.5 text-[13px] text-fg-muted", children: description }) : null] }), action ? _jsx("div", { className: "-me-1 -mt-1 flex shrink-0 items-center gap-1.5", children: action }) : null] }), _jsx("div", { className: cn(padding === "md" ? "p-(--gap) pt-3" : "pt-3"), children: children })] }));
205
+ });
206
+ /** The side column (`<aside>`): description lists, owners, tags, related records. */
207
+ export const RecordAside = React.forwardRef(function RecordAside({ className, children, labels, ...props }, ref) {
208
+ const ctx = React.useContext(RecordLayoutContext);
209
+ const t = useLabels("record", recordLabels, labels ?? ctx.labels);
210
+ return (_jsxs("aside", { ref: ref, "aria-label": props["aria-label"] ?? t("details"), "data-slot": "record-aside", className: cn("relative flex min-w-0 flex-col gap-3 [grid-area:aside]", className), ...props, children: [ctx.resizable && !ctx.narrow ? (_jsx(SidePaneHandle, { "aria-label": t("resizeAside"), edge: ctx.asidePosition === "end" ? "start" : "end", value: ctx.asideWidth, min: ctx.minAsideWidth, max: ctx.maxAsideWidth, defaultValue: ctx.defaultAsideWidth, onValueChange: ctx.setAsideWidth })) : null, children] }));
211
+ });
212
+ /** A titled block in the side column; folds like an accordion item when space is short. */
213
+ export const RecordAsideSection = React.forwardRef(function RecordAsideSection({ title, action, collapsible = false, defaultOpen = true, open: openProp, onOpenChange, headingLevel = 2, className, children, ...props }, ref) {
214
+ const { narrow } = React.useContext(RecordLayoutContext);
215
+ const foldable = collapsible || narrow;
216
+ const touched = React.useRef(false);
217
+ const [open, setOpen] = useControllableState({ value: openProp, defaultValue: defaultOpen, onChange: onOpenChange, name: "RecordAsideSection" });
218
+ // Fold when the layout turns narrow, unfold when it widens again — until the user decides.
219
+ React.useEffect(() => {
220
+ if (touched.current || openProp !== undefined)
221
+ return;
222
+ setOpen(narrow ? false : defaultOpen);
223
+ // eslint-disable-next-line react-hooks/exhaustive-deps
224
+ }, [narrow]);
225
+ const autoId = React.useId();
226
+ const titleId = `record-aside${autoId.replace(/:/g, "")}`;
227
+ const H = `h${headingLevel}`;
228
+ const isOpen = foldable ? open : true;
229
+ return (_jsx(Collapsible.Root, { open: isOpen, onOpenChange: (v) => {
230
+ touched.current = true;
231
+ setOpen(v);
232
+ }, asChild: true, children: _jsxs("section", { ref: ref, "aria-labelledby": titleId, "data-slot": "record-aside-section", "data-state": isOpen ? "open" : "closed", className: cn("surface-2 rounded-ui-lg", className), ...props, children: [_jsxs("div", { className: "flex min-h-11 items-center gap-2 ps-4 pe-2", children: [_jsx(H, { id: titleId, className: "min-w-0 flex-1 text-[13px] font-semibold text-fg", children: foldable ? (_jsxs(Collapsible.Trigger, { className: "group/aside -ms-1.5 flex w-[calc(100%+0.375rem)] items-center gap-1.5 rounded-ui-sm px-1.5 py-1 text-start outline-none focus-ring", children: [_jsx(ChevronDown, { "aria-hidden": true, className: "size-3.5 shrink-0 text-fg-subtle transition-transform duration-200 group-data-[state=closed]/aside:-rotate-90 motion-reduce:transition-none rtl:group-data-[state=closed]/aside:rotate-90" }), _jsx("span", { className: "truncate", children: title })] })) : (_jsx("span", { className: "block truncate py-1", children: title })) }), action ? _jsx("div", { className: "flex shrink-0 items-center gap-1", children: action }) : null] }), _jsx(Collapsible.Content, { className: "ui-collapse", children: _jsx("div", { className: "px-4 pb-4", children: children }) })] }) }));
233
+ });
@@ -0,0 +1,199 @@
1
+ import * as React from "react";
2
+ /**
3
+ * How a picker reads a collection. The kit knows nothing about your API: wrap your fetch
4
+ * (REST, tRPC, a server action, `queryClient.fetchQuery`) in `search` and `getByIds`.
5
+ */
6
+ export interface RecordSource<R> {
7
+ /** Cache key for the collection ("contacts", "companies"). Records are cached per key for the session. */
8
+ key: string;
9
+ /** Server search. Fold case and accents server-side too (Postgres `unaccent(lower(...))`). */
10
+ search: (query: string, ctx: {
11
+ signal: AbortSignal;
12
+ cursor?: string;
13
+ locale: string;
14
+ }) => Promise<{
15
+ items: R[];
16
+ nextCursor?: string;
17
+ }>;
18
+ /** Resolve labels for ids you already have (initial values, a record loaded without its relations). */
19
+ getByIds?: (ids: string[], signal: AbortSignal) => Promise<R[]>;
20
+ getId: (r: R) => string;
21
+ getLabel: (r: R) => string;
22
+ getDescription?: (r: R) => string | undefined;
23
+ getAvatar?: (r: R) => {
24
+ src?: string | null;
25
+ name: string;
26
+ shape?: "circle" | "square";
27
+ } | undefined;
28
+ /** Link to the record: chips and cards become links. */
29
+ href?: (r: R) => string | undefined;
30
+ }
31
+ export interface ArrayRecordSourceOptions<R> extends Omit<RecordSource<R>, "key" | "search" | "getByIds"> {
32
+ /** Extra searchable text (email, SKU, city). */
33
+ getKeywords?: (r: R) => string[];
34
+ /** Page size. Default 50. */
35
+ pageSize?: number;
36
+ /** Fake latency in ms (docs, prototypes). Default 0. */
37
+ delay?: number;
38
+ }
39
+ /**
40
+ * A `RecordSource` over an in-memory array, searched with locale folding (İ/ı, accents).
41
+ * Good for small sets, tests and prototypes; switch to a server `search` later without
42
+ * touching the picker.
43
+ */
44
+ export declare function arrayRecordSource<R>(key: string, items: R[], options: ArrayRecordSourceOptions<R>): RecordSource<R>;
45
+ /** Clears the picker's session caches (after a logout, or in tests). Pass a key to clear one collection. */
46
+ export declare function clearRecordPickerCache(key?: string): void;
47
+ declare const recordPickerLabels: {
48
+ placeholder: string;
49
+ placeholderMultiple: string;
50
+ search: string;
51
+ searching: string;
52
+ empty: string;
53
+ noResultsFor: string;
54
+ create: string;
55
+ creating: string;
56
+ browse: string;
57
+ recent: string;
58
+ results: string;
59
+ loadMore: string;
60
+ unknown: string;
61
+ max: string;
62
+ error: string;
63
+ retry: string;
64
+ clear: string;
65
+ add: string;
66
+ change: string;
67
+ open: string;
68
+ remove: string;
69
+ browseTitle: string;
70
+ selectCount: string;
71
+ cancel: string;
72
+ resolving: string;
73
+ selectedCount: string;
74
+ };
75
+ export type RecordPickerLabels = typeof recordPickerLabels;
76
+ /** A pinned row at the top of the list ("Assign to me", "Create from template…"). */
77
+ export interface RecordPickerAction<R> {
78
+ id: string;
79
+ label: React.ReactNode;
80
+ /** Plain text for the accessible name when `label` isn't a string. */
81
+ textValue?: string;
82
+ icon?: React.ReactNode;
83
+ /** Hide while searching. Default `true`. */
84
+ hideWhileSearching?: boolean;
85
+ onSelect: (api: {
86
+ select: (r: R) => void;
87
+ close: () => void;
88
+ query: string;
89
+ }) => void;
90
+ }
91
+ /** What `renderTrigger` receives. */
92
+ export interface RecordPickerTriggerContext<R> {
93
+ selected: R[];
94
+ /** Selected ids whose records couldn't be found. */
95
+ unknownIds: string[];
96
+ open: boolean;
97
+ disabled: boolean;
98
+ placeholder: string;
99
+ getLabel: (r: R) => string;
100
+ }
101
+ export interface RecordPickerRenderState {
102
+ selected: boolean;
103
+ disabled: boolean;
104
+ query: string;
105
+ }
106
+ interface RecordPickerBaseProps<R> {
107
+ source: RecordSource<R>;
108
+ /** Custom option row. Default: avatar, label (matches in bold) and description. */
109
+ renderItem?: (r: R, state: RecordPickerRenderState) => React.ReactNode;
110
+ /** Records that can't be picked (archived, no permission). Already-selected ones still show. */
111
+ getDisabled?: (r: R) => boolean;
112
+ /** Group results under headings ("Customers", "Suppliers"). */
113
+ getGroup?: (r: R) => string | undefined;
114
+ /** Inline create: return the new record (it is selected). Shown as "Create “query”". */
115
+ onCreate?: (query: string) => R | Promise<R>;
116
+ /** `true` → the built-in browse dialog (search + list + load more). A function renders your own (a Data Table with filters). */
117
+ browse?: boolean | ((props: {
118
+ onPick: (records: R[]) => void;
119
+ selectedIds: string[];
120
+ multiple: boolean;
121
+ close: () => void;
122
+ }) => React.ReactNode);
123
+ /** Shown above results when the query is empty. Default: the last 5 records picked from this source in the session. `false` hides. */
124
+ recent?: R[] | false;
125
+ /** Pinned rows on top of the list. */
126
+ actions?: RecordPickerAction<R>[];
127
+ /** Replace what a pick adds (a team → its members). */
128
+ resolveSelection?: (r: R) => R | R[] | Promise<R | R[]>;
129
+ /** Records for the initial value, so labels show without a round trip. */
130
+ selectedRecords?: R[];
131
+ /** Selected records as chips (default) or cards (record detail pages). */
132
+ display?: "chip" | "card";
133
+ /** `"inline"` renders the search list without a trigger (side panels). */
134
+ mode?: "popover" | "inline";
135
+ size?: "sm" | "md" | "lg";
136
+ placeholder?: string;
137
+ searchPlaceholder?: string;
138
+ /** Hidden input name(s) for native form posts (multi → repeated inputs). */
139
+ name?: string;
140
+ disabled?: boolean;
141
+ /** Chips become plain links; nothing can change. */
142
+ readOnly?: boolean;
143
+ invalid?: boolean;
144
+ required?: boolean;
145
+ /** Single: show the × clear button. Default `true` (unless `required`). */
146
+ clearable?: boolean;
147
+ /** Full control over the trigger (avatar stacks, a button in a table cell). Must forward ref and props. */
148
+ renderTrigger?: (ctx: RecordPickerTriggerContext<R>) => React.ReactElement;
149
+ /** Extra content above the search box (tabs, filters). */
150
+ header?: React.ReactNode;
151
+ open?: boolean;
152
+ defaultOpen?: boolean;
153
+ onOpenChange?: (open: boolean) => void;
154
+ labels?: Partial<RecordPickerLabels>;
155
+ id?: string;
156
+ className?: string;
157
+ /** Class of the popover panel. */
158
+ contentClassName?: string;
159
+ "aria-label"?: string;
160
+ "aria-labelledby"?: string;
161
+ "aria-describedby"?: string;
162
+ "aria-invalid"?: boolean | "true" | "false";
163
+ }
164
+ export interface RecordPickerSingleProps<R> extends RecordPickerBaseProps<R> {
165
+ multiple?: false;
166
+ value?: string | null;
167
+ defaultValue?: string | null;
168
+ onValueChange?: (id: string | null, record: R | null) => void;
169
+ max?: never;
170
+ }
171
+ export interface RecordPickerMultipleProps<R> extends RecordPickerBaseProps<R> {
172
+ multiple: true;
173
+ value?: string[];
174
+ defaultValue?: string[];
175
+ onValueChange?: (ids: string[], records: R[]) => void;
176
+ /** Most records that can be picked. */
177
+ max?: number;
178
+ }
179
+ export type RecordPickerProps<R> = RecordPickerSingleProps<R> | RecordPickerMultipleProps<R>;
180
+ /**
181
+ * Link one or many related records from any collection: a contact to a company, a post to its
182
+ * author, an order to a customer, a task to a project. Async search with debounce, abort and
183
+ * paging; recent picks; inline create; a browse dialog for big sets; chips or cards; ids → labels
184
+ * resolution with a skeleton and an "Unknown record" state for deleted records.
185
+ *
186
+ * ```tsx
187
+ * const companies: RecordSource<Company> = {
188
+ * key: "companies",
189
+ * search: (q, { signal, cursor }) => api.companies.search({ q, cursor }, { signal }),
190
+ * getByIds: (ids, signal) => api.companies.byIds(ids, { signal }),
191
+ * getId: (c) => c.id, getLabel: (c) => c.name, getDescription: (c) => c.domain,
192
+ * };
193
+ * <Field label="Company"><RecordPicker source={companies} value={companyId} onValueChange={setCompanyId} /></Field>
194
+ * ```
195
+ */
196
+ export declare const RecordPicker: <R>(props: RecordPickerProps<R> & {
197
+ ref?: React.Ref<HTMLDivElement>;
198
+ }) => React.ReactElement;
199
+ export {};