@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,159 @@
1
+ import * as React from "react";
2
+ import { type VamosLinkComponent, type VamosProviderProps } from "../lib/provider.js";
3
+ import type { MenuEntry } from "../lib/variants.js";
4
+ import { type BadgeSpec, type NavIcon, type NavNode } from "../lib/nav.js";
5
+ import { type CommandAction, type CommandSource } from "./command.js";
6
+ import { type UserMenuProps } from "./top-bar.js";
7
+ declare const appShellLabels: {
8
+ skip: string;
9
+ navigation: string;
10
+ appMenu: string;
11
+ workspace: string;
12
+ goTo: string;
13
+ apps: string;
14
+ switchTo: string;
15
+ newItem: string;
16
+ noApps: string;
17
+ noAppsDescription: string;
18
+ pageChanged: string;
19
+ };
20
+ export type AppShellLabels = typeof appShellLabels;
21
+ export interface AppLink {
22
+ id: string;
23
+ label: string;
24
+ href: string;
25
+ icon?: NavIcon;
26
+ external?: boolean;
27
+ }
28
+ /** One app (CMS, CRM, HR, PRM…) on the shared shell. Define these in a client module (they hold components). */
29
+ export interface AppDefinition {
30
+ /** `"site"` | `"crm"` | `"people"`… */
31
+ id: string;
32
+ name: string;
33
+ description?: string;
34
+ icon?: React.ComponentType<{
35
+ className?: string;
36
+ strokeWidth?: number;
37
+ }> | React.ReactNode;
38
+ /** App home. An absolute URL (separately deployed app) triggers a full navigation. */
39
+ href: string;
40
+ /** Path prefix that belongs to the app. Default: `href`. */
41
+ base?: string;
42
+ /** `data-accent` override for the whole shell while this app is active (e.g. CRM = `"ocean"`). */
43
+ accent?: string;
44
+ nav: NavNode[];
45
+ /** Commands for ⌘K while this app is active. */
46
+ commands?: CommandAction[];
47
+ /** Record search sources (stay registered when another app is active). */
48
+ sources?: CommandSource[];
49
+ /** Contents of the top bar's "New ▾" button. */
50
+ newMenu?: MenuEntry[];
51
+ /** Top-bar links that only make sense in this app ("View site" in the Site app). */
52
+ links?: AppLink[];
53
+ /** Hide the app entirely unless `can(permission)`. */
54
+ permission?: string;
55
+ }
56
+ export interface AppShellProviderProps extends Partial<Omit<VamosProviderProps, "children" | "Link">> {
57
+ apps: AppDefinition[];
58
+ /** Default: the app whose `base` / `href` is the longest prefix of `currentPath`, else the last one used. */
59
+ activeApp?: string;
60
+ /** A menu shared by every app (users, settings), shown at the bottom of the sidebar. */
61
+ sharedNav?: NavNode[];
62
+ /** Commands available in every app. */
63
+ commands?: CommandAction[];
64
+ /** Feature flags / module toggles for nav items with `feature`. */
65
+ features?: Record<string, boolean | undefined>;
66
+ /** Rail preference — read the `ui-sidebar` cookie on the server (`parseSidebarCookie`) to avoid a flash. `undefined` = no preference. */
67
+ defaultCollapsed?: boolean;
68
+ /** Default: writes the `ui-sidebar` cookie. */
69
+ onCollapsedChange?: (collapsed: boolean) => void;
70
+ workspaces?: {
71
+ id: string;
72
+ name: string;
73
+ logo?: string;
74
+ }[];
75
+ activeWorkspace?: string;
76
+ onWorkspaceChange?: (id: string) => void;
77
+ /** Global shortcuts: `mod+k` (palette) and `mod+\\` (rail). Default `true`; turn off for shells embedded in a page. */
78
+ shortcuts?: boolean;
79
+ /** Router link (Next `Link`). Also accepted as `Link`. Omit when a `VamosProvider` above already sets it. */
80
+ linkComponent?: VamosLinkComponent;
81
+ Link?: VamosLinkComponent;
82
+ children: React.ReactNode;
83
+ }
84
+ /**
85
+ * The app bridge for the shell: apps, shared nav, permissions, collapse preference, the ⌘K
86
+ * registry (with "Go to" commands derived from every accessible app's nav) and app switching.
87
+ * Router pieces come from the surrounding `VamosProvider`, or pass them here.
88
+ */
89
+ export declare function AppShellProvider(props: AppShellProviderProps): React.JSX.Element;
90
+ /**
91
+ * The shell state: active app, nav, rail, mobile nav, app switching. Throws outside `AppShellProvider`.
92
+ */
93
+ export declare function useAppShell(): {
94
+ activeApp: AppDefinition | undefined;
95
+ apps: AppDefinition[];
96
+ nav: NavNode[];
97
+ sharedNav: NavNode[];
98
+ collapsed: boolean;
99
+ setCollapsed: (v: boolean) => void;
100
+ openMobileNav: () => void;
101
+ closeMobileNav: () => void;
102
+ mobileNavOpen: boolean;
103
+ trail: string[];
104
+ can: (permission: string) => boolean;
105
+ switchApp: (id: string) => void;
106
+ };
107
+ /** `true` inside an `AppShellProvider`. */
108
+ export declare function useInAppShell(): boolean;
109
+ /** Breadcrumb built from the shell's active trail (used by `PageHeader breadcrumb="auto"`). */
110
+ export declare function AppShellBreadcrumb({ includeApp, className }: {
111
+ includeApp?: boolean;
112
+ className?: string;
113
+ }): React.JSX.Element | null;
114
+ export interface AppShellProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "dir"> {
115
+ /** Replace the default sidebar (AppSwitcher + SidebarNav + shared nav + collapse). `false` = none. */
116
+ sidebar?: React.ReactNode | false;
117
+ /** Replace the default top bar. `false` = none. */
118
+ topbar?: React.ReactNode | false;
119
+ /** Slot above the top bar (offline, trial, maintenance banner). */
120
+ banner?: React.ReactNode;
121
+ /** Notification center in the default top bar (`<NotificationCenter adapter={…} />`). */
122
+ notifications?: React.ReactNode;
123
+ /** Extra default top-bar actions (theme switch, help). */
124
+ actions?: React.ReactNode;
125
+ /** User menu in the default top bar. */
126
+ user?: UserMenuProps;
127
+ /** Live sidebar badges by nav item id. */
128
+ badges?: Record<string, BadgeSpec | undefined>;
129
+ /** Extra sidebar footer content (above the collapse button). */
130
+ sidebarFooter?: React.ReactNode;
131
+ /** Footer link in the app switcher ("Manage apps & modules…"). */
132
+ appSwitcherFooter?: React.ReactNode;
133
+ /** `sidebar` (default) or `topnav` (portal-style: top-level links in the top bar, no sidebar). */
134
+ layout?: "sidebar" | "topnav";
135
+ /** Permissions still loading: sidebar skeleton. */
136
+ loading?: boolean;
137
+ /** Move focus to `main` and announce the page title after route changes. Default `true`. */
138
+ announceRouteChanges?: boolean;
139
+ /** `screen` fills the viewport (default); `fill` fills the parent (embedded previews). */
140
+ height?: "screen" | "fill";
141
+ /** Mount the ⌘K palette, Toaster and confirm dialog. Default `true`. */
142
+ globals?: boolean;
143
+ labels?: Partial<AppShellLabels>;
144
+ }
145
+ /**
146
+ * The one shell every app runs in: sidebar, top bar, content, skip link, mobile sheet nav, ⌘K
147
+ * palette, toasts and confirm. Switching apps swaps the nav, commands, "New" menu, links and
148
+ * accent; everything else stays. Use inside `AppShellProvider`.
149
+ *
150
+ * ```tsx
151
+ * <AppShellProvider apps={[siteApp, crmApp]} sharedNav={shared} currentPath={pathname} linkComponent={Link} navigate={router.push}>
152
+ * <AppShell user={{ name: "Ada Lovelace", email: "ada@northwind.io", items: account }} notifications={<NotificationCenter adapter={inbox} />}>
153
+ * {children}
154
+ * </AppShell>
155
+ * </AppShellProvider>
156
+ * ```
157
+ */
158
+ export declare const AppShell: React.ForwardRefExoticComponent<AppShellProps & React.RefAttributes<HTMLDivElement>>;
159
+ export {};
@@ -0,0 +1,289 @@
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 { ArrowUpRight, ChevronDown, Plus } from "lucide-react";
5
+ import { cn } from "../lib/cn.js";
6
+ import { useLabels } from "../lib/labels.js";
7
+ import { SmartLink, useCan, useLink, useNavigation, VamosProvider } from "../lib/provider.js";
8
+ import { ThemeScope } from "../lib/theme-scope.js";
9
+ import { useContainerWidth } from "../lib/use-container-width.js";
10
+ import { filterNav, flattenNav, isAbsoluteHref, matchPath, navItems, navTrailItems, resolveActive, SIDEBAR_COOKIE, } from "../lib/nav.js";
11
+ import { Button } from "./button.js";
12
+ import { Breadcrumb } from "./breadcrumb.js";
13
+ import { DialogTitle } from "./dialog.js";
14
+ import { Sheet, SheetContent } from "./sheet.js";
15
+ import { TooltipProvider } from "./tooltip.js";
16
+ import { Toaster } from "./toast.js";
17
+ import { ConfirmProvider } from "./alert-dialog.js";
18
+ import { EmptyState } from "./empty-state.js";
19
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuEntries, DropdownMenuTrigger } from "./dropdown-menu.js";
20
+ import { CommandPalette, CommandProvider, createCommandRegistry, useRegisterCommands } from "./command.js";
21
+ import { AppSwitcher, Sidebar, SidebarCollapseButton, SidebarContent, SidebarFooter, SidebarHeader, SidebarNav, SidebarSkeleton, } from "./sidebar.js";
22
+ import { TopBar, TopBarActions, TopBarMenuButton, TopBarSearch, TopBarSeparator, TopBarShellContext, TopBarSpacer, TopBarStart, UserMenu } from "./top-bar.js";
23
+ const appShellLabels = {
24
+ skip: "Skip to content",
25
+ navigation: "Navigation",
26
+ appMenu: "{app} menu",
27
+ workspace: "Workspace",
28
+ goTo: "Go to",
29
+ apps: "Apps",
30
+ switchTo: "Switch to {app}",
31
+ newItem: "New",
32
+ noApps: "No apps available",
33
+ noAppsDescription: "Your account doesn't have access to any app yet. Ask an administrator to invite you.",
34
+ pageChanged: "{title}",
35
+ };
36
+ const AppShellContext = React.createContext(null);
37
+ /** Rail state as resolved by the layout (preference or width). */
38
+ const CollapsedContext = React.createContext(false);
39
+ function writeCookie(v) {
40
+ try {
41
+ document.cookie = `${SIDEBAR_COOKIE}=${v ? "1" : "0"}; path=/; max-age=31536000; samesite=lax`;
42
+ }
43
+ catch {
44
+ /* no document */
45
+ }
46
+ }
47
+ function appFor(apps, path) {
48
+ if (!path)
49
+ return undefined;
50
+ let best;
51
+ for (const a of apps) {
52
+ const base = a.base ?? a.href;
53
+ const score = matchPath(base, path);
54
+ if (score >= 0 && (!best || score > best.score))
55
+ best = { app: a, score };
56
+ }
57
+ return best?.app;
58
+ }
59
+ /**
60
+ * The app bridge for the shell: apps, shared nav, permissions, collapse preference, the ⌘K
61
+ * registry (with "Go to" commands derived from every accessible app's nav) and app switching.
62
+ * Router pieces come from the surrounding `VamosProvider`, or pass them here.
63
+ */
64
+ export function AppShellProvider(props) {
65
+ const { linkComponent, Link, currentPath, navigate, can, locale, messages, dir, timeZone, currency, Image, media, ...rest } = props;
66
+ const bridge = linkComponent ?? Link ?? currentPath ?? navigate ?? can ?? locale ?? messages ?? dir ?? timeZone ?? currency ?? Image ?? media;
67
+ const inner = _jsx(AppShellState, { ...rest });
68
+ if (bridge === undefined)
69
+ return inner;
70
+ return (_jsx(VamosProvider, { Link: linkComponent ?? Link, currentPath: currentPath, navigate: navigate, can: can, locale: locale, messages: messages, dir: dir, timeZone: timeZone, currency: currency, Image: Image, media: media, children: inner }));
71
+ }
72
+ function AppShellState({ apps: allApps, activeApp: activeAppId, sharedNav = [], commands, features, defaultCollapsed, onCollapsedChange, workspaces, activeWorkspace, onWorkspaceChange, shortcuts = true, children, }) {
73
+ const can = useCan();
74
+ const { currentPath, navigate } = useNavigation();
75
+ const apps = React.useMemo(() => allApps.filter((a) => !a.permission || can(a.permission)), [allApps, can]);
76
+ const routeApp = activeAppId ? apps.find((a) => a.id === activeAppId) : appFor(apps, currentPath);
77
+ const [lastApp, setLastApp] = React.useState(routeApp?.id);
78
+ React.useEffect(() => {
79
+ if (routeApp)
80
+ setLastApp(routeApp.id);
81
+ }, [routeApp]);
82
+ const activeApp = routeApp ?? apps.find((a) => a.id === lastApp) ?? apps[0];
83
+ const [preference, setPreference] = React.useState(defaultCollapsed);
84
+ const setCollapsed = React.useCallback((v) => {
85
+ setPreference(v);
86
+ if (onCollapsedChange)
87
+ onCollapsedChange(v);
88
+ else
89
+ writeCookie(v);
90
+ }, [onCollapsedChange]);
91
+ const [mobileNavOpen, setMobileNavOpen] = React.useState(false);
92
+ React.useEffect(() => setMobileNavOpen(false), [currentPath]);
93
+ const nav = React.useMemo(() => filterNav(activeApp?.nav ?? [], { can, features }), [activeApp, can, features]);
94
+ const visibleSharedNav = React.useMemo(() => filterNav(sharedNav, { can, features }), [sharedNav, can, features]);
95
+ const trail = React.useMemo(() => resolveActive([...nav, ...visibleSharedNav], currentPath).trail, [nav, visibleSharedNav, currentPath]);
96
+ const switchApp = React.useCallback((id) => {
97
+ const a = apps.find((x) => x.id === id);
98
+ if (!a)
99
+ return;
100
+ setLastApp(id);
101
+ if (isAbsoluteHref(a.href) && typeof window !== "undefined")
102
+ window.location.assign(a.href);
103
+ else
104
+ navigate(a.href);
105
+ }, [apps, navigate]);
106
+ const [registry] = React.useState(() => createCommandRegistry());
107
+ // Static record sources of every app stay registered.
108
+ React.useEffect(() => {
109
+ const off = apps.flatMap((a) => a.sources ?? []).map((s) => registry.registerSource(s));
110
+ return () => off.forEach((f) => f());
111
+ }, [apps, registry]);
112
+ const value = React.useMemo(() => ({
113
+ apps,
114
+ activeApp,
115
+ sharedNav,
116
+ nav,
117
+ visibleSharedNav,
118
+ features,
119
+ trail,
120
+ preference,
121
+ setCollapsed,
122
+ mobileNavOpen,
123
+ setMobileNavOpen,
124
+ switchApp,
125
+ can,
126
+ workspaces,
127
+ activeWorkspace,
128
+ onWorkspaceChange,
129
+ registry,
130
+ commands,
131
+ currentPath,
132
+ shortcuts,
133
+ }), [apps, activeApp, sharedNav, nav, visibleSharedNav, features, trail, preference, setCollapsed, mobileNavOpen, switchApp, can, workspaces, activeWorkspace, onWorkspaceChange, registry, commands, currentPath, shortcuts]);
134
+ return (_jsx(AppShellContext.Provider, { value: value, children: _jsxs(CommandProvider, { registry: registry, shortcut: shortcuts ? "mod+k" : false, children: [_jsx(ShellCommands, {}), children] }) }));
135
+ }
136
+ /** Registers app commands, "Go to" commands from every accessible app's nav, and app switching. */
137
+ function ShellCommands() {
138
+ const ctx = React.useContext(AppShellContext);
139
+ const t = useLabels("appShell", appShellLabels);
140
+ const { apps, activeApp, sharedNav, can, features, switchApp, commands } = ctx;
141
+ const multi = apps.length > 1;
142
+ const goTo = React.useMemo(() => {
143
+ const out = [];
144
+ for (const a of apps) {
145
+ for (const it of flattenNav(filterNav(a.nav, { can, features }))) {
146
+ out.push({
147
+ id: `nav.${a.id}.${it.id}`,
148
+ title: it.trail.join(" › "),
149
+ group: t("goTo"),
150
+ href: it.href,
151
+ icon: it.icon,
152
+ keywords: [...(it.keywords ?? []), ...(it.group ? [it.group] : []), a.name],
153
+ app: multi ? a.name : undefined,
154
+ priority: a.id === activeApp?.id ? 1 : 0,
155
+ });
156
+ }
157
+ }
158
+ for (const it of flattenNav(filterNav(sharedNav, { can, features }))) {
159
+ out.push({ id: `nav.shared.${it.id}`, title: it.trail.join(" › "), group: t("goTo"), href: it.href, icon: it.icon, keywords: it.keywords, priority: 0.5 });
160
+ }
161
+ if (multi) {
162
+ for (const a of apps) {
163
+ if (a.id === activeApp?.id)
164
+ continue;
165
+ out.push({ id: `app.switch.${a.id}`, title: t("switchTo", { app: a.name }), subtitle: a.description, group: t("apps"), icon: a.icon, perform: () => switchApp(a.id) });
166
+ }
167
+ }
168
+ return out;
169
+ }, [apps, activeApp, sharedNav, can, features, multi, switchApp, t]);
170
+ useRegisterCommands(goTo, [goTo]);
171
+ useRegisterCommands(React.useMemo(() => (activeApp?.commands ?? []).map((c) => ({ ...c, app: c.app ?? (multi ? activeApp?.name : undefined) })), [activeApp, multi]), [activeApp]);
172
+ useRegisterCommands(commands ?? [], [commands]);
173
+ return null;
174
+ }
175
+ /**
176
+ * The shell state: active app, nav, rail, mobile nav, app switching. Throws outside `AppShellProvider`.
177
+ */
178
+ export function useAppShell() {
179
+ const ctx = React.useContext(AppShellContext);
180
+ const collapsed = React.useContext(CollapsedContext);
181
+ if (!ctx)
182
+ throw new Error("useAppShell must be used inside <AppShellProvider>.");
183
+ return {
184
+ activeApp: ctx.activeApp,
185
+ apps: ctx.apps,
186
+ nav: ctx.nav,
187
+ sharedNav: ctx.visibleSharedNav,
188
+ collapsed,
189
+ setCollapsed: ctx.setCollapsed,
190
+ openMobileNav: () => ctx.setMobileNavOpen(true),
191
+ closeMobileNav: () => ctx.setMobileNavOpen(false),
192
+ mobileNavOpen: ctx.mobileNavOpen,
193
+ trail: ctx.trail,
194
+ can: ctx.can,
195
+ switchApp: ctx.switchApp,
196
+ };
197
+ }
198
+ /** `true` inside an `AppShellProvider`. */
199
+ export function useInAppShell() {
200
+ return React.useContext(AppShellContext) !== null;
201
+ }
202
+ /** Breadcrumb built from the shell's active trail (used by `PageHeader breadcrumb="auto"`). */
203
+ export function AppShellBreadcrumb({ includeApp = true, className }) {
204
+ const ctx = React.useContext(AppShellContext);
205
+ if (!ctx || !ctx.trail.length)
206
+ return null;
207
+ const crumbs = navTrailItems([...ctx.nav, ...ctx.visibleSharedNav], ctx.trail);
208
+ // An "All posts" index child duplicates its parent: keep one.
209
+ const items = crumbs.filter((c, i) => !(i > 0 && c.href && c.href === crumbs[i - 1].href));
210
+ const all = [...(includeApp && ctx.apps.length > 1 && ctx.activeApp ? [{ label: ctx.activeApp.name, href: ctx.activeApp.href }] : []), ...items.map((c) => ({ label: c.label, href: c.href }))];
211
+ // A one-item trail only repeats the page title.
212
+ if (all.length < 2)
213
+ return null;
214
+ return _jsx(Breadcrumb, { size: "sm", items: all, className: className });
215
+ }
216
+ /**
217
+ * The one shell every app runs in: sidebar, top bar, content, skip link, mobile sheet nav, ⌘K
218
+ * palette, toasts and confirm. Switching apps swaps the nav, commands, "New" menu, links and
219
+ * accent; everything else stays. Use inside `AppShellProvider`.
220
+ *
221
+ * ```tsx
222
+ * <AppShellProvider apps={[siteApp, crmApp]} sharedNav={shared} currentPath={pathname} linkComponent={Link} navigate={router.push}>
223
+ * <AppShell user={{ name: "Ada Lovelace", email: "ada@northwind.io", items: account }} notifications={<NotificationCenter adapter={inbox} />}>
224
+ * {children}
225
+ * </AppShell>
226
+ * </AppShellProvider>
227
+ * ```
228
+ */
229
+ export const AppShell = React.forwardRef(function AppShell({ sidebar, topbar, banner, notifications, actions, user, badges, sidebarFooter, appSwitcherFooter, layout = "sidebar", loading, announceRouteChanges = true, height = "screen", globals = true, labels, className, children, ...props }, ref) {
230
+ const ctx = React.useContext(AppShellContext);
231
+ if (!ctx)
232
+ throw new Error("AppShell must be used inside <AppShellProvider>.");
233
+ const t = useLabels("appShell", appShellLabels, labels);
234
+ const { ref: measureRef, width } = useContainerWidth();
235
+ const mainRef = React.useRef(null);
236
+ const columnRef = React.useRef(null);
237
+ const [announcement, setAnnouncement] = React.useState("");
238
+ const { activeApp, currentPath } = ctx;
239
+ // 768–1279px: rail unless the user chose otherwise.
240
+ const collapsed = ctx.preference ?? (width !== undefined && width >= 768 && width < 1280);
241
+ const first = React.useRef(true);
242
+ React.useEffect(() => {
243
+ if (first.current) {
244
+ first.current = false;
245
+ return;
246
+ }
247
+ if (!announceRouteChanges)
248
+ return;
249
+ columnRef.current?.scrollTo?.({ top: 0 });
250
+ mainRef.current?.focus({ preventScroll: true });
251
+ const id = setTimeout(() => setAnnouncement(typeof document !== "undefined" ? document.title : ""), 60);
252
+ return () => clearTimeout(id);
253
+ }, [currentPath, announceRouteChanges]);
254
+ const shellBridge = React.useMemo(() => ({ openMobileNav: () => ctx.setMobileNavOpen(true), mobileNavOpen: ctx.mobileNavOpen }), [ctx]);
255
+ if (!ctx.apps.length || !activeApp) {
256
+ return (_jsx("div", { ref: ref, className: cn("grid place-items-center bg-scene p-6", height === "screen" ? "min-h-dvh" : "h-full", className), ...props, children: _jsx(EmptyState, { kind: "forbidden", size: "lg", as: "h2", title: t("noApps"), description: t("noAppsDescription") }) }));
257
+ }
258
+ const sidebarBody = (mode) => (_jsxs(_Fragment, { children: [_jsx(SidebarHeader, { children: _jsx(AppSwitcher, { apps: ctx.apps.map((a) => ({ id: a.id, name: a.name, description: a.description, icon: a.icon, href: a.href })), activeApp: activeApp.id, onSelect: ctx.switchApp, workspaces: ctx.workspaces, activeWorkspace: ctx.activeWorkspace, onWorkspaceChange: ctx.onWorkspaceChange, footer: appSwitcherFooter }) }), _jsx(SidebarContent, { "aria-label": t("appMenu", { app: activeApp.name }), children: loading ? _jsx(SidebarSkeleton, {}) : _jsx(SidebarNav, { items: ctx.nav, badges: badges, trail: ctx.trail }) }), sidebarFooter ? _jsx(SidebarFooter, { children: sidebarFooter }) : null, ctx.visibleSharedNav.length && !loading ? (_jsx(SidebarFooter, { children: _jsx(SidebarNav, { "aria-label": t("workspace"), items: ctx.visibleSharedNav, badges: badges, trail: ctx.trail }) })) : null, mode === "desktop" ? (_jsx(SidebarFooter, { children: _jsx(SidebarCollapseButton, {}) })) : null] }));
259
+ const defaultSidebar = (_jsx(Sidebar, { collapsed: collapsed, onCollapsedChange: ctx.setCollapsed, shortcut: ctx.shortcuts ? "mod+\\" : false, className: "h-full", children: sidebarBody("desktop") }));
260
+ const links = activeApp.links ?? [];
261
+ const defaultTopbar = (_jsxs(TopBar, { scrollTarget: columnRef, children: [_jsxs(TopBarStart, { children: [_jsx(TopBarMenuButton, {}), layout === "topnav" ? _jsx("span", { className: "shrink-0 font-display text-[length:calc(19px*var(--display-scale))] leading-none text-fg", children: activeApp.name }) : null, layout === "topnav" ? _jsx(TopNavLinks, { nav: ctx.nav, trail: ctx.trail, label: t("appMenu", { app: activeApp.name }) }) : null] }), _jsx(TopBarSearch, {}), _jsx(TopBarSpacer, {}), _jsxs(TopBarActions, { children: [actions, actions && (links.length || notifications || activeApp.newMenu || user) ? _jsx(TopBarSeparator, {}) : null, links.map((l) => {
262
+ const Icon = l.icon;
263
+ const ext = l.external ?? isAbsoluteHref(l.href);
264
+ return (_jsx(Button, { asChild: true, variant: "ghost", size: "sm", className: "@max-[640px]/topbar:hidden", children: _jsxs(SmartLink, { href: l.href, external: ext, children: [Icon ? _jsx(Icon, { "aria-hidden": true }) : ext ? _jsx(ArrowUpRight, { "aria-hidden": true }) : null, l.label] }) }, l.id));
265
+ }), notifications, activeApp.newMenu?.length ? (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "primary", size: "sm", children: [_jsx(Plus, { "aria-hidden": true }), _jsx("span", { className: "@max-[480px]/topbar:sr-only", children: t("newItem") }), _jsx(ChevronDown, { "aria-hidden": true, className: "-me-0.5 opacity-70" })] }) }), _jsx(DropdownMenuContent, { align: "end", children: _jsx(DropdownMenuEntries, { items: activeApp.newMenu }) })] })) : null, user ? _jsx(UserMenu, { ...user }) : null] })] }));
266
+ const showSidebar = layout === "sidebar" && sidebar !== false;
267
+ const shell = (_jsx(ThemeScope, { accent: activeApp.accent, className: cn("relative w-full overflow-hidden bg-transparent", height === "screen" ? "h-dvh" : "h-full"), children: _jsx(TopBarShellContext.Provider, { value: shellBridge, children: _jsxs(CollapsedContext.Provider, { value: collapsed, children: [_jsxs("div", { ref: (node) => {
268
+ measureRef(node);
269
+ if (typeof ref === "function")
270
+ ref(node);
271
+ else if (ref)
272
+ ref.current = node;
273
+ }, "data-slot": "app-shell", "data-app": activeApp.id, "data-layout": layout, "data-collapsed": collapsed ? "" : undefined, className: cn("vui-app-shell flex h-full w-full min-w-0", className), ...props, children: [_jsx("a", { href: "#vui-main", className: "vui-skip-link rounded-ui-sm bg-fg px-3 py-2 text-[13px] font-medium text-scene focus-ring", onClick: (e) => {
274
+ e.preventDefault();
275
+ mainRef.current?.focus();
276
+ }, children: t("skip") }), showSidebar ? _jsx("div", { className: "relative z-(--z-nav) h-full shrink-0 @max-[767px]/shell:hidden", children: sidebar ?? defaultSidebar }) : null, _jsxs("div", { ref: columnRef, "data-slot": "app-shell-column", className: "flex h-full min-w-0 flex-1 flex-col overflow-y-auto overscroll-contain", children: [banner, topbar === false ? null : (topbar ?? defaultTopbar), _jsx("main", { ref: mainRef, id: "vui-main", tabIndex: -1, "data-slot": "app-shell-main", className: "min-w-0 flex-1 px-4 py-6 outline-none [--page-px:1rem] @min-[640px]/shell:px-6 @min-[640px]/shell:py-7 @min-[640px]/shell:[--page-px:1.5rem] @min-[1024px]/shell:px-8 @min-[1024px]/shell:[--page-px:2rem]", children: children })] })] }), (showSidebar || layout === "topnav") && sidebar !== false ? (_jsx(Sheet, { open: ctx.mobileNavOpen, onOpenChange: ctx.setMobileNavOpen, children: _jsxs(SheetContent, { side: "start", size: "sm", hideClose: true, className: "max-w-[86vw] border-0 p-0", children: [_jsx(DialogTitle, { className: "sr-only", children: t("navigation") }), _jsx(Sidebar, { mode: "mobile", onNavigate: () => ctx.setMobileNavOpen(false), className: "h-full", children: sidebarBody("mobile") })] }) })) : null, _jsx("div", { "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: announcement ? t("pageChanged", { title: announcement }) : "" })] }) }) }));
277
+ if (!globals)
278
+ return shell;
279
+ return (_jsx(TooltipProvider, { children: _jsxs(ConfirmProvider, { children: [shell, _jsx(CommandPalette, {}), _jsx(Toaster, {})] }) }));
280
+ });
281
+ function TopNavLinks({ nav, trail, label }) {
282
+ const Link = useLink();
283
+ return (_jsx("nav", { "aria-label": label, className: "ms-1 flex min-w-0 items-center gap-0.5 overflow-x-auto scrollbar-none @max-[767px]/shell:hidden", children: navItems(nav)
284
+ .filter((it) => it.href)
285
+ .map((it) => {
286
+ const active = trail[0] === it.id;
287
+ return (_jsx(Link, { href: it.href, "aria-current": active ? "page" : undefined, className: cn("shrink-0 rounded-ui-sm px-2.5 py-1.5 text-[13.5px] transition-colors focus-ring", active ? "bg-selected font-medium text-fg" : "text-fg-muted hover:bg-hover hover:text-fg"), children: it.label }, it.id));
288
+ }) }));
289
+ }
@@ -0,0 +1,96 @@
1
+ import * as React from "react";
2
+ /** One file attached to a record. */
3
+ export interface AttachmentData {
4
+ id: string;
5
+ /** File name with extension ("Master services agreement.pdf"). */
6
+ name: string;
7
+ /** Size in bytes. */
8
+ size: number;
9
+ /** MIME type. Used with the extension to pick the icon. */
10
+ mime: string;
11
+ /** Download / open URL. Without `onPreview` the name links here. */
12
+ url?: string;
13
+ /** Image thumbnail (grid layout and image files). */
14
+ thumbUrl?: string;
15
+ uploadedBy?: string;
16
+ /** ISO instant or `YYYY-MM-DD`. */
17
+ uploadedAt?: string;
18
+ /** Default `"ready"`. */
19
+ status?: "uploading" | "processing" | "ready" | "error";
20
+ /** 0–100 while uploading. */
21
+ progress?: number;
22
+ /** Error message for `status: "error"`. */
23
+ error?: string;
24
+ }
25
+ export type AttachmentKind = "image" | "pdf" | "document" | "spreadsheet" | "presentation" | "archive" | "audio" | "video" | "code" | "text" | "other";
26
+ /** Splits "contract.final.pdf" into `["contract.final", ".pdf"]` (no extension → `[name, ""]`). */
27
+ export declare function splitFileName(name: string): [base: string, ext: string];
28
+ /** Picks the file family from MIME type and extension — drives the icon and its tint. */
29
+ export declare function attachmentKind(mime: string | undefined, name?: string): AttachmentKind;
30
+ export declare const attachmentLabels: {
31
+ list: string;
32
+ empty: string;
33
+ preview: string;
34
+ download: string;
35
+ remove: string;
36
+ retry: string;
37
+ uploading: string;
38
+ progress: string;
39
+ processing: string;
40
+ failed: string;
41
+ add: string;
42
+ removing: string;
43
+ };
44
+ export type AttachmentListLabels = Partial<typeof attachmentLabels>;
45
+ export interface AttachmentIconProps extends React.HTMLAttributes<HTMLSpanElement> {
46
+ mime?: string;
47
+ name?: string;
48
+ /** Tile size. Default `"md"` (36px). `"lg"` is the grid tile. */
49
+ size?: "sm" | "md" | "lg";
50
+ }
51
+ /** Mime-family tile: tinted icon, plus the extension in mono on larger tiles. Decorative. */
52
+ export declare function AttachmentIcon({ mime, name, size, className, style, ...props }: AttachmentIconProps): React.JSX.Element;
53
+ /** File name that truncates its base but always keeps the extension visible ("Quarterly board rep….pdf"). */
54
+ export declare function AttachmentName({ name, className, ...props }: React.HTMLAttributes<HTMLSpanElement> & {
55
+ name: string;
56
+ }): React.JSX.Element;
57
+ export interface AttachmentListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
58
+ items: AttachmentData[];
59
+ /** `list` (rows with meta), `grid` (thumbnail tiles) or `chips` (inline, inside comments and forms). Default `"list"`. */
60
+ layout?: "list" | "grid" | "chips";
61
+ /** Row height and text size. Default `"md"`. */
62
+ size?: "sm" | "md";
63
+ /** Makes the file name a button (open a Lightbox / preview sheet). */
64
+ onPreview?: (file: AttachmentData) => void;
65
+ /** Download button. Without it, a ready file with `url` gets a native download link. */
66
+ onDownload?: (file: AttachmentData) => void;
67
+ /** Remove button. The row fades while the promise runs; a rejection restores it. Offer Undo in a toast. */
68
+ onRemove?: (file: AttachmentData) => void | Promise<void>;
69
+ /** Retry button on failed uploads. */
70
+ onRetry?: (file: AttachmentData) => void;
71
+ /** Built-in "Add files" button that opens the file chooser. */
72
+ onAddFiles?: (files: File[]) => void;
73
+ /** `accept` for the built-in chooser ("image/*,.pdf"). */
74
+ accept?: string;
75
+ /** Your own upload control (a File upload drop zone), rendered after the files. */
76
+ uploadSlot?: React.ReactNode;
77
+ /** Hides remove / retry / add. */
78
+ readOnly?: boolean;
79
+ /** Shown when there are no files (and nothing to add). Default "No files attached". */
80
+ empty?: React.ReactNode;
81
+ /** Accessible name of the list. Default "Attachments". */
82
+ "aria-label"?: string;
83
+ labels?: AttachmentListLabels;
84
+ }
85
+ /**
86
+ * Files on a record — contracts on a deal, an employee's documents, a post's downloads. Mime
87
+ * icons tinted per family, sizes in the current locale ("1.2 MB" / "1,2 MB"), upload progress,
88
+ * processing and error states, preview, download and remove.
89
+ *
90
+ * ```tsx
91
+ * <AttachmentList items={files} onPreview={openLightbox} onRemove={removeWithUndo} onAddFiles={upload} />
92
+ * <AttachmentList layout="grid" items={photos} />
93
+ * <AttachmentList layout="chips" items={commentFiles} readOnly />
94
+ * ```
95
+ */
96
+ export declare const AttachmentList: React.ForwardRefExoticComponent<AttachmentListProps & React.RefAttributes<HTMLDivElement>>;