@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,119 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { useLatest } from "./use-controllable-state.js";
4
+ const normalize = (r) => (Array.isArray(r) ? { items: r, cursor: null } : { items: r.items, cursor: r.cursor ?? null });
5
+ const isAbort = (e) => (e instanceof DOMException || e instanceof Error) && e.name === "AbortError";
6
+ /**
7
+ * Debounced, abortable, paged loading for search lists: Combobox, Tag input suggestions,
8
+ * record and user pickers.
9
+ *
10
+ * ```tsx
11
+ * const list = useAsyncList({
12
+ * query,
13
+ * load: async (q, signal, cursor) => {
14
+ * const res = await fetch(`/api/contacts?q=${encodeURIComponent(q)}&after=${cursor ?? ""}`, { signal });
15
+ * return res.json(); // { items, cursor }
16
+ * },
17
+ * });
18
+ * list.items; list.loading; list.loadMore();
19
+ * ```
20
+ *
21
+ * - Typing fast only sends the last query; a new query aborts the request in flight.
22
+ * - Results are cached per query, so deleting a character shows the earlier list instantly.
23
+ */
24
+ export function useAsyncList({ load, query, debounce = 200, enabled = true, cache = true, minQueryLength = 0 }) {
25
+ const loadRef = useLatest(load);
26
+ const cacheRef = React.useRef(new Map());
27
+ const firstRef = React.useRef(true);
28
+ const moreRef = React.useRef(null);
29
+ const [reloadToken, setReloadToken] = React.useState(0);
30
+ const [state, setState] = React.useState({ items: [], cursor: null, loading: Boolean(load && enabled), loadingMore: false, error: null, loadedQuery: null });
31
+ const hasLoader = Boolean(load);
32
+ const active = hasLoader && enabled && query.length >= minQueryLength;
33
+ React.useEffect(() => {
34
+ if (!active) {
35
+ setState((s) => (s.loading || s.loadingMore ? { ...s, loading: false, loadingMore: false } : s));
36
+ return;
37
+ }
38
+ const cached = cache ? cacheRef.current.get(query) : undefined;
39
+ if (cached) {
40
+ setState({ items: cached.items, cursor: cached.cursor, loading: false, loadingMore: false, error: null, loadedQuery: query });
41
+ return;
42
+ }
43
+ moreRef.current?.abort();
44
+ setState((s) => ({ ...s, loading: true, loadingMore: false }));
45
+ const controller = new AbortController();
46
+ const delay = firstRef.current ? 0 : debounce;
47
+ firstRef.current = false;
48
+ const timer = setTimeout(() => {
49
+ const fn = loadRef.current;
50
+ if (!fn)
51
+ return;
52
+ fn(query, controller.signal)
53
+ .then((res) => {
54
+ if (controller.signal.aborted)
55
+ return;
56
+ const entry = normalize(res);
57
+ if (cache)
58
+ cacheRef.current.set(query, entry);
59
+ setState({ items: entry.items, cursor: entry.cursor, loading: false, loadingMore: false, error: null, loadedQuery: query });
60
+ })
61
+ .catch((error) => {
62
+ if (controller.signal.aborted || isAbort(error))
63
+ return;
64
+ setState((s) => ({ ...s, loading: false, error }));
65
+ });
66
+ }, delay);
67
+ return () => {
68
+ clearTimeout(timer);
69
+ controller.abort();
70
+ };
71
+ }, [active, query, debounce, cache, reloadToken, loadRef]);
72
+ const stateRef = useLatest(state);
73
+ const loadMore = React.useCallback(() => {
74
+ const s = stateRef.current;
75
+ const fn = loadRef.current;
76
+ if (!fn || !s.cursor || s.loading || s.loadingMore || s.loadedQuery === null)
77
+ return;
78
+ const q = s.loadedQuery;
79
+ const cursor = s.cursor;
80
+ const controller = new AbortController();
81
+ moreRef.current = controller;
82
+ setState((prev) => ({ ...prev, loadingMore: true }));
83
+ fn(q, controller.signal, cursor)
84
+ .then((res) => {
85
+ if (controller.signal.aborted)
86
+ return;
87
+ const page = normalize(res);
88
+ setState((prev) => {
89
+ if (prev.loadedQuery !== q)
90
+ return prev;
91
+ const next = { items: [...prev.items, ...page.items], cursor: page.cursor };
92
+ if (cache)
93
+ cacheRef.current.set(q, next);
94
+ return { ...prev, ...next, loadingMore: false, error: null };
95
+ });
96
+ })
97
+ .catch((error) => {
98
+ if (controller.signal.aborted || isAbort(error))
99
+ return;
100
+ setState((prev) => ({ ...prev, loadingMore: false, error }));
101
+ });
102
+ }, [cache, loadRef, stateRef]);
103
+ const reload = React.useCallback(() => {
104
+ cacheRef.current.delete(query);
105
+ firstRef.current = true;
106
+ setReloadToken((n) => n + 1);
107
+ }, [query]);
108
+ React.useEffect(() => () => moreRef.current?.abort(), []);
109
+ return {
110
+ items: active ? state.items : [],
111
+ loading: active && state.loading,
112
+ loadingMore: active && state.loadingMore,
113
+ error: active ? state.error : null,
114
+ hasMore: active && state.cursor !== null,
115
+ loadedQuery: active ? state.loadedQuery : null,
116
+ loadMore,
117
+ reload,
118
+ };
119
+ }
@@ -0,0 +1,19 @@
1
+ export interface ContainerSize {
2
+ width: number | undefined;
3
+ height: number | undefined;
4
+ }
5
+ /**
6
+ * Measures an element with `ResizeObserver` (content box, rAF-throttled).
7
+ * Width is `undefined` until the first measurement — render the CSS layout (`@container`) first
8
+ * and use this only where JS needs the number (charts, virtualised lists, overflow menus).
9
+ *
10
+ * ```tsx
11
+ * const { ref, width } = useContainerWidth<HTMLDivElement>();
12
+ * <div ref={ref}>{width && width < 480 ? <Compact /> : <Full />}</div>
13
+ * ```
14
+ */
15
+ export declare function useContainerWidth<T extends Element = HTMLDivElement>(): {
16
+ ref: (node: T | null) => void;
17
+ width: number | undefined;
18
+ height: number | undefined;
19
+ };
@@ -0,0 +1,39 @@
1
+ import * as React from "react";
2
+ /**
3
+ * Measures an element with `ResizeObserver` (content box, rAF-throttled).
4
+ * Width is `undefined` until the first measurement — render the CSS layout (`@container`) first
5
+ * and use this only where JS needs the number (charts, virtualised lists, overflow menus).
6
+ *
7
+ * ```tsx
8
+ * const { ref, width } = useContainerWidth<HTMLDivElement>();
9
+ * <div ref={ref}>{width && width < 480 ? <Compact /> : <Full />}</div>
10
+ * ```
11
+ */
12
+ export function useContainerWidth() {
13
+ const [size, setSize] = React.useState({ width: undefined, height: undefined });
14
+ const observer = React.useRef(null);
15
+ const frame = React.useRef(0);
16
+ const ref = React.useCallback((node) => {
17
+ observer.current?.disconnect();
18
+ cancelAnimationFrame(frame.current);
19
+ if (!node || typeof ResizeObserver === "undefined")
20
+ return;
21
+ const ro = new ResizeObserver((entries) => {
22
+ const entry = entries[0];
23
+ if (!entry)
24
+ return;
25
+ const box = entry.contentBoxSize?.[0];
26
+ const width = box ? box.inlineSize : entry.contentRect.width;
27
+ const height = box ? box.blockSize : entry.contentRect.height;
28
+ cancelAnimationFrame(frame.current);
29
+ frame.current = requestAnimationFrame(() => setSize((prev) => (prev.width === width && prev.height === height ? prev : { width, height })));
30
+ });
31
+ ro.observe(node);
32
+ observer.current = ro;
33
+ }, []);
34
+ React.useEffect(() => () => {
35
+ observer.current?.disconnect();
36
+ cancelAnimationFrame(frame.current);
37
+ }, []);
38
+ return { ref, width: size.width, height: size.height };
39
+ }
@@ -0,0 +1,33 @@
1
+ import * as React from "react";
2
+ /** `useLayoutEffect` on the client, a no-op on the server (no SSR warning). */
3
+ export declare const useIsomorphicLayoutEffect: typeof React.useLayoutEffect;
4
+ /**
5
+ * Keeps a ref pointing at the latest value. Use it to call the newest callback from an
6
+ * effect or event handler without re-subscribing.
7
+ */
8
+ export declare function useLatest<T>(value: T): React.RefObject<T>;
9
+ /** A stable function identity that always calls the latest `fn`. */
10
+ export declare function useEventCallback<A extends unknown[], R>(fn: ((...args: A) => R) | undefined): (...args: A) => R | undefined;
11
+ export interface UseControllableStateOptions<T> {
12
+ /** Controlled value. The state is controlled whenever this is not `undefined`. */
13
+ value?: T;
14
+ /** Initial value for the uncontrolled case. */
15
+ defaultValue: T | (() => T);
16
+ /** Called with the next value whenever it changes (controlled and uncontrolled). */
17
+ onChange?: (value: T) => void;
18
+ /** Component name used in the dev warning when switching controlled ↔ uncontrolled. */
19
+ name?: string;
20
+ }
21
+ /**
22
+ * State that can be controlled (`value` + `onChange`) or uncontrolled (`defaultValue`).
23
+ * The kit's single implementation of the Radix contract (`value` / `defaultValue` / `onValueChange`).
24
+ *
25
+ * ```ts
26
+ * const [open, setOpen] = useControllableState({ value: props.open, defaultValue: props.defaultOpen ?? false, onChange: props.onOpenChange });
27
+ * ```
28
+ *
29
+ * - Empty controlled value is `null` (single) or `[]` (multi) — never `undefined`, which means "uncontrolled".
30
+ * - `onChange` fires only when the value actually changes (`Object.is`).
31
+ * - The setter accepts an updater function. If `T` itself is a function type, wrap it: `set(() => fn)`.
32
+ */
33
+ export declare function useControllableState<T>({ value, defaultValue, onChange, name }: UseControllableStateOptions<T>): readonly [T, (next: T | ((prev: T) => T)) => void];
@@ -0,0 +1,56 @@
1
+ import * as React from "react";
2
+ /** `useLayoutEffect` on the client, a no-op on the server (no SSR warning). */
3
+ export const useIsomorphicLayoutEffect = typeof window !== "undefined" ? React.useLayoutEffect : React.useEffect;
4
+ /**
5
+ * Keeps a ref pointing at the latest value. Use it to call the newest callback from an
6
+ * effect or event handler without re-subscribing.
7
+ */
8
+ export function useLatest(value) {
9
+ const ref = React.useRef(value);
10
+ useIsomorphicLayoutEffect(() => {
11
+ ref.current = value;
12
+ });
13
+ return ref;
14
+ }
15
+ /** A stable function identity that always calls the latest `fn`. */
16
+ export function useEventCallback(fn) {
17
+ const ref = useLatest(fn);
18
+ return React.useCallback((...args) => ref.current?.(...args), [ref]);
19
+ }
20
+ /**
21
+ * State that can be controlled (`value` + `onChange`) or uncontrolled (`defaultValue`).
22
+ * The kit's single implementation of the Radix contract (`value` / `defaultValue` / `onValueChange`).
23
+ *
24
+ * ```ts
25
+ * const [open, setOpen] = useControllableState({ value: props.open, defaultValue: props.defaultOpen ?? false, onChange: props.onOpenChange });
26
+ * ```
27
+ *
28
+ * - Empty controlled value is `null` (single) or `[]` (multi) — never `undefined`, which means "uncontrolled".
29
+ * - `onChange` fires only when the value actually changes (`Object.is`).
30
+ * - The setter accepts an updater function. If `T` itself is a function type, wrap it: `set(() => fn)`.
31
+ */
32
+ export function useControllableState({ value, defaultValue, onChange, name = "Component" }) {
33
+ const isControlled = value !== undefined;
34
+ const [internal, setInternal] = React.useState(defaultValue);
35
+ const current = (isControlled ? value : internal);
36
+ const currentRef = React.useRef(current);
37
+ const controlledRef = React.useRef(isControlled);
38
+ const onChangeRef = useLatest(onChange);
39
+ currentRef.current = current;
40
+ if (process.env.NODE_ENV !== "production" && controlledRef.current !== isControlled) {
41
+ console.warn(`${name} is changing from ${controlledRef.current ? "controlled" : "uncontrolled"} to ${isControlled ? "controlled" : "uncontrolled"}. ` +
42
+ "Decide between using a controlled or uncontrolled value for the lifetime of the component.");
43
+ }
44
+ controlledRef.current = isControlled;
45
+ const setValue = React.useCallback((next) => {
46
+ const resolved = typeof next === "function" ? next(currentRef.current) : next;
47
+ if (Object.is(resolved, currentRef.current))
48
+ return;
49
+ if (!controlledRef.current) {
50
+ currentRef.current = resolved;
51
+ setInternal(resolved);
52
+ }
53
+ onChangeRef.current?.(resolved);
54
+ }, [onChangeRef]);
55
+ return [current, setValue];
56
+ }
@@ -0,0 +1,13 @@
1
+ import * as React from "react";
2
+ /**
3
+ * Keeps `data-fade-start` / `data-fade-end` on a scrolling element while content is hidden on that
4
+ * side. Pair with `data-edge-fade="x" | "y"` (styles/navigation.css) for a cheap mask-image fade —
5
+ * no blur, no extra DOM. Works in RTL (`scrollLeft` is negative there).
6
+ *
7
+ * ```tsx
8
+ * const ref = React.useRef<HTMLDivElement>(null);
9
+ * useEdgeFade(ref, "x");
10
+ * <div ref={ref} data-edge-fade="x" className="overflow-x-auto">…</div>
11
+ * ```
12
+ */
13
+ export declare function useEdgeFade(ref: React.RefObject<HTMLElement | null>, axis: "x" | "y", enabled?: boolean): void;
@@ -0,0 +1,43 @@
1
+ import { useIsomorphicLayoutEffect } from "./use-controllable-state.js";
2
+ /**
3
+ * Keeps `data-fade-start` / `data-fade-end` on a scrolling element while content is hidden on that
4
+ * side. Pair with `data-edge-fade="x" | "y"` (styles/navigation.css) for a cheap mask-image fade —
5
+ * no blur, no extra DOM. Works in RTL (`scrollLeft` is negative there).
6
+ *
7
+ * ```tsx
8
+ * const ref = React.useRef<HTMLDivElement>(null);
9
+ * useEdgeFade(ref, "x");
10
+ * <div ref={ref} data-edge-fade="x" className="overflow-x-auto">…</div>
11
+ * ```
12
+ */
13
+ export function useEdgeFade(ref, axis, enabled = true) {
14
+ useIsomorphicLayoutEffect(() => {
15
+ const el = ref.current;
16
+ if (!el || !enabled)
17
+ return;
18
+ const update = () => {
19
+ const pos = Math.abs(axis === "x" ? el.scrollLeft : el.scrollTop);
20
+ const max = axis === "x" ? el.scrollWidth - el.clientWidth : el.scrollHeight - el.clientHeight;
21
+ toggle(el, "data-fade-start", pos > 1);
22
+ toggle(el, "data-fade-end", max - pos > 1);
23
+ };
24
+ update();
25
+ el.addEventListener("scroll", update, { passive: true });
26
+ const ro = typeof ResizeObserver !== "undefined" ? new ResizeObserver(update) : undefined;
27
+ ro?.observe(el);
28
+ if (el.firstElementChild)
29
+ ro?.observe(el.firstElementChild);
30
+ return () => {
31
+ el.removeEventListener("scroll", update);
32
+ ro?.disconnect();
33
+ el.removeAttribute("data-fade-start");
34
+ el.removeAttribute("data-fade-end");
35
+ };
36
+ }, [ref, axis, enabled]);
37
+ }
38
+ function toggle(el, attr, on) {
39
+ if (on)
40
+ el.setAttribute(attr, "");
41
+ else
42
+ el.removeAttribute(attr);
43
+ }
@@ -0,0 +1,69 @@
1
+ import * as React from "react";
2
+ /**
3
+ * Caret-preserving formatting engine behind CurrencyInput, PhoneInput, IbanInput, IdInput and
4
+ * FormattedInput.
5
+ *
6
+ * The model: a **display** string (what the `<input>` shows, with separators and grouping) and a
7
+ * locale-free **raw** value (decimal string, E.164, compact IBAN). Formatting may add or remove
8
+ * literal characters (spaces, group separators, brackets), so the caret is mapped by counting
9
+ * *significant* characters (`accept`) before it: if the caret sat after the 7th digit before
10
+ * formatting, it sits after the 7th digit after formatting. Backspace / Delete on a literal skip
11
+ * over it and remove the significant character next to it, so separators never "trap" the caret.
12
+ *
13
+ * ```ts
14
+ * const f = useFormattedInput({
15
+ * value, defaultValue, onValueChange,
16
+ * accept: (ch) => /\d/.test(ch),
17
+ * format: (typed) => typed.replace(/\D/g, "").replace(/(\d{4})(?=\d)/g, "$1 "),
18
+ * parse: (display) => display.replace(/\D/g, "") || null,
19
+ * toDisplay: (raw) => raw ?? "",
20
+ * });
21
+ * <input ref={f.ref} {...f.inputProps} />
22
+ * ```
23
+ */
24
+ export interface UseFormattedInputOptions {
25
+ /** Controlled raw value (`null` = empty). `undefined` = uncontrolled. */
26
+ value?: string | null;
27
+ defaultValue?: string | null;
28
+ /** Called with the new raw value whenever it changes. */
29
+ onValueChange?: (raw: string | null, display: string) => void;
30
+ /** Significant characters (kept by `format`, counted for the caret). */
31
+ accept: (ch: string) => boolean;
32
+ /** Typed text → display text. Must keep the order of accepted characters; may drop extras. */
33
+ format: (typed: string) => string;
34
+ /** Display text → raw value (`null` when empty / not a value yet). */
35
+ parse: (display: string) => string | null;
36
+ /** Raw value → display text (initial value, controlled updates). */
37
+ toDisplay: (raw: string | null) => string;
38
+ /** Final polish on blur (pad decimals, full international format…). Default: none. */
39
+ formatOnBlur?: (display: string) => string;
40
+ /** Raw values compare equal (avoid resetting the display for "1250.5" vs "1250.50"). Default `===`. */
41
+ isSameValue?: (a: string | null, b: string | null) => boolean;
42
+ }
43
+ export interface FormattedInputState {
44
+ /** Attach to the `<input>`. */
45
+ ref: React.RefObject<HTMLInputElement | null>;
46
+ display: string;
47
+ raw: string | null;
48
+ /** Spread on the `<input>` (compose your own handlers around them if needed). */
49
+ inputProps: {
50
+ value: string;
51
+ onChange: React.ChangeEventHandler<HTMLInputElement>;
52
+ onKeyDown: React.KeyboardEventHandler<HTMLInputElement>;
53
+ onBlur: React.FocusEventHandler<HTMLInputElement>;
54
+ };
55
+ /** Replaces the current selection with `text` and formats (custom key handling, paste parsing). */
56
+ insert: (text: string) => void;
57
+ /** Sets the display directly (formatted with `format`), keeping the caret at the end. */
58
+ setDisplay: (display: string) => void;
59
+ /** Formats `typed` as if the user produced it with the caret at `caret`. */
60
+ update: (typed: string, caret: number) => void;
61
+ }
62
+ /** Number of characters accepted by `accept` in `s`. */
63
+ export declare function countAccepted(s: string, accept: (ch: string) => boolean): number;
64
+ /**
65
+ * Index just after the `n`-th accepted character of `s` (0 when `n` is 0; the end when `s`
66
+ * has fewer). Works on UTF-16 indexes (all masks in the kit are BMP characters).
67
+ */
68
+ export declare function caretAfterAccepted(s: string, n: number, accept: (ch: string) => boolean): number;
69
+ export declare function useFormattedInput(options: UseFormattedInputOptions): FormattedInputState;
@@ -0,0 +1,152 @@
1
+ "use client";
2
+ import * as React from "react";
3
+ import { useIsomorphicLayoutEffect, useLatest } from "./use-controllable-state.js";
4
+ /** Number of characters accepted by `accept` in `s`. */
5
+ export function countAccepted(s, accept) {
6
+ let n = 0;
7
+ for (const ch of s)
8
+ if (accept(ch))
9
+ n++;
10
+ return n;
11
+ }
12
+ /**
13
+ * Index just after the `n`-th accepted character of `s` (0 when `n` is 0; the end when `s`
14
+ * has fewer). Works on UTF-16 indexes (all masks in the kit are BMP characters).
15
+ */
16
+ export function caretAfterAccepted(s, n, accept) {
17
+ if (n <= 0)
18
+ return 0;
19
+ let seen = 0;
20
+ for (let i = 0; i < s.length; i++) {
21
+ if (accept(s[i])) {
22
+ seen++;
23
+ if (seen === n)
24
+ return i + 1;
25
+ }
26
+ }
27
+ return s.length;
28
+ }
29
+ export function useFormattedInput(options) {
30
+ const opts = useLatest(options);
31
+ const { value } = options;
32
+ const controlled = value !== undefined;
33
+ const ref = React.useRef(null);
34
+ const [display, setDisplayState] = React.useState(() => options.toDisplay(controlled ? value ?? null : options.defaultValue ?? null));
35
+ const displayRef = React.useRef(display);
36
+ displayRef.current = display;
37
+ const lastRaw = React.useRef(controlled ? value ?? null : options.defaultValue ?? null);
38
+ const pendingCaret = React.useRef(null);
39
+ // Controlled value changed from outside → re-derive the display.
40
+ const same = options.isSameValue ?? ((a, b) => a === b);
41
+ if (controlled && !same(value ?? null, lastRaw.current)) {
42
+ lastRaw.current = value ?? null;
43
+ const next = options.toDisplay(value ?? null);
44
+ if (next !== display) {
45
+ displayRef.current = next;
46
+ setDisplayState(next);
47
+ }
48
+ }
49
+ useIsomorphicLayoutEffect(() => {
50
+ const el = ref.current;
51
+ const caret = pendingCaret.current;
52
+ if (el && caret != null && el.ownerDocument.activeElement === el) {
53
+ el.setSelectionRange(caret, caret);
54
+ }
55
+ pendingCaret.current = null;
56
+ });
57
+ const commit = React.useCallback((next, caret) => {
58
+ const o = opts.current;
59
+ const el = ref.current;
60
+ if (el) {
61
+ // Write synchronously so React's controlled-value restore never moves the caret.
62
+ if (el.value !== next)
63
+ el.value = next;
64
+ if (caret != null && el.ownerDocument.activeElement === el)
65
+ el.setSelectionRange(caret, caret);
66
+ }
67
+ pendingCaret.current = caret;
68
+ displayRef.current = next;
69
+ setDisplayState(next);
70
+ const raw = o.parse(next);
71
+ if (!(o.isSameValue ?? ((a, b) => a === b))(raw, lastRaw.current)) {
72
+ lastRaw.current = raw;
73
+ o.onValueChange?.(raw, next);
74
+ }
75
+ }, [opts]);
76
+ const apply = React.useCallback((typed, caret) => {
77
+ const o = opts.current;
78
+ const n = countAccepted(typed.slice(0, caret), o.accept);
79
+ const next = o.format(typed);
80
+ commit(next, caretAfterAccepted(next, n, o.accept));
81
+ }, [opts, commit]);
82
+ const onChange = React.useCallback((e) => {
83
+ const el = e.currentTarget;
84
+ apply(el.value, el.selectionStart ?? el.value.length);
85
+ }, [apply]);
86
+ const onKeyDown = React.useCallback((e) => {
87
+ if (e.defaultPrevented || e.altKey || e.metaKey || e.ctrlKey)
88
+ return;
89
+ if (e.key !== "Backspace" && e.key !== "Delete")
90
+ return;
91
+ const el = e.currentTarget;
92
+ const start = el.selectionStart ?? 0;
93
+ const end = el.selectionEnd ?? start;
94
+ if (start !== end)
95
+ return;
96
+ const s = el.value;
97
+ const accept = opts.current.accept;
98
+ if (e.key === "Backspace") {
99
+ if (start === 0 || accept(s[start - 1]))
100
+ return;
101
+ // A literal before the caret: delete the significant character before it instead.
102
+ let j = start - 1;
103
+ while (j >= 0 && !accept(s[j]))
104
+ j--;
105
+ e.preventDefault();
106
+ if (j < 0) {
107
+ el.setSelectionRange(0, 0);
108
+ return;
109
+ }
110
+ apply(s.slice(0, j) + s.slice(j + 1), j);
111
+ }
112
+ else {
113
+ if (start >= s.length || accept(s[start]))
114
+ return;
115
+ let k = start;
116
+ while (k < s.length && !accept(s[k]))
117
+ k++;
118
+ e.preventDefault();
119
+ if (k >= s.length)
120
+ return;
121
+ apply(s.slice(0, k) + s.slice(k + 1), start);
122
+ }
123
+ }, [opts, apply]);
124
+ const onBlur = React.useCallback(() => {
125
+ const o = opts.current;
126
+ if (!o.formatOnBlur)
127
+ return;
128
+ const next = o.formatOnBlur(displayRef.current);
129
+ if (next !== displayRef.current)
130
+ commit(next, null);
131
+ }, [opts, commit]);
132
+ const insert = React.useCallback((text) => {
133
+ const el = ref.current;
134
+ const s = el?.value ?? displayRef.current;
135
+ const start = el?.selectionStart ?? s.length;
136
+ const end = el?.selectionEnd ?? start;
137
+ apply(s.slice(0, start) + text + s.slice(end), start + text.length);
138
+ }, [apply]);
139
+ const setDisplay = React.useCallback((d) => {
140
+ const next = opts.current.format(d);
141
+ commit(next, next.length);
142
+ }, [opts, commit]);
143
+ return {
144
+ ref,
145
+ display,
146
+ raw: lastRaw.current,
147
+ inputProps: { value: display, onChange, onKeyDown, onBlur },
148
+ insert,
149
+ setDisplay,
150
+ update: apply,
151
+ };
152
+ }
@@ -0,0 +1,80 @@
1
+ import * as React from "react";
2
+ /**
3
+ * Shortcut strings are `+`-separated, case-insensitive: `"mod+k"`, `"shift+?"`, `"esc"`, `"mod+shift+p"`.
4
+ * `mod` is ⌘ on Apple platforms and Ctrl elsewhere. Several shortcuts: pass an array.
5
+ *
6
+ * Key aliases: `esc`, `enter`/`return`, `space`, `tab`, `backspace`, `delete`/`del`, `up`, `down`, `left`, `right`,
7
+ * `pageup`, `pagedown`, `home`, `end`, `plus`, `comma`, `period`, `slash`, `f1`…`f12`. Any other single character
8
+ * matches `event.key`.
9
+ */
10
+ export type Shortcut = string;
11
+ export interface ParsedShortcut {
12
+ key: string;
13
+ mod: boolean;
14
+ ctrl: boolean;
15
+ meta: boolean;
16
+ alt: boolean;
17
+ shift: boolean;
18
+ }
19
+ /** `true` on macOS, iOS and iPadOS. Always `false` on the server. */
20
+ export declare function isApplePlatform(): boolean;
21
+ /**
22
+ * Platform check that is safe for SSR: renders as non-Apple ("Ctrl") on the server and during
23
+ * hydration, then switches to "⌘" on Apple devices without a hydration mismatch.
24
+ */
25
+ export declare function useIsMac(): boolean;
26
+ /** Parses `"mod+shift+k"` into its parts. */
27
+ export declare function parseShortcut(shortcut: Shortcut): ParsedShortcut;
28
+ /** Does this keyboard event match the shortcut? */
29
+ export declare function matchesShortcut(event: KeyboardEvent | React.KeyboardEvent, shortcut: Shortcut | ParsedShortcut, isMac?: boolean): boolean;
30
+ export interface ShortcutKeyLabels {
31
+ mod?: string;
32
+ ctrl?: string;
33
+ alt?: string;
34
+ shift?: string;
35
+ meta?: string;
36
+ }
37
+ /**
38
+ * Canonical key tokens of a shortcut in display order, e.g. `"mod+shift+k"` → `["mod", "shift", "k"]`
39
+ * (Apple order is ⌃ ⌥ ⇧ ⌘; elsewhere Ctrl, Alt, Shift). Kbd uses this to render one keycap per key.
40
+ */
41
+ export declare function shortcutKeys(shortcut: Shortcut, isMac?: boolean): string[];
42
+ /** Display text for one key token (`"mod"` → `"⌘"` / `"Ctrl"`, `"k"` → `"K"`). */
43
+ export declare function formatKey(key: string, isMac?: boolean): string;
44
+ /**
45
+ * Human-readable shortcut: `"mod+k"` → `"⌘K"` on Apple platforms, `"Ctrl+K"` elsewhere.
46
+ * Pass `isMac` explicitly in render code (from `useIsMac()`) so SSR and client agree.
47
+ */
48
+ export declare function formatShortcut(shortcut: Shortcut, options?: {
49
+ isMac?: boolean;
50
+ separator?: string;
51
+ }): string;
52
+ export interface UseHotkeysOptions {
53
+ /** Default `true`. */
54
+ enabled?: boolean;
55
+ /** Call `preventDefault()` on match. Default `true`. */
56
+ preventDefault?: boolean;
57
+ /**
58
+ * Fire while focus is in an input, textarea, select or contenteditable.
59
+ * Default: `true` for shortcuts with Ctrl/⌘/Alt (e.g. `mod+k`), `false` for plain keys (e.g. `/`, `?`, `j`).
60
+ */
61
+ enableOnFormFields?: boolean;
62
+ /** Element to listen on. Default `document`. */
63
+ target?: React.RefObject<HTMLElement | null> | HTMLElement | Document | null;
64
+ /** Default `"keydown"`. */
65
+ event?: "keydown" | "keyup";
66
+ /** Ignore auto-repeat while the key is held. Default `false`. */
67
+ ignoreRepeat?: boolean;
68
+ }
69
+ /**
70
+ * Registers global (or element-scoped) keyboard shortcuts.
71
+ *
72
+ * ```ts
73
+ * useHotkeys("mod+k", () => setOpen(true));
74
+ * useHotkeys(["j", "down"], next, { enabled: listFocused });
75
+ * ```
76
+ *
77
+ * IME composition is ignored. The kit itself only registers `mod+k`, `mod+\` and opt-in layout
78
+ * shortcuts; everything else belongs to the app (avoid clashing with browsers and rich-text editors).
79
+ */
80
+ export declare function useHotkeys(shortcuts: Shortcut | Shortcut[], handler: (event: KeyboardEvent) => void, options?: UseHotkeysOptions): void;