@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,144 @@
1
+ import * as React from "react";
2
+ declare const listLabels: {
3
+ selected: string;
4
+ selectAll: string;
5
+ selectAllCount: string;
6
+ allSelected: string;
7
+ clear: string;
8
+ bulkActions: string;
9
+ filters: string;
10
+ filtersCount: string;
11
+ search: string;
12
+ view: string;
13
+ results: string;
14
+ loading: string;
15
+ refreshing: string;
16
+ noResults: string;
17
+ clearFilters: string;
18
+ error: string;
19
+ retry: string;
20
+ };
21
+ export type ListLayoutLabels = Partial<typeof listLabels>;
22
+ export declare const listLayoutVariants: (props?: ({
23
+ width?: "content" | "full" | "wide" | null | undefined;
24
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
25
+ export interface ListLayoutProps extends React.HTMLAttributes<HTMLDivElement> {
26
+ /** `full` (default) · `wide` 90rem · `content` 76rem. */
27
+ width?: "full" | "wide" | "content";
28
+ /** The toolbar (and the bulk bar that replaces it) stick under the top bar. Default `true`. */
29
+ stickyToolbar?: boolean;
30
+ /**
31
+ * Distance from the top of the scroll container where the toolbar sticks. Default
32
+ * `"var(--topbar-h)"` (under the App shell top bar). Use `0` inside your own scroll box.
33
+ */
34
+ stickyTop?: number | string;
35
+ }
36
+ /**
37
+ * The standard index page: Page header, toolbar (search, filters, saved views, view switch),
38
+ * bulk-action bar, content (table, grid or board) and footer pagination — with one consistent
39
+ * set of loading, empty, no-results and error states. Arrangement and states only: filtering,
40
+ * selection and data fetching stay in your Data Table / Filter bar / data layer.
41
+ *
42
+ * ```tsx
43
+ * <ListLayout>
44
+ * <PageHeader title="Contacts" meta={<Badge>1,284</Badge>} actions={<Button variant="primary">New contact</Button>} />
45
+ * <ListToolbar search={<Input … />} filters={<FilterBar … />} viewSwitch={<ListViewSwitch … />} />
46
+ * <ListBulkBar count={selected.length} total={1284} onClear={clear}>…</ListBulkBar>
47
+ * <ListContent state={state}>{table}</ListContent>
48
+ * <ListFooter><PaginationBar … /></ListFooter>
49
+ * </ListLayout>
50
+ * ```
51
+ *
52
+ * Responds to its own width (container queries), so it behaves the same in a split view.
53
+ */
54
+ export declare const ListLayout: React.ForwardRefExoticComponent<ListLayoutProps & React.RefAttributes<HTMLDivElement>>;
55
+ export interface ListToolbarProps extends React.HTMLAttributes<HTMLDivElement> {
56
+ /** The search field. Wrapped in a `role="search"` landmark (only the search, not the whole bar). */
57
+ search?: React.ReactNode;
58
+ /** Filter chips / Filter bar. Below ~640px of width they move into a "Filters" sheet. */
59
+ filters?: React.ReactNode;
60
+ /** Number of active filters, shown on the collapsed "Filters (3)" button. */
61
+ filterCount?: number;
62
+ /** Saved views (tabs or a menu) — the first row on wide screens. */
63
+ views?: React.ReactNode;
64
+ /** Table / grid / board switch — `ListViewSwitch`. */
65
+ viewSwitch?: React.ReactNode;
66
+ /** Trailing actions: export, column settings, "⋯". */
67
+ actions?: React.ReactNode;
68
+ /** Accessible name of the search landmark. Default "Search". */
69
+ searchLabel?: string;
70
+ labels?: ListLayoutLabels;
71
+ }
72
+ /**
73
+ * The row above the content. Sticky under the top bar on the bar surface; while a selection is
74
+ * active the `ListBulkBar` takes its place.
75
+ */
76
+ export declare const ListToolbar: React.ForwardRefExoticComponent<ListToolbarProps & React.RefAttributes<HTMLDivElement>>;
77
+ export interface ListViewOption {
78
+ value: string;
79
+ label: string;
80
+ icon?: React.ReactNode;
81
+ }
82
+ export interface ListViewSwitchProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "defaultValue" | "dir"> {
83
+ options: ListViewOption[];
84
+ value?: string;
85
+ defaultValue?: string;
86
+ onValueChange?: (value: string) => void;
87
+ /** Accessible name of the group. Default "View". */
88
+ label?: string;
89
+ labels?: ListLayoutLabels;
90
+ }
91
+ /**
92
+ * Table / grid / board switch: a segmented radio group (one tab stop, arrow keys move, Space selects). Labels
93
+ * collapse to icons below ~640px of list width; the accessible name stays.
94
+ */
95
+ export declare const ListViewSwitch: React.ForwardRefExoticComponent<ListViewSwitchProps & React.RefAttributes<HTMLDivElement>>;
96
+ export interface ListBulkBarProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
97
+ /** Selected rows. The bar shows while `count > 0` and takes the toolbar's place. */
98
+ count: number;
99
+ /** Rows across all pages. With `onSelectAll`, shows "Select all {total}". */
100
+ total?: number;
101
+ /** Extends the selection to every row that matches the current filters (all pages). */
102
+ onSelectAll?: () => void;
103
+ /** `true` once the selection covers all `total` rows ("All 1,284 selected"). */
104
+ allSelected?: boolean;
105
+ onClear: () => void;
106
+ /** Bulk actions (buttons, an ActionMenu). */
107
+ children?: React.ReactNode;
108
+ labels?: ListLayoutLabels;
109
+ }
110
+ /**
111
+ * The selection bar. Presentational: the Data Table (or your list) owns the selection. Announces
112
+ * "{n} selected" politely; Esc inside the bar clears the selection and focus returns to the toolbar.
113
+ */
114
+ export declare const ListBulkBar: React.ForwardRefExoticComponent<ListBulkBarProps & React.RefAttributes<HTMLDivElement>>;
115
+ /** What the content area shows. */
116
+ export type ListContentState = "ready" | "loading" | "refreshing" | "empty" | "no-results" | "error";
117
+ export interface ListContentProps extends React.HTMLAttributes<HTMLDivElement> {
118
+ state?: ListContentState;
119
+ /** First-use empty state (nothing exists yet). Default: a generic `EmptyState`. */
120
+ empty?: React.ReactNode;
121
+ /** Filters match nothing. Default: `EmptyState kind="no-results"` with "Clear filters" when `onClearFilters` is set. */
122
+ noResults?: React.ReactNode;
123
+ /** Load failed. Default: `EmptyState kind="error"` with "Try again" when `onRetry` is set. */
124
+ error?: React.ReactNode;
125
+ onRetry?: () => void;
126
+ onClearFilters?: () => void;
127
+ /** Loading placeholder. Default: skeleton rows. */
128
+ skeleton?: React.ReactNode;
129
+ /** Skeleton rows for the default placeholder. Default 6. */
130
+ skeletonRows?: number;
131
+ /** Total results, announced politely when the list becomes ready ("1,284 results"). */
132
+ resultCount?: number;
133
+ labels?: ListLayoutLabels;
134
+ }
135
+ /**
136
+ * The content slot (table, grid or board) with every state. `refreshing` keeps the content and
137
+ * shows a thin indeterminate bar; all states set `aria-busy` while work is pending.
138
+ */
139
+ export declare const ListContent: React.ForwardRefExoticComponent<ListContentProps & React.RefAttributes<HTMLDivElement>>;
140
+ export interface ListFooterProps extends React.HTMLAttributes<HTMLDivElement> {
141
+ }
142
+ /** The row under the content: `PaginationBar`, "Load more", a summary line. */
143
+ export declare const ListFooter: React.ForwardRefExoticComponent<ListFooterProps & React.RefAttributes<HTMLDivElement>>;
144
+ export {};
@@ -0,0 +1,210 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { ToggleGroup as ToggleGroupPrimitive } from "radix-ui";
5
+ import { cva } from "class-variance-authority";
6
+ import { SlidersHorizontal, X } from "lucide-react";
7
+ import { cn } from "../lib/cn.js";
8
+ import { SrName } from "../lib/sr-name.js";
9
+ import { useLabels } from "../lib/labels.js";
10
+ import { useFormat } from "../lib/locale.js";
11
+ import { Button } from "./button.js";
12
+ import { EmptyState } from "./empty-state.js";
13
+ import { Progress } from "./progress.js";
14
+ import { SkeletonRow } from "./skeleton.js";
15
+ import { Sheet, SheetBody, SheetContent, SheetHeader, SheetTrigger } from "./sheet.js";
16
+ /* ------------------------------------------------------------------ */
17
+ /* Labels & context */
18
+ /* ------------------------------------------------------------------ */
19
+ const listLabels = {
20
+ selected: "{count, plural, one {# selected} other {# selected}}",
21
+ selectAll: "Select all",
22
+ selectAllCount: "Select all {total}",
23
+ allSelected: "All {total} selected",
24
+ clear: "Clear selection",
25
+ bulkActions: "Bulk actions",
26
+ filters: "Filters",
27
+ filtersCount: "Filters ({count})",
28
+ search: "Search",
29
+ view: "View",
30
+ results: "{count, plural, one {# result} other {# results}}",
31
+ loading: "Loading…",
32
+ refreshing: "Updating results…",
33
+ noResults: "No results match your filters",
34
+ clearFilters: "Clear filters",
35
+ error: "Couldn't load this list",
36
+ retry: "Try again",
37
+ };
38
+ const ListLayoutContext = React.createContext(null);
39
+ /* ------------------------------------------------------------------ */
40
+ /* ListLayout */
41
+ /* ------------------------------------------------------------------ */
42
+ export const listLayoutVariants = cva("@container/list relative mx-auto flex w-full min-w-0 flex-col", {
43
+ variants: {
44
+ width: {
45
+ /** Edge to edge of the page area. */
46
+ full: "max-w-none",
47
+ /** 90rem — big tables and boards. */
48
+ wide: "max-w-(--container-wide)",
49
+ /** 76rem — most index pages. */
50
+ content: "max-w-(--container)",
51
+ },
52
+ },
53
+ defaultVariants: { width: "full" },
54
+ });
55
+ /**
56
+ * The standard index page: Page header, toolbar (search, filters, saved views, view switch),
57
+ * bulk-action bar, content (table, grid or board) and footer pagination — with one consistent
58
+ * set of loading, empty, no-results and error states. Arrangement and states only: filtering,
59
+ * selection and data fetching stay in your Data Table / Filter bar / data layer.
60
+ *
61
+ * ```tsx
62
+ * <ListLayout>
63
+ * <PageHeader title="Contacts" meta={<Badge>1,284</Badge>} actions={<Button variant="primary">New contact</Button>} />
64
+ * <ListToolbar search={<Input … />} filters={<FilterBar … />} viewSwitch={<ListViewSwitch … />} />
65
+ * <ListBulkBar count={selected.length} total={1284} onClear={clear}>…</ListBulkBar>
66
+ * <ListContent state={state}>{table}</ListContent>
67
+ * <ListFooter><PaginationBar … /></ListFooter>
68
+ * </ListLayout>
69
+ * ```
70
+ *
71
+ * Responds to its own width (container queries), so it behaves the same in a split view.
72
+ */
73
+ export const ListLayout = React.forwardRef(function ListLayout({ width = "full", stickyToolbar = true, stickyTop, className, style, ...props }, ref) {
74
+ const [bulkActive, setBulkActive] = React.useState(false);
75
+ const toolbarRef = React.useRef(null);
76
+ const ctx = React.useMemo(() => ({ stickyToolbar, bulkActive, setBulkActive, toolbarRef }), [stickyToolbar, bulkActive]);
77
+ const top = stickyTop === undefined ? undefined : typeof stickyTop === "number" ? `${stickyTop}px` : stickyTop;
78
+ return (_jsx(ListLayoutContext.Provider, { value: ctx, children: _jsx("div", { ref: ref, "data-slot": "list-layout", "data-bulk": bulkActive ? "" : undefined, className: cn(listLayoutVariants({ width }), className), style: top !== undefined ? { "--list-sticky-top": top, ...style } : style, ...props }) }));
79
+ });
80
+ const stickyBar = "sticky top-(--list-sticky-top,var(--topbar-h)) z-(--z-sticky)";
81
+ /**
82
+ * The row above the content. Sticky under the top bar on the bar surface; while a selection is
83
+ * active the `ListBulkBar` takes its place.
84
+ */
85
+ export const ListToolbar = React.forwardRef(function ListToolbar({ search, filters, filterCount, views, viewSwitch, actions, searchLabel, labels, className, children, ...props }, ref) {
86
+ const t = useLabels("list", listLabels, labels);
87
+ const ctx = React.useContext(ListLayoutContext);
88
+ const setRefs = React.useCallback((node) => {
89
+ if (ctx)
90
+ ctx.toolbarRef.current = node;
91
+ if (typeof ref === "function")
92
+ ref(node);
93
+ else if (ref)
94
+ ref.current = node;
95
+ }, [ctx, ref]);
96
+ const hidden = ctx?.bulkActive ?? false;
97
+ const sticky = ctx?.stickyToolbar ?? false;
98
+ const filterLabel = filterCount ? t("filtersCount", { count: filterCount }) : t("filters");
99
+ return (_jsxs("div", { ref: setRefs, "data-slot": "list-toolbar", hidden: hidden || undefined, className: cn("flex flex-col gap-2.5 py-3", sticky && cn(stickyBar, "surface-bar -mx-[var(--page-px,1.5rem)] border-b px-[var(--page-px,1.5rem)]"), !sticky && "border-b border-line", className), ...props, children: [views ? _jsx("div", { "data-slot": "list-toolbar-views", className: "-mt-1 min-w-0", children: views }) : null, _jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-2", children: [search ? (_jsx("div", { role: "search", "aria-label": searchLabel ?? t("search"), "data-slot": "list-toolbar-search", className: "min-w-0 flex-[1_1_10rem] @2xl/list:max-w-80", children: search })) : null, filters ? (_jsxs(_Fragment, { children: [_jsx("div", { "data-slot": "list-toolbar-filters", className: "order-last hidden w-full min-w-0 flex-wrap items-center gap-1.5 @2xl/list:flex @5xl/list:order-none @5xl/list:w-auto @5xl/list:flex-[1_1_0]", children: filters }), _jsxs(Sheet, { children: [_jsx(SheetTrigger, { asChild: true, children: _jsx(Button, { className: "@2xl/list:hidden", children: _jsxs(SrName, { name: filterLabel, children: [_jsx(SlidersHorizontal, { "aria-hidden": true }), _jsx("span", { className: "hidden @sm/list:inline", children: t("filters") }), filterCount ? (_jsx("span", { className: "tabular -me-1 inline-flex h-5 min-w-5 items-center justify-center rounded-full bg-accent-soft px-1.5 text-[11px] font-semibold text-accent-ink", children: filterCount })) : null] }) }) }), _jsxs(SheetContent, { side: "end", size: "sm", children: [_jsx(SheetHeader, { title: t("filters") }), _jsx(SheetBody, { children: _jsx("div", { className: "flex flex-col items-stretch gap-2 [&>*]:w-full", children: filters }) })] })] })] })) : (_jsx("div", { className: "flex-1" })), viewSwitch || actions ? (_jsxs("div", { "data-slot": "list-toolbar-end", className: "ms-auto flex shrink-0 items-center gap-2", children: [viewSwitch, actions] })) : null] }), children] }));
100
+ });
101
+ /**
102
+ * Table / grid / board switch: a segmented radio group (one tab stop, arrow keys move, Space selects). Labels
103
+ * collapse to icons below ~640px of list width; the accessible name stays.
104
+ */
105
+ export const ListViewSwitch = React.forwardRef(function ListViewSwitch({ options, value: valueProp, defaultValue, onValueChange, label, labels, className, ...props }, ref) {
106
+ const t = useLabels("list", listLabels, labels);
107
+ const [inner, setInner] = React.useState(defaultValue ?? options[0]?.value ?? "");
108
+ const value = valueProp ?? inner;
109
+ return (_jsx(ToggleGroupPrimitive.Root, { ref: ref, type: "single", "aria-label": label ?? t("view"), value: value, onValueChange: (next) => {
110
+ if (!next)
111
+ return; // a view switch always has a view
112
+ if (valueProp === undefined)
113
+ setInner(next);
114
+ onValueChange?.(next);
115
+ }, "data-slot": "list-view-switch", className: cn("inline-flex h-(--control-h) items-stretch gap-0.5 rounded-ui border border-line bg-surface-2 p-[3px]", className), ...props, children: options.map((o) => (_jsxs(ToggleGroupPrimitive.Item, { value: o.value, "aria-label": o.label, title: o.label, className: cn("inline-flex items-center gap-1.5 rounded-[calc(var(--radius)-5px)] px-2.5 text-[13px] font-medium text-fg-muted outline-none transition-[color,background-color,box-shadow] duration-150 focus-ring", "hover:text-fg data-[state=on]:bg-surface data-[state=on]:text-fg data-[state=on]:shadow-[0_1px_2px_rgb(0_0_0/0.1),0_0_0_1px_var(--line)] glass:data-[state=on]:bg-field", "[&_svg]:size-4 [&_svg]:shrink-0"), children: [o.icon ? _jsx("span", { "aria-hidden": true, className: "inline-flex", children: o.icon }) : null, _jsx("span", { className: cn(o.icon && "hidden @2xl/list:inline"), children: o.label })] }, o.value))) }));
116
+ });
117
+ /**
118
+ * The selection bar. Presentational: the Data Table (or your list) owns the selection. Announces
119
+ * "{n} selected" politely; Esc inside the bar clears the selection and focus returns to the toolbar.
120
+ */
121
+ export const ListBulkBar = React.forwardRef(function ListBulkBar({ count, total, onSelectAll, allSelected, onClear, labels, className, children, onKeyDown, ...props }, ref) {
122
+ const t = useLabels("list", listLabels, labels);
123
+ const f = useFormat();
124
+ const ctx = React.useContext(ListLayoutContext);
125
+ const active = count > 0;
126
+ const setBulkActive = ctx?.setBulkActive;
127
+ const toolbarRef = ctx?.toolbarRef;
128
+ const restoreFocus = React.useRef(false);
129
+ React.useEffect(() => {
130
+ setBulkActive?.(active);
131
+ if (!active && restoreFocus.current) {
132
+ restoreFocus.current = false;
133
+ // After the toolbar is shown again, put focus back where the user was working.
134
+ requestAnimationFrame(() => {
135
+ const first = toolbarRef?.current?.querySelector("input, button:not([disabled]), [href], [tabindex]:not([tabindex='-1'])");
136
+ first?.focus();
137
+ });
138
+ }
139
+ }, [active, setBulkActive, toolbarRef]);
140
+ React.useEffect(() => () => setBulkActive?.(false), [setBulkActive]);
141
+ const clear = () => {
142
+ restoreFocus.current = true;
143
+ onClear();
144
+ };
145
+ const totalText = total !== undefined ? f.number(total) : "";
146
+ return (_jsxs(_Fragment, { children: [_jsx("div", { "aria-live": "polite", className: "sr-only", children: active ? (allSelected && total !== undefined ? t("allSelected", { total: totalText }) : t("selected", { count })) : "" }), active ? (_jsxs("div", { ref: ref, role: "region", "aria-label": t("bulkActions"), "data-slot": "list-bulk-bar", className: cn(ctx?.stickyToolbar && stickyBar, "ui-rise my-2 flex min-h-(--control-h) flex-wrap items-center gap-x-3 gap-y-2 rounded-ui-lg py-1.5 ps-1.5 pe-1.5 surface-popover", className), onKeyDown: (e) => {
147
+ onKeyDown?.(e);
148
+ if (!e.defaultPrevented && e.key === "Escape") {
149
+ e.preventDefault();
150
+ clear();
151
+ }
152
+ }, ...props, children: [_jsx("span", { className: "tabular inline-flex h-[calc(var(--control-h)-0.75rem)] items-center rounded-[calc(var(--radius)-4px)] bg-accent-soft px-2.5 text-[13px] font-semibold text-accent-ink", children: allSelected && total !== undefined ? t("allSelected", { total: totalText }) : t("selected", { count }) }), onSelectAll && total !== undefined && total > count && !allSelected ? (_jsx(Button, { variant: "link", size: "sm", onClick: onSelectAll, className: "text-[13px]", children: t("selectAllCount", { total: totalText }) })) : null, _jsxs("div", { className: "ms-auto flex flex-wrap items-center gap-1.5", children: [children, _jsx("span", { "aria-hidden": true, className: "mx-0.5 h-5 w-px bg-line" }), _jsxs(Button, { variant: "ghost", size: "sm", onClick: clear, "aria-keyshortcuts": "Escape", children: [_jsx(X, { "aria-hidden": true }), " ", _jsx("span", { className: "hidden @md/list:inline", children: t("clear") }), _jsx("span", { className: "sr-only @md/list:hidden", children: t("clear") })] })] })] })) : null] }));
153
+ });
154
+ /**
155
+ * The content slot (table, grid or board) with every state. `refreshing` keeps the content and
156
+ * shows a thin indeterminate bar; all states set `aria-busy` while work is pending.
157
+ */
158
+ export const ListContent = React.forwardRef(function ListContent({ state = "ready", empty, noResults, error, onRetry, onClearFilters, skeleton, skeletonRows = 6, resultCount, labels, className, children, ...props }, ref) {
159
+ const t = useLabels("list", listLabels, labels);
160
+ const busy = state === "loading" || state === "refreshing";
161
+ // Announce state changes once (not on every render).
162
+ const [announcement, setAnnouncement] = React.useState("");
163
+ const prev = React.useRef(null);
164
+ React.useEffect(() => {
165
+ if (prev.current === null) {
166
+ prev.current = state;
167
+ return;
168
+ }
169
+ if (prev.current === state)
170
+ return;
171
+ prev.current = state;
172
+ if (state === "loading")
173
+ setAnnouncement(t("loading"));
174
+ else if (state === "refreshing")
175
+ setAnnouncement(t("refreshing"));
176
+ else if (state === "no-results")
177
+ setAnnouncement(t("noResults"));
178
+ else if (state === "error")
179
+ setAnnouncement(t("error"));
180
+ else if (state === "ready" && resultCount !== undefined)
181
+ setAnnouncement(t("results", { count: resultCount }));
182
+ else
183
+ setAnnouncement("");
184
+ }, [state, resultCount, t]);
185
+ let body;
186
+ if (state === "loading") {
187
+ body = skeleton ?? (_jsx("div", { "data-slot": "list-skeleton", className: "divide-y divide-line overflow-hidden rounded-ui-lg border border-line", children: Array.from({ length: skeletonRows }, (_, i) => (_jsx(SkeletonRow, { columns: 4 }, i))) }));
188
+ }
189
+ else if (state === "empty") {
190
+ body = empty ?? _jsx(EmptyState, { kind: "first-use", size: "lg" });
191
+ }
192
+ else if (state === "no-results") {
193
+ body =
194
+ noResults ??
195
+ (_jsx(EmptyState, { kind: "no-results", role: "none", title: t("noResults"), actions: onClearFilters ? _jsx(Button, { onClick: onClearFilters, children: t("clearFilters") }) : undefined }));
196
+ }
197
+ else if (state === "error") {
198
+ body =
199
+ error ??
200
+ (_jsx(EmptyState, { kind: "error", title: t("error"), actions: onRetry ? _jsx(Button, { onClick: onRetry, children: t("retry") }) : undefined }));
201
+ }
202
+ else {
203
+ body = children;
204
+ }
205
+ return (_jsxs("div", { ref: ref, "data-slot": "list-content", "data-state": state, "aria-busy": busy || undefined, className: cn("relative min-w-0 flex-1 py-4", className), ...props, children: [state === "refreshing" ? (_jsx(Progress, { "aria-label": t("refreshing"), value: null, size: "xs", className: "absolute inset-x-0 top-0 rounded-none bg-transparent" })) : null, _jsx("div", { className: cn(state === "refreshing" && "opacity-70 transition-opacity motion-reduce:transition-none"), children: body }), _jsx("div", { "aria-live": "polite", role: "status", className: "sr-only", children: announcement })] }));
206
+ });
207
+ /** The row under the content: `PaginationBar`, "Load more", a summary line. */
208
+ export const ListFooter = React.forwardRef(function ListFooter({ className, ...props }, ref) {
209
+ return _jsx("div", { ref: ref, "data-slot": "list-footer", className: cn("flex flex-wrap items-center gap-3 border-t border-line pt-3 pb-1", className), ...props });
210
+ });
@@ -0,0 +1,33 @@
1
+ import * as React from "react";
2
+ /** One option of the `NativeSelect` `items` shorthand. */
3
+ export interface NativeSelectOption {
4
+ value: string;
5
+ label: string;
6
+ disabled?: boolean;
7
+ /** Options with the same `group` render inside one `<optgroup>`. */
8
+ group?: string;
9
+ }
10
+ export interface NativeSelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, "size"> {
11
+ size?: "sm" | "md" | "lg";
12
+ /** `"default"` field look · `"ghost"` borderless · `"pill"` rounded. */
13
+ variant?: "default" | "ghost" | "pill";
14
+ invalid?: boolean;
15
+ /** Disabled, empty first option shown until the user picks (use with `required` and `defaultValue=""`). */
16
+ placeholder?: string;
17
+ /** Options shorthand; or pass `<option>` / `<optgroup>` children. */
18
+ items?: NativeSelectOption[];
19
+ /** Classes for the `<select>`; `className` goes on the wrapper. */
20
+ selectClassName?: string;
21
+ }
22
+ /**
23
+ * A styled native `<select>` — the platform picker on phones, zero JavaScript to open, and the
24
+ * native contract (`value` / `defaultValue` / `onChange(event)`). Use it for mobile-heavy website
25
+ * forms (booking, contact, checkout). Same box as Input and Select.
26
+ *
27
+ * ```tsx
28
+ * <Field label="Country">
29
+ * <NativeSelect name="country" defaultValue="" placeholder="Choose a country" required items={countries} />
30
+ * </Field>
31
+ * ```
32
+ */
33
+ export declare const NativeSelect: React.ForwardRefExoticComponent<NativeSelectProps & React.RefAttributes<HTMLSelectElement>>;
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { ChevronDown } from "lucide-react";
5
+ import { cn } from "../lib/cn.js";
6
+ import { useFieldControl } from "../lib/field-context.js";
7
+ import { controlVariants } from "../lib/variants.js";
8
+ /**
9
+ * A styled native `<select>` — the platform picker on phones, zero JavaScript to open, and the
10
+ * native contract (`value` / `defaultValue` / `onChange(event)`). Use it for mobile-heavy website
11
+ * forms (booking, contact, checkout). Same box as Input and Select.
12
+ *
13
+ * ```tsx
14
+ * <Field label="Country">
15
+ * <NativeSelect name="country" defaultValue="" placeholder="Choose a country" required items={countries} />
16
+ * </Field>
17
+ * ```
18
+ */
19
+ export const NativeSelect = React.forwardRef(function NativeSelect({ className, selectClassName, size = "md", variant = "default", invalid, placeholder, items, children, ...rest }, ref) {
20
+ const props = useFieldControl({ ...rest, "aria-invalid": invalid ? true : rest["aria-invalid"] });
21
+ const { readOnly, ...selectProps } = props;
22
+ let options = children;
23
+ if (items) {
24
+ const groups = new Map();
25
+ for (const item of items) {
26
+ const key = item.group ?? "";
27
+ groups.set(key, [...(groups.get(key) ?? []), item]);
28
+ }
29
+ options = [...groups.entries()].map(([group, list]) => {
30
+ const opts = list.map((o) => (_jsx("option", { value: o.value, disabled: o.disabled, children: o.label }, o.value)));
31
+ return group ? (_jsx("optgroup", { label: group, children: opts }, group)) : (_jsx(React.Fragment, { children: opts }, "_"));
32
+ });
33
+ }
34
+ return (_jsxs("div", { "data-slot": "native-select", "data-size": size, "data-readonly": readOnly ? "" : undefined, className: cn(controlVariants({ size, variant: variant === "pill" ? "default" : variant, pill: variant === "pill" }), "gap-0 px-0", className), children: [_jsxs("select", { ref: ref, ...selectProps, "aria-readonly": readOnly || undefined, onChange: readOnly ? undefined : selectProps.onChange, onKeyDown: (e) => {
35
+ if (readOnly && e.key !== "Tab")
36
+ e.preventDefault();
37
+ selectProps.onKeyDown?.(e);
38
+ }, onMouseDown: (e) => {
39
+ if (readOnly)
40
+ e.preventDefault();
41
+ selectProps.onMouseDown?.(e);
42
+ }, className: cn("h-full w-full min-w-0 cursor-pointer appearance-none truncate rounded-[inherit] bg-transparent text-[length:inherit] text-fg outline-none", "disabled:cursor-not-allowed [&:has(option[value='']:checked)]:text-fg-subtle", size === "sm" ? "ps-2.5 pe-7" : size === "lg" ? "ps-3.5 pe-10" : "ps-3 pe-9",
43
+ // the dropdown list itself uses the system colours
44
+ "[&_option]:bg-popover [&_option]:text-fg", readOnly && "cursor-default", selectClassName), children: [placeholder !== undefined ? (
45
+ // Hidden, not disabled: a disabled selected option is painted as GrayText (fails 4.5:1);
46
+ // an empty value still fails `required`, and the list no longer offers it as a choice.
47
+ _jsx("option", { value: "", hidden: true, children: placeholder })) : null, options] }), readOnly ? null : (_jsx(ChevronDown, { "aria-hidden": true, className: cn("pointer-events-none absolute text-fg-subtle", size === "sm" ? "end-2.5" : size === "lg" ? "end-3.5" : "end-3") }))] }));
48
+ });
@@ -0,0 +1,127 @@
1
+ import * as React from "react";
2
+ import { NavigationMenu as RadixNav } from "radix-ui";
3
+ declare const navLabels: {
4
+ label: string;
5
+ open: string;
6
+ close: string;
7
+ title: string;
8
+ };
9
+ type NavLabels = Partial<typeof navLabels>;
10
+ /**
11
+ * A site navigation entry. One source for the desktop `NavigationMenu` and the mobile `MobileNav`.
12
+ * `children` makes it a dropdown; `featured` adds a highlighted card to the panel.
13
+ */
14
+ export interface SiteNavItem {
15
+ id?: string;
16
+ label: string;
17
+ href?: string;
18
+ description?: string;
19
+ icon?: React.ReactNode;
20
+ children?: SiteNavItem[];
21
+ /** Panel layout for an item with children. Default `"list"`. */
22
+ layout?: NavigationMenuLayout;
23
+ /** `layout="featured"`: the highlighted card on the start side of the panel. */
24
+ featured?: {
25
+ title: string;
26
+ description?: string;
27
+ href: string;
28
+ eyebrow?: string;
29
+ };
30
+ }
31
+ type NavigationMenuLayout = "list" | "grid-2" | "featured";
32
+ export interface NavigationMenuProps extends React.ComponentPropsWithoutRef<typeof RadixNav.Root> {
33
+ /** `bar` (in a header, default) or `floating` (glass pill). */
34
+ variant?: "bar" | "floating";
35
+ /** Render the shared animated panel (`NavigationMenuViewport`). Default `true`; `false` drops each panel under its trigger. */
36
+ viewport?: boolean;
37
+ /** Data-driven menu. Or compose `NavigationMenuList` children yourself. */
38
+ items?: SiteNavItem[];
39
+ labels?: NavLabels;
40
+ }
41
+ /**
42
+ * A website's top navigation, including mega menus (Radix NavigationMenu: disclosure-based site
43
+ * navigation with hover intent, arrow keys and Escape). Admin panels use Sidebar instead.
44
+ *
45
+ * ```tsx
46
+ * <NavigationMenu items={nav} /> // data-driven
47
+ * <NavigationMenu>
48
+ * <NavigationMenuList>
49
+ * <NavigationMenuItem>
50
+ * <NavigationMenuTrigger>Products</NavigationMenuTrigger>
51
+ * <NavigationMenuContent layout="grid-2">
52
+ * <NavigationMenuLink href="/vtag" title="vTag" description="NFC business cards" />
53
+ * </NavigationMenuContent>
54
+ * </NavigationMenuItem>
55
+ * <NavigationMenuItem><NavigationMenuLink href="/pricing" variant="top">Pricing</NavigationMenuLink></NavigationMenuItem>
56
+ * </NavigationMenuList>
57
+ * </NavigationMenu>
58
+ * ```
59
+ */
60
+ export declare const NavigationMenu: React.ForwardRefExoticComponent<NavigationMenuProps & React.RefAttributes<HTMLElement>>;
61
+ /** The row of top-level items. */
62
+ export declare const NavigationMenuList: React.ForwardRefExoticComponent<Omit<RadixNav.NavigationMenuListProps & React.RefAttributes<HTMLUListElement>, "ref"> & React.RefAttributes<HTMLUListElement>>;
63
+ /** One top-level item (a trigger + content, or a plain link). */
64
+ export declare const NavigationMenuItem: React.ForwardRefExoticComponent<Omit<RadixNav.NavigationMenuItemProps & React.RefAttributes<HTMLLIElement>, "ref"> & React.RefAttributes<HTMLLIElement>>;
65
+ /** Opens a panel. Hover (with intent delay), click, Enter/Space or ↓. */
66
+ export declare const NavigationMenuTrigger: React.ForwardRefExoticComponent<Omit<RadixNav.NavigationMenuTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
67
+ export interface NavigationMenuContentProps extends React.ComponentPropsWithoutRef<typeof RadixNav.Content> {
68
+ /** `list` (one column) · `grid-2` (two columns) · `featured` (highlight card + list). */
69
+ layout?: NavigationMenuLayout;
70
+ /** Without the shared viewport: render the panel as its own popover under the trigger. */
71
+ inline?: boolean;
72
+ }
73
+ /** The panel of an item. */
74
+ export declare const NavigationMenuContent: React.ForwardRefExoticComponent<NavigationMenuContentProps & React.RefAttributes<HTMLDivElement>>;
75
+ /** The shared, animated container all panels render into. Rendered by `NavigationMenu` unless `viewport={false}`. */
76
+ export declare const NavigationMenuViewport: React.ForwardRefExoticComponent<Omit<RadixNav.NavigationMenuViewportProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
77
+ /** A list of links inside a panel (`ul`). */
78
+ export declare const NavigationMenuGroup: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLUListElement> & {
79
+ heading?: React.ReactNode;
80
+ } & React.RefAttributes<HTMLUListElement>>;
81
+ export interface NavigationMenuLinkProps extends Omit<React.ComponentPropsWithoutRef<typeof RadixNav.Link>, "title" | "href"> {
82
+ href: string;
83
+ /** `panel` (rich link in a panel, default) or `top` (a top-level link in the bar). */
84
+ variant?: "panel" | "top";
85
+ /** Panel links: the bold line. Falls back to `children`. */
86
+ title?: React.ReactNode;
87
+ description?: React.ReactNode;
88
+ icon?: React.ReactNode;
89
+ /** Current page. Default: derived from `currentPath` (VamosProvider). */
90
+ active?: boolean;
91
+ }
92
+ /** A link — in the bar (`variant="top"`) or in a panel with icon and description. Uses the app's router `Link`. */
93
+ export declare const NavigationMenuLink: React.ForwardRefExoticComponent<NavigationMenuLinkProps & React.RefAttributes<HTMLAnchorElement>>;
94
+ /** The highlighted card of a `featured` panel. */
95
+ export declare function NavigationMenuFeatured({ title, description, href, eyebrow, className }: {
96
+ title: string;
97
+ description?: string;
98
+ href: string;
99
+ eyebrow?: string;
100
+ className?: string;
101
+ }): React.JSX.Element;
102
+ /** Optional arrow under the open trigger. */
103
+ export declare const NavigationMenuIndicator: React.ForwardRefExoticComponent<Omit<RadixNav.NavigationMenuIndicatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
104
+ export interface MobileNavProps {
105
+ items: SiteNavItem[];
106
+ /** Extra content at the bottom of the sheet (CTA buttons, language switch). */
107
+ footer?: React.ReactNode;
108
+ /** Brand or title shown in the sheet header. Default "Menu". */
109
+ title?: React.ReactNode;
110
+ open?: boolean;
111
+ defaultOpen?: boolean;
112
+ onOpenChange?: (open: boolean) => void;
113
+ /** Class names for the trigger button. Hide it on desktop, e.g. `"md:hidden"`. */
114
+ className?: string;
115
+ labels?: NavLabels;
116
+ }
117
+ /**
118
+ * The mobile counterpart of `NavigationMenu`: a menu button that opens a side sheet with the same
119
+ * items, groups as an accordion. Following a link closes the sheet.
120
+ *
121
+ * ```tsx
122
+ * <NavigationMenu items={nav} className="max-md:hidden" />
123
+ * <MobileNav items={nav} className="md:hidden" footer={<Button variant="primary" block>Book a demo</Button>} />
124
+ * ```
125
+ */
126
+ export declare function MobileNav({ items, footer, title, open, defaultOpen, onOpenChange, className, labels }: MobileNavProps): React.JSX.Element;
127
+ export {};