@vamos-ui/react 0.0.0-stage → 0.3.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 (704) 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 +101 -0
  58. package/dist/blocks/site/_kit-1.js +137 -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 +113 -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 +52 -0
  85. package/dist/blocks/site/feature-grid.d.ts +46 -0
  86. package/dist/blocks/site/feature-grid.js +50 -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 +48 -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 +73 -0
  97. package/dist/blocks/site/logo-strip.d.ts +44 -0
  98. package/dist/blocks/site/logo-strip.js +27 -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 +56 -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 +83 -0
  115. package/dist/blocks/site/process.d.ts +36 -0
  116. package/dist/blocks/site/process.js +42 -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 +108 -0
  160. package/dist/blocks/site/site-shell.js +254 -0
  161. package/dist/blocks/site/stats-band.d.ts +42 -0
  162. package/dist/blocks/site/stats-band.js +45 -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 +66 -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 +12 -0
  180. package/dist/business/index.js +22 -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/business/signer-status.d.ts +53 -0
  194. package/dist/business/signer-status.js +76 -0
  195. package/dist/charts/area-chart.d.ts +35 -0
  196. package/dist/charts/area-chart.js +33 -0
  197. package/dist/charts/bar-chart.d.ts +27 -0
  198. package/dist/charts/bar-chart.js +46 -0
  199. package/dist/charts/bar-list.d.ts +47 -0
  200. package/dist/charts/bar-list.js +60 -0
  201. package/dist/charts/chart-shell.d.ts +173 -0
  202. package/dist/charts/chart-shell.js +205 -0
  203. package/dist/charts/chart.d.ts +73 -0
  204. package/dist/charts/chart.js +106 -0
  205. package/dist/charts/combo-chart.d.ts +29 -0
  206. package/dist/charts/combo-chart.js +47 -0
  207. package/dist/charts/donut-chart.d.ts +33 -0
  208. package/dist/charts/donut-chart.js +113 -0
  209. package/dist/charts/funnel.d.ts +51 -0
  210. package/dist/charts/funnel.js +69 -0
  211. package/dist/charts/gauge.d.ts +62 -0
  212. package/dist/charts/gauge.js +104 -0
  213. package/dist/charts/heatmap.d.ts +81 -0
  214. package/dist/charts/heatmap.js +338 -0
  215. package/dist/charts/index.d.ts +12 -0
  216. package/dist/charts/index.js +14 -0
  217. package/dist/charts/line-chart.d.ts +21 -0
  218. package/dist/charts/line-chart.js +36 -0
  219. package/dist/charts/test-utils.d.ts +2 -0
  220. package/dist/charts/test-utils.js +38 -0
  221. package/dist/charts/utils.d.ts +130 -0
  222. package/dist/charts/utils.js +262 -0
  223. package/dist/components/_qr-core.d.ts +26 -0
  224. package/dist/components/_qr-core.js +376 -0
  225. package/dist/components/accordion.d.ts +47 -0
  226. package/dist/components/accordion.js +70 -0
  227. package/dist/components/activity-timeline.d.ts +149 -0
  228. package/dist/components/activity-timeline.js +122 -0
  229. package/dist/components/address-field.d.ts +116 -0
  230. package/dist/components/address-field.js +219 -0
  231. package/dist/components/alert-dialog.d.ts +99 -0
  232. package/dist/components/alert-dialog.js +192 -0
  233. package/dist/components/alert.d.ts +42 -0
  234. package/dist/components/alert.js +82 -0
  235. package/dist/components/app-shell.d.ts +159 -0
  236. package/dist/components/app-shell.js +289 -0
  237. package/dist/components/attachment-list.d.ts +96 -0
  238. package/dist/components/attachment-list.js +196 -0
  239. package/dist/components/audit-log.d.ts +150 -0
  240. package/dist/components/audit-log.js +205 -0
  241. package/dist/components/avatar.d.ts +87 -0
  242. package/dist/components/avatar.js +126 -0
  243. package/dist/components/backup-codes.d.ts +42 -0
  244. package/dist/components/backup-codes.js +67 -0
  245. package/dist/components/badge.d.ts +41 -0
  246. package/dist/components/badge.js +68 -0
  247. package/dist/components/breadcrumb.d.ts +78 -0
  248. package/dist/components/breadcrumb.js +106 -0
  249. package/dist/components/button-group.d.ts +52 -0
  250. package/dist/components/button-group.js +77 -0
  251. package/dist/components/button.d.ts +58 -0
  252. package/dist/components/button.js +107 -0
  253. package/dist/components/calendar.d.ts +240 -0
  254. package/dist/components/calendar.js +483 -0
  255. package/dist/components/card.d.ts +66 -0
  256. package/dist/components/card.js +76 -0
  257. package/dist/components/carousel.d.ts +170 -0
  258. package/dist/components/carousel.js +348 -0
  259. package/dist/components/checkbox.d.ts +78 -0
  260. package/dist/components/checkbox.js +138 -0
  261. package/dist/components/color-picker.d.ts +112 -0
  262. package/dist/components/color-picker.js +235 -0
  263. package/dist/components/combobox.d.ts +136 -0
  264. package/dist/components/combobox.js +294 -0
  265. package/dist/components/command.d.ts +281 -0
  266. package/dist/components/command.js +498 -0
  267. package/dist/components/comment-thread.d.ts +252 -0
  268. package/dist/components/comment-thread.js +449 -0
  269. package/dist/components/context-menu.d.ts +77 -0
  270. package/dist/components/context-menu.js +82 -0
  271. package/dist/components/currency-input.d.ts +43 -0
  272. package/dist/components/currency-input.js +85 -0
  273. package/dist/components/date-picker.d.ts +141 -0
  274. package/dist/components/date-picker.js +241 -0
  275. package/dist/components/date-range-picker.d.ts +91 -0
  276. package/dist/components/date-range-picker.js +251 -0
  277. package/dist/components/description-list.d.ts +92 -0
  278. package/dist/components/description-list.js +42 -0
  279. package/dist/components/dialog.d.ts +139 -0
  280. package/dist/components/dialog.js +185 -0
  281. package/dist/components/dropdown-menu.d.ts +100 -0
  282. package/dist/components/dropdown-menu.js +102 -0
  283. package/dist/components/editor-layout.d.ts +166 -0
  284. package/dist/components/editor-layout.js +237 -0
  285. package/dist/components/empty-state.d.ts +49 -0
  286. package/dist/components/empty-state.js +68 -0
  287. package/dist/components/entity-card.d.ts +83 -0
  288. package/dist/components/entity-card.js +92 -0
  289. package/dist/components/file-upload.d.ts +256 -0
  290. package/dist/components/file-upload.js +490 -0
  291. package/dist/components/formatted-input.d.ts +177 -0
  292. package/dist/components/formatted-input.js +399 -0
  293. package/dist/components/hierarchy-chart.d.ts +190 -0
  294. package/dist/components/hierarchy-chart.js +890 -0
  295. package/dist/components/hover-card.d.ts +21 -0
  296. package/dist/components/hover-card.js +32 -0
  297. package/dist/components/iban-input.d.ts +38 -0
  298. package/dist/components/iban-input.js +112 -0
  299. package/dist/components/id-input.d.ts +65 -0
  300. package/dist/components/id-input.js +130 -0
  301. package/dist/components/image.d.ts +130 -0
  302. package/dist/components/image.js +168 -0
  303. package/dist/components/input-otp.d.ts +62 -0
  304. package/dist/components/input-otp.js +73 -0
  305. package/dist/components/input.d.ts +141 -0
  306. package/dist/components/input.js +187 -0
  307. package/dist/components/item.d.ts +96 -0
  308. package/dist/components/item.js +113 -0
  309. package/dist/components/kbd.d.ts +64 -0
  310. package/dist/components/kbd.js +119 -0
  311. package/dist/components/list-layout.d.ts +144 -0
  312. package/dist/components/list-layout.js +210 -0
  313. package/dist/components/native-select.d.ts +33 -0
  314. package/dist/components/native-select.js +48 -0
  315. package/dist/components/navigation-menu.d.ts +127 -0
  316. package/dist/components/navigation-menu.js +129 -0
  317. package/dist/components/notification-center.d.ts +164 -0
  318. package/dist/components/notification-center.js +399 -0
  319. package/dist/components/page-header.d.ts +60 -0
  320. package/dist/components/page-header.js +60 -0
  321. package/dist/components/pagination.d.ts +121 -0
  322. package/dist/components/pagination.js +174 -0
  323. package/dist/components/phone-input.d.ts +49 -0
  324. package/dist/components/phone-input.js +266 -0
  325. package/dist/components/pin-map.d.ts +58 -0
  326. package/dist/components/pin-map.js +167 -0
  327. package/dist/components/popover.d.ts +38 -0
  328. package/dist/components/popover.js +69 -0
  329. package/dist/components/progress.d.ts +79 -0
  330. package/dist/components/progress.js +97 -0
  331. package/dist/components/qr-code.d.ts +36 -0
  332. package/dist/components/qr-code.js +27 -0
  333. package/dist/components/radio-group.d.ts +43 -0
  334. package/dist/components/radio-group.js +81 -0
  335. package/dist/components/record-detail-layout.d.ts +167 -0
  336. package/dist/components/record-detail-layout.js +233 -0
  337. package/dist/components/record-picker.d.ts +199 -0
  338. package/dist/components/record-picker.js +650 -0
  339. package/dist/components/resizable.d.ts +50 -0
  340. package/dist/components/resizable.js +88 -0
  341. package/dist/components/scroll-area.d.ts +40 -0
  342. package/dist/components/scroll-area.js +56 -0
  343. package/dist/components/select.d.ts +126 -0
  344. package/dist/components/select.js +137 -0
  345. package/dist/components/separator.d.ts +31 -0
  346. package/dist/components/separator.js +41 -0
  347. package/dist/components/settings-layout.d.ts +134 -0
  348. package/dist/components/settings-layout.js +180 -0
  349. package/dist/components/sheet.d.ts +103 -0
  350. package/dist/components/sheet.js +165 -0
  351. package/dist/components/sidebar.d.ts +171 -0
  352. package/dist/components/sidebar.js +421 -0
  353. package/dist/components/signature-pad.d.ts +85 -0
  354. package/dist/components/signature-pad.js +283 -0
  355. package/dist/components/skeleton.d.ts +64 -0
  356. package/dist/components/skeleton.js +53 -0
  357. package/dist/components/sla-timer.d.ts +75 -0
  358. package/dist/components/sla-timer.js +142 -0
  359. package/dist/components/slider.d.ts +57 -0
  360. package/dist/components/slider.js +133 -0
  361. package/dist/components/slug-input.d.ts +69 -0
  362. package/dist/components/slug-input.js +201 -0
  363. package/dist/components/sparkline.d.ts +54 -0
  364. package/dist/components/sparkline.js +122 -0
  365. package/dist/components/spinner.d.ts +34 -0
  366. package/dist/components/spinner.js +34 -0
  367. package/dist/components/stat.d.ts +135 -0
  368. package/dist/components/stat.js +130 -0
  369. package/dist/components/status-picker.d.ts +107 -0
  370. package/dist/components/status-picker.js +175 -0
  371. package/dist/components/stepper.d.ts +86 -0
  372. package/dist/components/stepper.js +103 -0
  373. package/dist/components/switch.d.ts +34 -0
  374. package/dist/components/switch.js +70 -0
  375. package/dist/components/table.d.ts +101 -0
  376. package/dist/components/table.js +72 -0
  377. package/dist/components/tabs.d.ts +103 -0
  378. package/dist/components/tabs.js +173 -0
  379. package/dist/components/tag-input.d.ts +77 -0
  380. package/dist/components/tag-input.js +305 -0
  381. package/dist/components/task-list.d.ts +89 -0
  382. package/dist/components/task-list.js +238 -0
  383. package/dist/components/time-picker.d.ts +119 -0
  384. package/dist/components/time-picker.js +399 -0
  385. package/dist/components/toast.d.ts +87 -0
  386. package/dist/components/toast.js +142 -0
  387. package/dist/components/toggle.d.ts +77 -0
  388. package/dist/components/toggle.js +109 -0
  389. package/dist/components/tooltip.d.ts +69 -0
  390. package/dist/components/tooltip.js +105 -0
  391. package/dist/components/top-bar.d.ts +87 -0
  392. package/dist/components/top-bar.js +99 -0
  393. package/dist/components/tour.d.ts +60 -0
  394. package/dist/components/tour.js +139 -0
  395. package/dist/components/tree-select.d.ts +89 -0
  396. package/dist/components/tree-select.js +243 -0
  397. package/dist/components/tree-view.d.ts +109 -0
  398. package/dist/components/tree-view.js +170 -0
  399. package/dist/components/typography.d.ts +107 -0
  400. package/dist/components/typography.js +128 -0
  401. package/dist/components/user-picker.d.ts +89 -0
  402. package/dist/components/user-picker.js +162 -0
  403. package/dist/components/version-history.d.ts +191 -0
  404. package/dist/components/version-history.js +431 -0
  405. package/dist/data-table/csv.d.ts +27 -0
  406. package/dist/data-table/csv.js +68 -0
  407. package/dist/data-table/data-table.d.ts +423 -0
  408. package/dist/data-table/data-table.js +1259 -0
  409. package/dist/data-table/filter-bar.d.ts +146 -0
  410. package/dist/data-table/filter-bar.js +569 -0
  411. package/dist/data-table/filter-fns.d.ts +65 -0
  412. package/dist/data-table/filter-fns.js +382 -0
  413. package/dist/data-table/index.d.ts +8 -0
  414. package/dist/data-table/index.js +9 -0
  415. package/dist/data-table/saved-views.d.ts +100 -0
  416. package/dist/data-table/saved-views.js +251 -0
  417. package/dist/data-table/types.d.ts +168 -0
  418. package/dist/data-table/types.js +87 -0
  419. package/dist/data-table/url-state.d.ts +94 -0
  420. package/dist/data-table/url-state.js +303 -0
  421. package/dist/data-table/view-state.d.ts +16 -0
  422. package/dist/data-table/view-state.js +81 -0
  423. package/dist/editor/_test-setup.d.ts +1 -0
  424. package/dist/editor/_test-setup.js +33 -0
  425. package/dist/editor/block-editor.d.ts +137 -0
  426. package/dist/editor/block-editor.js +280 -0
  427. package/dist/editor/commands.d.ts +31 -0
  428. package/dist/editor/commands.js +150 -0
  429. package/dist/editor/context.d.ts +108 -0
  430. package/dist/editor/context.js +30 -0
  431. package/dist/editor/convert.d.ts +66 -0
  432. package/dist/editor/convert.js +567 -0
  433. package/dist/editor/drag-handle.d.ts +10 -0
  434. package/dist/editor/drag-handle.js +69 -0
  435. package/dist/editor/extensions.d.ts +34 -0
  436. package/dist/editor/extensions.js +239 -0
  437. package/dist/editor/index.d.ts +14 -0
  438. package/dist/editor/index.js +17 -0
  439. package/dist/editor/inserter.d.ts +12 -0
  440. package/dist/editor/inserter.js +88 -0
  441. package/dist/editor/inspector.d.ts +17 -0
  442. package/dist/editor/inspector.js +65 -0
  443. package/dist/editor/items.d.ts +62 -0
  444. package/dist/editor/items.js +195 -0
  445. package/dist/editor/labels.d.ts +119 -0
  446. package/dist/editor/labels.js +130 -0
  447. package/dist/editor/markdown.d.ts +14 -0
  448. package/dist/editor/markdown.js +209 -0
  449. package/dist/editor/menus.d.ts +20 -0
  450. package/dist/editor/menus.js +236 -0
  451. package/dist/editor/nodes.d.ts +14 -0
  452. package/dist/editor/nodes.js +201 -0
  453. package/dist/editor/outline.d.ts +11 -0
  454. package/dist/editor/outline.js +52 -0
  455. package/dist/editor/schema-form.d.ts +64 -0
  456. package/dist/editor/schema-form.js +290 -0
  457. package/dist/editor/slash-menu.d.ts +15 -0
  458. package/dist/editor/slash-menu.js +119 -0
  459. package/dist/fonts/catalog.d.ts +53 -0
  460. package/dist/fonts/catalog.js +121 -0
  461. package/dist/fonts/font-picker.d.ts +70 -0
  462. package/dist/fonts/font-picker.js +225 -0
  463. package/dist/fonts/index.d.ts +6 -0
  464. package/dist/fonts/index.js +7 -0
  465. package/dist/fonts/loader.d.ts +66 -0
  466. package/dist/fonts/loader.js +161 -0
  467. package/dist/fonts/pairing-picker.d.ts +31 -0
  468. package/dist/fonts/pairing-picker.js +81 -0
  469. package/dist/fonts/pairings.d.ts +84 -0
  470. package/dist/fonts/pairings.js +149 -0
  471. package/dist/fonts/provider.d.ts +34 -0
  472. package/dist/fonts/provider.js +51 -0
  473. package/dist/form/index.d.ts +1 -0
  474. package/dist/form/index.js +1 -0
  475. package/dist/format/core.d.ts +149 -0
  476. package/dist/format/core.js +357 -0
  477. package/dist/format/index.d.ts +4 -0
  478. package/dist/format/index.js +5 -0
  479. package/dist/format/use-format.d.ts +1 -0
  480. package/dist/format/use-format.js +3 -0
  481. package/dist/index.d.ts +91 -0
  482. package/dist/index.js +92 -0
  483. package/dist/lib/cn.d.ts +3 -0
  484. package/dist/lib/cn.js +16 -0
  485. package/dist/lib/color.d.ts +64 -0
  486. package/dist/lib/color.js +177 -0
  487. package/dist/lib/compose-refs.d.ts +24 -0
  488. package/dist/lib/compose-refs.js +45 -0
  489. package/dist/lib/data-islands.d.ts +194 -0
  490. package/dist/lib/data-islands.js +368 -0
  491. package/dist/lib/date.d.ts +129 -0
  492. package/dist/lib/date.js +386 -0
  493. package/dist/lib/field-context.d.ts +64 -0
  494. package/dist/lib/field-context.js +62 -0
  495. package/dist/lib/floating-arrow.d.ts +18 -0
  496. package/dist/lib/floating-arrow.js +15 -0
  497. package/dist/lib/islands.d.ts +38 -0
  498. package/dist/lib/islands.js +40 -0
  499. package/dist/lib/labels.d.ts +51 -0
  500. package/dist/lib/labels.js +56 -0
  501. package/dist/lib/layer.d.ts +36 -0
  502. package/dist/lib/layer.js +42 -0
  503. package/dist/lib/locale.d.ts +85 -0
  504. package/dist/lib/locale.js +105 -0
  505. package/dist/lib/menu.d.ts +58 -0
  506. package/dist/lib/menu.js +99 -0
  507. package/dist/lib/message-format.d.ts +20 -0
  508. package/dist/lib/message-format.js +116 -0
  509. package/dist/lib/nav.d.ts +132 -0
  510. package/dist/lib/nav.js +178 -0
  511. package/dist/lib/provider.d.ts +100 -0
  512. package/dist/lib/provider.js +105 -0
  513. package/dist/lib/public.d.ts +23 -0
  514. package/dist/lib/public.js +34 -0
  515. package/dist/lib/sr-name.d.ts +18 -0
  516. package/dist/lib/sr-name.js +17 -0
  517. package/dist/lib/text.d.ts +100 -0
  518. package/dist/lib/text.js +233 -0
  519. package/dist/lib/theme-scope.d.ts +58 -0
  520. package/dist/lib/theme-scope.js +59 -0
  521. package/dist/lib/use-async-list.d.ts +60 -0
  522. package/dist/lib/use-async-list.js +119 -0
  523. package/dist/lib/use-container-width.d.ts +19 -0
  524. package/dist/lib/use-container-width.js +39 -0
  525. package/dist/lib/use-controllable-state.d.ts +33 -0
  526. package/dist/lib/use-controllable-state.js +56 -0
  527. package/dist/lib/use-edge-fade.d.ts +13 -0
  528. package/dist/lib/use-edge-fade.js +43 -0
  529. package/dist/lib/use-formatted-input.d.ts +69 -0
  530. package/dist/lib/use-formatted-input.js +152 -0
  531. package/dist/lib/use-hotkeys.d.ts +80 -0
  532. package/dist/lib/use-hotkeys.js +221 -0
  533. package/dist/lib/use-hover-intent.d.ts +44 -0
  534. package/dist/lib/use-hover-intent.js +119 -0
  535. package/dist/lib/use-media-query.d.ts +21 -0
  536. package/dist/lib/use-media-query.js +28 -0
  537. package/dist/lib/use-reduced-motion.d.ts +8 -0
  538. package/dist/lib/use-reduced-motion.js +13 -0
  539. package/dist/lib/use-tree.d.ts +153 -0
  540. package/dist/lib/use-tree.js +534 -0
  541. package/dist/lib/value-format.d.ts +25 -0
  542. package/dist/lib/value-format.js +56 -0
  543. package/dist/lib/variants.d.ts +131 -0
  544. package/dist/lib/variants.js +109 -0
  545. package/dist/locale-data/core/date.d.ts +24 -0
  546. package/dist/locale-data/core/date.js +68 -0
  547. package/dist/locale-data/core/decimal.d.ts +19 -0
  548. package/dist/locale-data/core/decimal.js +79 -0
  549. package/dist/locale-data/core/holidays.d.ts +30 -0
  550. package/dist/locale-data/core/holidays.js +79 -0
  551. package/dist/locale-data/core/iban.d.ts +29 -0
  552. package/dist/locale-data/core/iban.js +74 -0
  553. package/dist/locale-data/core/index.d.ts +7 -0
  554. package/dist/locale-data/core/index.js +6 -0
  555. package/dist/locale-data/core/types.d.ts +173 -0
  556. package/dist/locale-data/core/types.js +6 -0
  557. package/dist/locale-data/core/week-info.d.ts +23 -0
  558. package/dist/locale-data/core/week-info.js +85 -0
  559. package/dist/locale-data/core/working-days.d.ts +27 -0
  560. package/dist/locale-data/core/working-days.js +133 -0
  561. package/dist/locale-data/index.d.ts +2 -0
  562. package/dist/locale-data/index.js +4 -0
  563. package/dist/locale-data/tr/address-tr.json +1 -0
  564. package/dist/locale-data/tr/address.d.ts +23 -0
  565. package/dist/locale-data/tr/address.js +52 -0
  566. package/dist/locale-data/tr/holidays.d.ts +31 -0
  567. package/dist/locale-data/tr/holidays.js +81 -0
  568. package/dist/locale-data/tr/iban.d.ts +21 -0
  569. package/dist/locale-data/tr/iban.js +45 -0
  570. package/dist/locale-data/tr/id.d.ts +36 -0
  571. package/dist/locale-data/tr/id.js +120 -0
  572. package/dist/locale-data/tr/index.d.ts +12 -0
  573. package/dist/locale-data/tr/index.js +33 -0
  574. package/dist/locale-data/tr/kdv.d.ts +91 -0
  575. package/dist/locale-data/tr/kdv.js +222 -0
  576. package/dist/locales/en.d.ts +2102 -0
  577. package/dist/locales/en.js +2088 -0
  578. package/dist/locales/tr.d.ts +2086 -0
  579. package/dist/locales/tr.js +2087 -0
  580. package/dist/media/focal-point.d.ts +42 -0
  581. package/dist/media/focal-point.js +96 -0
  582. package/dist/media/gallery-layout.d.ts +19 -0
  583. package/dist/media/gallery-layout.js +61 -0
  584. package/dist/media/gallery.d.ts +64 -0
  585. package/dist/media/gallery.js +140 -0
  586. package/dist/media/image-cropper.d.ts +86 -0
  587. package/dist/media/image-cropper.js +170 -0
  588. package/dist/media/image-field.d.ts +115 -0
  589. package/dist/media/image-field.js +212 -0
  590. package/dist/media/index.d.ts +19 -0
  591. package/dist/media/index.js +23 -0
  592. package/dist/media/lightbox.d.ts +82 -0
  593. package/dist/media/lightbox.js +171 -0
  594. package/dist/media/link-preview.d.ts +97 -0
  595. package/dist/media/link-preview.js +177 -0
  596. package/dist/media/media-library.d.ts +244 -0
  597. package/dist/media/media-library.js +776 -0
  598. package/dist/media/media-picker.d.ts +96 -0
  599. package/dist/media/media-picker.js +209 -0
  600. package/dist/media/media-provider.d.ts +23 -0
  601. package/dist/media/media-provider.js +44 -0
  602. package/dist/media/media-utils.d.ts +39 -0
  603. package/dist/media/media-utils.js +145 -0
  604. package/dist/media/memory-adapter.d.ts +22 -0
  605. package/dist/media/memory-adapter.js +162 -0
  606. package/dist/media/rest-adapter.d.ts +90 -0
  607. package/dist/media/rest-adapter.js +208 -0
  608. package/dist/media/serp.d.ts +62 -0
  609. package/dist/media/serp.js +108 -0
  610. package/dist/media/test-fixtures.d.ts +3 -0
  611. package/dist/media/test-fixtures.js +37 -0
  612. package/dist/media/types.d.ts +183 -0
  613. package/dist/media/types.js +3 -0
  614. package/dist/media/use-pan-zoom.d.ts +51 -0
  615. package/dist/media/use-pan-zoom.js +156 -0
  616. package/dist/media/use-upload-queue.d.ts +64 -0
  617. package/dist/media/use-upload-queue.js +115 -0
  618. package/dist/media/video-player.d.ts +135 -0
  619. package/dist/media/video-player.js +319 -0
  620. package/dist/motion/core.d.ts +32 -0
  621. package/dist/motion/core.js +77 -0
  622. package/dist/motion/count-up.d.ts +29 -0
  623. package/dist/motion/count-up.js +92 -0
  624. package/dist/motion/index.d.ts +11 -0
  625. package/dist/motion/index.js +13 -0
  626. package/dist/motion/motion-scope.d.ts +17 -0
  627. package/dist/motion/motion-scope.js +16 -0
  628. package/dist/motion/page-transition.d.ts +33 -0
  629. package/dist/motion/page-transition.js +61 -0
  630. package/dist/motion/parallax.d.ts +37 -0
  631. package/dist/motion/parallax.js +90 -0
  632. package/dist/motion/pointer.d.ts +38 -0
  633. package/dist/motion/pointer.js +117 -0
  634. package/dist/motion/reveal.d.ts +72 -0
  635. package/dist/motion/reveal.js +133 -0
  636. package/dist/motion/scroll-shrink.d.ts +18 -0
  637. package/dist/motion/scroll-shrink.js +47 -0
  638. package/dist/motion/skeleton-swap.d.ts +17 -0
  639. package/dist/motion/skeleton-swap.js +43 -0
  640. package/dist/motion/text-reveal.d.ts +30 -0
  641. package/dist/motion/text-reveal.js +29 -0
  642. package/dist/motion/ticker.d.ts +35 -0
  643. package/dist/motion/ticker.js +16 -0
  644. package/dist/next/index.d.ts +42 -0
  645. package/dist/next/index.js +36 -0
  646. package/dist/render/block-renderer.d.ts +56 -0
  647. package/dist/render/block-renderer.js +137 -0
  648. package/dist/render/index.d.ts +6 -0
  649. package/dist/render/index.js +7 -0
  650. package/dist/render/prepare.d.ts +61 -0
  651. package/dist/render/prepare.js +119 -0
  652. package/dist/scheduler/core/duration.d.ts +83 -0
  653. package/dist/scheduler/core/duration.js +174 -0
  654. package/dist/scheduler/core/gantt.d.ts +63 -0
  655. package/dist/scheduler/core/gantt.js +226 -0
  656. package/dist/scheduler/core/index.d.ts +6 -0
  657. package/dist/scheduler/core/index.js +7 -0
  658. package/dist/scheduler/core/layout.d.ts +97 -0
  659. package/dist/scheduler/core/layout.js +249 -0
  660. package/dist/scheduler/core/time-scale.d.ts +89 -0
  661. package/dist/scheduler/core/time-scale.js +173 -0
  662. package/dist/scheduler/gantt.d.ts +125 -0
  663. package/dist/scheduler/gantt.js +532 -0
  664. package/dist/scheduler/index.d.ts +6 -0
  665. package/dist/scheduler/index.js +7 -0
  666. package/dist/scheduler/resource-calendar.d.ts +218 -0
  667. package/dist/scheduler/resource-calendar.js +661 -0
  668. package/dist/scheduler/scheduler.d.ts +168 -0
  669. package/dist/scheduler/scheduler.js +768 -0
  670. package/dist/scheduler/shared.d.ts +63 -0
  671. package/dist/scheduler/shared.js +145 -0
  672. package/dist/scheduler/time-tracker.d.ts +138 -0
  673. package/dist/scheduler/time-tracker.js +403 -0
  674. package/dist/sortable/core.d.ts +67 -0
  675. package/dist/sortable/core.js +167 -0
  676. package/dist/sortable/index.d.ts +8 -0
  677. package/dist/sortable/index.js +10 -0
  678. package/dist/sortable/kanban-core.d.ts +70 -0
  679. package/dist/sortable/kanban-core.js +67 -0
  680. package/dist/sortable/kanban.d.ts +147 -0
  681. package/dist/sortable/kanban.js +472 -0
  682. package/dist/sortable/sortable-list.d.ts +71 -0
  683. package/dist/sortable/sortable-list.js +76 -0
  684. package/dist/sortable/sortable-tree.d.ts +105 -0
  685. package/dist/sortable/sortable-tree.js +462 -0
  686. package/dist/sortable/sortable.d.ts +188 -0
  687. package/dist/sortable/sortable.js +485 -0
  688. package/dist/sortable/use-pointer-drag.d.ts +75 -0
  689. package/dist/sortable/use-pointer-drag.js +173 -0
  690. package/dist/sortable/use-time-scale.d.ts +11 -0
  691. package/dist/sortable/use-time-scale.js +19 -0
  692. package/dist/styles/base.css +51 -0
  693. package/dist/styles/blocks.css +949 -0
  694. package/dist/styles/calendar.css +642 -0
  695. package/dist/styles/charts.css +264 -0
  696. package/dist/styles/data.css +474 -0
  697. package/dist/styles/editors.css +1022 -0
  698. package/dist/styles/forms.css +406 -0
  699. package/dist/styles/media.css +515 -0
  700. package/dist/styles/motion.css +389 -0
  701. package/dist/styles/navigation.css +293 -0
  702. package/dist/styles/overlays.css +244 -0
  703. package/dist/styles.css +743 -0
  704. package/package.json +160 -4
@@ -0,0 +1,133 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Slot } from "radix-ui";
5
+ import { cn } from "../lib/cn.js";
6
+ import { inViewport, ioSupported, motionAllowed, observe, transitionEnd } from "./core.js";
7
+ const noopSubscribe = () => () => { };
8
+ export const useIsoLayoutEffect = typeof window === "undefined" ? React.useEffect : React.useLayoutEffect;
9
+ /**
10
+ * `true` when the component mounted on the client after hydration (a page switch, a tab, a
11
+ * replay); `false` when it was server-rendered and is being hydrated. Server-rendered content
12
+ * is already on screen, so it is never hidden again; fresh content may start hidden.
13
+ */
14
+ export function useFreshMount() {
15
+ const hydrating = React.useSyncExternalStore(noopSubscribe, () => false, () => true);
16
+ const [fresh] = React.useState(!hydrating);
17
+ return fresh;
18
+ }
19
+ /**
20
+ * Scroll-reveal state machine on any element: `data-reveal-state` goes
21
+ * `pending → in → done`. CSS (motion.css) draws the states, so the hook only flips an attribute.
22
+ *
23
+ * - Server-rendered content that is already in view stays as it is (no flash, CLS 0).
24
+ * - Server-rendered content below the fold is hidden just before paint and revealed on scroll.
25
+ * - Freshly mounted content starts hidden and reveals when it enters the viewport.
26
+ * - Reduced motion, `data-motion="off"` or no IntersectionObserver → shown at once.
27
+ *
28
+ * Returns the props for the first render (spread them on the element).
29
+ */
30
+ export function useReveal(ref, { once = true, rootMargin, threshold, stagger, disabled, onReveal } = {}) {
31
+ const fresh = useFreshMount();
32
+ const onRevealRef = React.useRef(onReveal);
33
+ onRevealRef.current = onReveal;
34
+ useIsoLayoutEffect(() => {
35
+ const el = ref.current;
36
+ if (!el)
37
+ return;
38
+ let timer;
39
+ let frame = 0;
40
+ const set = (s) => el.setAttribute("data-reveal-state", s);
41
+ const show = () => {
42
+ if (el.getAttribute("data-reveal-state") !== "pending")
43
+ return;
44
+ set("in");
45
+ onRevealRef.current?.();
46
+ clearTimeout(timer);
47
+ // After the transition, drop the reveal styles so the element's own transitions
48
+ // (hover, focus) are its own again.
49
+ timer = setTimeout(() => el.getAttribute("data-reveal-state") === "in" && set("done"), transitionEnd(el, stagger) + 60);
50
+ };
51
+ if (disabled || !motionAllowed(el)) {
52
+ set("done");
53
+ return;
54
+ }
55
+ if (!ioSupported()) {
56
+ if (fresh)
57
+ frame = requestAnimationFrame(() => show());
58
+ else
59
+ set("done");
60
+ return () => cancelAnimationFrame(frame);
61
+ }
62
+ if (!fresh && inViewport(el)) {
63
+ set("done");
64
+ if (once)
65
+ return;
66
+ }
67
+ else
68
+ set("pending");
69
+ const stop = observe(el, (entry) => {
70
+ if (entry.isIntersecting) {
71
+ show();
72
+ if (once)
73
+ stop();
74
+ }
75
+ else if (!once && entry.boundingClientRect.top > 0)
76
+ set("pending");
77
+ }, { rootMargin, threshold });
78
+ return () => {
79
+ stop();
80
+ clearTimeout(timer);
81
+ };
82
+ // eslint-disable-next-line react-hooks/exhaustive-deps
83
+ }, [fresh, once, rootMargin, threshold, stagger, disabled]);
84
+ return { "data-reveal-state": fresh && !disabled ? "pending" : undefined };
85
+ }
86
+ function useComposedRef(...refs) {
87
+ // eslint-disable-next-line react-hooks/exhaustive-deps
88
+ return React.useCallback((node) => {
89
+ for (const r of refs) {
90
+ if (typeof r === "function")
91
+ r(node);
92
+ else if (r)
93
+ r.current = node;
94
+ }
95
+ // eslint-disable-next-line react-hooks/exhaustive-deps
96
+ }, refs);
97
+ }
98
+ const timing = (delay, duration, extra) => ({
99
+ ...(delay ? { "--vm-delay": `${delay}ms` } : null),
100
+ ...(duration ? { "--vm-duration": `${duration}ms` } : null),
101
+ ...extra,
102
+ });
103
+ /**
104
+ * Shows its content when it scrolls into view — opacity and transform only, so nothing moves
105
+ * (CLS 0). Server-rendered content is never hidden before hydration; reduced motion and
106
+ * `data-motion="off"` show it at once.
107
+ *
108
+ * ```tsx
109
+ * <Reveal effect="rise" delay={80}><Card>…</Card></Reveal>
110
+ * ```
111
+ */
112
+ export const Reveal = React.forwardRef(function Reveal({ effect = "rise", delay, duration, once, rootMargin, threshold, disabled, onReveal, asChild, className, style, ...props }, ref) {
113
+ const inner = React.useRef(null);
114
+ const setRef = useComposedRef(ref, inner);
115
+ const initial = useReveal(inner, { once, rootMargin, threshold, disabled, onReveal });
116
+ const Comp = asChild ? Slot.Root : "div";
117
+ return _jsx(Comp, { ref: setRef, "data-reveal": effect, ...initial, className: cn("vm-reveal", className), style: { ...timing(delay, duration), ...style }, ...props });
118
+ });
119
+ /**
120
+ * Reveals its direct children one after another (the 13th and later share the last slot, so a
121
+ * long list never keeps people waiting). Use `asChild` on a list to keep its semantics.
122
+ *
123
+ * ```tsx
124
+ * <Stagger asChild step={70}><ul className="grid grid-cols-3">{plans.map(…)}</ul></Stagger>
125
+ * ```
126
+ */
127
+ export const Stagger = React.forwardRef(function Stagger({ effect = "rise", step, delay, duration, once, rootMargin, threshold, disabled, onReveal, asChild, className, style, ...props }, ref) {
128
+ const inner = React.useRef(null);
129
+ const setRef = useComposedRef(ref, inner);
130
+ const initial = useReveal(inner, { once, rootMargin, threshold, disabled, onReveal, stagger: true });
131
+ const Comp = asChild ? Slot.Root : "div";
132
+ return (_jsx(Comp, { ref: setRef, "data-reveal": effect, "data-reveal-stagger": "", ...initial, className: cn("vm-stagger", className), style: { ...timing(delay, duration, step ? { "--vm-step": `${step}ms` } : undefined), ...style }, ...props }));
133
+ });
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ export interface UseScrollShrinkOptions {
3
+ /** Scroll distance in px after which the header counts as scrolled. Default 24. */
4
+ threshold?: number;
5
+ }
6
+ /**
7
+ * Sticky header shrink: sets `data-scrolled` on the element once the page has scrolled past
8
+ * `threshold` (passive listener, rAF-throttled, no re-render). Pair it with the `vm-shrink`
9
+ * class, which tightens the bar with transforms only, so the content below never moves (CLS 0).
10
+ * Returns whether it is scrolled, for anything else you want to switch.
11
+ *
12
+ * ```tsx
13
+ * const ref = React.useRef<HTMLElement>(null);
14
+ * useScrollShrink(ref);
15
+ * <header ref={ref} className="vm-shrink sticky top-0">…</header>
16
+ * ```
17
+ */
18
+ export declare function useScrollShrink(ref: React.RefObject<HTMLElement | null>, { threshold }?: UseScrollShrinkOptions): boolean;
@@ -0,0 +1,47 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ /**
4
+ * Sticky header shrink: sets `data-scrolled` on the element once the page has scrolled past
5
+ * `threshold` (passive listener, rAF-throttled, no re-render). Pair it with the `vm-shrink`
6
+ * class, which tightens the bar with transforms only, so the content below never moves (CLS 0).
7
+ * Returns whether it is scrolled, for anything else you want to switch.
8
+ *
9
+ * ```tsx
10
+ * const ref = React.useRef<HTMLElement>(null);
11
+ * useScrollShrink(ref);
12
+ * <header ref={ref} className="vm-shrink sticky top-0">…</header>
13
+ * ```
14
+ */
15
+ export function useScrollShrink(ref, { threshold = 24 } = {}) {
16
+ const [scrolled, setScrolled] = React.useState(false);
17
+ React.useEffect(() => {
18
+ let raf = 0;
19
+ let last = null;
20
+ const update = () => {
21
+ raf = 0;
22
+ const next = window.scrollY > threshold;
23
+ if (next === last)
24
+ return;
25
+ last = next;
26
+ const el = ref.current;
27
+ if (el) {
28
+ if (next)
29
+ el.setAttribute("data-scrolled", "");
30
+ else
31
+ el.removeAttribute("data-scrolled");
32
+ }
33
+ setScrolled(next);
34
+ };
35
+ const onScroll = () => {
36
+ if (!raf)
37
+ raf = requestAnimationFrame(update);
38
+ };
39
+ update();
40
+ window.addEventListener("scroll", onScroll, { passive: true });
41
+ return () => {
42
+ cancelAnimationFrame(raf);
43
+ window.removeEventListener("scroll", onScroll);
44
+ };
45
+ }, [ref, threshold]);
46
+ return scrolled;
47
+ }
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ export interface SkeletonSwapProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** While true the skeleton shows; when it turns false the content cross-fades in over it. */
4
+ loading: boolean;
5
+ /** The placeholder. Give it the content's size so the box does not jump when it leaves. */
6
+ skeleton: React.ReactNode;
7
+ }
8
+ /**
9
+ * Skeleton → content without a flash: both share one grid cell, the content fades in while the
10
+ * skeleton fades out, then the skeleton unmounts. `aria-busy` while loading. Content that is
11
+ * there from the first render never animates; reduced motion swaps at once.
12
+ *
13
+ * ```tsx
14
+ * <SkeletonSwap loading={isLoading} skeleton={<InvoiceSkeleton />}><InvoiceTable rows={rows} /></SkeletonSwap>
15
+ * ```
16
+ */
17
+ export declare const SkeletonSwap: React.ForwardRefExoticComponent<SkeletonSwapProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,43 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "../lib/cn.js";
5
+ import { motionAllowed } from "./core.js";
6
+ import { useIsoLayoutEffect } from "./reveal.js";
7
+ /**
8
+ * Skeleton → content without a flash: both share one grid cell, the content fades in while the
9
+ * skeleton fades out, then the skeleton unmounts. `aria-busy` while loading. Content that is
10
+ * there from the first render never animates; reduced motion swaps at once.
11
+ *
12
+ * ```tsx
13
+ * <SkeletonSwap loading={isLoading} skeleton={<InvoiceSkeleton />}><InvoiceTable rows={rows} /></SkeletonSwap>
14
+ * ```
15
+ */
16
+ export const SkeletonSwap = React.forwardRef(function SkeletonSwap({ loading, skeleton, className, children, ...props }, ref) {
17
+ const inner = React.useRef(null);
18
+ const [prevLoading, setPrevLoading] = React.useState(loading);
19
+ const [leaving, setLeaving] = React.useState(false);
20
+ // Derived from the previous prop (React's "adjust state while rendering" pattern): the frame
21
+ // that flips loading → false already renders both layers, so nothing blinks.
22
+ if (prevLoading !== loading) {
23
+ setPrevLoading(loading);
24
+ setLeaving(!loading);
25
+ }
26
+ useIsoLayoutEffect(() => {
27
+ if (!leaving)
28
+ return;
29
+ if (!motionAllowed(inner.current)) {
30
+ setLeaving(false);
31
+ return;
32
+ }
33
+ const t = setTimeout(() => setLeaving(false), 700); // safety net if animationend never fires
34
+ return () => clearTimeout(t);
35
+ }, [leaving]);
36
+ return (_jsxs("div", { ref: (node) => {
37
+ inner.current = node;
38
+ if (typeof ref === "function")
39
+ ref(node);
40
+ else if (ref)
41
+ ref.current = node;
42
+ }, "aria-busy": loading || undefined, "data-loading": loading ? "" : undefined, className: cn("vm-swap", className), ...props, children: [loading ? null : (_jsx("div", { className: "vm-swap-content", "data-entering": leaving ? "" : undefined, children: children })), loading || leaving ? (_jsx("div", { className: "vm-swap-skeleton", "aria-hidden": !loading || undefined, "data-leaving": loading ? undefined : "", onAnimationEnd: (e) => e.target === e.currentTarget && setLeaving(false), children: skeleton })) : null] }));
43
+ });
@@ -0,0 +1,30 @@
1
+ import * as React from "react";
2
+ import { type UseRevealOptions } from "./reveal.js";
3
+ type TextTag = "h1" | "h2" | "h3" | "h4" | "p" | "span" | "div" | "blockquote";
4
+ export interface TextRevealProps extends Omit<React.HTMLAttributes<HTMLElement>, "children">, Omit<UseRevealOptions, "stagger"> {
5
+ /** The text. In `by="line"` mode, `\n` separates lines. */
6
+ children: string;
7
+ /** Element to render. Default `"h2"`. */
8
+ as?: TextTag;
9
+ /** Split into words (default) or lines. */
10
+ by?: "word" | "line";
11
+ /**
12
+ * mask: each unit rises from behind its own baseline (default) · fade · blur.
13
+ */
14
+ effect?: "mask" | "fade" | "blur";
15
+ /** ms between two units. Default 45 (words) / 110 (lines). */
16
+ step?: number;
17
+ /** Delay before the first unit, in ms. */
18
+ delay?: number;
19
+ }
20
+ /**
21
+ * A heading that reveals word by word (or line by line) as it scrolls into view. Assistive
22
+ * tech gets one plain string: the split copy is `aria-hidden`, the real text is a visually
23
+ * hidden twin. Transform and opacity only; reduced motion shows it at once.
24
+ *
25
+ * ```tsx
26
+ * <TextReveal as="h2">Small rooms, slow mornings, nothing to scroll.</TextReveal>
27
+ * ```
28
+ */
29
+ export declare const TextReveal: React.ForwardRefExoticComponent<TextRevealProps & React.RefAttributes<HTMLElement>>;
30
+ export {};
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "../lib/cn.js";
5
+ import { useReveal } from "./reveal.js";
6
+ /**
7
+ * A heading that reveals word by word (or line by line) as it scrolls into view. Assistive
8
+ * tech gets one plain string: the split copy is `aria-hidden`, the real text is a visually
9
+ * hidden twin. Transform and opacity only; reduced motion shows it at once.
10
+ *
11
+ * ```tsx
12
+ * <TextReveal as="h2">Small rooms, slow mornings, nothing to scroll.</TextReveal>
13
+ * ```
14
+ */
15
+ export const TextReveal = React.forwardRef(function TextReveal({ children, as: Tag = "h2", by = "word", effect = "mask", step, delay, once, rootMargin, threshold, disabled, onReveal, className, style, ...props }, ref) {
16
+ const inner = React.useRef(null);
17
+ const initial = useReveal(inner, { once, rootMargin, threshold, disabled, onReveal });
18
+ const text = String(children);
19
+ const units = by === "line" ? text.split("\n") : text.split(/\s+/).filter(Boolean);
20
+ const gap = step ?? (by === "line" ? 110 : 45);
21
+ const Comp = Tag;
22
+ return (_jsxs(Comp, { ref: (node) => {
23
+ inner.current = node;
24
+ if (typeof ref === "function")
25
+ ref(node);
26
+ else if (ref)
27
+ ref.current = node;
28
+ }, "data-reveal": effect === "mask" ? "text" : effect, "data-text-reveal": by, ...initial, className: cn("vm-text-reveal", className), style: { "--vm-step": `${gap}ms`, ...(delay ? { "--vm-delay": `${delay}ms` } : null), ...style }, ...props, children: [_jsx("span", { className: "sr-only", children: by === "line" ? units.join(" ") : text }), _jsx("span", { "aria-hidden": "true", className: "vm-text-reveal-visual", children: units.map((u, i) => (_jsxs(React.Fragment, { children: [_jsx("span", { className: "vm-tr-mask", children: _jsx("span", { className: "vm-tr-unit", style: { "--vm-i": i }, children: u }) }), by === "word" && i < units.length - 1 ? " " : null] }, i))) })] }));
29
+ });
@@ -0,0 +1,35 @@
1
+ import * as React from "react";
2
+ export interface TickerProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** Seconds for one full loop. Default 40. */
4
+ duration?: number;
5
+ /** Which way the strip travels (mirrored in RTL). Default `"start"`. */
6
+ direction?: "start" | "end";
7
+ /** Element for each copy of the items, e.g. `"ul"` when the children are `li`. Default `"div"`. */
8
+ as?: "div" | "ul" | "ol";
9
+ /** Space between items (any CSS length). Default `clamp(2.5rem, 6cqi, 4.5rem)`. */
10
+ gap?: string;
11
+ /** Fade the start and end edges. Default true. */
12
+ fade?: boolean;
13
+ /**
14
+ * A small pause control (a native checkbox — works without JavaScript). Moving content that
15
+ * lasts longer than five seconds needs one (WCAG 2.2.2). Default true.
16
+ */
17
+ controls?: boolean;
18
+ /** Accessible name of the pause control. Default `"Pause animation"`. */
19
+ pauseLabel?: string;
20
+ /** Names the list of items (it lands on the first copy, e.g. the `ul`). */
21
+ "aria-label"?: string;
22
+ /** Classes for each copy of the items. */
23
+ groupClassName?: string;
24
+ }
25
+ /**
26
+ * The motion kit's marquee: an endless strip of logos or words that follows the motion level. Pure CSS (server component): the items are rendered
27
+ * twice and the track slides by one copy. The copy is `aria-hidden` and `inert`, so assistive
28
+ * tech and the keyboard meet every item once. Pauses on hover and focus and with its pause
29
+ * control; under reduced motion or `data-motion="off"` it becomes a static, wrapped row.
30
+ *
31
+ * ```tsx
32
+ * <Ticker as="ul" duration={30}>{logos.map((l) => <li key={l.name}>…</li>)}</Ticker>
33
+ * ```
34
+ */
35
+ export declare const Ticker: React.ForwardRefExoticComponent<TickerProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/cn.js";
4
+ /**
5
+ * The motion kit's marquee: an endless strip of logos or words that follows the motion level. Pure CSS (server component): the items are rendered
6
+ * twice and the track slides by one copy. The copy is `aria-hidden` and `inert`, so assistive
7
+ * tech and the keyboard meet every item once. Pauses on hover and focus and with its pause
8
+ * control; under reduced motion or `data-motion="off"` it becomes a static, wrapped row.
9
+ *
10
+ * ```tsx
11
+ * <Ticker as="ul" duration={30}>{logos.map((l) => <li key={l.name}>…</li>)}</Ticker>
12
+ * ```
13
+ */
14
+ export const Ticker = React.forwardRef(function Ticker({ duration = 40, direction = "start", as: Group = "div", gap, fade = true, controls = true, pauseLabel = "Pause animation", groupClassName, className, style, children, "aria-label": ariaLabel, ...props }, ref) {
15
+ return (_jsxs("div", { ref: ref, "data-direction": direction, "data-fade": fade ? "" : undefined, className: cn("vm-marquee", className), style: { "--vm-marquee-duration": `${duration}s`, ...(gap ? { "--vm-marquee-gap": gap } : null), ...style }, ...props, children: [_jsx("div", { className: "vm-marquee-viewport", children: _jsxs("div", { className: "vm-marquee-track", children: [_jsx(Group, { className: cn("vm-marquee-group", groupClassName), "aria-label": ariaLabel, children: children }), _jsx(Group, { className: cn("vm-marquee-group", groupClassName), "aria-hidden": "true", inert: true, "data-marquee-copy": "", children: children })] }) }), controls ? (_jsxs("label", { className: "vm-marquee-toggle", children: [_jsx("input", { type: "checkbox", className: "vm-marquee-pause sr-only", "aria-label": pauseLabel }), _jsxs("svg", { "aria-hidden": "true", viewBox: "0 0 16 16", className: "vm-marquee-icon-pause", children: [_jsx("rect", { x: "4", y: "3", width: "2.5", height: "10", rx: "0.5" }), _jsx("rect", { x: "9.5", y: "3", width: "2.5", height: "10", rx: "0.5" })] }), _jsx("svg", { "aria-hidden": "true", viewBox: "0 0 16 16", className: "vm-marquee-icon-play", children: _jsx("path", { d: "M5 3.2v9.6a.5.5 0 0 0 .77.42l7.2-4.8a.5.5 0 0 0 0-.84l-7.2-4.8A.5.5 0 0 0 5 3.2Z" }) })] })) : null] }));
16
+ });
@@ -0,0 +1,42 @@
1
+ import * as React from "react";
2
+ import { type VamosProviderProps } from "../lib/provider.js";
3
+ /** The parts of Next.js the bindings need — pass the real imports. */
4
+ export interface NextBindings {
5
+ /** `import Link from "next/link"` */
6
+ Link: React.ComponentType<any>;
7
+ /** `import Image from "next/image"` (optional; default `<img>`). */
8
+ Image?: React.ComponentType<any>;
9
+ /** `import { useRouter } from "next/navigation"` */
10
+ useRouter: () => {
11
+ push: (href: string, options?: {
12
+ scroll?: boolean;
13
+ }) => void;
14
+ replace: (href: string, options?: {
15
+ scroll?: boolean;
16
+ }) => void;
17
+ };
18
+ /** `import { usePathname } from "next/navigation"` */
19
+ usePathname: () => string | null;
20
+ }
21
+ export type NextVamosProviderProps = Omit<VamosProviderProps, "Link" | "Image" | "navigate">;
22
+ /**
23
+ * Creates a `VamosProvider` wired to the Next.js App Router (Link, Image, `router.push/replace`,
24
+ * `usePathname`). Do it once in a client file and use the result in your root layout:
25
+ *
26
+ * ```tsx
27
+ * // app/providers.tsx
28
+ * "use client";
29
+ * import Link from "next/link";
30
+ * import Image from "next/image";
31
+ * import { usePathname, useRouter } from "next/navigation";
32
+ * import { createVamosNextProvider } from "@vamos-ui/react/next";
33
+ *
34
+ * export const Providers = createVamosNextProvider({ Link, Image, useRouter, usePathname });
35
+ *
36
+ * // app/layout.tsx (server)
37
+ * <Providers locale="tr-TR" messages={tr} timeZone="Europe/Istanbul" currency="TRY">{children}</Providers>
38
+ * ```
39
+ *
40
+ * Pass `currentPath` from the server layout too if you need the active nav item on first paint.
41
+ */
42
+ export declare function createVamosNextProvider(next: NextBindings): ({ currentPath, children, ...props }: NextVamosProviderProps) => React.FunctionComponentElement<VamosProviderProps>;
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ // Public API of @vamos-ui/react/next — Next.js App Router bindings for VamosProvider.
3
+ // The kit never imports `next/*` itself (it isn't a dependency); you hand the pieces in once.
4
+ import * as React from "react";
5
+ import { VamosProvider } from "../lib/provider.js";
6
+ /**
7
+ * Creates a `VamosProvider` wired to the Next.js App Router (Link, Image, `router.push/replace`,
8
+ * `usePathname`). Do it once in a client file and use the result in your root layout:
9
+ *
10
+ * ```tsx
11
+ * // app/providers.tsx
12
+ * "use client";
13
+ * import Link from "next/link";
14
+ * import Image from "next/image";
15
+ * import { usePathname, useRouter } from "next/navigation";
16
+ * import { createVamosNextProvider } from "@vamos-ui/react/next";
17
+ *
18
+ * export const Providers = createVamosNextProvider({ Link, Image, useRouter, usePathname });
19
+ *
20
+ * // app/layout.tsx (server)
21
+ * <Providers locale="tr-TR" messages={tr} timeZone="Europe/Istanbul" currency="TRY">{children}</Providers>
22
+ * ```
23
+ *
24
+ * Pass `currentPath` from the server layout too if you need the active nav item on first paint.
25
+ */
26
+ export function createVamosNextProvider(next) {
27
+ const Link = next.Link;
28
+ const Image = next.Image;
29
+ function NextVamosProvider({ currentPath, children, ...props }) {
30
+ const router = next.useRouter();
31
+ const pathname = next.usePathname();
32
+ const navigate = React.useCallback((href, options) => (options?.replace ? router.replace(href, { scroll: options.scroll }) : router.push(href, { scroll: options?.scroll })), [router]);
33
+ return React.createElement(VamosProvider, { ...props, Link, Image, navigate, currentPath: pathname ?? currentPath, children });
34
+ }
35
+ return NextVamosProvider;
36
+ }
@@ -0,0 +1,56 @@
1
+ import * as React from "react";
2
+ import { type BlockLabels } from "../blocks/labels.js";
3
+ import { type PreparedDoc, type PrepareOptions, type Resolvers } from "./prepare.js";
4
+ import type { BlockAdapters } from "../blocks/types.js";
5
+ import type { BlockRegion } from "../blocks/schema/define-block.js";
6
+ import type { VamosDoc } from "../blocks/schema/types.js";
7
+ export interface RenderDocOptions extends PrepareOptions {
8
+ /** Framework bindings passed to every block (`{ Image: NextImage, Link: NextLink }`). */
9
+ components?: BlockAdapters;
10
+ /** Built-in strings (e.g. `blockLabelsTr`). */
11
+ labels?: Partial<BlockLabels>;
12
+ /** Show placeholders for unknown / invalid blocks. Default: `editMode` or not production. */
13
+ dev?: boolean;
14
+ /** Regions to render, in order. Default all four. */
15
+ regions?: readonly BlockRegion[];
16
+ /** Wrap the body in `<main id={mainId}>` (skip-link target). */
17
+ mainId?: string;
18
+ /** Emit one merged JSON-LD `@graph` script. Default true. */
19
+ jsonLd?: boolean;
20
+ /** Classes for the wrapper around consecutive text blocks. */
21
+ proseClassName?: string;
22
+ }
23
+ /** Edit/dev placeholder for a block that can't render normally. Server component. */
24
+ export declare function BlockNotice({ tone, title, hint, type, blockId, }: {
25
+ tone?: "danger" | "warning";
26
+ title: string;
27
+ hint?: string;
28
+ type: string;
29
+ blockId?: string;
30
+ }): React.JSX.Element;
31
+ /** Renders an already prepared (and resolved) doc. */
32
+ export declare function renderPrepared(prepared: PreparedDoc, opts: RenderDocOptions): React.ReactNode;
33
+ /**
34
+ * Synchronous render of a VamosDoc (RSC-safe, also works in client trees and tests).
35
+ * `f.query` fields stay unresolved — use `<BlockRenderer resolvers>` for data-bound blocks.
36
+ *
37
+ * ```tsx
38
+ * renderDoc(page, { registry: siteBlocks, locale: "tr", components: { Image: NextImage, Link: NextLink } });
39
+ * ```
40
+ */
41
+ export declare function renderDoc(doc: VamosDoc | unknown, opts: RenderDocOptions): React.ReactNode;
42
+ export interface BlockRendererProps extends RenderDocOptions {
43
+ doc: VamosDoc | unknown;
44
+ /** Data for `f.query` fields, fetched in parallel on the server. */
45
+ resolvers?: Resolvers;
46
+ }
47
+ /**
48
+ * Async Server Component: filters hidden/scheduled blocks → migrates → validates (salvaging bad
49
+ * fields) → localizes → resolves queries in parallel → renders each block → merges JSON-LD.
50
+ *
51
+ * ```tsx
52
+ * <BlockRenderer doc={page} registry={siteBlocks} locale="tr" fallbackLocales={["en"]}
53
+ * components={{ Image: NextImage, Link: NextLink }} resolvers={{ posts: (q) => db.posts.list(q) }} />
54
+ * ```
55
+ */
56
+ export declare function BlockRenderer({ doc, resolvers, ...opts }: BlockRendererProps): Promise<React.ReactElement>;
@@ -0,0 +1,137 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/cn.js";
4
+ import { Container } from "../blocks/section.js";
5
+ import { JsonLd, mergeJsonLd } from "../blocks/json-ld.js";
6
+ import { renderInline } from "../blocks/rich-text.js";
7
+ import { blockText } from "../blocks/labels.js";
8
+ import { inlineToText } from "../blocks/schema/rich-doc.js";
9
+ import { prepareDoc, resolveDoc } from "./prepare.js";
10
+ const isProd = () => typeof process !== "undefined" && process.env?.NODE_ENV === "production";
11
+ /** Edit/dev placeholder for a block that can't render normally. Server component. */
12
+ export function BlockNotice({ tone = "danger", title, hint, type, blockId, }) {
13
+ return (_jsx("div", { className: "vb-container py-4", "data-block-id": blockId, "data-block-type": type, "data-block-notice": tone, children: _jsxs("div", { role: "note", "data-tone": tone, className: "vb-notice flex flex-col gap-1 rounded-ui px-4 py-3.5 @2xl:flex-row @2xl:items-baseline @2xl:gap-4", children: [_jsx("span", { className: "shrink-0 font-mono text-eyebrow uppercase tracking-[0.08em] text-(--tone)", children: type }), _jsxs("span", { className: "text-small", children: [_jsx("strong", { className: "font-semibold text-fg", children: title }), hint ? _jsxs("span", { className: "text-fg-muted", children: [" \u2014 ", hint] }) : null] })] }) }));
14
+ }
15
+ function editAttrs(ctx, n) {
16
+ return ctx.opts.editMode ? { "data-block-id": n.node.id, "data-block-type": n.node.type, "data-hidden": n.node.hidden ? "" : undefined } : {};
17
+ }
18
+ /** Core text blocks (paragraph, heading, list, quote, code, divider) — render without a registry entry. */
19
+ function renderCore(n, ctx, key) {
20
+ const { node } = n;
21
+ const p = (node.props ?? {});
22
+ const io = { components: ctx.opts.components, labels: ctx.opts.labels, locale: ctx.locale };
23
+ const attrs = editAttrs(ctx, n);
24
+ const children = (slot = "items") => (n.slots[slot] ?? []).map((c, i) => renderCore(c, ctx, `${key}-${i}`));
25
+ switch (node.type) {
26
+ case "paragraph":
27
+ return (_jsx("p", { ...attrs, children: renderInline(node.content, io) }, key));
28
+ case "heading": {
29
+ const level = Math.min(6, Math.max(1, p.level ?? 2));
30
+ const Tag = `h${level}`;
31
+ return (_jsx(Tag, { id: node.anchor, ...attrs, children: renderInline(node.content, io) }, key));
32
+ }
33
+ case "list": {
34
+ const Tag = p.ordered ? "ol" : "ul";
35
+ return (_jsx(Tag, { start: p.ordered && p.start && p.start !== 1 ? p.start : undefined, ...attrs, children: children() }, key));
36
+ }
37
+ case "list-item":
38
+ return (_jsxs("li", { ...attrs, children: [node.content?.length ? renderInline(node.content, io) : null, children()] }, key));
39
+ case "quote":
40
+ return (_jsxs("blockquote", { ...attrs, children: [node.content?.length ? _jsx("p", { children: renderInline(node.content, io) }) : null, children(), p.cite ? _jsx("footer", { children: p.cite }) : null] }, key));
41
+ case "code":
42
+ return (_jsx("pre", { "data-language": p.language, ...attrs, children: _jsx("code", { children: inlineToText(node.content) }) }, key));
43
+ case "divider":
44
+ return _jsx("hr", { ...attrs }, key);
45
+ default:
46
+ return null;
47
+ }
48
+ }
49
+ function renderNode(n, ctx, key) {
50
+ const { node, def } = n;
51
+ if (n.status === "core")
52
+ return renderCore(n, ctx, key);
53
+ if (n.status === "unknown") {
54
+ return ctx.dev ? _jsx(BlockNotice, { type: node.type, blockId: node.id, title: ctx.t("unknownBlock", { type: node.type }), hint: ctx.t("unknownBlockHint") }, key) : null;
55
+ }
56
+ if (n.status === "unrenderable" || !def?.component) {
57
+ return ctx.dev ? (_jsx(BlockNotice, { type: node.type, blockId: node.id, title: ctx.t("invalidBlock", { type: node.type }), hint: def?.component ? ctx.t("invalidBlockHint", { count: n.replaced.length || 1 }) : undefined }, key)) : null;
58
+ }
59
+ if (def.jsonLd) {
60
+ const ld = def.jsonLd(n.props, { locale: ctx.locale, node });
61
+ if (ld)
62
+ ctx.jsonLd.push(...(Array.isArray(ld) ? ld : [ld]));
63
+ }
64
+ const Component = def.component;
65
+ const slots = Object.fromEntries(Object.entries(n.slots).map(([k, list]) => [k, renderList(list, ctx, `${key}-${k}`)]));
66
+ const element = (_jsx(Component, { ...n.props, id: node.id, variant: node.variant ?? def.defaultVariant ?? def.variants?.[0], headingLevel: n.headingLevel, theme: node.theme, anchor: node.anchor, labels: ctx.opts.labels, locale: ctx.locale, components: ctx.opts.components, editMode: ctx.opts.editMode, slots: slots, block: { id: node.id, type: node.type, mode: ctx.opts.editMode ? "edit" : "view", v: node.v ?? def.version } }));
67
+ const notice = ctx.dev && (n.status === "invalid" || n.status === "newer") ? (_jsx(BlockNotice, { tone: "warning", type: node.type, title: n.status === "newer" ? ctx.t("newerBlock", { type: node.type, v: node.v ?? 1 }) : ctx.t("invalidBlock", { type: node.type }), hint: n.status === "invalid" ? ctx.t("invalidBlockHint", { count: n.replaced.length }) : undefined })) : null;
68
+ // display:contents keeps the block's own layout while builders map clicks with closest("[data-block-id]").
69
+ if (ctx.opts.editMode)
70
+ return (_jsxs("div", { style: { display: "contents" }, ...editAttrs(ctx, n), children: [notice, element] }, key));
71
+ return notice ? (_jsxs(React.Fragment, { children: [notice, element] }, key)) : (_jsx(React.Fragment, { children: element }, key));
72
+ }
73
+ /** Renders a list; consecutive core text blocks share one prose wrapper. */
74
+ function renderList(list, ctx, keyPrefix) {
75
+ const out = [];
76
+ let run = [];
77
+ const flush = (i) => {
78
+ if (!run.length)
79
+ return;
80
+ const items = run;
81
+ run = [];
82
+ out.push(_jsx(Container, { size: "prose", className: cn("prose-ui vb-prose", ctx.opts.proseClassName), children: items.map((n, j) => renderCore(n, ctx, `${keyPrefix}-${i}-${j}`)) }, `${keyPrefix}-prose-${i}`));
83
+ };
84
+ list.forEach((n, i) => {
85
+ if (n.status === "core") {
86
+ run.push(n);
87
+ return;
88
+ }
89
+ flush(i);
90
+ out.push(renderNode(n, ctx, `${keyPrefix}-${i}`));
91
+ });
92
+ flush(list.length);
93
+ return out;
94
+ }
95
+ /** Renders an already prepared (and resolved) doc. */
96
+ export function renderPrepared(prepared, opts) {
97
+ const ctx = {
98
+ opts,
99
+ dev: opts.dev ?? (!!opts.editMode || !isProd()),
100
+ t: blockText(opts.labels, prepared.locale),
101
+ jsonLd: [],
102
+ locale: prepared.locale,
103
+ };
104
+ const regions = opts.regions ?? ["header", "body", "footer", "overlay"];
105
+ const parts = regions.map((r) => {
106
+ const nodes = renderList(prepared[r], ctx, r);
107
+ if (r === "body" && opts.mainId)
108
+ return (_jsx("main", { id: opts.mainId, tabIndex: -1, className: "outline-none", children: nodes }, r));
109
+ return _jsx(React.Fragment, { children: nodes }, r);
110
+ });
111
+ const graph = opts.jsonLd === false ? null : mergeJsonLd(ctx.jsonLd);
112
+ return (_jsxs(_Fragment, { children: [parts, graph ? _jsx(JsonLd, { data: graph }) : null] }));
113
+ }
114
+ /**
115
+ * Synchronous render of a VamosDoc (RSC-safe, also works in client trees and tests).
116
+ * `f.query` fields stay unresolved — use `<BlockRenderer resolvers>` for data-bound blocks.
117
+ *
118
+ * ```tsx
119
+ * renderDoc(page, { registry: siteBlocks, locale: "tr", components: { Image: NextImage, Link: NextLink } });
120
+ * ```
121
+ */
122
+ export function renderDoc(doc, opts) {
123
+ return renderPrepared(prepareDoc(doc, opts), opts);
124
+ }
125
+ /**
126
+ * Async Server Component: filters hidden/scheduled blocks → migrates → validates (salvaging bad
127
+ * fields) → localizes → resolves queries in parallel → renders each block → merges JSON-LD.
128
+ *
129
+ * ```tsx
130
+ * <BlockRenderer doc={page} registry={siteBlocks} locale="tr" fallbackLocales={["en"]}
131
+ * components={{ Image: NextImage, Link: NextLink }} resolvers={{ posts: (q) => db.posts.list(q) }} />
132
+ * ```
133
+ */
134
+ export async function BlockRenderer({ doc, resolvers, ...opts }) {
135
+ const prepared = await resolveDoc(prepareDoc(doc, opts), resolvers, opts.onIssue);
136
+ return _jsx(_Fragment, { children: renderPrepared(prepared, opts) });
137
+ }