@gntik-ai/blocks 0.0.0-stage → 0.6.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 (397) hide show
  1. package/dist/index.d.ts +3626 -0
  2. package/dist/index.js +15417 -0
  3. package/dist/index.js.map +1 -0
  4. package/package.json +62 -3
  5. package/src/ai/AssistantCardGrid/AssistantCardGrid.test.tsx +32 -0
  6. package/src/ai/AssistantCardGrid/AssistantCardGrid.tsx +98 -0
  7. package/src/ai/AssistantCardGrid/block.meta.ts +10 -0
  8. package/src/ai/AssistantCardGrid/fixtures.ts +72 -0
  9. package/src/ai/EvaluationScorecard/EvaluationScorecard.test.tsx +39 -0
  10. package/src/ai/EvaluationScorecard/EvaluationScorecard.tsx +233 -0
  11. package/src/ai/EvaluationScorecard/block.meta.ts +10 -0
  12. package/src/ai/EvaluationScorecard/fixtures.ts +79 -0
  13. package/src/ai/ModelKeysList/ModelKeysList.test.tsx +44 -0
  14. package/src/ai/ModelKeysList/ModelKeysList.tsx +203 -0
  15. package/src/ai/ModelKeysList/block.meta.ts +10 -0
  16. package/src/ai/ModelKeysList/fixtures.ts +44 -0
  17. package/src/ai/PromptEditor/PromptEditor.test.tsx +97 -0
  18. package/src/ai/PromptEditor/PromptEditor.tsx +202 -0
  19. package/src/ai/PromptEditor/block.meta.ts +10 -0
  20. package/src/ai/PromptEditor/examples/controlled-variables.tsx +23 -0
  21. package/src/ai/PromptEditor/fixtures.ts +12 -0
  22. package/src/ai/TokenCostCard/TokenCostCard.test.tsx +36 -0
  23. package/src/ai/TokenCostCard/TokenCostCard.tsx +130 -0
  24. package/src/ai/TokenCostCard/block.meta.ts +9 -0
  25. package/src/ai/TokenCostCard/fixtures.ts +18 -0
  26. package/src/ai/TraceWaterfall/TraceWaterfall.test.tsx +119 -0
  27. package/src/ai/TraceWaterfall/TraceWaterfall.tsx +317 -0
  28. package/src/ai/TraceWaterfall/block.meta.ts +10 -0
  29. package/src/ai/TraceWaterfall/examples/no-details.tsx +6 -0
  30. package/src/ai/TraceWaterfall/examples/running.tsx +16 -0
  31. package/src/ai/TraceWaterfall/fixtures.ts +133 -0
  32. package/src/ai/TraceWaterfall/span-details.tsx +51 -0
  33. package/src/ai/index.ts +13 -0
  34. package/src/auth/ForgotPasswordForm/ForgotPasswordForm.test.tsx +209 -0
  35. package/src/auth/ForgotPasswordForm/ForgotPasswordForm.tsx +211 -0
  36. package/src/auth/ForgotPasswordForm/block.meta.ts +10 -0
  37. package/src/auth/ForgotPasswordForm/examples/UsernameOrEmail.tsx +24 -0
  38. package/src/auth/MfaChallenge/MfaChallenge.test.tsx +35 -0
  39. package/src/auth/MfaChallenge/MfaChallenge.tsx +170 -0
  40. package/src/auth/MfaChallenge/block.meta.ts +9 -0
  41. package/src/auth/ResetPasswordForm/ResetPasswordForm.test.tsx +27 -0
  42. package/src/auth/ResetPasswordForm/ResetPasswordForm.tsx +100 -0
  43. package/src/auth/ResetPasswordForm/block.meta.ts +10 -0
  44. package/src/auth/SignInForm/SignInForm.test.tsx +222 -0
  45. package/src/auth/SignInForm/SignInForm.tsx +226 -0
  46. package/src/auth/SignInForm/block.meta.ts +22 -0
  47. package/src/auth/SignInForm/examples/Username.tsx +26 -0
  48. package/src/auth/SignUpForm/SignUpForm.configured.test.tsx +316 -0
  49. package/src/auth/SignUpForm/SignUpForm.test.tsx +33 -0
  50. package/src/auth/SignUpForm/SignUpForm.tsx +298 -0
  51. package/src/auth/SignUpForm/block.meta.ts +22 -0
  52. package/src/auth/SignUpForm/examples/CustomFields.tsx +56 -0
  53. package/src/auth/SignUpForm/examples/Error.tsx +5 -0
  54. package/src/auth/SignUpForm/examples/Loading.tsx +6 -0
  55. package/src/auth/SignUpForm/examples/NoTerms.tsx +6 -0
  56. package/src/auth/SignUpForm/examples/Submitting.tsx +5 -0
  57. package/src/auth/SignUpForm/examples/Unavailable.tsx +15 -0
  58. package/src/auth/SsoButtons/SsoButtons.test.tsx +23 -0
  59. package/src/auth/SsoButtons/SsoButtons.tsx +52 -0
  60. package/src/auth/SsoButtons/block.meta.ts +9 -0
  61. package/src/auth/SsoButtons/fixtures.ts +15 -0
  62. package/src/auth/index.ts +16 -0
  63. package/src/auth/shared.tsx +147 -0
  64. package/src/billing/CostBreakdown/CostBreakdown.test.tsx +24 -0
  65. package/src/billing/CostBreakdown/CostBreakdown.tsx +95 -0
  66. package/src/billing/CostBreakdown/block.meta.ts +10 -0
  67. package/src/billing/CostBreakdown/fixtures.ts +9 -0
  68. package/src/billing/InvoiceTable/InvoiceTable.test.tsx +29 -0
  69. package/src/billing/InvoiceTable/InvoiceTable.tsx +130 -0
  70. package/src/billing/InvoiceTable/block.meta.ts +10 -0
  71. package/src/billing/InvoiceTable/fixtures.ts +38 -0
  72. package/src/billing/PaymentMethodCard/PaymentMethodCard.test.tsx +28 -0
  73. package/src/billing/PaymentMethodCard/PaymentMethodCard.tsx +103 -0
  74. package/src/billing/PaymentMethodCard/block.meta.ts +10 -0
  75. package/src/billing/PaymentMethodCard/fixtures.ts +12 -0
  76. package/src/billing/PlanCard/PlanCard.baseline.test.tsx +26 -0
  77. package/src/billing/PlanCard/PlanCard.summary.test.tsx +227 -0
  78. package/src/billing/PlanCard/PlanCard.test.tsx +27 -0
  79. package/src/billing/PlanCard/PlanCard.tsx +140 -0
  80. package/src/billing/PlanCard/PlanSummary.tsx +101 -0
  81. package/src/billing/PlanCard/README.md +23 -0
  82. package/src/billing/PlanCard/__snapshots__/PlanCard.baseline.test.tsx.snap +5 -0
  83. package/src/billing/PlanCard/block.meta.ts +60 -0
  84. package/src/billing/PlanCard/examples/SummaryActionsOnly.tsx +12 -0
  85. package/src/billing/PlanCard/examples/SummaryFeaturesOnly.tsx +14 -0
  86. package/src/billing/PlanCard/examples/SummaryFull.tsx +28 -0
  87. package/src/billing/PlanCard/examples/SummaryMinimal.tsx +5 -0
  88. package/src/billing/PlanCard/examples/SummaryPriceOnly.tsx +15 -0
  89. package/src/billing/PlanCard/examples/SummaryRenewalOnly.tsx +14 -0
  90. package/src/billing/PlanCard/examples/SummaryUnassigned.tsx +5 -0
  91. package/src/billing/PlanCard/examples/SummaryUnassignedNoLabel.tsx +5 -0
  92. package/src/billing/PlanCard/examples/SummaryZeroPrice.tsx +15 -0
  93. package/src/billing/PlanCard/fixtures.ts +19 -0
  94. package/src/billing/PlanDefinitionCard/PlanDefinitionCard.test.tsx +111 -0
  95. package/src/billing/PlanDefinitionCard/PlanDefinitionCard.tsx +86 -0
  96. package/src/billing/PlanDefinitionCard/README.md +29 -0
  97. package/src/billing/PlanDefinitionCard/block.meta.ts +46 -0
  98. package/src/billing/PlanDefinitionCard/examples/Compact.tsx +23 -0
  99. package/src/billing/PlanDefinitionCard/examples/Full.tsx +23 -0
  100. package/src/billing/PlanDefinitionCard/fixtures.ts +12 -0
  101. package/src/billing/QuotaMeters/QuotaMeters.test.tsx +23 -0
  102. package/src/billing/QuotaMeters/QuotaMeters.tsx +92 -0
  103. package/src/billing/QuotaMeters/block.meta.ts +10 -0
  104. package/src/billing/QuotaMeters/fixtures.ts +9 -0
  105. package/src/billing/SpendVsBudget/SpendVsBudget.test.tsx +24 -0
  106. package/src/billing/SpendVsBudget/SpendVsBudget.tsx +105 -0
  107. package/src/billing/SpendVsBudget/block.meta.ts +10 -0
  108. package/src/billing/SpendVsBudget/fixtures.ts +18 -0
  109. package/src/billing/format.ts +42 -0
  110. package/src/billing/index.ts +21 -0
  111. package/src/builders/CodePanel/CodePanel.test.tsx +280 -0
  112. package/src/builders/CodePanel/CodePanel.tsx +239 -0
  113. package/src/builders/CodePanel/block.meta.ts +10 -0
  114. package/src/builders/CodePanel/examples/controlled.tsx +15 -0
  115. package/src/builders/CodePanel/examples/diagnostics.tsx +40 -0
  116. package/src/builders/CodePanel/fixtures.ts +95 -0
  117. package/src/builders/CodePanel/marker-store.ts +90 -0
  118. package/src/builders/CodePanel/markers.ts +62 -0
  119. package/src/builders/FlowBuilder/FlowBuilder.test.tsx +480 -0
  120. package/src/builders/FlowBuilder/FlowBuilder.tsx +343 -0
  121. package/src/builders/FlowBuilder/block.meta.ts +20 -0
  122. package/src/builders/FlowBuilder/connections.ts +67 -0
  123. package/src/builders/FlowBuilder/decorated-nodes.ts +80 -0
  124. package/src/builders/FlowBuilder/examples/extensions.tsx +120 -0
  125. package/src/builders/FlowBuilder/extensions.ts +37 -0
  126. package/src/builders/FlowBuilder/fixtures.ts +80 -0
  127. package/src/builders/FlowBuilder/parts.tsx +196 -0
  128. package/src/builders/FlowBuilder/problems.tsx +40 -0
  129. package/src/builders/LogViewer/LogViewer.test.tsx +97 -0
  130. package/src/builders/LogViewer/LogViewer.tsx +253 -0
  131. package/src/builders/LogViewer/block.meta.ts +10 -0
  132. package/src/builders/LogViewer/fixtures.ts +49 -0
  133. package/src/builders/index.ts +15 -0
  134. package/src/data-display/ActivityFeed/ActivityFeed.test.tsx +62 -0
  135. package/src/data-display/ActivityFeed/ActivityFeed.tsx +118 -0
  136. package/src/data-display/ActivityFeed/block.meta.ts +10 -0
  137. package/src/data-display/ActivityFeed/fixtures.ts +29 -0
  138. package/src/data-display/ChartCard/ChartCard.ranges.test.tsx +282 -0
  139. package/src/data-display/ChartCard/ChartCard.test.tsx +54 -0
  140. package/src/data-display/ChartCard/ChartCard.tsx +218 -0
  141. package/src/data-display/ChartCard/block.meta.ts +10 -0
  142. package/src/data-display/ChartCard/examples/custom-ranges.tsx +37 -0
  143. package/src/data-display/ChartCard/examples/heatmap.tsx +20 -0
  144. package/src/data-display/ChartCard/examples/toolbar-owned-range.tsx +34 -0
  145. package/src/data-display/ChartCard/fixtures.ts +82 -0
  146. package/src/data-display/CommentThread/CommentThread.test.tsx +29 -0
  147. package/src/data-display/CommentThread/CommentThread.tsx +120 -0
  148. package/src/data-display/CommentThread/block.meta.ts +10 -0
  149. package/src/data-display/CommentThread/fixtures.ts +28 -0
  150. package/src/data-display/DescriptionListCard/DescriptionListCard.test.tsx +28 -0
  151. package/src/data-display/DescriptionListCard/DescriptionListCard.tsx +120 -0
  152. package/src/data-display/DescriptionListCard/block.meta.ts +9 -0
  153. package/src/data-display/DescriptionListCard/fixtures.ts +12 -0
  154. package/src/data-display/KpiRow/KpiRow.test.tsx +29 -0
  155. package/src/data-display/KpiRow/KpiRow.tsx +101 -0
  156. package/src/data-display/KpiRow/block.meta.ts +10 -0
  157. package/src/data-display/KpiRow/fixtures.ts +34 -0
  158. package/src/data-display/ResourceCardGrid/ResourceCardGrid.test.tsx +22 -0
  159. package/src/data-display/ResourceCardGrid/ResourceCardGrid.tsx +98 -0
  160. package/src/data-display/ResourceCardGrid/block.meta.ts +10 -0
  161. package/src/data-display/ResourceCardGrid/fixtures.ts +72 -0
  162. package/src/data-display/StatCard/StatCard.test.tsx +30 -0
  163. package/src/data-display/StatCard/StatCard.tsx +138 -0
  164. package/src/data-display/StatCard/block.meta.ts +10 -0
  165. package/src/data-display/StatCard/fixtures.ts +26 -0
  166. package/src/data-display/StatusTimeline/StatusTimeline.test.tsx +153 -0
  167. package/src/data-display/StatusTimeline/StatusTimeline.tsx +114 -0
  168. package/src/data-display/StatusTimeline/block.meta.ts +10 -0
  169. package/src/data-display/StatusTimeline/examples/Empty.tsx +6 -0
  170. package/src/data-display/StatusTimeline/fixtures.ts +62 -0
  171. package/src/data-display/index.ts +34 -0
  172. package/src/data-display/shared/TrendDelta.tsx +60 -0
  173. package/src/feedback/ConfirmDestructive/ConfirmDestructive.test.tsx +47 -0
  174. package/src/feedback/ConfirmDestructive/ConfirmDestructive.tsx +145 -0
  175. package/src/feedback/ConfirmDestructive/block.meta.ts +10 -0
  176. package/src/feedback/EmptyStates/EmptyStates.test.tsx +48 -0
  177. package/src/feedback/EmptyStates/EmptyStates.tsx +191 -0
  178. package/src/feedback/EmptyStates/block.meta.ts +10 -0
  179. package/src/feedback/EmptyStates/fixtures.ts +6 -0
  180. package/src/feedback/ErrorPanel/ErrorPanel.test.tsx +37 -0
  181. package/src/feedback/ErrorPanel/ErrorPanel.tsx +146 -0
  182. package/src/feedback/ErrorPanel/block.meta.ts +10 -0
  183. package/src/feedback/InlineCallout/InlineCallout.test.tsx +33 -0
  184. package/src/feedback/InlineCallout/InlineCallout.tsx +81 -0
  185. package/src/feedback/InlineCallout/block.meta.ts +9 -0
  186. package/src/feedback/Skeletons/Skeletons.test.tsx +25 -0
  187. package/src/feedback/Skeletons/Skeletons.tsx +142 -0
  188. package/src/feedback/Skeletons/block.meta.ts +10 -0
  189. package/src/feedback/SystemBanner/SystemBanner.test.tsx +29 -0
  190. package/src/feedback/SystemBanner/SystemBanner.tsx +105 -0
  191. package/src/feedback/SystemBanner/block.meta.ts +9 -0
  192. package/src/feedback/index.ts +14 -0
  193. package/src/feedback/types.ts +13 -0
  194. package/src/forms/CreateApiKeyDialog/CreateApiKeyDialog.test.tsx +36 -0
  195. package/src/forms/CreateApiKeyDialog/CreateApiKeyDialog.tsx +197 -0
  196. package/src/forms/CreateApiKeyDialog/block.meta.ts +10 -0
  197. package/src/forms/CreateApiKeyDialog/fixtures.ts +31 -0
  198. package/src/forms/CredentialDisclosureDialog/CredentialDisclosureDialog.test.tsx +339 -0
  199. package/src/forms/CredentialDisclosureDialog/CredentialDisclosureDialog.tsx +193 -0
  200. package/src/forms/CredentialDisclosureDialog/block.meta.ts +10 -0
  201. package/src/forms/CredentialDisclosureDialog/examples/Fresh.tsx +32 -0
  202. package/src/forms/CredentialDisclosureDialog/examples/ResponseGating.tsx +69 -0
  203. package/src/forms/CredentialDisclosureDialog/examples/Stored.tsx +32 -0
  204. package/src/forms/CredentialDisclosureDialog/fixtures.ts +14 -0
  205. package/src/forms/DangerZone/ConfirmDestructiveDialog.tsx +101 -0
  206. package/src/forms/DangerZone/DangerZone.test.tsx +28 -0
  207. package/src/forms/DangerZone/DangerZone.tsx +86 -0
  208. package/src/forms/DangerZone/block.meta.ts +10 -0
  209. package/src/forms/DangerZone/fixtures.ts +36 -0
  210. package/src/forms/DateRangeFilter/DateRangeFilter.test.tsx +26 -0
  211. package/src/forms/DateRangeFilter/DateRangeFilter.tsx +83 -0
  212. package/src/forms/DateRangeFilter/block.meta.ts +9 -0
  213. package/src/forms/DialogWizard/DialogWizard.test.tsx +95 -0
  214. package/src/forms/DialogWizard/DialogWizard.tsx +39 -0
  215. package/src/forms/DialogWizard/block.meta.ts +10 -0
  216. package/src/forms/DialogWizard/examples/CreateResource.tsx +65 -0
  217. package/src/forms/DialogWizard/fixtures.ts +20 -0
  218. package/src/forms/FileUploadPanel/FileUploadPanel.test.tsx +43 -0
  219. package/src/forms/FileUploadPanel/FileUploadPanel.tsx +244 -0
  220. package/src/forms/FileUploadPanel/block.meta.ts +10 -0
  221. package/src/forms/FileUploadPanel/fixtures.ts +66 -0
  222. package/src/forms/FormSection/FormSection.test.tsx +34 -0
  223. package/src/forms/FormSection/FormSection.tsx +77 -0
  224. package/src/forms/FormSection/block.meta.ts +9 -0
  225. package/src/forms/InviteMembersDialog/InviteMembersDialog.test.tsx +37 -0
  226. package/src/forms/InviteMembersDialog/InviteMembersDialog.tsx +183 -0
  227. package/src/forms/InviteMembersDialog/block.meta.ts +10 -0
  228. package/src/forms/InviteMembersDialog/fixtures.ts +14 -0
  229. package/src/forms/SettingsRow/SettingsRow.test.tsx +50 -0
  230. package/src/forms/SettingsRow/SettingsRow.tsx +74 -0
  231. package/src/forms/SettingsRow/block.meta.ts +9 -0
  232. package/src/forms/ValidationSummary/ValidationSummary.test.tsx +46 -0
  233. package/src/forms/ValidationSummary/ValidationSummary.tsx +75 -0
  234. package/src/forms/ValidationSummary/block.meta.ts +9 -0
  235. package/src/forms/ValidationSummary/fixtures.ts +13 -0
  236. package/src/forms/index.ts +27 -0
  237. package/src/index.ts +14 -0
  238. package/src/marketing/ComparisonTable/ComparisonTable.test.tsx +69 -0
  239. package/src/marketing/ComparisonTable/ComparisonTable.tsx +245 -0
  240. package/src/marketing/ComparisonTable/block.meta.ts +10 -0
  241. package/src/marketing/ComparisonTable/examples/options.tsx +48 -0
  242. package/src/marketing/ComparisonTable/fixtures.ts +83 -0
  243. package/src/marketing/Faq/Faq.test.tsx +25 -0
  244. package/src/marketing/Faq/Faq.tsx +68 -0
  245. package/src/marketing/Faq/block.meta.ts +10 -0
  246. package/src/marketing/Faq/fixtures.ts +32 -0
  247. package/src/marketing/FeatureGrid/FeatureGrid.test.tsx +19 -0
  248. package/src/marketing/FeatureGrid/FeatureGrid.tsx +79 -0
  249. package/src/marketing/FeatureGrid/block.meta.ts +10 -0
  250. package/src/marketing/FeatureGrid/fixtures.ts +36 -0
  251. package/src/marketing/Hero/Hero.test.tsx +33 -0
  252. package/src/marketing/Hero/Hero.tsx +107 -0
  253. package/src/marketing/Hero/block.meta.ts +10 -0
  254. package/src/marketing/PricingTable/PricingTable.test.tsx +92 -0
  255. package/src/marketing/PricingTable/PricingTable.tsx +323 -0
  256. package/src/marketing/PricingTable/block.meta.ts +10 -0
  257. package/src/marketing/PricingTable/fixtures.ts +34 -0
  258. package/src/marketing/actions.tsx +40 -0
  259. package/src/marketing/index.ts +15 -0
  260. package/src/meta.ts +25 -0
  261. package/src/page-chrome/BulkActionBar/BulkActionBar.test.tsx +34 -0
  262. package/src/page-chrome/BulkActionBar/BulkActionBar.tsx +76 -0
  263. package/src/page-chrome/BulkActionBar/block.meta.ts +9 -0
  264. package/src/page-chrome/PageHeader/PageHeader.test.tsx +68 -0
  265. package/src/page-chrome/PageHeader/PageHeader.tsx +152 -0
  266. package/src/page-chrome/PageHeader/block.meta.ts +10 -0
  267. package/src/page-chrome/PageHeader/fixtures.ts +29 -0
  268. package/src/page-chrome/PageToolbar/PageToolbar.test.tsx +38 -0
  269. package/src/page-chrome/PageToolbar/PageToolbar.tsx +138 -0
  270. package/src/page-chrome/PageToolbar/block.meta.ts +10 -0
  271. package/src/page-chrome/PageToolbar/fixtures.ts +8 -0
  272. package/src/page-chrome/SectionHeader/SectionHeader.test.tsx +28 -0
  273. package/src/page-chrome/SectionHeader/SectionHeader.tsx +73 -0
  274. package/src/page-chrome/SectionHeader/block.meta.ts +9 -0
  275. package/src/page-chrome/StickyActionBar/StickyActionBar.test.tsx +29 -0
  276. package/src/page-chrome/StickyActionBar/StickyActionBar.tsx +66 -0
  277. package/src/page-chrome/StickyActionBar/block.meta.ts +9 -0
  278. package/src/page-chrome/index.ts +13 -0
  279. package/src/page-chrome/types.ts +25 -0
  280. package/src/scheduling/AgendaList/AgendaList.test.tsx +28 -0
  281. package/src/scheduling/AgendaList/AgendaList.tsx +165 -0
  282. package/src/scheduling/AgendaList/block.meta.ts +10 -0
  283. package/src/scheduling/MonthCalendar/MonthCalendar.test.tsx +32 -0
  284. package/src/scheduling/MonthCalendar/MonthCalendar.tsx +223 -0
  285. package/src/scheduling/MonthCalendar/block.meta.ts +10 -0
  286. package/src/scheduling/TimeSlotPicker/TimeSlotPicker.test.tsx +26 -0
  287. package/src/scheduling/TimeSlotPicker/TimeSlotPicker.tsx +115 -0
  288. package/src/scheduling/TimeSlotPicker/block.meta.ts +10 -0
  289. package/src/scheduling/TimeSlotPicker/fixtures.ts +10 -0
  290. package/src/scheduling/WeekCalendar/WeekCalendar.test.tsx +27 -0
  291. package/src/scheduling/WeekCalendar/WeekCalendar.tsx +274 -0
  292. package/src/scheduling/WeekCalendar/block.meta.ts +10 -0
  293. package/src/scheduling/index.ts +11 -0
  294. package/src/scheduling/shared/CalendarHeader.tsx +54 -0
  295. package/src/scheduling/shared/EventTile.tsx +21 -0
  296. package/src/scheduling/shared/dates.ts +98 -0
  297. package/src/scheduling/shared/events.ts +90 -0
  298. package/src/scheduling/shared/fixtures.ts +54 -0
  299. package/src/shell/AppSidebar/AppSidebar.test.tsx +38 -0
  300. package/src/shell/AppSidebar/AppSidebar.tsx +226 -0
  301. package/src/shell/AppSidebar/block.meta.ts +10 -0
  302. package/src/shell/AppSidebar/fixtures.ts +58 -0
  303. package/src/shell/AppTopbar/AppTopbar.test.tsx +41 -0
  304. package/src/shell/AppTopbar/AppTopbar.tsx +82 -0
  305. package/src/shell/AppTopbar/block.meta.ts +19 -0
  306. package/src/shell/AppTopbar/fixtures.ts +22 -0
  307. package/src/shell/EnvironmentBadge/EnvironmentBadge.test.tsx +22 -0
  308. package/src/shell/EnvironmentBadge/EnvironmentBadge.tsx +55 -0
  309. package/src/shell/EnvironmentBadge/block.meta.ts +10 -0
  310. package/src/shell/GlobalSearch/GlobalSearch.test.tsx +28 -0
  311. package/src/shell/GlobalSearch/GlobalSearch.tsx +80 -0
  312. package/src/shell/GlobalSearch/block.meta.ts +10 -0
  313. package/src/shell/GlobalSearch/fixtures.ts +64 -0
  314. package/src/shell/index.ts +11 -0
  315. package/src/styles.css +2 -0
  316. package/src/tables/DataTable/DataTable.edit-views.test.tsx +249 -0
  317. package/src/tables/DataTable/DataTable.labels.test.tsx +291 -0
  318. package/src/tables/DataTable/DataTable.layout.test.tsx +188 -0
  319. package/src/tables/DataTable/DataTable.overflow-labels.test.tsx +59 -0
  320. package/src/tables/DataTable/DataTable.single-select.test.tsx +501 -0
  321. package/src/tables/DataTable/DataTable.test.tsx +268 -0
  322. package/src/tables/DataTable/DataTable.tsx +531 -0
  323. package/src/tables/DataTable/block.meta.ts +129 -0
  324. package/src/tables/DataTable/column-menu.tsx +112 -0
  325. package/src/tables/DataTable/column-sizing.ts +166 -0
  326. package/src/tables/DataTable/data-table-body.tsx +195 -0
  327. package/src/tables/DataTable/data-table-props.ts +159 -0
  328. package/src/tables/DataTable/data-table-row.tsx +231 -0
  329. package/src/tables/DataTable/data-table-utils.ts +195 -0
  330. package/src/tables/DataTable/density-toggle.tsx +33 -0
  331. package/src/tables/DataTable/editable-cell.tsx +287 -0
  332. package/src/tables/DataTable/examples/editable.tsx +71 -0
  333. package/src/tables/DataTable/examples/grouped.tsx +18 -0
  334. package/src/tables/DataTable/examples/resizable-pinned.tsx +20 -0
  335. package/src/tables/DataTable/examples/saved-views.tsx +61 -0
  336. package/src/tables/DataTable/examples/single-selection.tsx +55 -0
  337. package/src/tables/DataTable/examples/virtualized.tsx +20 -0
  338. package/src/tables/DataTable/fixtures.ts +119 -0
  339. package/src/tables/DataTable/header-cell.tsx +90 -0
  340. package/src/tables/DataTable/labels.ts +54 -0
  341. package/src/tables/DataTable/resize-handle.tsx +91 -0
  342. package/src/tables/DataTable/single-selection.tsx +149 -0
  343. package/src/tables/DataTable/use-table-views.ts +79 -0
  344. package/src/tables/DataTable/use-virtual-rows.ts +83 -0
  345. package/src/tables/DataTable/views.tsx +193 -0
  346. package/src/tables/FilterBar/FilterBar.labels.test.tsx +69 -0
  347. package/src/tables/FilterBar/FilterBar.test.tsx +43 -0
  348. package/src/tables/FilterBar/FilterBar.tsx +232 -0
  349. package/src/tables/FilterBar/block.meta.ts +32 -0
  350. package/src/tables/FilterBar/fixtures.ts +32 -0
  351. package/src/tables/InlineEditRow/InlineEditRow.test.tsx +41 -0
  352. package/src/tables/InlineEditRow/InlineEditRow.tsx +215 -0
  353. package/src/tables/InlineEditRow/block.meta.ts +10 -0
  354. package/src/tables/InlineEditRow/fixtures.ts +28 -0
  355. package/src/tables/PaginationFooter/PaginationFooter.labels.test.tsx +57 -0
  356. package/src/tables/PaginationFooter/PaginationFooter.test.tsx +29 -0
  357. package/src/tables/PaginationFooter/PaginationFooter.tsx +118 -0
  358. package/src/tables/PaginationFooter/block.meta.ts +33 -0
  359. package/src/tables/SubordinateList/SubordinateList.test.tsx +351 -0
  360. package/src/tables/SubordinateList/SubordinateList.tsx +140 -0
  361. package/src/tables/SubordinateList/block.meta.ts +10 -0
  362. package/src/tables/SubordinateList/examples/ResourceForm.tsx +129 -0
  363. package/src/tables/SubordinateList/examples/empty.tsx +5 -0
  364. package/src/tables/SubordinateList/examples/error.tsx +5 -0
  365. package/src/tables/SubordinateList/examples/loading.tsx +5 -0
  366. package/src/tables/TruncatedCollectionFooter/TruncatedCollectionFooter.test.tsx +159 -0
  367. package/src/tables/TruncatedCollectionFooter/TruncatedCollectionFooter.tsx +60 -0
  368. package/src/tables/TruncatedCollectionFooter/block.meta.ts +10 -0
  369. package/src/tables/TruncatedCollectionFooter/examples/exact.tsx +6 -0
  370. package/src/tables/TruncatedCollectionFooter/examples/has-more.tsx +12 -0
  371. package/src/tables/TruncatedCollectionFooter/fixtures.ts +2 -0
  372. package/src/tables/index.ts +45 -0
  373. package/src/team/MembersTable/MembersTable.test.tsx +29 -0
  374. package/src/team/MembersTable/MembersTable.tsx +141 -0
  375. package/src/team/MembersTable/block.meta.ts +9 -0
  376. package/src/team/MembersTable/fixtures.ts +19 -0
  377. package/src/team/NotificationMatrix/NotificationMatrix.test.tsx +36 -0
  378. package/src/team/NotificationMatrix/NotificationMatrix.tsx +144 -0
  379. package/src/team/NotificationMatrix/block.meta.ts +9 -0
  380. package/src/team/NotificationMatrix/fixtures.ts +43 -0
  381. package/src/team/PendingInvitations/PendingInvitations.test.tsx +30 -0
  382. package/src/team/PendingInvitations/PendingInvitations.tsx +132 -0
  383. package/src/team/PendingInvitations/block.meta.ts +9 -0
  384. package/src/team/PendingInvitations/fixtures.ts +39 -0
  385. package/src/team/ProfileHeader/ProfileHeader.test.tsx +29 -0
  386. package/src/team/ProfileHeader/ProfileHeader.tsx +106 -0
  387. package/src/team/ProfileHeader/block.meta.ts +10 -0
  388. package/src/team/ProfileHeader/fixtures.ts +28 -0
  389. package/src/team/SessionsDevices/SessionsDevices.test.tsx +30 -0
  390. package/src/team/SessionsDevices/SessionsDevices.tsx +126 -0
  391. package/src/team/SessionsDevices/block.meta.ts +10 -0
  392. package/src/team/SessionsDevices/fixtures.ts +58 -0
  393. package/src/team/index.ts +15 -0
  394. package/src/test/a11y.ts +18 -0
  395. package/src/test/heading-levels.test.tsx +69 -0
  396. package/src/test/setup.ts +36 -0
  397. package/README.md +0 -3
@@ -0,0 +1,3626 @@
1
+
2
+ import { ComponentType, HTMLAttributes, ReactElement, ReactNode, Ref } from "react";
3
+ import { LucideIcon } from "@gntik-ai/icons";
4
+ import { AlertTone, BadgeTone, BreadcrumbItem, ButtonProps, CommandItem, DateInput, DateRange, DateRangePreset, MeterThresholds, MoreMenuAction, NavGroup, NavItem, NotificationItem, SparklineTone, StatusDefinition, StatusDotTone, TableDensity, UserMenuEntry, UserMenuUser, WizardLayoutProps, Workspace } from "@gntik-ai/ui";
5
+ import { ChartColor, ChartStateProps, HeatmapProps, ValueFormatter } from "@gntik-ai/charts";
6
+ import { FlowCanvasProps, FlowHandle, FlowNode, FlowNode as FlowNode$1, FlowNodeData, FlowNodeData as FlowNodeData$1, FlowNodeKind, FlowNodeKind as FlowNodeKind$1, FlowNodeRenderProps, FlowNodeRenderer, FlowNodeRenderer as FlowNodeRenderer$1, FlowTone, FlowTone as FlowTone$1 } from "@gntik-ai/flow";
7
+ import { Monaco, MonacoLoader } from "@gntik-ai/editor";
8
+ //#region src/meta.d.ts
9
+ /** Metadata contract for a block: packages/blocks/src/<family>/<Name>/block.meta.ts. */
10
+ interface BlockMeta {
11
+ /** Display name, e.g. "KPI row". */
12
+ name: string;
13
+ family: 'page-chrome' | 'shell' | 'data-display' | 'tables' | 'forms' | 'feedback' | 'billing' | 'team' | 'scheduling' | 'builders' | 'ai' | 'auth' | 'marketing';
14
+ status: 'stable' | 'beta' | 'experimental';
15
+ description: string;
16
+ /** @gntik-ai/ui (and other kit) components it composes, for docs and agents. */
17
+ uses: string[];
18
+ /** Optional per-instance copy contract, listed in docs and kit metadata. */
19
+ labels?: Array<{
20
+ key: string;
21
+ type: string;
22
+ state: string;
23
+ }>;
24
+ }
25
+ //#endregion
26
+ //#region src/ai/AssistantCardGrid/fixtures.d.ts
27
+ type AssistantStatus = 'active' | 'paused' | 'draft' | 'degraded' | 'failed';
28
+ interface Assistant {
29
+ id: string;
30
+ name: string;
31
+ description: string;
32
+ /** Model identifier, e.g. "general-large". */
33
+ model: string;
34
+ /** Where it runs, e.g. "openai-compatible" or "self-hosted". */
35
+ runtime: string;
36
+ status: AssistantStatus;
37
+ /** Relative update time, e.g. "2h ago". */
38
+ updated?: string;
39
+ /** Optional link to the assistant's page. */
40
+ href?: string;
41
+ }
42
+ //#endregion
43
+ //#region src/ai/AssistantCardGrid/AssistantCardGrid.d.ts
44
+ export declare const ASSISTANT_STATUSES: Record<AssistantStatus, StatusDefinition>;
45
+ export interface AssistantCardGridProps {
46
+ assistants?: Assistant[];
47
+ title?: string;
48
+ /** Called when a card is activated (cards with `href` also navigate). */
49
+ onSelect?: (assistant: Assistant) => void;
50
+ /** Shows a "New assistant" button. */
51
+ onCreate?: () => void;
52
+ /** Heading level of the section title (default h2); card names use the next level. */
53
+ titleAs?: 'h2' | 'h3';
54
+ className?: string;
55
+ }
56
+ /** Grid of assistants as clickable cards (1 → 2 → 3 columns). */
57
+ export declare function AssistantCardGrid({ assistants, title, onSelect, onCreate, titleAs: TitleTag, className }: AssistantCardGridProps): import("react").JSX.Element;
58
+ //#endregion
59
+ //#region src/ai/AssistantCardGrid/block.meta.d.ts
60
+ declare const meta$5: BlockMeta;
61
+ //#endregion
62
+ //#region src/ai/TraceWaterfall/fixtures.d.ts
63
+ type SpanKind = 'chain' | 'llm' | 'tool' | 'retrieval' | 'http';
64
+ interface TraceSpan {
65
+ id: string;
66
+ /** Parent span id; omit for the root span(s). */
67
+ parentId?: string;
68
+ name: string;
69
+ kind: SpanKind;
70
+ /** Start offset from the trace start, in ms. */
71
+ start: number;
72
+ /** Duration in ms. */
73
+ duration: number;
74
+ /** `running`: still in progress (its `duration` is the time elapsed so far). */
75
+ status: 'ok' | 'error' | 'running';
76
+ /** Extra key/value details shown in the side panel. */
77
+ attributes?: Record<string, string | number>;
78
+ }
79
+ export declare const traceSpans: TraceSpan[];
80
+ /** A trace still in progress: the answer is being generated. */
81
+ export declare const runningTraceSpans: TraceSpan[];
82
+ //#endregion
83
+ //#region src/ai/TraceWaterfall/span-details.d.ts
84
+ /** StatusTag dictionary of span statuses (running is announced by its label, not colour alone). */
85
+ export declare const SPAN_STATUSES: {
86
+ readonly ok: {
87
+ readonly label: "OK";
88
+ readonly tone: "success";
89
+ };
90
+ readonly error: {
91
+ readonly label: "Error";
92
+ readonly tone: "destructive";
93
+ };
94
+ readonly running: {
95
+ readonly label: "Running";
96
+ readonly tone: "info";
97
+ };
98
+ };
99
+ export declare function formatSpanDuration(ms: number): string;
100
+ interface SpanDetailsProps {
101
+ span: TraceSpan;
102
+ /** Heading level of the span name. */
103
+ headingAs: 'h3' | 'h4' | 'h5';
104
+ }
105
+ /** Default content of the details pane: name, kind, status, timing and attributes. */
106
+ export declare function SpanDetails({ span, headingAs: Heading }: SpanDetailsProps): import("react").JSX.Element;
107
+ //#endregion
108
+ //#region src/ai/TraceWaterfall/TraceWaterfall.d.ts
109
+ export interface TraceWaterfallProps {
110
+ spans?: TraceSpan[];
111
+ title?: string;
112
+ /** Selected span (controlled). `null` selects nothing. */
113
+ selectedId?: string | null;
114
+ /** Span selected initially (defaults to the first root). */
115
+ defaultSelectedId?: string;
116
+ /** Called with the span selected by click, Enter or Space. */
117
+ onSelect?: (span: TraceSpan) => void;
118
+ /** Called with the id of the span selected (pair with `selectedId`). */
119
+ onSelectedIdChange?: (id: string) => void;
120
+ /** Span ids collapsed initially. */
121
+ defaultCollapsed?: string[];
122
+ /** Shows the details pane of the selected span (default true). */
123
+ showDetails?: boolean;
124
+ /** Custom content of the details pane (default: name, kind, status, timing and attributes). */
125
+ renderDetails?: (span: TraceSpan) => ReactNode;
126
+ /** Heading level of the title, to fit the page outline (default h3); inner headings use the next level. */
127
+ titleAs?: 'h2' | 'h3' | 'h4';
128
+ className?: string;
129
+ }
130
+ /**
131
+ * Trace waterfall: span tree + duration bars on a shared time axis + an optional details pane for
132
+ * the selected span. The span list is one tab stop: ↑/↓ move, Home/End jump, → expands or moves to
133
+ * the first child, ← collapses or moves to the parent, Enter/Space select.
134
+ */
135
+ export declare function TraceWaterfall({ spans, title, selectedId: selectedProp, defaultSelectedId, onSelect, onSelectedIdChange, defaultCollapsed, showDetails, renderDetails, titleAs: TitleTag, className }: TraceWaterfallProps): import("react").JSX.Element;
136
+ //#endregion
137
+ //#region src/ai/TraceWaterfall/block.meta.d.ts
138
+ declare const meta$72: BlockMeta;
139
+ //#endregion
140
+ //#region src/ai/TokenCostCard/fixtures.d.ts
141
+ interface TokenUsagePeriod {
142
+ /** Stable id, e.g. "7d". */
143
+ id: string;
144
+ /** Toggle label, e.g. "7 days". */
145
+ label: string;
146
+ inputTokens: number;
147
+ outputTokens: number;
148
+ /** Spend in the period, in `currency`. */
149
+ cost: number;
150
+ /** Budget for the period, in `currency`. */
151
+ budget: number;
152
+ }
153
+ //#endregion
154
+ //#region src/ai/TokenCostCard/TokenCostCard.d.ts
155
+ export interface TokenCostCardProps {
156
+ /** One entry per selectable period (a single entry hides the switch). */
157
+ periods?: TokenUsagePeriod[];
158
+ defaultPeriod?: string;
159
+ /** ISO 4217 currency code for cost and budget. */
160
+ currency?: string;
161
+ title?: string;
162
+ /** Subtitle, e.g. the model or project the usage belongs to. */
163
+ description?: string;
164
+ /** Heading level of the title, to fit the page outline (default h3). */
165
+ titleAs?: 'h2' | 'h3' | 'h4';
166
+ className?: string;
167
+ }
168
+ /** Token usage and spend for a period, with a budget meter. */
169
+ export declare function TokenCostCard({ periods, defaultPeriod, currency, title, description, titleAs, className }: TokenCostCardProps): import("react").JSX.Element | null;
170
+ //#endregion
171
+ //#region src/ai/TokenCostCard/block.meta.d.ts
172
+ declare const meta$71: BlockMeta;
173
+ //#endregion
174
+ //#region src/ai/PromptEditor/PromptEditor.d.ts
175
+ export interface PromptRunInput {
176
+ system: string;
177
+ user: string;
178
+ /** Values for every variable found in the prompts (missing ones are empty strings). */
179
+ variables: Record<string, string>;
180
+ temperature: number;
181
+ maxTokens: number;
182
+ }
183
+ export interface PromptEditorProps {
184
+ title?: string;
185
+ defaultSystem?: string;
186
+ defaultUser?: string;
187
+ /** Initial variable values (uncontrolled). */
188
+ defaultVariables?: Record<string, string>;
189
+ /** Variable values (controlled). Pair with `onVariablesChange`. */
190
+ variables?: Readonly<Record<string, string>>;
191
+ /** Called with every variable value (all keys kept) when one changes. */
192
+ onVariablesChange?: (variables: Record<string, string>) => void;
193
+ defaultTemperature?: number;
194
+ defaultMaxTokens?: number;
195
+ /** Upper bound of the max-tokens input. */
196
+ maxTokensLimit?: number;
197
+ /** Called on Run; return a promise to show the running state until it settles. */
198
+ onRun?: (input: PromptRunInput) => void | Promise<unknown>;
199
+ /** Heading level of the title, to fit the page outline (default h3); inner headings use the next level. */
200
+ titleAs?: 'h2' | 'h3' | 'h4';
201
+ className?: string;
202
+ }
203
+ /** Unique `{{variable}}` names, in order of appearance. */
204
+ export declare function extractPromptVariables(...texts: string[]): string[];
205
+ /** Prompt playground: system + user prompts, detected variables, parameters and Run. */
206
+ export declare function PromptEditor({ title, defaultSystem, defaultUser, defaultVariables, variables: variablesProp, onVariablesChange, defaultTemperature, defaultMaxTokens, maxTokensLimit, onRun, titleAs: TitleTag, className }: PromptEditorProps): import("react").JSX.Element;
207
+ //#endregion
208
+ //#region src/ai/PromptEditor/block.meta.d.ts
209
+ declare const meta$53: BlockMeta;
210
+ //#endregion
211
+ //#region src/ai/EvaluationScorecard/fixtures.d.ts
212
+ interface EvalMetric {
213
+ id: string;
214
+ label: string;
215
+ /** Minimum (or maximum, when lower is better) value that passes. */
216
+ threshold: number;
217
+ /** Defaults to true; false for costs and latencies. */
218
+ higherIsBetter?: boolean;
219
+ /** How values are shown: ratio as a percentage, or milliseconds. */
220
+ format?: 'percent' | 'ms' | 'number';
221
+ /** Change vs baseline that counts as a regression (same unit as the values). */
222
+ tolerance?: number;
223
+ }
224
+ interface EvalRow {
225
+ id: string;
226
+ dataset: string;
227
+ samples: number;
228
+ /** Samples that passed every check in this run. */
229
+ passed: number;
230
+ /** Samples that passed in the baseline run. */
231
+ baselinePassed: number;
232
+ scores: Record<string, number>;
233
+ baseline: Record<string, number>;
234
+ }
235
+ //#endregion
236
+ //#region src/ai/EvaluationScorecard/EvaluationScorecard.d.ts
237
+ export interface EvaluationScorecardProps {
238
+ metrics?: EvalMetric[];
239
+ rows?: EvalRow[];
240
+ title?: string;
241
+ /** Label of the run compared against, e.g. "baseline · v12". */
242
+ baselineLabel?: string;
243
+ /** Pass-rate drop (ratio) that counts as a regression. */
244
+ passRateTolerance?: number;
245
+ /** Heading level of the title, to fit the page outline (default h3). */
246
+ titleAs?: 'h2' | 'h3' | 'h4';
247
+ className?: string;
248
+ }
249
+ /** Evaluation results by dataset and metric, compared with a baseline run. */
250
+ export declare function EvaluationScorecard({ metrics, rows, title, baselineLabel, passRateTolerance, titleAs: TitleTag, className }: EvaluationScorecardProps): import("react").JSX.Element;
251
+ //#endregion
252
+ //#region src/ai/EvaluationScorecard/block.meta.d.ts
253
+ declare const meta$23: BlockMeta;
254
+ //#endregion
255
+ //#region src/ai/ModelKeysList/fixtures.d.ts
256
+ type ModelKeyStatus = 'connected' | 'failing' | 'untested' | 'revoked';
257
+ interface ModelKey {
258
+ id: string;
259
+ /** Display name, e.g. "Production". */
260
+ name: string;
261
+ /** Provider or protocol, e.g. "Provider A", "openai-compatible", "self-hosted". */
262
+ provider: string;
263
+ /** Base URL for compatible or self-hosted endpoints. */
264
+ endpoint?: string;
265
+ /** Masked secret, e.g. "sk-…4f2a". Never pass the full key to the UI. */
266
+ maskedKey: string;
267
+ status: ModelKeyStatus;
268
+ /** Relative last-use time, e.g. "3 min ago". */
269
+ lastUsed?: string;
270
+ }
271
+ //#endregion
272
+ //#region src/ai/ModelKeysList/ModelKeysList.d.ts
273
+ export declare const MODEL_KEY_STATUSES: Record<ModelKeyStatus, StatusDefinition>;
274
+ export interface ModelKeysListProps {
275
+ keys?: ModelKey[];
276
+ title?: string;
277
+ /** Tests a key; resolve true when the provider answered. Defaults to a simulated check. */
278
+ onTest?: (key: ModelKey) => Promise<boolean> | boolean;
279
+ /** Called after the revoke is confirmed. */
280
+ onRevoke?: (key: ModelKey) => void;
281
+ /** Shows an "Add key" button. */
282
+ onAdd?: () => void;
283
+ /** Heading level of the title, to fit the page outline (default h3). */
284
+ titleAs?: 'h2' | 'h3' | 'h4';
285
+ className?: string;
286
+ }
287
+ /** Provider keys with masked secrets, connection tests and confirmed revocation. */
288
+ export declare function ModelKeysList({ keys, title, onTest, onRevoke, onAdd, titleAs, className }: ModelKeysListProps): import("react").JSX.Element;
289
+ //#endregion
290
+ //#region src/ai/ModelKeysList/block.meta.d.ts
291
+ declare const meta$41: BlockMeta;
292
+ //#endregion
293
+ //#region src/auth/shared.d.ts
294
+ interface AuthHeaderProps {
295
+ eyebrow?: ReactNode;
296
+ title: ReactNode;
297
+ description?: ReactNode;
298
+ /** Defaults to h1. `null` omits the title heading. */
299
+ headingLevel?: 'h1' | 'h2' | 'h3' | null;
300
+ className?: string;
301
+ }
302
+ /** Eyebrow + title + supporting line used at the top of every auth form. */
303
+ export declare function AuthHeader({ eyebrow, title, description, headingLevel: Heading, className }: AuthHeaderProps): import("react").JSX.Element;
304
+ /** Horizontal rule with a centred caption ("Or continue with"). */
305
+ export declare function AuthDivider({ children }: {
306
+ children: ReactNode;
307
+ }): import("react").JSX.Element;
308
+ /** Email by default; text mode supports a username or username-or-email identifier. */
309
+ interface AuthIdentifierConfig {
310
+ type?: 'email' | 'text';
311
+ autoComplete?: string;
312
+ label?: ReactNode;
313
+ help?: ReactNode;
314
+ /** Optional stable id for the FieldDescription. Otherwise Base UI generates it. */
315
+ helpId?: string;
316
+ placeholder?: string;
317
+ minLength?: number;
318
+ maxLength?: number;
319
+ }
320
+ /** Kit-owned inline validation; consumers supply copy rather than running a second validator. */
321
+ interface AuthValidationMessages {
322
+ identifierRequired?: string;
323
+ identifierInvalid?: string;
324
+ identifierTooShort?: string;
325
+ passwordRequired?: string;
326
+ }
327
+ /** Server errors use only these props plus the form's error alert; inline validation stays in the kit. */
328
+ interface AuthFormAccessibilityProps {
329
+ fieldInvalid?: {
330
+ identifier?: boolean;
331
+ password?: boolean;
332
+ };
333
+ /** Id of the server alert (or an external feedback element), appended to flagged inputs. */
334
+ feedbackId?: string;
335
+ /** Describes the form itself; does not replace the per-field feedback association. */
336
+ 'aria-describedby'?: string;
337
+ 'aria-label'?: string;
338
+ 'aria-labelledby'?: string;
339
+ }
340
+ /** Ordered text/email fields collected before the sign-up password. Ids must be unique. */
341
+ interface AuthSignUpField {
342
+ id: string;
343
+ label: string;
344
+ placeholder?: string;
345
+ help?: ReactNode;
346
+ required?: boolean;
347
+ type?: 'text' | 'email';
348
+ autoComplete?: string;
349
+ /** Consumer copy for kit-owned validation. */
350
+ messages?: {
351
+ required?: string;
352
+ invalid?: string;
353
+ };
354
+ }
355
+ /** Consumer-owned copy and optional action when account creation is unavailable. */
356
+ interface AuthUnavailableState {
357
+ title: ReactNode;
358
+ message: ReactNode;
359
+ action?: ReactNode;
360
+ }
361
+ /** Kit-owned sign-up validation with consumer-owned copy. */
362
+ interface AuthSignUpValidationMessages {
363
+ passwordTooShort?: (minimum: number) => string;
364
+ termsRequired?: string;
365
+ }
366
+ //#endregion
367
+ //#region src/auth/ForgotPasswordForm/ForgotPasswordForm.d.ts
368
+ export interface ForgotPasswordFormRef {
369
+ focus(field: 'identifier'): void;
370
+ }
371
+ export interface ForgotPasswordFormProps extends AuthFormAccessibilityProps {
372
+ /** React 19 ref for focus after a server response; available in the request state. */
373
+ ref?: Ref<ForgotPasswordFormRef>;
374
+ identifier?: AuthIdentifierConfig;
375
+ /** The kit validates before submit. Supply copy here; do not add a second inline validator. */
376
+ messages?: AuthValidationMessages;
377
+ /** Requests the reset link. A returned promise shows the loading state; a rejection shows in the alert. */
378
+ onSubmit?: (email: string) => void | Promise<void>;
379
+ error?: string | null;
380
+ defaultEmail?: string;
381
+ /** Start on the "sent" step (e.g. after a redirect). */
382
+ defaultSent?: boolean;
383
+ signInHref?: string;
384
+ onBackToSignIn?: () => void;
385
+ eyebrow?: ReactNode;
386
+ title?: ReactNode;
387
+ description?: ReactNode;
388
+ sentTitle?: ReactNode;
389
+ sentDescription?: ReactNode;
390
+ /** Replaces the screen-reader sent announcement; `null` hides it. */
391
+ sentStatus?: ReactNode;
392
+ /** Replaces both resend/change-identifier actions; `null` hides them. */
393
+ resendActions?: ReactNode;
394
+ /** Applies to both request and sent states. `null` omits the internal heading. */
395
+ headingLevel?: AuthHeaderProps['headingLevel'];
396
+ className?: string;
397
+ }
398
+ /** Request a reset link by email, then a "check your inbox" state with resend and a way back. */
399
+ export declare function ForgotPasswordForm({ identifier, messages, ref, fieldInvalid, feedbackId, 'aria-describedby': describedBy, 'aria-label': ariaLabel, 'aria-labelledby': labelledBy, onSubmit, error: errorProp, defaultEmail, defaultSent, signInHref, onBackToSignIn, eyebrow, title, description, sentTitle, sentDescription, sentStatus, resendActions, headingLevel, className }: ForgotPasswordFormProps): import("react").JSX.Element;
400
+ //#endregion
401
+ //#region src/auth/ForgotPasswordForm/block.meta.d.ts
402
+ declare const meta$29: BlockMeta;
403
+ //#endregion
404
+ //#region src/auth/MfaChallenge/MfaChallenge.d.ts
405
+ export type MfaMethod = 'code' | 'backup';
406
+ export interface MfaChallengeProps {
407
+ /** Verifies the code. A returned promise shows the loading state; a rejection shows in the alert. */
408
+ onVerify?: (code: string, method: MfaMethod) => void | Promise<void>;
409
+ /** Sends a new code; the resend button then waits `resendCooldown` seconds. */
410
+ onResend?: () => void | Promise<void>;
411
+ /** Seconds between resends. */
412
+ resendCooldown?: number;
413
+ /** Seconds left before the first resend (a code was just sent). Defaults to `resendCooldown`. */
414
+ initialCooldown?: number;
415
+ /** Code length. */
416
+ length?: 6 | 8;
417
+ /** Where the code was sent, e.g. "a•••@example.com". Omit for authenticator apps. */
418
+ destination?: string;
419
+ error?: string | null;
420
+ loading?: boolean;
421
+ /** Called when the user gives up ("Back to sign in"). */
422
+ onCancel?: () => void;
423
+ eyebrow?: ReactNode;
424
+ title?: ReactNode;
425
+ className?: string;
426
+ }
427
+ /**
428
+ * Second-factor step: a one-time code (auto-submits when complete), a switch to a backup code,
429
+ * and a resend button with a countdown.
430
+ */
431
+ export declare function MfaChallenge({ onVerify, onResend, resendCooldown, initialCooldown, length, destination, error: errorProp, loading: loadingProp, onCancel, eyebrow, title, className }: MfaChallengeProps): import("react").JSX.Element;
432
+ //#endregion
433
+ //#region src/auth/MfaChallenge/block.meta.d.ts
434
+ declare const meta$40: BlockMeta;
435
+ //#endregion
436
+ //#region src/auth/ResetPasswordForm/ResetPasswordForm.d.ts
437
+ export interface ResetPasswordFormProps {
438
+ /** Saves the new password. A returned promise shows the loading state; a rejection shows in the alert. */
439
+ onSubmit?: (password: string) => void | Promise<void>;
440
+ error?: string | null;
441
+ minPasswordLength?: number;
442
+ /** Called from the success state ("Continue to sign in"). */
443
+ onContinue?: () => void;
444
+ eyebrow?: ReactNode;
445
+ className?: string;
446
+ }
447
+ /** New password + confirmation with length and mismatch validation, then a success state. */
448
+ export declare function ResetPasswordForm({ onSubmit, error: errorProp, minPasswordLength, onContinue, eyebrow, className }: ResetPasswordFormProps): import("react").JSX.Element;
449
+ //#endregion
450
+ //#region src/auth/ResetPasswordForm/block.meta.d.ts
451
+ declare const meta$55: BlockMeta;
452
+ //#endregion
453
+ //#region src/auth/SignInForm/SignInForm.d.ts
454
+ export interface SignInValues {
455
+ email: string;
456
+ /** Trimmed identifier in text mode. `email` remains available for existing consumers. */
457
+ identifier?: string;
458
+ password: string;
459
+ remember: boolean;
460
+ }
461
+ export interface SignInFormRef {
462
+ focus(field: 'identifier' | 'password'): void;
463
+ }
464
+ export interface SignInFormProps extends AuthFormAccessibilityProps {
465
+ /** React 19 ref for focus after a server response. */
466
+ ref?: Ref<SignInFormRef>;
467
+ identifier?: AuthIdentifierConfig;
468
+ /** The kit validates before submit. Supply copy here; do not add a second inline validator. */
469
+ messages?: AuthValidationMessages;
470
+ passwordHelp?: ReactNode;
471
+ passwordHelpId?: string;
472
+ /** Signs in. A returned promise shows the loading state; a rejection's message shows in the alert. */
473
+ onSubmit?: (values: SignInValues) => void | Promise<void>;
474
+ /** Error from the server (e.g. "Incorrect email or password"). */
475
+ error?: string | null;
476
+ /** Forces the loading state (when the parent tracks the request). */
477
+ loading?: boolean;
478
+ defaultEmail?: string;
479
+ forgotPasswordHref?: string;
480
+ onForgotPassword?: () => void;
481
+ signUpHref?: string;
482
+ onSignUp?: () => void;
483
+ /** Replaces the sign-up prompt; `null` hides it. Defaults to the existing account link. */
484
+ signUpPrompt?: ReactNode;
485
+ /** SSO area under the divider; defaults to SsoButtons, `null` hides it. */
486
+ sso?: ReactNode;
487
+ eyebrow?: ReactNode;
488
+ title?: ReactNode;
489
+ description?: ReactNode;
490
+ /** Omit the internal heading with null; the form keeps its accessible name. */
491
+ headingLevel?: AuthHeaderProps['headingLevel'];
492
+ className?: string;
493
+ }
494
+ /** Email + password sign-in with remember me, forgot-password link, SSO slot, error alert and loading. */
495
+ export declare function SignInForm({ identifier, messages, passwordHelp, passwordHelpId, ref, fieldInvalid, feedbackId, 'aria-describedby': describedBy, 'aria-label': ariaLabel, 'aria-labelledby': labelledBy, onSubmit, error: errorProp, loading: loadingProp, defaultEmail, forgotPasswordHref, onForgotPassword, signUpHref, onSignUp, signUpPrompt, sso, eyebrow, title, description, headingLevel, className }: SignInFormProps): import("react").JSX.Element;
496
+ //#endregion
497
+ //#region src/auth/SignInForm/block.meta.d.ts
498
+ declare const meta$60: BlockMeta;
499
+ //#endregion
500
+ //#region src/auth/SignUpForm/SignUpForm.d.ts
501
+ export interface SignUpValues {
502
+ name: string;
503
+ email: string;
504
+ password: string;
505
+ /** Present only in configured mode. Text/email values are trimmed and keyed by field id. */
506
+ fields?: Record<string, string>;
507
+ }
508
+ export interface SignUpFormProps {
509
+ /** Ordered text/email inputs before Password. Omit to keep the default fields and payload. */
510
+ fields?: readonly AuthSignUpField[];
511
+ messages?: AuthSignUpValidationMessages;
512
+ /** Replaces all account creation controls with a consumer-supplied callout. */
513
+ unavailable?: AuthUnavailableState;
514
+ /** Resolving policy, separate from loading (an account submission). No form is rendered. */
515
+ policyLoading?: boolean;
516
+ /** Creates the account. A returned promise shows the loading state; a rejection shows in the alert. */
517
+ onSubmit?: (values: SignUpValues) => void | Promise<void>;
518
+ error?: string | null;
519
+ loading?: boolean;
520
+ /** Optional password guidance; receives the current minimum length when a function is supplied. */
521
+ passwordHelp?: ReactNode | ((minimum: number) => ReactNode);
522
+ /** Minimum password length. Defaults to 8. */
523
+ minPasswordLength?: number;
524
+ /** Omit to require consent; false removes the checkbox and consent validation. */
525
+ terms?: false;
526
+ termsHref?: string;
527
+ privacyHref?: string;
528
+ signInHref?: string;
529
+ onSignIn?: () => void;
530
+ /** SSO area under the divider; defaults to SsoButtons, `null` hides it. */
531
+ sso?: ReactNode;
532
+ eyebrow?: ReactNode;
533
+ title?: ReactNode;
534
+ description?: ReactNode;
535
+ className?: string;
536
+ }
537
+ /** Account creation: name, work email, password with a strength meter and a required terms checkbox. */
538
+ export declare function SignUpForm({ fields, messages, unavailable, policyLoading, onSubmit, error: errorProp, loading: loadingProp, minPasswordLength, passwordHelp, terms: termsProp, termsHref, privacyHref, signInHref, onSignIn, sso, eyebrow, title, description, className }: SignUpFormProps): import("react").JSX.Element;
539
+ //#endregion
540
+ //#region src/auth/SignUpForm/block.meta.d.ts
541
+ declare const meta$61: BlockMeta;
542
+ //#endregion
543
+ //#region src/auth/SsoButtons/fixtures.d.ts
544
+ interface SsoProvider {
545
+ id: string;
546
+ /** Full button text, e.g. "Continue with SSO". */
547
+ label: string;
548
+ /** A neutral lucide icon (no brand logos or colours). */
549
+ icon?: LucideIcon;
550
+ }
551
+ export declare const ssoProviders: SsoProvider[];
552
+ //#endregion
553
+ //#region src/auth/SsoButtons/SsoButtons.d.ts
554
+ export interface SsoButtonsProps {
555
+ providers?: SsoProvider[];
556
+ /** Called with the provider id. */
557
+ onSelect?: (providerId: string) => void;
558
+ /** Provider currently redirecting (shows a spinner and disables the others). */
559
+ loadingId?: string | null;
560
+ disabled?: boolean;
561
+ /** `stack` (full-width rows, default) or `grid` (two columns from `sm`). */
562
+ layout?: 'stack' | 'grid';
563
+ /** Accessible name of the group. */
564
+ label?: string;
565
+ className?: string;
566
+ }
567
+ /** Neutral single-sign-on buttons: text labels and lucide icons, no brand colours or logos. */
568
+ export declare function SsoButtons({ providers, onSelect, loadingId, disabled, layout, label, className }: SsoButtonsProps): import("react").JSX.Element;
569
+ //#endregion
570
+ //#region src/auth/SsoButtons/block.meta.d.ts
571
+ declare const meta$64: BlockMeta;
572
+ //#endregion
573
+ //#region src/billing/format.d.ts
574
+ /** Shared formatting for the billing blocks (en-US, Intl). */
575
+ /** A calendar date: a `Date` or an ISO `YYYY-MM-DD` string (read as a local date, no UTC shift). */
576
+ type DateInput$1 = Date | string;
577
+ //#endregion
578
+ //#region src/billing/PlanCard/PlanSummary.d.ts
579
+ /** Consumer data only: each summary region is optional. Prices are cycle totals. */
580
+ interface SummaryPlan {
581
+ name?: string;
582
+ statusLabel?: string;
583
+ statusTone?: BadgeTone;
584
+ priceMonthly?: number;
585
+ priceAnnual?: number;
586
+ currency?: string;
587
+ cycle?: BillingCycle;
588
+ renewsOn?: DateInput$1;
589
+ features?: string[];
590
+ }
591
+ interface PlanSummaryProps {
592
+ variant: 'summary';
593
+ plan?: SummaryPlan;
594
+ emptyLabel?: string;
595
+ /** Consumer-supplied kit Buttons or native links. No built-in actions. */
596
+ actions?: ReactNode;
597
+ defaultCycle?: BillingCycle;
598
+ onCycleChange?: (cycle: BillingCycle) => void;
599
+ titleAs?: 'h2' | 'h3' | 'h4';
600
+ className?: string;
601
+ }
602
+ //#endregion
603
+ //#region src/billing/PlanCard/PlanCard.d.ts
604
+ export type PlanStatus = 'active' | 'trialing' | 'past_due' | 'canceled';
605
+ export type BillingCycle = 'monthly' | 'annual';
606
+ export interface BillingPlan {
607
+ name: string;
608
+ status?: PlanStatus;
609
+ /** Price per month on the monthly cycle. */
610
+ priceMonthly: number;
611
+ /** Price per month when billed annually. Enables the monthly/annual toggle. */
612
+ priceAnnual?: number;
613
+ /** ISO 4217 code. Default USD. */
614
+ currency?: string;
615
+ /** Next renewal date. */
616
+ renewsOn: DateInput$1;
617
+ /** Short line after the renewal date, e.g. "50 seats · 2 regions". */
618
+ summary?: string;
619
+ features?: string[];
620
+ }
621
+ export interface BillingPlanCardProps {
622
+ variant?: 'billing';
623
+ plan?: BillingPlan;
624
+ /** Initial cycle shown (uncontrolled). */
625
+ defaultCycle?: BillingCycle;
626
+ onCycleChange?: (cycle: BillingCycle) => void;
627
+ onUpgrade?: () => void;
628
+ onManage?: () => void;
629
+ upgradeLabel?: string;
630
+ manageLabel?: string;
631
+ /** Heading level of the title, to fit the page outline (default h3). */
632
+ titleAs?: 'h2' | 'h3' | 'h4';
633
+ className?: string;
634
+ }
635
+ export type PlanCardProps = BillingPlanCardProps | PlanSummaryProps;
636
+ /** Default billing header, or an opt-in summary without sample data. */
637
+ export declare function PlanCard(props: PlanCardProps): import("react").JSX.Element;
638
+ //#endregion
639
+ //#region src/billing/PlanCard/block.meta.d.ts
640
+ declare const meta$49: BlockMeta;
641
+ //#endregion
642
+ //#region src/billing/PlanCard/fixtures.d.ts
643
+ /** Sample current plan (neutral workspace data). */
644
+ export declare const samplePlan: BillingPlan;
645
+ //#endregion
646
+ //#region src/billing/PlanDefinitionCard/PlanDefinitionCard.d.ts
647
+ export type PlanDefinitionStatus = 'draft' | 'active' | 'deprecated' | 'archived';
648
+ export interface PlanDefinition {
649
+ name: string;
650
+ slug: string;
651
+ description?: string;
652
+ status: PlanDefinitionStatus;
653
+ capabilities?: Record<string, boolean>;
654
+ quotas?: Record<string, string | number>;
655
+ tenantCount: number;
656
+ updatedAt: DateInput$1;
657
+ }
658
+ export interface PlanDefinitionCardProps {
659
+ plan?: PlanDefinition;
660
+ density?: 'compact' | 'full';
661
+ /** Consumer-supplied kit Buttons or native links; no billing actions. */
662
+ actions?: ReactNode;
663
+ statusLabels?: Partial<Record<PlanDefinitionStatus, string>>;
664
+ titleAs?: 'h2' | 'h3' | 'h4';
665
+ className?: string;
666
+ }
667
+ /** Administrative plan information, with no commercial fields or actions. */
668
+ export declare function PlanDefinitionCard({ plan, density, actions, statusLabels, titleAs: TitleTag, className }: PlanDefinitionCardProps): import("react").JSX.Element;
669
+ //#endregion
670
+ //#region src/billing/PlanDefinitionCard/block.meta.d.ts
671
+ declare const meta$50: BlockMeta;
672
+ //#endregion
673
+ //#region src/billing/PlanDefinitionCard/fixtures.d.ts
674
+ export declare const samplePlanDefinition: PlanDefinition;
675
+ //#endregion
676
+ //#region src/billing/QuotaMeters/QuotaMeters.d.ts
677
+ export interface Quota {
678
+ id: string;
679
+ label: string;
680
+ used: number;
681
+ limit: number;
682
+ /** End-of-cycle projection. When any quota has one, a Current/Projected toggle appears. */
683
+ projected?: number;
684
+ /** Unit after the numbers, e.g. "requests" or "GB". */
685
+ unit?: string;
686
+ /** Helper line under the bar. Over the limit, a default overage note is shown. */
687
+ note?: ReactNode;
688
+ }
689
+ export type QuotaScope = 'current' | 'projected';
690
+ export interface QuotaMetersProps {
691
+ quotas?: Quota[];
692
+ /** Heading above the meters. */
693
+ title?: string;
694
+ /** Percent-of-limit thresholds for amber and red (default 80 / 100). */
695
+ thresholds?: MeterThresholds;
696
+ /** Formats used/limit numbers. Default: grouped, compact above a million. */
697
+ formatValue?: (value: number) => string;
698
+ defaultScope?: QuotaScope;
699
+ onScopeChange?: (scope: QuotaScope) => void;
700
+ /** Heading level of the title, to fit the page outline (default h3). */
701
+ titleAs?: 'h2' | 'h3' | 'h4';
702
+ className?: string;
703
+ }
704
+ /** Plan quotas as meters: green with headroom, amber near the cap, red over it. */
705
+ export declare function QuotaMeters({ quotas, title, thresholds, formatValue, defaultScope, onScopeChange, titleAs: TitleTag, className }: QuotaMetersProps): import("react").JSX.Element;
706
+ //#endregion
707
+ //#region src/billing/QuotaMeters/block.meta.d.ts
708
+ declare const meta$54: BlockMeta;
709
+ //#endregion
710
+ //#region src/billing/QuotaMeters/fixtures.d.ts
711
+ /** Sample plan quotas: usage so far this cycle and the end-of-cycle projection. */
712
+ export declare const sampleQuotas: Quota[];
713
+ //#endregion
714
+ //#region src/billing/SpendVsBudget/SpendVsBudget.d.ts
715
+ export interface SpendPoint {
716
+ /** X-axis label, e.g. "May 12". */
717
+ label: string;
718
+ /** Cumulative actual spend; null after today. */
719
+ spend: number | null;
720
+ /** Cumulative forecast; null before today. Start it on the last actual point to join the lines. */
721
+ forecast?: number | null;
722
+ }
723
+ export interface SpendVsBudgetProps {
724
+ data?: SpendPoint[];
725
+ /** Budget cap for the period (drawn as a flat line). */
726
+ budget?: number;
727
+ currency?: string;
728
+ title?: string;
729
+ /** Period caption, e.g. "May cycle". */
730
+ period?: string;
731
+ /** Chart plot height in px. */
732
+ height?: number;
733
+ /** Heading level of the title, to fit the page outline (default h3). */
734
+ titleAs?: 'h2' | 'h3' | 'h4';
735
+ className?: string;
736
+ }
737
+ /** Cumulative spend against a budget cap, with the end-of-period forecast. */
738
+ export declare function SpendVsBudget({ data, budget, currency, title, period, height, titleAs: TitleTag, className }: SpendVsBudgetProps): import("react").JSX.Element;
739
+ //#endregion
740
+ //#region src/billing/SpendVsBudget/block.meta.d.ts
741
+ declare const meta$63: BlockMeta;
742
+ //#endregion
743
+ //#region src/billing/SpendVsBudget/fixtures.d.ts
744
+ /**
745
+ * Sample cumulative spend for a 30-day cycle: actuals through day 18, forecast after.
746
+ * The forecast starts on the last actual point so the two lines join.
747
+ */
748
+ export declare const sampleSpend: SpendPoint[];
749
+ export declare const sampleBudget = 2000;
750
+ //#endregion
751
+ //#region src/billing/InvoiceTable/InvoiceTable.d.ts
752
+ export type InvoiceStatus = 'paid' | 'open' | 'overdue' | 'void' | 'draft';
753
+ export interface Invoice {
754
+ id: string;
755
+ /** Human invoice number, e.g. "INV-2026-0004". */
756
+ number: string;
757
+ /** Issue date. */
758
+ date: DateInput$1;
759
+ amount: number;
760
+ /** ISO 4217 code. Default: the table's currency. */
761
+ currency?: string;
762
+ status: InvoiceStatus;
763
+ /** PDF URL. Without it the download control calls `onDownload` only. */
764
+ url?: string;
765
+ }
766
+ export interface InvoiceTableProps {
767
+ invoices?: Invoice[];
768
+ /** Table caption (screen-reader only unless `showCaption`). */
769
+ caption?: string;
770
+ showCaption?: boolean;
771
+ currency?: string;
772
+ /** Called when a download control is activated. */
773
+ onDownload?: (invoice: Invoice) => void;
774
+ /** Row density; omitted, it follows the surrounding DensityProvider. */
775
+ density?: 'compact' | 'comfortable';
776
+ className?: string;
777
+ }
778
+ /** Invoice history: number, date, amount, status and a per-row PDF download. */
779
+ export declare function InvoiceTable({ invoices, caption, showCaption, currency, onDownload, density, className }: InvoiceTableProps): import("react").JSX.Element;
780
+ //#endregion
781
+ //#region src/billing/InvoiceTable/block.meta.d.ts
782
+ declare const meta$36: BlockMeta;
783
+ //#endregion
784
+ //#region src/billing/InvoiceTable/fixtures.d.ts
785
+ /** Sample invoice history. */
786
+ export declare const sampleInvoices: Invoice[];
787
+ //#endregion
788
+ //#region src/billing/PaymentMethodCard/PaymentMethodCard.d.ts
789
+ export type PaymentMethodStatus = 'valid' | 'expiring' | 'expired';
790
+ export interface PaymentMethod {
791
+ /** Card network as text, e.g. "Visa", "Mastercard", "Amex". */
792
+ brand: string;
793
+ last4: string;
794
+ expMonth: number;
795
+ expYear: number;
796
+ holder?: string;
797
+ isDefault?: boolean;
798
+ /** Computed by the app (the block never reads the clock). */
799
+ status?: PaymentMethodStatus;
800
+ }
801
+ export interface PaymentMethodCardProps {
802
+ method?: PaymentMethod;
803
+ title?: string;
804
+ description?: string;
805
+ onUpdate?: () => void;
806
+ onRemove?: () => void;
807
+ updateLabel?: string;
808
+ /** Heading level of the title, to fit the page outline (default h3). */
809
+ titleAs?: 'h2' | 'h3' | 'h4';
810
+ className?: string;
811
+ }
812
+ /** The payment method on file: brand, masked number, expiry and an update action. No card artwork. */
813
+ export declare function PaymentMethodCard({ method, title, description, onUpdate, onRemove, updateLabel, titleAs, className }: PaymentMethodCardProps): import("react").JSX.Element;
814
+ //#endregion
815
+ //#region src/billing/PaymentMethodCard/block.meta.d.ts
816
+ declare const meta$47: BlockMeta;
817
+ //#endregion
818
+ //#region src/billing/PaymentMethodCard/fixtures.d.ts
819
+ /** Sample default payment method. */
820
+ export declare const samplePaymentMethod: PaymentMethod;
821
+ //#endregion
822
+ //#region src/billing/CostBreakdown/CostBreakdown.d.ts
823
+ export interface CostItem {
824
+ label: string;
825
+ amount: number;
826
+ }
827
+ export interface CostBreakdownProps {
828
+ items?: CostItem[];
829
+ currency?: string;
830
+ title?: string;
831
+ /** Caption under the total in the donut hole. */
832
+ centerLabel?: string;
833
+ /** Donut diameter in px. */
834
+ size?: number;
835
+ /** Heading level of the title, to fit the page outline (default h3). */
836
+ titleAs?: 'h2' | 'h3' | 'h4';
837
+ className?: string;
838
+ }
839
+ /** Where the spend goes: a donut by category plus the categories ranked by amount. */
840
+ export declare function CostBreakdown({ items, currency, title, centerLabel, size, titleAs: TitleTag, className }: CostBreakdownProps): import("react").JSX.Element;
841
+ //#endregion
842
+ //#region src/billing/CostBreakdown/block.meta.d.ts
843
+ declare const meta$12: BlockMeta;
844
+ //#endregion
845
+ //#region src/billing/CostBreakdown/fixtures.d.ts
846
+ /** Sample cycle cost by category. */
847
+ export declare const sampleCosts: CostItem[];
848
+ //#endregion
849
+ //#region src/builders/FlowBuilder/fixtures.d.ts
850
+ /** React Flow edge, as FlowCanvas takes it. */
851
+ type FlowEdge = NonNullable<FlowCanvasProps['edges']>[number];
852
+ interface PaletteItem {
853
+ kind: FlowNodeKind$1;
854
+ /** Default title of a node created from this item. */
855
+ title: string;
856
+ description: string;
857
+ }
858
+ interface ConsoleEntry {
859
+ id: string;
860
+ /** Display time, e.g. "10:42:07". */
861
+ time: string;
862
+ level: 'info' | 'success' | 'warn' | 'error';
863
+ message: string;
864
+ }
865
+ //#endregion
866
+ //#region src/builders/FlowBuilder/extensions.d.ts
867
+ /** Connection plus node type identifiers, for consumer edge mapping and validation. */
868
+ interface FlowConnection {
869
+ source: string;
870
+ target: string;
871
+ sourceHandle: string | null;
872
+ targetHandle: string | null;
873
+ sourceType: string;
874
+ targetType: string;
875
+ }
876
+ interface FlowValidationIssue {
877
+ code: string;
878
+ nodeId?: string;
879
+ message: string;
880
+ }
881
+ interface FlowConnectionRejection extends FlowValidationIssue {
882
+ nodeId: string;
883
+ }
884
+ interface FlowBuilderExtensions {
885
+ mode?: 'edit' | 'run';
886
+ nodeStatus?: Readonly<Record<string, FlowTone$1 | undefined>>;
887
+ onNodeSelect?: (id: string) => void;
888
+ validationIssues?: readonly FlowValidationIssue[];
889
+ nodeTypes?: readonly FlowNodeRenderer$1[];
890
+ /** Return edge kind and payload; endpoints always come from the connection. */
891
+ onConnectEdge?: (connection: FlowConnection) => Pick<FlowEdge, 'type' | 'data'>;
892
+ /** Return true to accept, false for a generic rejection, or an issue for a specific reason. Pure: called during dragging. */
893
+ isValidConnection?: (connection: FlowConnection) => boolean | FlowValidationIssue;
894
+ onConnectionRejected?: (issue: FlowConnectionRejection) => void;
895
+ /** Called only after an accepted connection has been added. */
896
+ onConnect?: (connection: FlowConnection) => void;
897
+ }
898
+ //#endregion
899
+ //#region src/builders/FlowBuilder/FlowBuilder.d.ts
900
+ export interface FlowBuilderProps<Kind extends string = FlowNodeKind$1> extends FlowBuilderExtensions {
901
+ title?: string;
902
+ nodes?: FlowNode$1<Kind | FlowNodeKind$1>[];
903
+ edges?: FlowEdge[];
904
+ palette?: PaletteItem[];
905
+ /**
906
+ * Console output (controlled). Run and Clear then report the next list through
907
+ * `onConsoleChange` instead of updating it internally.
908
+ */
909
+ consoleEntries?: ConsoleEntry[];
910
+ /** Initial console output (uncontrolled). Defaults to the sample entries. */
911
+ defaultConsoleEntries?: ConsoleEntry[];
912
+ /** Called with the next console list after a run appends to it or it is cleared. */
913
+ onConsoleChange?: (entries: ConsoleEntry[]) => void;
914
+ /** Called when the console's Clear button is pressed. */
915
+ onConsoleClear?: () => void;
916
+ /** Heading level of the builder title (default h2); panel titles use the next level. */
917
+ titleAs?: 'h2' | 'h3' | 'h4';
918
+ /** Total height of the builder on wide screens (px). */
919
+ height?: number;
920
+ /**
921
+ * Called with the current graph when Run is pressed. Return console entries (or a promise
922
+ * of them) to log the real run; return nothing to log a simulated run. While a returned
923
+ * promise is pending the Run button shows a loading state; a rejection is logged as an error.
924
+ */
925
+ onRun?: (graph: {
926
+ nodes: FlowNode$1<Kind | FlowNodeKind$1>[];
927
+ edges: FlowEdge[];
928
+ }) => FlowRunResult | Promise<FlowRunResult>;
929
+ className?: string;
930
+ }
931
+ /** What `onRun` may return: entries to append, or nothing for the simulated run. */
932
+ export type FlowRunResult = ConsoleEntry[] | void | undefined;
933
+ /**
934
+ * Visual flow builder: node palette, brand React Flow canvas (drag, connect, zoom/pan),
935
+ * inspector for the selected node and a run console, in resizable panels. On small screens
936
+ * the panels stack.
937
+ */
938
+ export declare function FlowBuilder<Kind extends string = FlowNodeKind$1>({ title, nodes: initialNodes, edges: initialEdges, palette, consoleEntries, defaultConsoleEntries, onConsoleChange, onConsoleClear, titleAs: TitleTag, height, onRun, nodeTypes, onConnectEdge, onConnect: onConnected, isValidConnection, onConnectionRejected, validationIssues, mode, nodeStatus, onNodeSelect, className }: FlowBuilderProps<Kind>): import("react").JSX.Element;
939
+ //#endregion
940
+ //#region src/builders/FlowBuilder/parts.d.ts
941
+ /** Heading level of a panel title (one below the builder's title). */
942
+ type PanelHeading = 'h3' | 'h4' | 'h5';
943
+ interface NodePaletteProps {
944
+ items: PaletteItem[];
945
+ onAdd: (item: PaletteItem) => void;
946
+ /** Heading level of the panel title (default h3). */
947
+ titleAs?: PanelHeading;
948
+ }
949
+ /** Left rail: node kinds to add to the canvas. */
950
+ export declare function NodePalette({ items, onAdd, titleAs: TitleTag }: NodePaletteProps): import("react").JSX.Element;
951
+ interface NodeInspectorProps<Kind extends string = FlowNodeKind$1> {
952
+ node: FlowNode$1<Kind> | undefined;
953
+ onChange: (id: string, patch: Partial<FlowNodeData$1>) => void;
954
+ onDelete: (id: string) => void;
955
+ /** Heading level of the panel title (default h3). */
956
+ titleAs?: PanelHeading;
957
+ }
958
+ /** Right rail: the selected node's editable fields. */
959
+ export declare function NodeInspector<Kind extends string = FlowNodeKind$1>({ node, onChange, onDelete, titleAs: TitleTag }: NodeInspectorProps<Kind>): import("react").JSX.Element;
960
+ interface RunConsoleProps {
961
+ entries: ConsoleEntry[];
962
+ onClear: () => void;
963
+ /** Heading level of the panel title (default h3). */
964
+ titleAs?: PanelHeading;
965
+ }
966
+ /** Bottom panel: run output (role="log"). */
967
+ export declare function RunConsole({ entries, onClear, titleAs: TitleTag }: RunConsoleProps): import("react").JSX.Element;
968
+ //#endregion
969
+ //#region src/builders/FlowBuilder/block.meta.d.ts
970
+ declare const meta$28: BlockMeta;
971
+ //#endregion
972
+ //#region src/builders/CodePanel/fixtures.d.ts
973
+ interface CodeFile {
974
+ /** File path, shown as the tab label. */
975
+ path: string;
976
+ /** Monaco language id. */
977
+ language: string;
978
+ content: string;
979
+ /** Previous version; enables the diff view for this file. */
980
+ original?: string;
981
+ }
982
+ type ProblemSeverity = 'error' | 'warning' | 'info';
983
+ interface CodeProblem {
984
+ id: string;
985
+ severity: ProblemSeverity;
986
+ message: string;
987
+ /** Path of the file the problem belongs to. */
988
+ file: string;
989
+ line: number;
990
+ column?: number;
991
+ /** Tool that reported it, e.g. "tsc" or "schema". */
992
+ source?: string;
993
+ }
994
+ //#endregion
995
+ //#region src/builders/CodePanel/markers.d.ts
996
+ /** Consumer line marker. Use a distinct owner for each external diagnostics service. */
997
+ interface CodePanelMarker extends CodeProblem {
998
+ owner: string;
999
+ endLine?: number;
1000
+ endColumn?: number;
1001
+ }
1002
+ type MonacoReady = (monaco: Monaco) => void | (() => void);
1003
+ //#endregion
1004
+ //#region src/builders/CodePanel/CodePanel.d.ts
1005
+ type View = 'code' | 'diff';
1006
+ export interface CodePanelProps {
1007
+ files?: CodeFile[];
1008
+ readOnly?: boolean;
1009
+ markers?: readonly CodePanelMarker[];
1010
+ /** Fires when the merged error count crosses zero (warnings do not invalidate). */
1011
+ onValidityChange?: (valid: boolean) => void;
1012
+ /** Configure consumer language services; optionally return their cleanup function. */
1013
+ onMonacoReady?: MonacoReady;
1014
+ problems?: CodeProblem[];
1015
+ /** Path of the file opened first (uncontrolled; defaults to the first file). */
1016
+ defaultFile?: string;
1017
+ /** Path of the open file (controlled). Pair with `onActiveFileChange`. */
1018
+ activeFile?: string;
1019
+ /** Called with the path of the file to open (tab click, arrow keys, or a problem in another file). */
1020
+ onActiveFileChange?: (path: string) => void;
1021
+ /** Heading level of the "Problems" heading, to fit the page outline (default 3). */
1022
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
1023
+ defaultView?: View;
1024
+ /** Editor height (px or CSS length). */
1025
+ height?: number | string;
1026
+ /** Called with the file path and its new text on every edit. */
1027
+ onChange?: (path: string, value: string) => void;
1028
+ /** Called when a problem is picked in the list (the editor also jumps to it). */
1029
+ onProblemSelect?: (problem: CodeProblem) => void;
1030
+ /** Monaco loader passed to the editors (self-hosting, tests). Monaco loads lazily by default. */
1031
+ loader?: MonacoLoader;
1032
+ className?: string;
1033
+ }
1034
+ /**
1035
+ * Multi-file code panel: file tabs, Monaco editor (or diff against the previous version) and
1036
+ * a problems list that jumps to the reported line. Monaco is loaded lazily by @gntik-ai/editor.
1037
+ */
1038
+ export declare function CodePanel({ files, problems: suppliedProblems, readOnly, markers, onValidityChange, onMonacoReady, defaultFile, activeFile: activeProp, onActiveFileChange, headingLevel, defaultView, height, onChange, onProblemSelect, loader, className }: CodePanelProps): import("react").JSX.Element;
1039
+ //#endregion
1040
+ //#region src/builders/CodePanel/block.meta.d.ts
1041
+ declare const meta$8: BlockMeta;
1042
+ //#endregion
1043
+ //#region src/builders/LogViewer/fixtures.d.ts
1044
+ type LogLevel = 'debug' | 'info' | 'warn' | 'error';
1045
+ interface LogLine {
1046
+ id: string;
1047
+ /** Display timestamp, e.g. "12:04:31.118". */
1048
+ timestamp: string;
1049
+ level: LogLevel;
1050
+ message: string;
1051
+ /** Emitting component, e.g. "worker-2". */
1052
+ source?: string;
1053
+ }
1054
+ //#endregion
1055
+ //#region src/builders/LogViewer/LogViewer.d.ts
1056
+ export declare const LOG_LEVELS: LogLevel[];
1057
+ export interface LogViewerProps {
1058
+ /** Log lines, oldest first. */
1059
+ lines?: LogLine[];
1060
+ /** Accessible name of the log region and visible title. */
1061
+ title?: string;
1062
+ /** Height of the scrolling viewport in px. */
1063
+ height?: number;
1064
+ /** Fixed row height in px (the windowing math relies on it). */
1065
+ rowHeight?: number;
1066
+ /** Rows rendered above and below the visible window. */
1067
+ overscan?: number;
1068
+ /** Levels shown initially. */
1069
+ defaultLevels?: LogLevel[];
1070
+ /** Start pinned to the newest line. */
1071
+ defaultFollow?: boolean;
1072
+ /** Called after a line is copied. */
1073
+ onCopyLine?: (line: LogLine) => void;
1074
+ /** Enables an inspect button and mouse selection on each visible row. */
1075
+ onSelectLine?: (line: LogLine) => void;
1076
+ /** Selected inspect button, exposed through aria-pressed. */
1077
+ selectedLineId?: string;
1078
+ /** Announce appended lines while following (default true). False keeps aria-live off. */
1079
+ announceLines?: boolean;
1080
+ /** Heading level of the title, to fit the page outline (default h3). */
1081
+ titleAs?: 'h2' | 'h3' | 'h4';
1082
+ className?: string;
1083
+ }
1084
+ /**
1085
+ * Log stream viewer. Only the visible rows are rendered (fixed row height + scroll offset),
1086
+ * so it stays fast with thousands of lines. Level filter, search with highlighted matches,
1087
+ * follow-tail and per-line copy.
1088
+ */
1089
+ export declare function LogViewer({ lines, title, height, rowHeight, overscan, defaultLevels, defaultFollow, onCopyLine, onSelectLine, selectedLineId, announceLines, titleAs: TitleTag, className }: LogViewerProps): import("react").JSX.Element;
1090
+ //#endregion
1091
+ //#region src/builders/LogViewer/block.meta.d.ts
1092
+ declare const meta$38: BlockMeta;
1093
+ //#endregion
1094
+ //#region src/data-display/shared/TrendDelta.d.ts
1095
+ /** Arrow shape of a change. */
1096
+ export type DeltaDirection = 'up' | 'down' | 'flat';
1097
+ /** Whether the change is good, bad or neither — independent of its direction (lower latency is good). */
1098
+ export type DeltaSentiment = 'positive' | 'negative' | 'neutral';
1099
+ export interface KpiDelta {
1100
+ /** Display text, e.g. "+12.4%". */
1101
+ value: string;
1102
+ direction: DeltaDirection;
1103
+ sentiment: DeltaSentiment;
1104
+ /** Comparison context, e.g. "vs. previous 24h". */
1105
+ note?: string;
1106
+ }
1107
+ export interface TrendDeltaProps extends KpiDelta {
1108
+ className?: string;
1109
+ }
1110
+ /**
1111
+ * Mono delta with a triangle: the arrow follows `direction`, the colour follows `sentiment`.
1112
+ * Screen readers get the direction and sentiment in words.
1113
+ */
1114
+ export declare function TrendDelta({ value, direction, sentiment, className }: TrendDeltaProps): import("react").JSX.Element;
1115
+ //#endregion
1116
+ //#region src/data-display/KpiRow/KpiRow.d.ts
1117
+ export interface KpiItem {
1118
+ id: string;
1119
+ label: string;
1120
+ /** Pre-formatted value ("38,921", "842 ms"). */
1121
+ value: string;
1122
+ delta?: KpiDelta;
1123
+ /** Optional series for a sparkline under the value, oldest first. */
1124
+ trend?: readonly number[];
1125
+ trendTone?: SparklineTone;
1126
+ }
1127
+ export interface KpiRowProps {
1128
+ /** 3–5 tiles read best; more wrap onto a new row. */
1129
+ items?: readonly KpiItem[];
1130
+ /** `cards` (one card per KPI, default) or `strip` (a single divided card, for page headers). */
1131
+ variant?: 'cards' | 'strip';
1132
+ /** Draw sparklines for items that have a `trend`. */
1133
+ showTrends?: boolean;
1134
+ /** Accessible name of the list. */
1135
+ label?: string;
1136
+ className?: string;
1137
+ }
1138
+ /**
1139
+ * KPI row: label, big number, delta (direction and sentiment are independent) and an optional
1140
+ * Sparkline. A description list, so each label is announced with its value.
1141
+ */
1142
+ export declare function KpiRow({ items, variant, showTrends, label, className }: KpiRowProps): import("react").JSX.Element;
1143
+ //#endregion
1144
+ //#region src/data-display/KpiRow/block.meta.d.ts
1145
+ declare const meta$37: BlockMeta;
1146
+ //#endregion
1147
+ //#region src/data-display/KpiRow/fixtures.d.ts
1148
+ /** Four project KPIs: note latency and spend — same arrow logic, different sentiment. */
1149
+ export declare const KPI_ITEMS: KpiItem[];
1150
+ //#endregion
1151
+ //#region src/data-display/StatCard/StatCard.d.ts
1152
+ export interface StatCardRange {
1153
+ /** Range key, e.g. "7d". */
1154
+ value: string;
1155
+ /** Toggle label. */
1156
+ label: string;
1157
+ /** Pre-formatted headline value for this range. */
1158
+ stat: string;
1159
+ delta?: KpiDelta;
1160
+ /** Series drawn under the value, oldest first. */
1161
+ series: readonly number[];
1162
+ }
1163
+ export interface StatCardProps {
1164
+ label?: string;
1165
+ /** Leading icon tile (a lucide icon). */
1166
+ icon?: LucideIcon;
1167
+ /** One entry per range; with a single entry the range toggle is hidden. */
1168
+ ranges?: readonly StatCardRange[];
1169
+ /** Initially selected range (uncontrolled). */
1170
+ defaultRange?: string;
1171
+ /** Selected range (controlled). */
1172
+ range?: string;
1173
+ onRangeChange?: (range: string) => void;
1174
+ /** `area` line (default) or daily `bar` shape. */
1175
+ chart?: 'area' | 'bar';
1176
+ tone?: SparklineTone;
1177
+ /** Footer link-style action ("View requests →"). */
1178
+ action?: {
1179
+ label: string;
1180
+ onClick?: () => void;
1181
+ href?: string;
1182
+ };
1183
+ /** Heading level of the title, to fit the page outline (default h3). */
1184
+ titleAs?: 'h2' | 'h3' | 'h4';
1185
+ className?: string;
1186
+ }
1187
+ /** A single rich stat: icon tile, label, value, delta, a range toggle and a trend chart, with a footer action. */
1188
+ export declare function StatCard({ label, icon: IconCmp, ranges, defaultRange, range: rangeProp, onRangeChange, chart, tone, action, titleAs: TitleTag, className }: StatCardProps): import("react").JSX.Element;
1189
+ //#endregion
1190
+ //#region src/data-display/StatCard/block.meta.d.ts
1191
+ declare const meta$65: BlockMeta;
1192
+ //#endregion
1193
+ //#region src/data-display/StatCard/fixtures.d.ts
1194
+ /** Requests per range: the value and delta recalculate when the range changes. */
1195
+ export declare const STAT_RANGES: StatCardRange[];
1196
+ //#endregion
1197
+ //#region src/data-display/ChartCard/fixtures.d.ts
1198
+ interface CostPoint {
1199
+ day: string;
1200
+ Compute: number;
1201
+ Storage: number;
1202
+ Network: number;
1203
+ }
1204
+ /** Infrastructure cost by resource, per range. */
1205
+ export declare const COST_BY_RANGE: Record<string, CostPoint[]>;
1206
+ export declare const COST_RANGES: ChartCardRange[];
1207
+ interface TrafficRow {
1208
+ day: string;
1209
+ '00h': number;
1210
+ '03h': number;
1211
+ '06h': number;
1212
+ '09h': number;
1213
+ '12h': number;
1214
+ '15h': number;
1215
+ '18h': number;
1216
+ '21h': number;
1217
+ }
1218
+ /** Three-hour buckets of TRAFFIC_BY_RANGE, in display order. */
1219
+ export declare const TRAFFIC_BUCKETS: readonly ["00h", "03h", "06h", "09h", "12h", "15h", "18h", "21h"];
1220
+ /** Requests (thousands) per weekday and three-hour bucket: a heatmap for a ChartCard. */
1221
+ export declare const TRAFFIC_BY_RANGE: Record<string, TrafficRow[]>;
1222
+ export declare const TRAFFIC_RANGES: ChartCardRange[];
1223
+ //#endregion
1224
+ //#region src/data-display/ChartCard/ChartCard.d.ts
1225
+ export interface ChartCardRange {
1226
+ /** Range key ("7d"); also the key into `dataByRange`. */
1227
+ value: string;
1228
+ label: string;
1229
+ /** Optional headline for this range. */
1230
+ summary?: {
1231
+ value: string;
1232
+ delta?: KpiDelta;
1233
+ };
1234
+ }
1235
+ /** Heatmap-only options of a ChartCard with `kind="heatmap"`. */
1236
+ export type ChartCardHeatmapOptions = Pick<HeatmapProps<object>, 'scale' | 'domain' | 'steps' | 'showValues' | 'rowHeader'>;
1237
+ export interface ChartCardProps<T extends object> extends ChartStateProps {
1238
+ title?: string;
1239
+ description?: string;
1240
+ /** Ordered options; defaults to 7d/30d/90d. Unknown range keys fall back to the first option. */
1241
+ ranges?: readonly ChartCardRange[];
1242
+ /** Chart rows per range key. */
1243
+ dataByRange?: Readonly<Record<string, readonly T[]>>;
1244
+ /** X-axis field (heatmap: the row label field). */
1245
+ index?: Extract<keyof T, string>;
1246
+ /** Series fields, one legend entry each (heatmap: the columns, in order). */
1247
+ categories?: ReadonlyArray<Extract<keyof T, string>>;
1248
+ /**
1249
+ * Chart type. `heatmap` renders an @gntik-ai/charts Heatmap: rows from `index`, columns from
1250
+ * `categories`, its hue from `colors[0]`, its colour scale as the legend (`showLegend`) and its
1251
+ * cells sized to fill `height`.
1252
+ */
1253
+ kind?: 'area' | 'line' | 'bar' | 'heatmap';
1254
+ /** Heatmap options (scale, domain, steps, showValues, rowHeader). */
1255
+ heatmap?: ChartCardHeatmapOptions;
1256
+ stacked?: boolean;
1257
+ colors?: readonly ChartColor[];
1258
+ valueFormatter?: ValueFormatter;
1259
+ showLegend?: boolean;
1260
+ /** Hide the range control when a page toolbar owns the controlled `range`. */
1261
+ showRangeToggle?: boolean;
1262
+ /** Plot height in px (heatmap: the grid, column labels included). */
1263
+ height?: number;
1264
+ /** Initial uncontrolled selection; defaults to the first option. */
1265
+ defaultRange?: string;
1266
+ /** Controlled selection. Changes are requested through `onRangeChange` until this prop updates. */
1267
+ range?: string;
1268
+ onRangeChange?: (range: string) => void;
1269
+ /** Extra header control (e.g. a MoreMenu), after the range toggle. */
1270
+ action?: ReactNode;
1271
+ /** Footer content under the chart. */
1272
+ footer?: ReactNode;
1273
+ /** Heading level of the title, to fit the page outline (default h3). */
1274
+ titleAs?: 'h2' | 'h3' | 'h4';
1275
+ className?: string;
1276
+ }
1277
+ /**
1278
+ * Chart in a Card: title, optional headline value + delta, a configurable range ToggleGroup, and an
1279
+ * @gntik-ai/charts area, line, bar or heatmap chart with its legend (heatmap: its colour scale).
1280
+ * Defaults to 7d/30d/90d; hide the toggle when a toolbar owns the controlled range.
1281
+ * The chart states (`state`, `emptyMessage`, `errorMessage`, `onRetry`) and `dataTable` pass through.
1282
+ */
1283
+ export declare function ChartCard<T extends object = CostPoint>({ title, description, ranges, dataByRange, index, categories, kind, heatmap, stacked, colors, valueFormatter, showLegend, showRangeToggle, height, defaultRange, range: rangeProp, onRangeChange, action, footer, titleAs, className, state, emptyMessage, errorMessage, onRetry, dataTable }: ChartCardProps<T>): import("react").JSX.Element;
1284
+ //#endregion
1285
+ //#region src/data-display/ChartCard/block.meta.d.ts
1286
+ declare const meta$7: BlockMeta;
1287
+ //#endregion
1288
+ //#region src/data-display/DescriptionListCard/DescriptionListCard.d.ts
1289
+ export interface DescriptionItem {
1290
+ id: string;
1291
+ label: string;
1292
+ /** Text value; also what the copy button copies unless `copyValue` is set. */
1293
+ value?: string;
1294
+ /** Rich value (overrides `value` for display). */
1295
+ render?: ReactNode;
1296
+ /** Shows the value as a StatusTag with this state key. */
1297
+ status?: string;
1298
+ /** Monospace value (IDs, regions, URLs). */
1299
+ mono?: boolean;
1300
+ /** Adds a copy button. */
1301
+ copyable?: boolean;
1302
+ copyValue?: string;
1303
+ }
1304
+ export interface DescriptionListCardProps {
1305
+ title?: string;
1306
+ description?: string;
1307
+ items?: readonly DescriptionItem[];
1308
+ /** Shows an Edit button in the header. */
1309
+ onEdit?: () => void;
1310
+ editLabel?: string;
1311
+ /** Called after a value is copied. */
1312
+ onCopy?: (item: DescriptionItem) => void;
1313
+ /** Heading level of the title, to fit the page outline (default h3). */
1314
+ titleAs?: 'h2' | 'h3' | 'h4';
1315
+ className?: string;
1316
+ }
1317
+ /** Key–value detail card: label column, values (mono, status or rich), copy buttons and an Edit action. */
1318
+ export declare function DescriptionListCard({ title, description, items, onEdit, editLabel, onCopy, titleAs, className }: DescriptionListCardProps): import("react").JSX.Element;
1319
+ //#endregion
1320
+ //#region src/data-display/DescriptionListCard/block.meta.d.ts
1321
+ declare const meta$18: BlockMeta;
1322
+ //#endregion
1323
+ //#region src/data-display/DescriptionListCard/fixtures.d.ts
1324
+ /** Configuration of a deployment. */
1325
+ export declare const DEPLOYMENT_DETAILS: DescriptionItem[];
1326
+ //#endregion
1327
+ //#region src/data-display/ResourceCardGrid/ResourceCardGrid.d.ts
1328
+ export interface ResourceCard {
1329
+ id: string;
1330
+ name: string;
1331
+ description?: string;
1332
+ /** Icon tile (a lucide icon). Ignored when `avatar` is set. */
1333
+ icon?: LucideIcon;
1334
+ /** Avatar instead of the icon tile (people, teams, organisations). */
1335
+ avatar?: {
1336
+ name: string;
1337
+ src?: string;
1338
+ };
1339
+ /** StatusTag state key (running, paused, failed…). */
1340
+ status?: string;
1341
+ /** Two or three small figures at the bottom of the card. */
1342
+ meta?: ReadonlyArray<{
1343
+ label: string;
1344
+ value: string;
1345
+ }>;
1346
+ }
1347
+ export type ResourceAction = 'open' | 'rename' | 'duplicate' | 'delete';
1348
+ export interface ResourceCardGridProps {
1349
+ items?: readonly ResourceCard[];
1350
+ /** Accessible name of the list. */
1351
+ label?: string;
1352
+ /** Called with the default actions (Open, Rename, Duplicate, Delete). */
1353
+ onAction?: (action: ResourceAction, item: ResourceCard) => void;
1354
+ /** Replaces the default menu entirely. Return an empty array to hide the menu. */
1355
+ getActions?: (item: ResourceCard) => Array<MoreMenuAction | 'separator'>;
1356
+ /** Columns at the widest breakpoint. */
1357
+ columns?: 2 | 3 | 4;
1358
+ /** Heading level of each card's name, to fit the page outline (default h3). */
1359
+ titleAs?: 'h2' | 'h3' | 'h4';
1360
+ className?: string;
1361
+ }
1362
+ /** Responsive grid of resource cards: icon or avatar, name, status, meta figures and a row-actions MoreMenu. */
1363
+ export declare function ResourceCardGrid({ items, label, onAction, getActions, columns, titleAs: TitleTag, className }: ResourceCardGridProps): import("react").JSX.Element;
1364
+ //#endregion
1365
+ //#region src/data-display/ResourceCardGrid/block.meta.d.ts
1366
+ declare const meta$56: BlockMeta;
1367
+ //#endregion
1368
+ //#region src/data-display/ResourceCardGrid/fixtures.d.ts
1369
+ /** Project resources. */
1370
+ export declare const RESOURCE_CARDS: ResourceCard[];
1371
+ //#endregion
1372
+ //#region src/data-display/StatusTimeline/StatusTimeline.d.ts
1373
+ export interface StatusEvent {
1374
+ id: string;
1375
+ /** Short state name next to the dot ("Running"). */
1376
+ status: string;
1377
+ tone: StatusDotTone;
1378
+ title: string;
1379
+ description?: string;
1380
+ at: DateInput;
1381
+ /** Who or what caused the change. */
1382
+ actor?: string;
1383
+ /** Pulses the dot (the current, in-progress state). */
1384
+ live?: boolean;
1385
+ }
1386
+ export interface StatusTimelineProps {
1387
+ /** Events, newest first. */
1388
+ events?: readonly StatusEvent[];
1389
+ /** Accessible name of the list. */
1390
+ label?: string;
1391
+ /** Title shown when events is an explicit empty array. */
1392
+ emptyLabel?: string;
1393
+ /** Collapse toggle text. */
1394
+ showFewerLabel?: string;
1395
+ /** Expand toggle text, given the number of hidden events. */
1396
+ showEarlierLabel?: (hidden: number) => string;
1397
+ /** Prefix before the actor's name. */
1398
+ actorLabel?: string;
1399
+ /** Events shown before "Show earlier"; all when omitted. */
1400
+ maxVisible?: number;
1401
+ /** `relative` ("3 hours ago") or `absolute` timestamps. */
1402
+ timeFormat?: 'relative' | 'absolute';
1403
+ className?: string;
1404
+ }
1405
+ /** Vertical timeline of state changes, or a named empty state for an explicit empty events array. */
1406
+ export declare function StatusTimeline({ events, label: labelProp, emptyLabel: emptyLabelProp, showFewerLabel: showFewerLabelProp, showEarlierLabel: showEarlierLabelProp, actorLabel: actorLabelProp, maxVisible, timeFormat, className }: StatusTimelineProps): import("react").JSX.Element;
1407
+ //#endregion
1408
+ //#region src/data-display/StatusTimeline/block.meta.d.ts
1409
+ declare const meta$66: BlockMeta;
1410
+ //#endregion
1411
+ //#region src/data-display/StatusTimeline/fixtures.d.ts
1412
+ /** State changes of a deployment, newest first. */
1413
+ export declare const DEPLOYMENT_EVENTS: StatusEvent[];
1414
+ //#endregion
1415
+ //#region src/data-display/ActivityFeed/ActivityFeed.d.ts
1416
+ export interface ActivityItem {
1417
+ id: string;
1418
+ actor: {
1419
+ name: string;
1420
+ src?: string;
1421
+ };
1422
+ /** Verb phrase ("deployed", "invited"). */
1423
+ action: string;
1424
+ /** Object of the action, emphasised ("orders-api v2.14.0"). */
1425
+ target?: string;
1426
+ at: DateInput;
1427
+ }
1428
+ export interface ActivityFeedProps {
1429
+ /** Items, newest first. */
1430
+ items?: readonly ActivityItem[];
1431
+ /** Accessible name of the feed. */
1432
+ label?: string;
1433
+ /** Reference "now" for the Today / Yesterday headings (defaults to the mount time). */
1434
+ now?: DateInput;
1435
+ locale?: string;
1436
+ /** Shows a "Load more" button. */
1437
+ onLoadMore?: () => void;
1438
+ loadingMore?: boolean;
1439
+ /** Heading level of the day-group titles, to fit the page outline (default h3). */
1440
+ groupHeadingAs?: 'h2' | 'h3' | 'h4';
1441
+ className?: string;
1442
+ }
1443
+ interface DayGroup {
1444
+ key: string;
1445
+ label: string;
1446
+ items: ActivityItem[];
1447
+ }
1448
+ /** Groups items by calendar day (local time), labelled Today, Yesterday or the date. */
1449
+ export declare function groupActivityByDay(items: readonly ActivityItem[], now: Date, locale?: string): DayGroup[];
1450
+ /** Activity feed: actor avatar, action, target and Timestamp, grouped by day. */
1451
+ export declare function ActivityFeed({ items, label, now, locale, onLoadMore, loadingMore, groupHeadingAs: GroupTag, className }: ActivityFeedProps): import("react").JSX.Element;
1452
+ //#endregion
1453
+ //#region src/data-display/ActivityFeed/block.meta.d.ts
1454
+ declare const meta$1: BlockMeta;
1455
+ //#endregion
1456
+ //#region src/data-display/ActivityFeed/fixtures.d.ts
1457
+ /** Project activity, newest first. */
1458
+ export declare const PROJECT_ACTIVITY: ActivityItem[];
1459
+ //#endregion
1460
+ //#region src/data-display/CommentThread/CommentThread.d.ts
1461
+ export interface CommentAuthor {
1462
+ name: string;
1463
+ src?: string;
1464
+ }
1465
+ export interface ThreadComment {
1466
+ id: string;
1467
+ author: CommentAuthor;
1468
+ /** Plain text (no markdown); line breaks are kept. */
1469
+ body: string;
1470
+ at: DateInput;
1471
+ }
1472
+ export interface CommentThreadProps {
1473
+ comments?: readonly ThreadComment[];
1474
+ /** Author of new comments (the signed-in user). */
1475
+ currentUser?: CommentAuthor;
1476
+ /** Called with the trimmed text when a comment is posted. */
1477
+ onSubmit?: (body: string) => void;
1478
+ /** Append posted comments locally (default). Turn off when the parent updates `comments`. */
1479
+ appendOnSubmit?: boolean;
1480
+ /** Accessible name of the thread. */
1481
+ label?: string;
1482
+ placeholder?: string;
1483
+ submitLabel?: string;
1484
+ className?: string;
1485
+ }
1486
+ /** Comment thread: avatar, author, plain-text body and Timestamp, with a reply composer (⌘/Ctrl+Enter posts). */
1487
+ export declare function CommentThread({ comments, currentUser, onSubmit, appendOnSubmit, label: labelProp, placeholder: placeholderProp, submitLabel: submitLabelProp, className }: CommentThreadProps): import("react").JSX.Element;
1488
+ //#endregion
1489
+ //#region src/data-display/CommentThread/block.meta.d.ts
1490
+ declare const meta$9: BlockMeta;
1491
+ //#endregion
1492
+ //#region src/data-display/CommentThread/fixtures.d.ts
1493
+ export declare const COMMENT_AUTHOR: CommentAuthor;
1494
+ /** Review discussion on a pull request, oldest first. */
1495
+ export declare const REVIEW_COMMENTS: ThreadComment[];
1496
+ //#endregion
1497
+ //#region src/feedback/types.d.ts
1498
+ /** An action rendered as a kit Button, or as a Link when `href` is set. */
1499
+ interface FeedbackAction {
1500
+ id?: string;
1501
+ label: string;
1502
+ href?: string;
1503
+ icon?: LucideIcon;
1504
+ variant?: ButtonProps['variant'];
1505
+ disabled?: boolean;
1506
+ onClick?: () => void;
1507
+ }
1508
+ //#endregion
1509
+ //#region src/feedback/SystemBanner/SystemBanner.d.ts
1510
+ export type SystemBannerKind = 'maintenance' | 'incident' | 'info';
1511
+ export interface SystemBannerProps {
1512
+ kind?: SystemBannerKind;
1513
+ /** Bold lead-in. */
1514
+ title?: ReactNode;
1515
+ message?: ReactNode;
1516
+ /** Optional call to action (status page, details). */
1517
+ action?: FeedbackAction | null;
1518
+ /** Shows a dismiss button. Incidents are usually not dismissible. */
1519
+ dismissible?: boolean;
1520
+ /** Controlled visibility; omit to let the banner hide itself on dismiss. */
1521
+ open?: boolean;
1522
+ onDismiss?: () => void;
1523
+ className?: string;
1524
+ }
1525
+ /**
1526
+ * Full-width banner above the app chrome for system-wide notices. Incidents are announced
1527
+ * assertively (role="alert"); maintenance and info politely (role="status").
1528
+ */
1529
+ export declare function SystemBanner({ kind, title, message, action, dismissible, open, onDismiss, className }: SystemBannerProps): import("react").JSX.Element | null;
1530
+ //#endregion
1531
+ //#region src/feedback/SystemBanner/block.meta.d.ts
1532
+ declare const meta$69: BlockMeta;
1533
+ //#endregion
1534
+ //#region src/feedback/InlineCallout/InlineCallout.d.ts
1535
+ export interface InlineCalloutProps {
1536
+ tone?: AlertTone;
1537
+ title?: ReactNode;
1538
+ description?: ReactNode;
1539
+ /** Buttons (or links when `href` is set) under the text; the first is the main one. */
1540
+ actions?: FeedbackAction[];
1541
+ /** Replaces the tone icon; `null` hides it. */
1542
+ icon?: LucideIcon | null;
1543
+ /** Shows a dismiss button; the callout hides itself unless `open` is controlled. */
1544
+ dismissible?: boolean;
1545
+ open?: boolean;
1546
+ onDismiss?: () => void;
1547
+ className?: string;
1548
+ }
1549
+ /** In-content callout built on Alert: tone, title, body and a row of actions. */
1550
+ export declare function InlineCallout({ tone, title, description, actions, icon, dismissible, open, onDismiss, className }: InlineCalloutProps): import("react").JSX.Element | null;
1551
+ //#endregion
1552
+ //#region src/feedback/InlineCallout/block.meta.d.ts
1553
+ declare const meta$33: BlockMeta;
1554
+ //#endregion
1555
+ //#region src/feedback/EmptyStates/EmptyStates.d.ts
1556
+ interface SharedEmptyProps {
1557
+ /** Heading level that fits the page outline. */
1558
+ titleAs?: 'h2' | 'h3' | 'h4';
1559
+ /** Dashed border around the state (use inside a card or table). */
1560
+ bordered?: boolean;
1561
+ className?: string;
1562
+ }
1563
+ export interface FirstRunEmptyProps extends SharedEmptyProps {
1564
+ icon?: LucideIcon;
1565
+ title?: ReactNode;
1566
+ description?: ReactNode;
1567
+ actionLabel?: string;
1568
+ onAction?: () => void;
1569
+ /** Secondary link (docs, guide). `null` hides it. */
1570
+ secondary?: {
1571
+ label: string;
1572
+ href: string;
1573
+ } | null;
1574
+ /** Short checklist of what the first run involves. */
1575
+ steps?: string[];
1576
+ }
1577
+ /** First-run state: nothing created yet; explains the value and offers the first action. */
1578
+ export declare function FirstRunEmpty({ icon, title, description, actionLabel, onAction, secondary, steps, titleAs, bordered, className }: FirstRunEmptyProps): import("react").JSX.Element;
1579
+ export interface NoResultsEmptyProps extends SharedEmptyProps {
1580
+ /** The search text that matched nothing. */
1581
+ query?: string;
1582
+ /** Number of active filters (shows "Clear filters" when > 0). */
1583
+ filterCount?: number;
1584
+ /** Plural noun for what is being searched. */
1585
+ entity?: string;
1586
+ onClearFilters?: () => void;
1587
+ onClearSearch?: () => void;
1588
+ }
1589
+ /** No-results state for a filtered list or table: echoes the query and offers ways out. */
1590
+ export declare function NoResultsEmpty({ query, filterCount, entity, onClearFilters, onClearSearch, titleAs, bordered, className }: NoResultsEmptyProps): import("react").JSX.Element;
1591
+ export interface NoAccessEmptyProps extends SharedEmptyProps {
1592
+ /** What the viewer cannot see. */
1593
+ resource?: string;
1594
+ /** Who can grant access. */
1595
+ owner?: string;
1596
+ /** Called on "Request access"; may return a promise (the button shows a spinner). */
1597
+ onRequestAccess?: () => void | Promise<void>;
1598
+ /** Start in the "requested" state (e.g. a pending request exists). */
1599
+ defaultRequested?: boolean;
1600
+ }
1601
+ /** Permission state: the viewer lacks access; explains who can grant it and lets them ask. */
1602
+ export declare function NoAccessEmpty({ resource, owner, onRequestAccess, defaultRequested, titleAs, bordered, className }: NoAccessEmptyProps): import("react").JSX.Element;
1603
+ //#endregion
1604
+ //#region src/feedback/EmptyStates/fixtures.d.ts
1605
+ /** Neutral sample copy for the empty states. */
1606
+ export declare const firstRunSteps: string[];
1607
+ export declare const noResultsSample: {
1608
+ readonly query: "billing-api";
1609
+ readonly filterCount: 2;
1610
+ readonly entity: "projects";
1611
+ };
1612
+ export declare const noAccessSample: {
1613
+ readonly resource: "Billing";
1614
+ readonly owner: "an organization admin";
1615
+ };
1616
+ //#endregion
1617
+ //#region src/feedback/EmptyStates/block.meta.d.ts
1618
+ declare const meta$20: BlockMeta;
1619
+ //#endregion
1620
+ //#region src/feedback/Skeletons/Skeletons.d.ts
1621
+ export interface TableSkeletonProps {
1622
+ rows?: number;
1623
+ columns?: number;
1624
+ /** Screen-reader announcement. */
1625
+ label?: string;
1626
+ className?: string;
1627
+ }
1628
+ /** Table placeholder: header strip plus rows with an avatar cell, text cells and a status pill. */
1629
+ export declare function TableSkeleton({ rows, columns, label: labelProp, className }: TableSkeletonProps): import("react").JSX.Element;
1630
+ export interface ListSkeletonProps {
1631
+ rows?: number;
1632
+ label?: string;
1633
+ className?: string;
1634
+ }
1635
+ /** List placeholder: avatar, two text lines, a pill and a row action. */
1636
+ export declare function ListSkeleton({ rows, label: labelProp, className }: ListSkeletonProps): import("react").JSX.Element;
1637
+ export interface PageSkeletonProps {
1638
+ /** Number of stat cards. */
1639
+ stats?: number;
1640
+ /** Rows of the table under the stats. */
1641
+ rows?: number;
1642
+ label?: string;
1643
+ className?: string;
1644
+ }
1645
+ /** Whole-page placeholder: header (title, meta, actions), a stat row and a table. */
1646
+ export declare function PageSkeleton({ stats, rows, label: labelProp, className }: PageSkeletonProps): import("react").JSX.Element;
1647
+ //#endregion
1648
+ //#region src/feedback/Skeletons/block.meta.d.ts
1649
+ declare const meta$62: BlockMeta;
1650
+ //#endregion
1651
+ //#region src/feedback/ConfirmDestructive/ConfirmDestructive.d.ts
1652
+ export interface ConfirmDestructiveProps {
1653
+ /** Exact name the user must type to unlock the action. */
1654
+ resourceName?: string;
1655
+ /** What kind of resource it is (used in the default copy). */
1656
+ resourceType?: string;
1657
+ title?: ReactNode;
1658
+ description?: ReactNode;
1659
+ /** What will be lost, as a short list. */
1660
+ consequences?: string[];
1661
+ /** Label of the confirming button (and of the default trigger). */
1662
+ confirmLabel?: string;
1663
+ /** Default trigger button text; `null` renders no trigger (control `open` instead). */
1664
+ triggerLabel?: string | null;
1665
+ open?: boolean;
1666
+ defaultOpen?: boolean;
1667
+ onOpenChange?: (open: boolean) => void;
1668
+ /** Runs on confirm. Returning a promise keeps the dialog open with a spinner until it settles; a rejection shows its message. */
1669
+ onConfirm?: () => void | Promise<void>;
1670
+ }
1671
+ /**
1672
+ * Typed-confirmation for irreversible actions: an AlertDialog whose destructive button stays
1673
+ * disabled until the resource name is typed exactly.
1674
+ */
1675
+ export declare function ConfirmDestructive({ resourceName, resourceType, title, description, consequences, confirmLabel, triggerLabel, open, defaultOpen, onOpenChange, onConfirm }: ConfirmDestructiveProps): import("react").JSX.Element;
1676
+ //#endregion
1677
+ //#region src/feedback/ConfirmDestructive/block.meta.d.ts
1678
+ declare const meta$11: BlockMeta;
1679
+ //#endregion
1680
+ //#region src/feedback/ErrorPanel/ErrorPanel.d.ts
1681
+ export interface ErrorPanelProps {
1682
+ icon?: LucideIcon;
1683
+ title?: ReactNode;
1684
+ /** Human summary of what failed and what to do. */
1685
+ message?: ReactNode;
1686
+ /** Status or error code shown as a mono chip (e.g. 503, ECONNRESET). */
1687
+ code?: string | number | null;
1688
+ /** Correlation id for support; gets a copy button. */
1689
+ requestId?: string;
1690
+ /** Raw details (response body, stack) behind a disclosure. */
1691
+ details?: string;
1692
+ /** Retry handler. A returned promise shows the loading state until it settles. */
1693
+ onRetry?: () => void | Promise<void>;
1694
+ /** Force the loading state from outside. */
1695
+ retrying?: boolean;
1696
+ retryLabel?: string;
1697
+ /** Extra action next to Retry (e.g. contact support). */
1698
+ secondaryAction?: FeedbackAction | null;
1699
+ titleAs?: 'h2' | 'h3';
1700
+ className?: string;
1701
+ }
1702
+ /** Error summary for a failed load or action: what happened, request id, retry and technical details. */
1703
+ export declare function ErrorPanel({ icon: Icon, title, message, code, requestId, details, onRetry, retrying, retryLabel: retryLabelProp, secondaryAction, titleAs: Heading, className }: ErrorPanelProps): import("react").JSX.Element;
1704
+ //#endregion
1705
+ //#region src/feedback/ErrorPanel/block.meta.d.ts
1706
+ declare const meta$22: BlockMeta;
1707
+ //#endregion
1708
+ //#region src/forms/DangerZone/fixtures.d.ts
1709
+ interface DangerZoneAction {
1710
+ id: string;
1711
+ title: string;
1712
+ description: string;
1713
+ /** Label of the row button and of the confirming button. */
1714
+ actionLabel: string;
1715
+ /** Text the user must type to confirm (e.g. the resource name). Omit for a plain confirmation. */
1716
+ confirmText?: string;
1717
+ /** Use the destructive button style in the row (default true); `false` renders a secondary button. */
1718
+ destructive?: boolean;
1719
+ }
1720
+ export declare const dangerZoneActions: DangerZoneAction[];
1721
+ //#endregion
1722
+ //#region src/forms/DangerZone/DangerZone.d.ts
1723
+ export interface DangerZoneProps {
1724
+ title?: ReactNode;
1725
+ description?: ReactNode;
1726
+ actions?: DangerZoneAction[];
1727
+ /** Called after the user confirms an action. A returned promise shows a loading state. */
1728
+ onConfirm?: (actionId: string) => void | Promise<void>;
1729
+ headingLevel?: 'h2' | 'h3' | 'h4';
1730
+ className?: string;
1731
+ }
1732
+ /**
1733
+ * Bordered destructive section. Each action opens a confirmation dialog; actions with
1734
+ * `confirmText` require typing it (e.g. the project name) before the confirm button enables.
1735
+ */
1736
+ export declare function DangerZone({ title, description, actions, onConfirm, headingLevel: Heading, className }: DangerZoneProps): import("react").JSX.Element;
1737
+ //#endregion
1738
+ //#region src/forms/DangerZone/block.meta.d.ts
1739
+ declare const meta$15: BlockMeta;
1740
+ //#endregion
1741
+ //#region src/forms/CreateApiKeyDialog/fixtures.d.ts
1742
+ interface ApiKeyScope {
1743
+ value: string;
1744
+ label: string;
1745
+ description?: string;
1746
+ }
1747
+ interface ApiKeyExpiry {
1748
+ value: string;
1749
+ label: string;
1750
+ }
1751
+ export declare const apiKeyScopes: ApiKeyScope[];
1752
+ export declare const apiKeyExpiries: ApiKeyExpiry[];
1753
+ /** Demo secret generator (the real secret comes from your API). */
1754
+ export declare function generateDemoSecret(prefix?: string): string;
1755
+ //#endregion
1756
+ //#region src/forms/CreateApiKeyDialog/CreateApiKeyDialog.d.ts
1757
+ export interface CreateApiKeyInput {
1758
+ name: string;
1759
+ scopes: string[];
1760
+ expiry: string;
1761
+ }
1762
+ export interface CreateApiKeyDialogProps {
1763
+ scopes?: ApiKeyScope[];
1764
+ expiries?: ApiKeyExpiry[];
1765
+ defaultExpiry?: string;
1766
+ /** Creates the key and returns its secret (shown once). Defaults to a demo generator. */
1767
+ onCreate?: (input: CreateApiKeyInput) => string | Promise<string>;
1768
+ open?: boolean;
1769
+ defaultOpen?: boolean;
1770
+ onOpenChange?: (open: boolean) => void;
1771
+ /** Trigger element (rendered through Dialog.Trigger). Pass `null` when controlling `open` yourself. */
1772
+ trigger?: ReactElement | null;
1773
+ }
1774
+ /**
1775
+ * Two-step API key dialog: name, scopes and expiry, then the secret shown once in a CodeBlock
1776
+ * with copy. Closing the dialog discards the secret; it can't be shown again.
1777
+ */
1778
+ export declare function CreateApiKeyDialog({ scopes, expiries, defaultExpiry, onCreate, open: openProp, defaultOpen, onOpenChange, trigger }: CreateApiKeyDialogProps): import("react").JSX.Element;
1779
+ //#endregion
1780
+ //#region src/forms/CreateApiKeyDialog/block.meta.d.ts
1781
+ declare const meta$13: BlockMeta;
1782
+ //#endregion
1783
+ //#region src/forms/CredentialDisclosureDialog/CredentialDisclosureDialog.d.ts
1784
+ export interface CredentialDisclosure {
1785
+ variant: 'stored' | 'fresh';
1786
+ credentialId: string;
1787
+ /** Caller-formatted expiry; the block applies no expiry policy. */
1788
+ expiresAt: ReactNode;
1789
+ secret: string;
1790
+ }
1791
+ export interface CredentialDisclosureDialogProps {
1792
+ /** Set only after a successful response. Leave null while pending or on failure. */
1793
+ disclosure: CredentialDisclosure | null;
1794
+ /** Clear disclosure to null on dismissal, dropping the secret in the consumer. */
1795
+ onClose: () => void;
1796
+ /** Resolve the current row action at close time, including after list reloads. */
1797
+ resolveReturnFocus?: () => HTMLElement | null;
1798
+ /** Resolve a fallback such as a page heading with tabIndex={-1}. */
1799
+ fallbackFocus?: () => HTMLElement | null;
1800
+ title?: string;
1801
+ description?: string;
1802
+ credentialIdLabel?: string;
1803
+ expiryLabel?: string;
1804
+ secretLabel?: string;
1805
+ showLabel?: string;
1806
+ hideLabel?: string;
1807
+ copyLabel?: string;
1808
+ copiedLabel?: string;
1809
+ successAnnouncement?: string;
1810
+ failureAnnouncement?: string;
1811
+ warningTitle?: string;
1812
+ warningText?: string;
1813
+ closeLabel?: string;
1814
+ }
1815
+ /**
1816
+ * Discloses an existing credential only after a successful response. Consumers keep disclosure
1817
+ * null while pending or on failure, and clear it on close. No pending/error state or internal
1818
+ * secret retention. A fresh secret requires a new successful response to be shown again.
1819
+ */
1820
+ export declare function CredentialDisclosureDialog(props: CredentialDisclosureDialogProps): import("react").JSX.Element | null;
1821
+ //#endregion
1822
+ //#region src/forms/CredentialDisclosureDialog/block.meta.d.ts
1823
+ declare const meta$14: BlockMeta;
1824
+ //#endregion
1825
+ //#region src/forms/DateRangeFilter/DateRangeFilter.d.ts
1826
+ export interface DateRangeFilterProps {
1827
+ value?: DateRange;
1828
+ /** Initial range; defaults to the "Last 7 days" preset. Pass `{ start: null, end: null }` for none. */
1829
+ defaultValue?: DateRange;
1830
+ /** Called with a complete range, or an empty one when cleared. */
1831
+ onValueChange?: (range: DateRange) => void;
1832
+ presets?: DateRangePreset[];
1833
+ /** "Today" for the presets (defaults to the current date). */
1834
+ today?: Date;
1835
+ /** Accessible name of the field. */
1836
+ label?: string;
1837
+ placeholder?: string;
1838
+ /** Show a clear button while a range is set. */
1839
+ clearable?: boolean;
1840
+ disabled?: boolean;
1841
+ className?: string;
1842
+ }
1843
+ /** Compact DateRangePicker for toolbars: small trigger, short dates, presets and a clear button. */
1844
+ export declare function DateRangeFilter({ value, defaultValue, onValueChange, presets, today, label: labelProp, placeholder: placeholderProp, clearable, disabled, className }: DateRangeFilterProps): import("react").JSX.Element;
1845
+ //#endregion
1846
+ //#region src/forms/DateRangeFilter/block.meta.d.ts
1847
+ declare const meta$17: BlockMeta;
1848
+ //#endregion
1849
+ //#region src/forms/FileUploadPanel/fixtures.d.ts
1850
+ type UploadStatus = 'uploading' | 'done' | 'error';
1851
+ interface UploadItem {
1852
+ id: string;
1853
+ name: string;
1854
+ /** Size in bytes. */
1855
+ size: number;
1856
+ /** 0–100. */
1857
+ progress: number;
1858
+ status: UploadStatus;
1859
+ /** Why the file was rejected or failed. */
1860
+ error?: string;
1861
+ }
1862
+ export declare const uploadItems: UploadItem[];
1863
+ /** Demo uploader: reports progress in steps and resolves after ~1.5 s. */
1864
+ export declare function simulateUpload(_file: File, onProgress: (pct: number) => void): Promise<void>;
1865
+ //#endregion
1866
+ //#region src/forms/FileUploadPanel/FileUploadPanel.d.ts
1867
+ export interface FileUploadPanelProps {
1868
+ /** Accepted types, as for `<input accept>` (".csv,.json", "image/*"). */
1869
+ accept?: string;
1870
+ /** Maximum size per file in bytes. */
1871
+ maxSize?: number;
1872
+ multiple?: boolean;
1873
+ /** Initial list (e.g. files already uploaded). */
1874
+ defaultFiles?: UploadItem[];
1875
+ /** Uploads one file and reports progress (0–100). Defaults to a demo simulation. */
1876
+ onUpload?: (file: File, onProgress: (pct: number) => void) => Promise<void>;
1877
+ onRemove?: (item: UploadItem) => void;
1878
+ /** Visible label of the panel. */
1879
+ label?: string;
1880
+ /** Hint under the drop text; defaults to the accepted types and size limit. */
1881
+ hint?: string;
1882
+ disabled?: boolean;
1883
+ className?: string;
1884
+ }
1885
+ /**
1886
+ * Drop zone with a Browse button, accept and size validation, and a file list with progress,
1887
+ * retry and remove. Rejected files stay in the list with the reason.
1888
+ */
1889
+ export declare function FileUploadPanel({ accept, maxSize, multiple, defaultFiles, onUpload, onRemove, label: labelProp, hint, disabled, className }: FileUploadPanelProps): import("react").JSX.Element;
1890
+ //#endregion
1891
+ //#region src/forms/FileUploadPanel/block.meta.d.ts
1892
+ declare const meta$26: BlockMeta;
1893
+ //#endregion
1894
+ //#region src/forms/FormSection/FormSection.d.ts
1895
+ export interface FormSectionProps extends Omit<HTMLAttributes<HTMLElement>, 'title' | 'className'> {
1896
+ /** Section title shown in the left column; also names the section landmark. */
1897
+ title?: ReactNode;
1898
+ /** Help text under the title. */
1899
+ description?: ReactNode;
1900
+ /** The fields (right column). Defaults to a sample "General" field set. */
1901
+ children?: ReactNode;
1902
+ /** Footer row under the fields (e.g. Save / Cancel). */
1903
+ actions?: ReactNode;
1904
+ /** Heading level that fits the page outline. */
1905
+ headingLevel?: 'h2' | 'h3' | 'h4';
1906
+ /** Draws a rule above the section (for stacked sections). */
1907
+ divided?: boolean;
1908
+ className?: string;
1909
+ }
1910
+ /**
1911
+ * Two-column form section: title and help on the left, fields on the right. Stacks into a
1912
+ * single column on small screens.
1913
+ */
1914
+ export declare function FormSection({ title, description, children, actions, headingLevel: Heading, divided, className, ...props }: FormSectionProps): import("react").JSX.Element;
1915
+ //#endregion
1916
+ //#region src/forms/FormSection/block.meta.d.ts
1917
+ declare const meta$30: BlockMeta;
1918
+ //#endregion
1919
+ //#region src/forms/InviteMembersDialog/fixtures.d.ts
1920
+ interface RoleOption {
1921
+ value: string;
1922
+ label: string;
1923
+ description?: string;
1924
+ }
1925
+ export declare const memberRoles: RoleOption[];
1926
+ //#endregion
1927
+ //#region src/forms/InviteMembersDialog/InviteMembersDialog.d.ts
1928
+ export interface InvitePayload {
1929
+ emails: string[];
1930
+ role: string;
1931
+ message: string;
1932
+ }
1933
+ export interface InviteMembersDialogProps {
1934
+ roles?: RoleOption[];
1935
+ defaultRole?: string;
1936
+ /** Sends the invitations. A returned promise shows a loading state; a rejection shows its message. */
1937
+ onInvite?: (payload: InvitePayload) => void | Promise<void>;
1938
+ /** Maximum number of addresses per batch. */
1939
+ maxInvites?: number;
1940
+ open?: boolean;
1941
+ defaultOpen?: boolean;
1942
+ onOpenChange?: (open: boolean) => void;
1943
+ /** Trigger element (rendered through Dialog.Trigger). Pass `null` when controlling `open` yourself. */
1944
+ trigger?: ReactElement | null;
1945
+ title?: string;
1946
+ description?: string;
1947
+ }
1948
+ /** Invite dialog: email chips with validation, a role and an optional message; submit with loading. */
1949
+ export declare function InviteMembersDialog({ roles, defaultRole, onInvite, maxInvites, open: openProp, defaultOpen, onOpenChange, trigger, title, description }: InviteMembersDialogProps): import("react").JSX.Element;
1950
+ //#endregion
1951
+ //#region src/forms/InviteMembersDialog/block.meta.d.ts
1952
+ declare const meta$35: BlockMeta;
1953
+ //#endregion
1954
+ //#region src/forms/SettingsRow/SettingsRow.d.ts
1955
+ export interface SettingsRowControlIds {
1956
+ /** Id of the label element: pass it as `aria-labelledby` to the control. */
1957
+ labelId: string;
1958
+ /** Id of the description element (when there is one): pass it as `aria-describedby`. */
1959
+ descriptionId: string | undefined;
1960
+ }
1961
+ export interface SettingsRowProps {
1962
+ label?: ReactNode;
1963
+ description?: ReactNode;
1964
+ /**
1965
+ * Custom control. A function receives the label/description ids to wire the control's
1966
+ * accessible name. Without it, a Switch driven by `checked` / `defaultChecked` is rendered.
1967
+ */
1968
+ control?: ReactNode | ((ids: SettingsRowControlIds) => ReactNode);
1969
+ checked?: boolean;
1970
+ defaultChecked?: boolean;
1971
+ onCheckedChange?: (checked: boolean) => void;
1972
+ disabled?: boolean;
1973
+ /** Extra content under the description (status, link). */
1974
+ children?: ReactNode;
1975
+ className?: string;
1976
+ }
1977
+ /** One setting: label and description on the left, its control (a Switch by default) on the right. */
1978
+ export declare function SettingsRow({ label, description, control, checked, defaultChecked, onCheckedChange, disabled, children, className }: SettingsRowProps): import("react").JSX.Element;
1979
+ //#endregion
1980
+ //#region src/forms/SettingsRow/block.meta.d.ts
1981
+ declare const meta$59: BlockMeta;
1982
+ //#endregion
1983
+ //#region src/forms/ValidationSummary/fixtures.d.ts
1984
+ interface ValidationIssue {
1985
+ /** Id of the control to focus (the link target). */
1986
+ fieldId: string;
1987
+ /** Field name shown before the message. */
1988
+ label?: string;
1989
+ message: string;
1990
+ }
1991
+ declare const validationIssues$1: ValidationIssue[];
1992
+ //#endregion
1993
+ //#region src/forms/ValidationSummary/ValidationSummary.d.ts
1994
+ export interface ValidationSummaryProps {
1995
+ errors?: ValidationIssue[];
1996
+ /** Increment on every submit attempt: the summary takes focus when there are errors. */
1997
+ submitCount?: number;
1998
+ /** Title; defaults to "There are N problems with this form". */
1999
+ title?: ReactNode;
2000
+ className?: string;
2001
+ }
2002
+ /**
2003
+ * Error summary for long forms: lists every problem with a link that moves focus to the field.
2004
+ * After a failed submit it takes focus, so screen readers announce it.
2005
+ */
2006
+ export declare function ValidationSummary({ errors, submitCount, title, className }: ValidationSummaryProps): import("react").JSX.Element | null;
2007
+ //#endregion
2008
+ //#region src/forms/DialogWizard/DialogWizard.d.ts
2009
+ export interface DialogWizardProps extends Omit<WizardLayoutProps, 'mode' | 'steps' | 'current'> {
2010
+ steps?: WizardLayoutProps['steps'];
2011
+ current?: number;
2012
+ /** Step-local validation surface, normally a ValidationSummary with consumer copy. */
2013
+ stepError?: ReactNode;
2014
+ /** Replaces the last step body, normally a DescriptionListCard with consumer copy. */
2015
+ reviewStep?: ReactNode;
2016
+ }
2017
+ /** Modal variant of create-wizard for a flow over its parent page. State stays consumer-owned. */
2018
+ export declare function DialogWizard({ steps, current, size, stepError, reviewStep, children, title, ...props }: DialogWizardProps): import("react").JSX.Element;
2019
+ //#endregion
2020
+ //#region src/forms/DialogWizard/block.meta.d.ts
2021
+ declare const meta$19: BlockMeta;
2022
+ //#endregion
2023
+ //#region src/forms/DialogWizard/fixtures.d.ts
2024
+ /** Example data only; consumers own every label and all step state. */
2025
+ export declare const dialogWizardSteps: {
2026
+ label: string;
2027
+ }[];
2028
+ export declare const dialogWizardCopy: {
2029
+ title: string;
2030
+ description: string;
2031
+ exitLabel: string;
2032
+ cancelLabel: string;
2033
+ backLabel: string;
2034
+ nextLabel: string;
2035
+ finishLabel: string;
2036
+ pendingLabel: string;
2037
+ stepsLabel: string;
2038
+ stepsSummaryLabel: string;
2039
+ exitTitle: string;
2040
+ exitDescription: string;
2041
+ exitConfirmLabel: string;
2042
+ exitCancelLabel: string;
2043
+ stepAnnouncement: ({ position, total, label }: {
2044
+ position: number;
2045
+ total: number;
2046
+ label: unknown;
2047
+ }) => string;
2048
+ };
2049
+ //#endregion
2050
+ //#region src/forms/ValidationSummary/block.meta.d.ts
2051
+ declare const meta$74: BlockMeta;
2052
+ //#endregion
2053
+ //#region src/forms/DangerZone/ConfirmDestructiveDialog.d.ts
2054
+ interface ConfirmDestructiveDialogProps {
2055
+ open: boolean;
2056
+ onOpenChange: (open: boolean) => void;
2057
+ title: ReactNode;
2058
+ description: ReactNode;
2059
+ /** Text that must be typed exactly to enable the confirming button. */
2060
+ confirmText?: string;
2061
+ confirmLabel: string;
2062
+ /** Runs on confirm; a returned promise shows a loading state and keeps the dialog open until it settles. */
2063
+ onConfirm?: () => void | Promise<void>;
2064
+ }
2065
+ /** Destructive confirmation (alertdialog) that can require typing the resource name first. */
2066
+ export declare function ConfirmDestructiveDialog({ open, onOpenChange, title, description, confirmText, confirmLabel, onConfirm }: ConfirmDestructiveDialogProps): import("react").JSX.Element;
2067
+ //#endregion
2068
+ //#region src/marketing/actions.d.ts
2069
+ type IconComponent = ComponentType<{
2070
+ size?: number;
2071
+ 'aria-hidden'?: boolean;
2072
+ }>;
2073
+ /** A call to action: a link when `href` is set, otherwise a button. */
2074
+ interface MarketingAction {
2075
+ label: string;
2076
+ href?: string;
2077
+ onClick?: () => void;
2078
+ /** Trailing icon (lucide component). */
2079
+ icon?: IconComponent;
2080
+ }
2081
+ //#endregion
2082
+ //#region src/marketing/Hero/Hero.d.ts
2083
+ export interface HeroProps {
2084
+ /** `centered` (copy over the media) or `split` (copy left, media right from `lg`). */
2085
+ variant?: 'centered' | 'split';
2086
+ /** Small label above the title. */
2087
+ eyebrow?: ReactNode;
2088
+ title?: ReactNode;
2089
+ description?: ReactNode;
2090
+ primaryAction?: MarketingAction | null;
2091
+ secondaryAction?: MarketingAction | null;
2092
+ /** Screenshot slot. Defaults to a neutral app-window placeholder; null hides it. */
2093
+ media?: ReactNode;
2094
+ /** Heading level of the title. */
2095
+ headingLevel?: 'h1' | 'h2';
2096
+ className?: string;
2097
+ }
2098
+ /** Neutral app-window placeholder for the screenshot slot (decorative). */
2099
+ export declare function HeroScreenshotPlaceholder({ className }: {
2100
+ className?: string;
2101
+ }): import("react").JSX.Element;
2102
+ /** Landing hero: eyebrow, title, description, two calls to action and a screenshot slot. */
2103
+ export declare function Hero({ variant, eyebrow, title, description, primaryAction, secondaryAction, media, headingLevel: Heading, className }: HeroProps): import("react").JSX.Element;
2104
+ //#endregion
2105
+ //#region src/marketing/Hero/block.meta.d.ts
2106
+ declare const meta$32: BlockMeta;
2107
+ //#endregion
2108
+ //#region src/marketing/FeatureGrid/FeatureGrid.d.ts
2109
+ export interface Feature {
2110
+ icon: LucideIcon;
2111
+ title: string;
2112
+ description: ReactNode;
2113
+ }
2114
+ export interface FeatureGridProps {
2115
+ features?: Feature[];
2116
+ eyebrow?: ReactNode;
2117
+ title?: ReactNode;
2118
+ description?: ReactNode;
2119
+ /** Columns from `lg` (one column on phones, two on tablets). */
2120
+ columns?: 2 | 3 | 4;
2121
+ /** Heading level of the section title; feature titles use the next level. */
2122
+ headingLevel?: 'h2' | 'h3';
2123
+ className?: string;
2124
+ }
2125
+ /** Features section: a heading block over a grid of icon + title + description. */
2126
+ export declare function FeatureGrid({ features, eyebrow, title, description, columns, headingLevel: Heading, className }: FeatureGridProps): import("react").JSX.Element;
2127
+ //#endregion
2128
+ //#region src/marketing/FeatureGrid/block.meta.d.ts
2129
+ declare const meta$25: BlockMeta;
2130
+ //#endregion
2131
+ //#region src/marketing/FeatureGrid/fixtures.d.ts
2132
+ /** Sample product-agnostic features. */
2133
+ export declare const sampleFeatures: Feature[];
2134
+ //#endregion
2135
+ //#region src/marketing/PricingTable/PricingTable.d.ts
2136
+ export type PricingCycle = 'monthly' | 'annual';
2137
+ export interface PricingTier {
2138
+ id: string;
2139
+ name: string;
2140
+ description?: string;
2141
+ /** Price per month on monthly billing; null shows "Custom". */
2142
+ priceMonthly: number | null;
2143
+ /** Price per month on annual billing; null shows "Custom". */
2144
+ priceAnnual: number | null;
2145
+ /** Call-to-action label. */
2146
+ cta: string;
2147
+ features: string[];
2148
+ /** Emphasised with a primary border (no colour fill). */
2149
+ highlighted?: boolean;
2150
+ /** Label on the tier, e.g. "Most popular". */
2151
+ badge?: string;
2152
+ }
2153
+ export interface PricingTableProps {
2154
+ tiers?: PricingTier[];
2155
+ eyebrow?: ReactNode;
2156
+ title?: ReactNode;
2157
+ description?: ReactNode;
2158
+ currency?: string;
2159
+ defaultCycle?: PricingCycle;
2160
+ onCycleChange?: (cycle: PricingCycle) => void;
2161
+ /** Called with the tier and the cycle shown when a CTA is activated. */
2162
+ onSelectTier?: (tier: PricingTier, cycle: PricingCycle) => void;
2163
+ /** Note next to the annual option, e.g. "Save 20%". */
2164
+ annualNote?: string;
2165
+ /** Level of the section title; tier names use the next level (or this one when there is no title). */
2166
+ headingLevel?: 'h2' | 'h3';
2167
+ /** Shows the monthly/annual toggle (default true). */
2168
+ showCycleToggle?: boolean;
2169
+ /** Columns at the widest breakpoint (default: one per tier, up to 4). */
2170
+ columns?: 1 | 2 | 3 | 4;
2171
+ /** Names the tier list / radio group when `title` is null (the block then renders no landmark), e.g. inside a wizard step. */
2172
+ 'aria-label'?: string;
2173
+ /** Id of an external heading that names the section when `title` is null. */
2174
+ 'aria-labelledby'?: string;
2175
+ /**
2176
+ * Id of the tier the account is on: its card gets a "Current plan" badge and
2177
+ * `aria-current`, and its CTA becomes a disabled "Current plan" button.
2178
+ */
2179
+ currentTierId?: string;
2180
+ /** Label of the current tier's badge and disabled CTA. */
2181
+ currentPlanLabel?: string;
2182
+ /**
2183
+ * Turns the tiers into a single-choice radio group (role radiogroup/radio, arrow keys,
2184
+ * selected card with a primary border and a check). CTAs are not rendered in this mode.
2185
+ */
2186
+ selectable?: boolean;
2187
+ /** Selected tier id (controlled, `selectable` only). */
2188
+ value?: string;
2189
+ /** Initially selected tier id (uncontrolled, `selectable` only). */
2190
+ defaultValue?: string;
2191
+ /** Called with the newly selected tier id (`selectable` only). */
2192
+ onValueChange?: (value: string) => void;
2193
+ className?: string;
2194
+ }
2195
+ /** Pricing section: tiers with a monthly/annual toggle, a highlighted tier and a feature checklist. */
2196
+ export declare function PricingTable({ tiers, eyebrow, title, description, currency, defaultCycle, onCycleChange, onSelectTier, annualNote, headingLevel: Heading, showCycleToggle, columns, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, currentTierId, currentPlanLabel, selectable, value, defaultValue, onValueChange, className }: PricingTableProps): import("react").JSX.Element;
2197
+ //#endregion
2198
+ //#region src/marketing/PricingTable/block.meta.d.ts
2199
+ declare const meta$51: BlockMeta;
2200
+ //#endregion
2201
+ //#region src/marketing/PricingTable/fixtures.d.ts
2202
+ /** Sample three-tier pricing. Prices are per month; annual is per month billed yearly. */
2203
+ export declare const samplePricingTiers: PricingTier[];
2204
+ //#endregion
2205
+ //#region src/marketing/Faq/Faq.d.ts
2206
+ export interface FaqItem {
2207
+ id: string;
2208
+ question: string;
2209
+ answer: ReactNode;
2210
+ }
2211
+ export interface FaqProps {
2212
+ items?: FaqItem[];
2213
+ title?: ReactNode;
2214
+ description?: ReactNode;
2215
+ /** `stacked` (heading over the list) or `split` (heading left from `lg`). */
2216
+ layout?: 'stacked' | 'split';
2217
+ /** Ids of the items open on mount. */
2218
+ defaultOpen?: string[];
2219
+ /** Allow several items open at once. */
2220
+ multiple?: boolean;
2221
+ headingLevel?: 'h2' | 'h3';
2222
+ className?: string;
2223
+ }
2224
+ /** Frequently asked questions in an accordion, with a heading block. */
2225
+ export declare function Faq({ items, title, description, layout, defaultOpen, multiple, headingLevel: Heading, className }: FaqProps): import("react").JSX.Element;
2226
+ //#endregion
2227
+ //#region src/marketing/Faq/block.meta.d.ts
2228
+ declare const meta$24: BlockMeta;
2229
+ //#endregion
2230
+ //#region src/marketing/Faq/fixtures.d.ts
2231
+ /** Sample product-agnostic questions. */
2232
+ export declare const sampleFaqs: FaqItem[];
2233
+ //#endregion
2234
+ //#region src/marketing/ComparisonTable/ComparisonTable.d.ts
2235
+ /** A plan or option: one column of the comparison. */
2236
+ export interface ComparisonPlan {
2237
+ id: string;
2238
+ name: string;
2239
+ /** Headline price or figure under the name ("$49", "Custom"). */
2240
+ price?: ReactNode;
2241
+ /** Small text after the price ("per month"). */
2242
+ priceNote?: ReactNode;
2243
+ /** Call to action under the price. */
2244
+ cta?: MarketingAction;
2245
+ }
2246
+ /** A plain value, or a value with a short note under it ("Add-on"). */
2247
+ export type ComparisonValue = boolean | string | number | null | undefined | {
2248
+ value: boolean | string | number | null;
2249
+ note?: string;
2250
+ };
2251
+ export interface ComparisonFeature {
2252
+ id: string;
2253
+ label: string;
2254
+ /** Muted text under the label. */
2255
+ description?: string;
2256
+ /** Value per plan id. Missing / null values render like `false` (a dash, "Not included"). */
2257
+ values: Readonly<Record<string, ComparisonValue>>;
2258
+ }
2259
+ export interface ComparisonSection {
2260
+ id: string;
2261
+ title: string;
2262
+ features: ComparisonFeature[];
2263
+ }
2264
+ export interface ComparisonTableProps {
2265
+ plans?: ComparisonPlan[];
2266
+ sections?: ComparisonSection[];
2267
+ /** Plan column marked as recommended: badge text, a primary top rule and a tinted column. */
2268
+ highlightedPlanId?: string;
2269
+ /** Text of the recommended badge (default "Recommended"). */
2270
+ highlightLabel?: string;
2271
+ eyebrow?: ReactNode;
2272
+ title?: ReactNode;
2273
+ description?: ReactNode;
2274
+ /** Level of the section title (default h2). */
2275
+ headingLevel?: 'h2' | 'h3';
2276
+ /** Table name (screen-reader caption). Default: the title when it is a string, else "Plan comparison". */
2277
+ caption?: string;
2278
+ /** Header of the feature column (screen-reader only unless `showFeatureHeader`). */
2279
+ featureHeader?: string;
2280
+ showFeatureHeader?: boolean;
2281
+ /** Screen-reader text of `true` (default "Included"). */
2282
+ includedLabel?: string;
2283
+ /** Screen-reader text of `false` / missing values (default "Not included"). */
2284
+ notIncludedLabel?: string;
2285
+ /** Formats numeric values (default: en-US grouping). */
2286
+ formatNumber?: (value: number, feature: ComparisonFeature) => string;
2287
+ className?: string;
2288
+ }
2289
+ /**
2290
+ * Feature comparison of plans or options: columns are plans, rows are features grouped by section.
2291
+ * Booleans render as a check or a dash with screen-reader text; text and numbers render as is. The
2292
+ * table scrolls sideways on narrow screens with the feature column pinned.
2293
+ */
2294
+ export declare function ComparisonTable({ plans, sections, highlightedPlanId, highlightLabel, eyebrow, title, description, headingLevel: Heading, caption, featureHeader, showFeatureHeader, includedLabel, notIncludedLabel, formatNumber, className }: ComparisonTableProps): import("react").JSX.Element;
2295
+ //#endregion
2296
+ //#region src/marketing/ComparisonTable/block.meta.d.ts
2297
+ declare const meta$10: BlockMeta;
2298
+ //#endregion
2299
+ //#region src/marketing/ComparisonTable/fixtures.d.ts
2300
+ /** Three sample plans (generic, product-agnostic). */
2301
+ export declare const sampleComparisonPlans: ComparisonPlan[];
2302
+ /** Features grouped by section; values are keyed by plan id. */
2303
+ export declare const sampleComparisonSections: ComparisonSection[];
2304
+ //#endregion
2305
+ //#region src/page-chrome/types.d.ts
2306
+ /** A header/toolbar action rendered as a kit Button (or a MoreMenu item when folded). */
2307
+ interface PageChromeAction {
2308
+ /** Stable key; defaults to `label`. */
2309
+ id?: string;
2310
+ label: string;
2311
+ icon?: LucideIcon;
2312
+ /** Button style; when omitted the block picks one (primary for the main action, secondary otherwise). */
2313
+ variant?: ButtonProps['variant'];
2314
+ disabled?: boolean;
2315
+ onClick?: () => void;
2316
+ }
2317
+ //#endregion
2318
+ //#region src/page-chrome/PageHeader/PageHeader.d.ts
2319
+ export interface PageHeaderMetaItem {
2320
+ /** Term (screen-reader only when an icon is shown). */
2321
+ label: string;
2322
+ value: ReactNode;
2323
+ icon?: LucideIcon;
2324
+ /** Render the value in Geist Mono (ids, regions, versions). */
2325
+ mono?: boolean;
2326
+ }
2327
+ export interface PageHeaderTab {
2328
+ value: string;
2329
+ label: string;
2330
+ count?: number;
2331
+ }
2332
+ export interface PageHeaderProps {
2333
+ /** Root element. Use 'div' where the layout already has a banner (e.g. StackedLayout's pageHeader slot). */
2334
+ as?: 'header' | 'div';
2335
+ /** Location trail above the title; `null` hides it. */
2336
+ breadcrumbs?: BreadcrumbItem[] | null;
2337
+ title?: ReactNode;
2338
+ /** h1 focus target: adds tabIndex=-1 for titleRef.current.focus(), outside the Tab order. */
2339
+ titleRef?: Ref<HTMLHeadingElement>;
2340
+ description?: ReactNode;
2341
+ /** StatusTag key next to the title (e.g. `active`, `paused`, `failed`). */
2342
+ status?: string;
2343
+ statuses?: Record<string, StatusDefinition>;
2344
+ /** Meta row under the description. */
2345
+ meta?: PageHeaderMetaItem[];
2346
+ /**
2347
+ * Header actions in visual order. The primary one (first with `variant: 'primary'`, else the
2348
+ * last) stays visible on small screens; the rest fold into a MoreMenu.
2349
+ */
2350
+ actions?: PageChromeAction[];
2351
+ /** Resource-level navigation tabs under the header; `null` hides them. */
2352
+ tabs?: PageHeaderTab[] | null;
2353
+ tab?: string;
2354
+ defaultTab?: string;
2355
+ onTabChange?: (value: string) => void;
2356
+ className?: string;
2357
+ }
2358
+ /** Screen header: breadcrumb, title + status, description, meta row, actions and optional tabs. */
2359
+ export declare function PageHeader({ as: Root, breadcrumbs, title, titleRef, description, status, statuses, meta, actions, tabs, tab, defaultTab, onTabChange, className }: PageHeaderProps): import("react").JSX.Element;
2360
+ //#endregion
2361
+ //#region src/page-chrome/PageHeader/fixtures.d.ts
2362
+ export declare const pageHeaderBreadcrumbs: BreadcrumbItem[];
2363
+ export declare const pageHeaderActions: PageChromeAction[];
2364
+ export declare const pageHeaderTabs: PageHeaderTab[];
2365
+ //#endregion
2366
+ //#region src/page-chrome/PageHeader/block.meta.d.ts
2367
+ declare const meta$44: BlockMeta;
2368
+ //#endregion
2369
+ //#region src/page-chrome/SectionHeader/SectionHeader.d.ts
2370
+ export interface SectionHeaderProps {
2371
+ title?: ReactNode;
2372
+ description?: ReactNode;
2373
+ /** Count pill after the title (members, items…). */
2374
+ count?: number;
2375
+ /** Small actions on the right; the last one without a variant is secondary. */
2376
+ actions?: PageChromeAction[];
2377
+ /** Heading level that fits the page outline. */
2378
+ as?: 'h2' | 'h3';
2379
+ /** Hairline under the header. */
2380
+ bordered?: boolean;
2381
+ /** Id for the heading, so a section can use `aria-labelledby`. */
2382
+ headingId?: string;
2383
+ className?: string;
2384
+ }
2385
+ /** Heading for a section inside a page: title (+ count), description and small actions. */
2386
+ export declare function SectionHeader({ title, description, count, actions, as: Heading, bordered, headingId, className }: SectionHeaderProps): import("react").JSX.Element;
2387
+ //#endregion
2388
+ //#region src/page-chrome/SectionHeader/block.meta.d.ts
2389
+ declare const meta$57: BlockMeta;
2390
+ //#endregion
2391
+ //#region src/page-chrome/PageToolbar/PageToolbar.d.ts
2392
+ export interface PageToolbarView {
2393
+ value: string;
2394
+ /** Accessible name of the icon toggle. */
2395
+ label: string;
2396
+ icon: LucideIcon;
2397
+ }
2398
+ export interface PageToolbarProps {
2399
+ /** Controlled search text. */
2400
+ search?: string;
2401
+ defaultSearch?: string;
2402
+ onSearchChange?: (value: string) => void;
2403
+ searchLabel?: string;
2404
+ searchPlaceholder?: string;
2405
+ /**
2406
+ * Filter controls. Use ToolbarButton (optionally with `render` for a Menu/Popover trigger) so they
2407
+ * join the toolbar's arrow-key navigation. Omitted: a single "Filters" button; `null` hides it.
2408
+ */
2409
+ filters?: ReactNode;
2410
+ /** View modes for the segmented toggle; `null` or an empty list hides it. */
2411
+ views?: PageToolbarView[] | null;
2412
+ view?: string;
2413
+ defaultView?: string;
2414
+ onViewChange?: (value: string) => void;
2415
+ /** Main action at the end of the bar; `null` hides it. */
2416
+ primaryAction?: PageChromeAction | null;
2417
+ 'aria-label'?: string;
2418
+ className?: string;
2419
+ }
2420
+ /** List/table toolbar: search, filters, view toggle and the primary action, with one Tab stop. */
2421
+ export declare function PageToolbar({ search, defaultSearch, onSearchChange, searchLabel: searchLabelProp, searchPlaceholder, filters, views, view, defaultView, onViewChange, primaryAction, 'aria-label': ariaLabelProp, className }: PageToolbarProps): import("react").JSX.Element;
2422
+ //#endregion
2423
+ //#region src/page-chrome/PageToolbar/fixtures.d.ts
2424
+ export declare const pageToolbarViews: PageToolbarView[];
2425
+ //#endregion
2426
+ //#region src/page-chrome/PageToolbar/block.meta.d.ts
2427
+ declare const meta$45: BlockMeta;
2428
+ //#endregion
2429
+ //#region src/page-chrome/StickyActionBar/StickyActionBar.d.ts
2430
+ export interface StickyActionBarProps {
2431
+ /** Whether the form has unsaved changes; Save and Discard are disabled while clean. */
2432
+ dirty?: boolean;
2433
+ /** Shows a spinner on Save and blocks both buttons. */
2434
+ saving?: boolean;
2435
+ onSave?: () => void;
2436
+ onCancel?: () => void;
2437
+ /** Text while dirty. */
2438
+ dirtyMessage?: ReactNode;
2439
+ /** Text while clean. */
2440
+ cleanMessage?: ReactNode;
2441
+ saveLabel?: string;
2442
+ cancelLabel?: string;
2443
+ /** Render nothing while clean (the bar slides in only when there is something to save). */
2444
+ hideWhenClean?: boolean;
2445
+ /** Accessible name of the region. */
2446
+ 'aria-label'?: string;
2447
+ className?: string;
2448
+ }
2449
+ /** Bottom bar for long forms: unsaved-changes status plus Discard / Save, sticky to the viewport. */
2450
+ export declare function StickyActionBar({ dirty, saving, onSave, onCancel, dirtyMessage: dirtyMessageProp, cleanMessage: cleanMessageProp, saveLabel: saveLabelProp, cancelLabel: cancelLabelProp, hideWhenClean, 'aria-label': ariaLabelProp, className }: StickyActionBarProps): import("react").JSX.Element | null;
2451
+ //#endregion
2452
+ //#region src/page-chrome/StickyActionBar/block.meta.d.ts
2453
+ declare const meta$67: BlockMeta;
2454
+ //#endregion
2455
+ //#region src/page-chrome/BulkActionBar/BulkActionBar.d.ts
2456
+ export interface BulkActionBarProps {
2457
+ /** Number of selected rows; the bar renders nothing at 0. */
2458
+ selectedCount?: number;
2459
+ /** Total rows, shown as "3 of 24 selected". */
2460
+ totalCount?: number;
2461
+ /** Noun for the count, singular and plural. */
2462
+ noun?: [singular: string, plural: string];
2463
+ actions?: PageChromeAction[];
2464
+ onClear?: () => void;
2465
+ clearLabel?: string;
2466
+ className?: string;
2467
+ }
2468
+ /** Contextual toolbar shown while rows are selected: count, bulk actions and clear selection. */
2469
+ export declare function BulkActionBar({ selectedCount, totalCount, noun: nounProp, actions, onClear, clearLabel: clearLabelProp, className }: BulkActionBarProps): import("react").JSX.Element | null;
2470
+ //#endregion
2471
+ //#region src/page-chrome/BulkActionBar/block.meta.d.ts
2472
+ declare const meta$6: BlockMeta;
2473
+ //#endregion
2474
+ //#region src/scheduling/shared/events.d.ts
2475
+ /** A scheduled item on a calendar. */
2476
+ interface ScheduleEvent {
2477
+ id: string;
2478
+ title: string;
2479
+ start: Date;
2480
+ end: Date;
2481
+ /** Key into the `kinds` map (job, deploy, review, backup, maintenance…). */
2482
+ kind?: string;
2483
+ /** Region, room or target, shown after the time. */
2484
+ location?: string;
2485
+ }
2486
+ type EventTone = 'primary' | 'violet' | 'cyan' | 'amber' | 'neutral';
2487
+ interface EventKind {
2488
+ label: string;
2489
+ icon: LucideIcon;
2490
+ tone: EventTone;
2491
+ }
2492
+ /** Default kinds: brand green for jobs, categorical accents for the rest (never severity). */
2493
+ export declare const defaultEventKinds: Record<string, EventKind>;
2494
+ //#endregion
2495
+ //#region src/scheduling/MonthCalendar/MonthCalendar.d.ts
2496
+ export interface MonthCalendarProps {
2497
+ events?: ScheduleEvent[];
2498
+ /** The app's "today" (the block never reads the clock). */
2499
+ today?: Date;
2500
+ /** Month shown first (uncontrolled). Defaults to the month of `today`. */
2501
+ defaultMonth?: Date;
2502
+ onMonthChange?: (month: Date) => void;
2503
+ /** Initially selected day (uncontrolled). */
2504
+ defaultSelected?: Date;
2505
+ /** Called when a day is activated (click, Enter or Space). */
2506
+ onSelectDate?: (date: Date, events: ScheduleEvent[]) => void;
2507
+ /** Event kinds (label, icon, tone) by `event.kind`. */
2508
+ kinds?: Record<string, EventKind>;
2509
+ /** Event lines per day before "+N more". */
2510
+ maxEventsPerDay?: number;
2511
+ /** Caller actions in the header (e.g. a "Schedule" button). */
2512
+ actions?: ReactNode;
2513
+ className?: string;
2514
+ }
2515
+ /**
2516
+ * Month view of scheduled work: a Monday-first grid with up to N events per day.
2517
+ * Keyboard: arrows move by day/week, Home/End to the week edges, PageUp/PageDown by month,
2518
+ * Enter/Space selects.
2519
+ */
2520
+ export declare function MonthCalendar({ events, today, defaultMonth, onMonthChange, defaultSelected, onSelectDate, kinds, maxEventsPerDay, actions, className }: MonthCalendarProps): import("react").JSX.Element;
2521
+ //#endregion
2522
+ //#region src/scheduling/MonthCalendar/block.meta.d.ts
2523
+ declare const meta$42: BlockMeta;
2524
+ //#endregion
2525
+ //#region src/scheduling/WeekCalendar/WeekCalendar.d.ts
2526
+ export interface WeekCalendarProps {
2527
+ events?: ScheduleEvent[];
2528
+ /** The app's "today" (the block never reads the clock). */
2529
+ today?: Date;
2530
+ /** Current time for the "now" line, shown when it falls in the visible week. Defaults to `today`. */
2531
+ now?: Date;
2532
+ /** A date inside the week shown first (uncontrolled). Defaults to `today`. */
2533
+ defaultWeek?: Date;
2534
+ /** Called with the Monday of the newly shown week. */
2535
+ onWeekChange?: (weekStart: Date) => void;
2536
+ /** Makes events buttons. */
2537
+ onEventClick?: (event: ScheduleEvent) => void;
2538
+ kinds?: Record<string, EventKind>;
2539
+ /** Hour the grid scrolls to on mount. */
2540
+ scrollToHour?: number;
2541
+ /** Pixels per hour. */
2542
+ hourHeight?: number;
2543
+ /** Max height of the scrolling time grid in px. */
2544
+ height?: number;
2545
+ actions?: ReactNode;
2546
+ className?: string;
2547
+ }
2548
+ /** Week view: seven day columns over a scrolling 24-hour time grid, with a "now" line. */
2549
+ export declare function WeekCalendar({ events, today, now, defaultWeek, onWeekChange, onEventClick, kinds, scrollToHour, hourHeight, height, actions, className }: WeekCalendarProps): import("react").JSX.Element;
2550
+ //#endregion
2551
+ //#region src/scheduling/WeekCalendar/block.meta.d.ts
2552
+ declare const meta$75: BlockMeta;
2553
+ //#endregion
2554
+ //#region src/scheduling/AgendaList/AgendaList.d.ts
2555
+ export interface AgendaListProps {
2556
+ events?: ScheduleEvent[];
2557
+ /** The app's "today": labels the Today/Tomorrow groups. */
2558
+ today?: Date;
2559
+ /** Only events on or after this day. Defaults to `today`; pass null for all. */
2560
+ from?: Date | null;
2561
+ /** Number of days shown from `from`. Default 7; null for no limit. */
2562
+ days?: number | null;
2563
+ /** Makes each row a button. */
2564
+ onEventClick?: (event: ScheduleEvent) => void;
2565
+ kinds?: Record<string, EventKind>;
2566
+ title?: string;
2567
+ /** Max height of the scrolling list in px. */
2568
+ maxHeight?: number;
2569
+ emptyTitle?: string;
2570
+ emptyDescription?: string;
2571
+ /** Heading level of the title, to fit the page outline (default h3); inner headings use the next level. */
2572
+ titleAs?: 'h2' | 'h3' | 'h4';
2573
+ className?: string;
2574
+ }
2575
+ /** Upcoming scheduled work grouped by day, each row with a kind tile, time range and location. */
2576
+ export declare function AgendaList({ events, today, from, days, onEventClick, kinds, title: titleProp, maxHeight, emptyTitle: emptyTitleProp, emptyDescription: emptyDescriptionProp, titleAs: TitleTag, className }: AgendaListProps): import("react").JSX.Element;
2577
+ //#endregion
2578
+ //#region src/scheduling/AgendaList/block.meta.d.ts
2579
+ declare const meta$2: BlockMeta;
2580
+ //#endregion
2581
+ //#region src/scheduling/TimeSlotPicker/TimeSlotPicker.d.ts
2582
+ export interface TimeSlot {
2583
+ /** Submitted value, e.g. "09:30". */
2584
+ value: string;
2585
+ /** Visible label. Defaults to `value`. */
2586
+ label?: string;
2587
+ /** Taken slots render struck through and disabled. Default true. */
2588
+ available?: boolean;
2589
+ }
2590
+ export interface TimeSlotPickerProps {
2591
+ slots?: TimeSlot[];
2592
+ /** Controlled value. */
2593
+ value?: string | null;
2594
+ /** Uncontrolled initial value. */
2595
+ defaultValue?: string | null;
2596
+ onValueChange?: (value: string) => void;
2597
+ /** Group label (the fieldset legend). */
2598
+ legend?: string;
2599
+ /** Secondary line under the legend, e.g. the chosen date. */
2600
+ description?: string;
2601
+ /** Form field name. */
2602
+ name?: string;
2603
+ /** Slot columns from the `sm` breakpoint (two on small screens). */
2604
+ columns?: 2 | 3 | 4 | 6;
2605
+ /** Max height of the scrolling slot list in px. */
2606
+ maxHeight?: number;
2607
+ className?: string;
2608
+ }
2609
+ /**
2610
+ * Pick one time slot. Native radio semantics: Tab enters the group, arrow keys move and select,
2611
+ * taken slots are disabled.
2612
+ */
2613
+ export declare function TimeSlotPicker({ slots, value, defaultValue, onValueChange, legend: legendProp, description, name, columns, maxHeight, className }: TimeSlotPickerProps): import("react").JSX.Element;
2614
+ //#endregion
2615
+ //#region src/scheduling/TimeSlotPicker/block.meta.d.ts
2616
+ declare const meta$70: BlockMeta;
2617
+ //#endregion
2618
+ //#region src/scheduling/TimeSlotPicker/fixtures.d.ts
2619
+ /** Half-hour slots from 09:00 to 21:00 with a few already taken. */
2620
+ export declare const sampleTimeSlots: TimeSlot[];
2621
+ //#endregion
2622
+ //#region src/scheduling/shared/fixtures.d.ts
2623
+ /** The sample calendar's "today" (Wed 15 Apr 2026, 10:20). Pass your own `today` in apps. */
2624
+ declare const sampleToday: Date;
2625
+ /** Sample scheduled work for April 2026 (jobs, deploys, reviews, backups, maintenance). */
2626
+ declare const sampleEvents: ScheduleEvent[];
2627
+ //#endregion
2628
+ //#region src/shell/AppSidebar/fixtures.d.ts
2629
+ export declare const appSidebarNavGroups: NavGroup[];
2630
+ export declare const appSidebarWorkspaces: Workspace[];
2631
+ export interface AppSidebarUsage {
2632
+ label: string;
2633
+ value: number;
2634
+ max: number;
2635
+ /** Formatted value, e.g. "8.2k / 10k requests". */
2636
+ valueLabel?: string;
2637
+ }
2638
+ export declare const appSidebarUsage: AppSidebarUsage;
2639
+ export declare const appSidebarUser: UserMenuUser;
2640
+ //#endregion
2641
+ //#region src/shell/AppSidebar/AppSidebar.d.ts
2642
+ export interface AppSidebarHeaderProps {
2643
+ /** Icon rail: shows only the brand mark. */
2644
+ collapsed?: boolean;
2645
+ /** Workspaces for the switcher; `null` shows the logo + wordmark instead. */
2646
+ workspaces?: Workspace[] | null;
2647
+ currentWorkspaceId?: string;
2648
+ onWorkspaceChange?: (workspace: Workspace) => void;
2649
+ onCreateWorkspace?: () => void;
2650
+ className?: string;
2651
+ }
2652
+ /** Sidebar top: workspace switcher (or the brand logo), the brand mark alone in the icon rail. */
2653
+ export declare function AppSidebarHeader({ collapsed, workspaces, currentWorkspaceId, onWorkspaceChange, onCreateWorkspace, className }: AppSidebarHeaderProps): import("react").JSX.Element;
2654
+ export interface AppSidebarNavProps {
2655
+ groups?: NavGroup[];
2656
+ currentHref?: string;
2657
+ collapsed?: boolean;
2658
+ /** Accessible name of the nav landmark. */
2659
+ label?: string;
2660
+ onNavigate?: (item: NavItem) => void;
2661
+ className?: string;
2662
+ }
2663
+ /** Sidebar body: the NavList (icon rail with tooltips when collapsed). */
2664
+ export declare function AppSidebarNav({ groups, currentHref, collapsed, label, onNavigate, className }: AppSidebarNavProps): import("react").JSX.Element;
2665
+ export interface AppSidebarFooterProps {
2666
+ collapsed?: boolean;
2667
+ /** Plan usage meter; `null` hides it. */
2668
+ usage?: AppSidebarUsage | null;
2669
+ /** Help link; `null` hides it. */
2670
+ helpHref?: string | null;
2671
+ helpLabel?: string;
2672
+ /** Signed-in user; `null` hides the user menu. */
2673
+ user?: UserMenuUser | null;
2674
+ userMenuItems?: UserMenuEntry[];
2675
+ onSignOut?: () => void;
2676
+ className?: string;
2677
+ }
2678
+ /** Sidebar bottom: usage meter, help link and the user menu (avatar only in the icon rail). */
2679
+ export declare function AppSidebarFooter({ collapsed, usage, helpHref, helpLabel, user, userMenuItems, onSignOut, className }: AppSidebarFooterProps): import("react").JSX.Element;
2680
+ export interface AppSidebarProps extends AppSidebarHeaderProps, Omit<AppSidebarNavProps, 'className' | 'groups' | 'label'>, Omit<AppSidebarFooterProps, 'className'> {
2681
+ navGroups?: NavGroup[];
2682
+ navLabel?: string;
2683
+ }
2684
+ /**
2685
+ * Complete application sidebar column (chrome surface): workspace switcher header, NavList body
2686
+ * and a footer with usage, help and the user menu. Inside SidebarLayout, use the parts
2687
+ * (AppSidebarHeader / AppSidebarNav / AppSidebarFooter) in its three slots.
2688
+ */
2689
+ export declare function AppSidebar({ collapsed, workspaces, currentWorkspaceId, onWorkspaceChange, onCreateWorkspace, navGroups, navLabel, currentHref, onNavigate, usage, helpHref, helpLabel, user, userMenuItems, onSignOut, className }: AppSidebarProps): import("react").JSX.Element;
2690
+ //#endregion
2691
+ //#region src/shell/AppSidebar/block.meta.d.ts
2692
+ declare const meta$3: BlockMeta;
2693
+ //#endregion
2694
+ //#region src/shell/EnvironmentBadge/EnvironmentBadge.d.ts
2695
+ export type EnvironmentTone = 'primary' | 'warning' | 'info' | 'neutral' | 'destructive';
2696
+ /** Default tone per environment name; anything else is neutral. */
2697
+ export declare const environmentTones: Record<string, EnvironmentTone>;
2698
+ export interface EnvironmentBadgeProps {
2699
+ /** Environment name, e.g. `production`, `staging`, `preview`. */
2700
+ environment?: string;
2701
+ /** Region or cluster shown after the environment, e.g. `eu-west`; `null` hides it. */
2702
+ region?: string | null;
2703
+ /** Overrides the tone looked up from `environmentTones`. */
2704
+ tone?: EnvironmentTone;
2705
+ /** Prefix read by screen readers only. */
2706
+ srLabel?: string;
2707
+ className?: string;
2708
+ }
2709
+ /** Environment + region chip for the topbar or a page header: "production · eu-west". */
2710
+ export declare function EnvironmentBadge({ environment, region, tone, srLabel, className }: EnvironmentBadgeProps): import("react").JSX.Element;
2711
+ //#endregion
2712
+ //#region src/shell/AppTopbar/AppTopbar.d.ts
2713
+ export interface AppTopbarProps {
2714
+ /** Location trail; `null` hides it. */
2715
+ breadcrumbs?: BreadcrumbItem[] | null;
2716
+ /** Replaces the breadcrumb (custom title, tabs…). */
2717
+ breadcrumb?: ReactNode;
2718
+ /** Environment chip after the breadcrumb; `null` hides it. */
2719
+ environment?: EnvironmentBadgeProps | null;
2720
+ /** Search control; defaults to GlobalSearch (⌘K). `null` hides it. */
2721
+ search?: ReactNode;
2722
+ /** Notifications; `null` hides the bell. */
2723
+ notifications?: NotificationItem[] | null;
2724
+ onNotificationSelect?: (notification: NotificationItem) => void;
2725
+ onMarkAllRead?: () => void;
2726
+ /** Theme control: a one-button cycle, the segmented switcher, or none. */
2727
+ theme?: 'cycle' | 'segmented' | null;
2728
+ /** Signed-in user; `null` hides the user menu. */
2729
+ user?: UserMenuUser | null;
2730
+ userMenuItems?: UserMenuEntry[];
2731
+ onSignOut?: () => void;
2732
+ className?: string;
2733
+ }
2734
+ /**
2735
+ * Topbar contents: breadcrumb (+ environment chip) on the left; ⌘K search, notifications, theme
2736
+ * and user menu on the right. Renders no <header>: put it in SidebarLayout's `topbar` slot or a
2737
+ * header of your own.
2738
+ */
2739
+ export declare function AppTopbar({ breadcrumbs, breadcrumb, environment, search, notifications, onNotificationSelect, onMarkAllRead, theme, user, userMenuItems, onSignOut, className }: AppTopbarProps): import("react").JSX.Element;
2740
+ //#endregion
2741
+ //#region src/shell/AppTopbar/fixtures.d.ts
2742
+ export declare const appTopbarBreadcrumbs: BreadcrumbItem[];
2743
+ export declare const appTopbarNotifications: NotificationItem[];
2744
+ //#endregion
2745
+ //#region src/shell/AppTopbar/block.meta.d.ts
2746
+ declare const meta$4: BlockMeta;
2747
+ //#endregion
2748
+ //#region src/shell/EnvironmentBadge/block.meta.d.ts
2749
+ declare const meta$21: BlockMeta;
2750
+ //#endregion
2751
+ //#region src/shell/GlobalSearch/GlobalSearch.d.ts
2752
+ export type GlobalSearchGroup = 'pages' | 'records' | 'actions' | 'recent';
2753
+ export interface GlobalSearchProps {
2754
+ pages?: CommandItem[];
2755
+ records?: CommandItem[];
2756
+ actions?: CommandItem[];
2757
+ /** Shown first while the query is empty. */
2758
+ recent?: CommandItem[];
2759
+ /** Called with every chosen item and the group it came from (after the item's own onSelect). */
2760
+ onSelect?: (item: CommandItem, group: GlobalSearchGroup) => void;
2761
+ /** Group headings. */
2762
+ labels?: Partial<Record<GlobalSearchGroup, string>>;
2763
+ /** Registers ⌘K / Ctrl+K. */
2764
+ shortcut?: boolean;
2765
+ open?: boolean;
2766
+ defaultOpen?: boolean;
2767
+ onOpenChange?: (open: boolean) => void;
2768
+ placeholder?: string;
2769
+ /** Text of the trigger button. */
2770
+ triggerLabel?: string;
2771
+ /** Classes for the trigger (e.g. `hidden md:inline-flex`). */
2772
+ className?: string;
2773
+ }
2774
+ /** ⌘K search: a CommandPalette pre-wired with recent items and Pages / Records / Actions groups. */
2775
+ export declare function GlobalSearch({ pages, records, actions, recent, onSelect, labels, shortcut, open, defaultOpen, onOpenChange, placeholder: placeholderProp, triggerLabel: triggerLabelProp, className }: GlobalSearchProps): import("react").JSX.Element;
2776
+ //#endregion
2777
+ //#region src/shell/GlobalSearch/fixtures.d.ts
2778
+ export declare const globalSearchPages: CommandItem[];
2779
+ export declare const globalSearchRecords: CommandItem[];
2780
+ export declare const globalSearchActions: CommandItem[];
2781
+ export declare const globalSearchRecent: CommandItem[];
2782
+ //#endregion
2783
+ //#region src/shell/GlobalSearch/block.meta.d.ts
2784
+ declare const meta$31: BlockMeta;
2785
+ //#endregion
2786
+ //#region src/tables/DataTable/data-table-utils.d.ts
2787
+ export type SortDirectionValue = 'ascending' | 'descending';
2788
+ export type CellValue = string | number | boolean | Date | null | undefined;
2789
+ export type DataTableColumnVariant = 'default' | 'mono' | 'muted' | 'numeric';
2790
+ /** Body-cell classes of each column variant. */
2791
+ export declare const COLUMN_VARIANT_CLASSES: Record<DataTableColumnVariant, string>;
2792
+ /** Effective alignment of a column (numeric columns default to right). */
2793
+ export declare function columnAlign<T>(column: DataTableColumn<T>): DataTableColumn<T>['align'];
2794
+ /** One typed column of a DataTable. */
2795
+ export interface DataTableColumn<T> {
2796
+ /** Stable key (sorting, visibility). */
2797
+ id: string;
2798
+ /** Header text; also the column's name in the visibility menu. */
2799
+ header: string;
2800
+ /** Raw value: used to sort, and rendered when `cell` is absent. */
2801
+ accessor?: (row: T) => CellValue;
2802
+ /** Custom cell rendering. */
2803
+ cell?: (row: T) => ReactNode;
2804
+ sortable?: boolean;
2805
+ align?: 'left' | 'right' | 'center';
2806
+ /** Can be hidden from the column menu (default true). */
2807
+ hideable?: boolean;
2808
+ /** Hidden until turned on in the column menu. */
2809
+ defaultHidden?: boolean;
2810
+ /**
2811
+ * Presentational preset for the body cells: `mono` (monospace ids, regions), `muted`
2812
+ * (secondary text), `numeric` (monospace tabular figures, right-aligned unless `align` is set).
2813
+ */
2814
+ variant?: DataTableColumnVariant;
2815
+ /** Classes for the body cells (merged after the variant's). */
2816
+ className?: string;
2817
+ /** Classes for the header cell (e.g. a width). */
2818
+ headClassName?: string;
2819
+ /** Initial width in px (resizable or pinned tables; default 160). */
2820
+ width?: number;
2821
+ /** Smallest width a resize can reach (default 60). */
2822
+ minWidth?: number;
2823
+ /** Largest width a resize can reach (default 640). */
2824
+ maxWidth?: number;
2825
+ /** Shows a resize handle when the table is `resizable` (default true). */
2826
+ resizable?: boolean;
2827
+ /** Can be pinned from the column menu (default true). */
2828
+ pinnable?: boolean;
2829
+ /** Inline editing: Enter or F2 on the cell edits it (needs `onCellEdit` on the table). */
2830
+ editable?: boolean | ((row: T) => boolean);
2831
+ /** Editor of an editable cell (default a text input). */
2832
+ editor?: DataTableCellEditor;
2833
+ /** Value the editor starts from (default the accessor's value). */
2834
+ editValue?: (row: T) => string | number | null | undefined;
2835
+ }
2836
+ /** Editor of an editable column. */
2837
+ export type DataTableCellEditor = {
2838
+ type: 'text';
2839
+ placeholder?: string;
2840
+ } | {
2841
+ type: 'number';
2842
+ min?: number;
2843
+ max?: number;
2844
+ step?: number;
2845
+ } | {
2846
+ type: 'select';
2847
+ options: ReadonlyArray<{
2848
+ value: string;
2849
+ label: string;
2850
+ }>;
2851
+ };
2852
+ export interface SortState {
2853
+ columnId: string;
2854
+ direction: SortDirectionValue;
2855
+ }
2856
+ /** Compares two cell values: nulls last, numbers and dates numerically, strings with localeCompare (numeric). */
2857
+ export declare function compareValues(a: CellValue, b: CellValue): number;
2858
+ /** Client-side sort (stable). Returns the input order when there is no sort or the column has no accessor. */
2859
+ export declare function sortRows<T>(rows: readonly T[], columns: ReadonlyArray<DataTableColumn<T>>, sort: SortState | null): T[];
2860
+ /** Number of pages for a row count (at least 1). */
2861
+ export declare function pageCountOf(total: number, pageSize: number): number;
2862
+ /** Client-side pagination: the rows of a 1-based page (clamped to the valid range). */
2863
+ export declare function paginate<T>(rows: readonly T[], page: number, pageSize: number): T[];
2864
+ /** Header checkbox state for the rows on screen. */
2865
+ export declare function selectionState(visibleIds: readonly string[], selected: ReadonlySet<string>): {
2866
+ checked: boolean;
2867
+ indeterminate: boolean;
2868
+ };
2869
+ /** Selects all of `ids` when not all are selected; otherwise clears them. Other selections are kept. */
2870
+ export declare function toggleAll(ids: readonly string[], selected: ReadonlySet<string>): Set<string>;
2871
+ export declare function toggleOne(id: string, selected: ReadonlySet<string>): Set<string>;
2872
+ /** Default cell text for a raw value. */
2873
+ export declare function formatCell(value: CellValue): ReactNode;
2874
+ /** Groups rows by a field key or by a function returning the group key. */
2875
+ export type DataTableGroupBy<T> = Extract<keyof T, string> | ((row: T) => string | number | null | undefined);
2876
+ /** One group of rows, in display order. */
2877
+ export interface DataTableGroup<T> {
2878
+ /** Group key (`''` for rows without a value). */
2879
+ key: string;
2880
+ rows: T[];
2881
+ }
2882
+ /** Group key of a row (`''` when the value is null or undefined). */
2883
+ export declare function groupKeyOf<T>(row: T, groupBy: DataTableGroupBy<T>): string;
2884
+ /**
2885
+ * Splits rows into groups, keeping the row order inside each group. Groups follow `order` (the
2886
+ * keys' first appearance in it, e.g. the unsorted input) and then any key not seen there.
2887
+ */
2888
+ export declare function groupRows<T>(rows: readonly T[], groupBy: DataTableGroupBy<T>, order?: readonly T[]): DataTableGroup<T>[];
2889
+ //#endregion
2890
+ //#region src/tables/DataTable/column-sizing.d.ts
2891
+ /** Column widths in px by column id. */
2892
+ type ColumnWidths = Readonly<Record<string, number>>;
2893
+ /** Columns pinned to the start (left in LTR) and end edges, in display order. */
2894
+ interface PinnedColumns {
2895
+ left?: readonly string[];
2896
+ right?: readonly string[];
2897
+ }
2898
+ type PinSide = 'left' | 'right';
2899
+ export declare const DEFAULT_COLUMN_WIDTH = 160;
2900
+ export declare const MIN_COLUMN_WIDTH = 60;
2901
+ export declare const MAX_COLUMN_WIDTH = 640;
2902
+ /** Clamps a width to the column's limits (rounded to whole px). */
2903
+ export declare function clampColumnWidth<T>(column: DataTableColumn<T>, width: number): number;
2904
+ /** Effective width of a column: the widths map, then `column.width`, then the default. */
2905
+ export declare function columnWidthOf<T>(column: DataTableColumn<T>, widths: ColumnWidths): number;
2906
+ /** Pins a column to a side (appended to that side) or unpins it (`null`). */
2907
+ export declare function setColumnPin(pinned: PinnedColumns, id: string, side: PinSide | null): PinnedColumns;
2908
+ /** Display order: start-pinned columns (pin order), unpinned columns (column order), end-pinned columns. */
2909
+ export declare function orderColumns<T>(columns: ReadonlyArray<DataTableColumn<T>>, pinned: PinnedColumns): Array<DataTableColumn<T>>;
2910
+ //#endregion
2911
+ //#region src/tables/PaginationFooter/PaginationFooter.d.ts
2912
+ export interface PaginationFooterLabels {
2913
+ rowsPerPage: string;
2914
+ rowsPerPageLabel: string;
2915
+ rangeSummary: (from: number, to: number, total: number) => string;
2916
+ paginationNav: (noun: string) => string;
2917
+ previous: string;
2918
+ next: string;
2919
+ page: (page: number) => string;
2920
+ }
2921
+ export interface PaginationFooterProps {
2922
+ /** Per-key overrides; omitted keys retain the existing provider translations and defaults. */
2923
+ labels?: Partial<PaginationFooterLabels>;
2924
+ /** Total number of rows. */
2925
+ total?: number;
2926
+ /** Current page, 1-based (controlled). */
2927
+ page?: number;
2928
+ defaultPage?: number;
2929
+ onPageChange?: (page: number) => void;
2930
+ /** Rows per page (controlled). */
2931
+ pageSize?: number;
2932
+ defaultPageSize?: number;
2933
+ onPageSizeChange?: (pageSize: number) => void;
2934
+ pageSizeOptions?: readonly number[];
2935
+ /** What the rows are, for the accessible names ("Deployments"). */
2936
+ noun?: string;
2937
+ locale?: string;
2938
+ className?: string;
2939
+ }
2940
+ /** Table footer: rows-per-page Select, a "1–10 of 97" summary and numbered Pagination. Stacks on small screens. */
2941
+ export declare function PaginationFooter({ total, page: pageProp, defaultPage, onPageChange, pageSize: sizeProp, defaultPageSize, onPageSizeChange, pageSizeOptions, noun: nounProp, locale: localeProp, className, labels }: PaginationFooterProps): import("react").JSX.Element;
2942
+ //#endregion
2943
+ //#region src/tables/DataTable/labels.d.ts
2944
+ /** Per-instance table chrome, including the composed PaginationFooter. Caller data stays caller-owned. */
2945
+ interface DataTableLabels extends PaginationFooterLabels {
2946
+ /** Non-virtual table overflow region; virtualized regions keep the caller caption. */
2947
+ scrollRegion: string;
2948
+ selectionCount: (count: number) => string;
2949
+ columns: string;
2950
+ visibleColumns: string;
2951
+ pinColumns: string;
2952
+ pinnedLeft: string;
2953
+ pinnedRight: string;
2954
+ pinLeft: string;
2955
+ pinRight: string;
2956
+ unpinned: string;
2957
+ density: string;
2958
+ comfortable: string;
2959
+ compact: string;
2960
+ resizeColumn: (label: string) => string;
2961
+ columnWidth: (width: number) => string;
2962
+ defaultView: string;
2963
+ defaultViewOption: string;
2964
+ modified: string;
2965
+ views: string;
2966
+ saveChanges: string;
2967
+ saveAs: string;
2968
+ renameView: string;
2969
+ deleteView: string;
2970
+ resetChanges: string;
2971
+ saveViewTitle: string;
2972
+ renameViewTitle: string;
2973
+ viewName: string;
2974
+ cancel: string;
2975
+ saveView: string;
2976
+ rename: string;
2977
+ closeDialog: string;
2978
+ selection: string;
2979
+ selectAll: string;
2980
+ selectRow: (label: string) => string;
2981
+ selectGroup: (group: string) => string;
2982
+ groupRows: (count: number) => string;
2983
+ noGroup: string;
2984
+ actions: string;
2985
+ rowActions: (label: string) => string;
2986
+ emptyTitle: string;
2987
+ emptyDescription: string;
2988
+ loading: (caption: string) => string;
2989
+ editHint: string;
2990
+ editLabel: (column: string, row: string) => string;
2991
+ editError: string;
2992
+ enterNumber: string;
2993
+ minimumValue: (min: number) => string;
2994
+ maximumValue: (max: number) => string;
2995
+ }
2996
+ //#endregion
2997
+ //#region src/tables/DataTable/editable-cell.d.ts
2998
+ /** One committed cell edit, as `onCellEdit` receives it. */
2999
+ interface DataTableCellEdit<T> {
3000
+ row: T;
3001
+ rowId: string;
3002
+ columnId: string;
3003
+ /** Parsed value: a string (text, select) or a number / null (number editor). */
3004
+ value: string | number | null;
3005
+ /** Value the editor started from. */
3006
+ previous: string | number | null;
3007
+ }
3008
+ /**
3009
+ * Result of `onCellEdit`: nothing or `true` accepts the edit (the parent updates `rows`); a string
3010
+ * rejects it and is shown inline as the error; `false` rejects with a generic message. A thrown
3011
+ * error (or a rejected promise) rejects with its message.
3012
+ */
3013
+ type DataTableCellEditResult = void | boolean | string;
3014
+ type DataTableCellEditHandler<T> = (edit: DataTableCellEdit<T>) => DataTableCellEditResult | Promise<DataTableCellEditResult>;
3015
+ interface EditableCellProps<T> {
3016
+ labels?: Partial<DataTableLabels>;
3017
+ row: T;
3018
+ rowId: string;
3019
+ rowLabel: string;
3020
+ column: DataTableColumn<T>;
3021
+ onCellEdit: DataTableCellEditHandler<T>;
3022
+ /** Id of the shared "Press Enter or F2 to edit" hint. */
3023
+ hintId: string;
3024
+ /** The cell's display content. */
3025
+ children: ReactNode;
3026
+ }
3027
+ /**
3028
+ * An editable body cell's content. At rest it is a button showing the value (Enter, F2 or a click
3029
+ * edits); while editing, an input or a select: Enter or Tab commits, Escape cancels. `onCellEdit`
3030
+ * can reject the value with a message, shown inline under the editor.
3031
+ */
3032
+ export declare function EditableCell<T>({ row, rowId, rowLabel, column, onCellEdit, hintId, children, labels }: EditableCellProps<T>): import("react").JSX.Element;
3033
+ //#endregion
3034
+ //#region src/tables/DataTable/views.d.ts
3035
+ /** What a saved view captures. Every field is optional: a missing field keeps the table's default. */
3036
+ interface DataTableViewState {
3037
+ /** Opaque filter state of the page's toolbar (see the table's `filters` / `onFiltersChange`). */
3038
+ filters?: unknown;
3039
+ sort?: SortState | null;
3040
+ hiddenColumns?: readonly string[];
3041
+ columnWidths?: ColumnWidths;
3042
+ pinnedColumns?: PinnedColumns;
3043
+ /** A field key, or `null` for no grouping (function `groupBy`s cannot be saved). */
3044
+ groupBy?: string | null;
3045
+ }
3046
+ interface DataTableView {
3047
+ id: string;
3048
+ name: string;
3049
+ state: DataTableViewState;
3050
+ }
3051
+ /** Whether two view states are equivalent (key order and empty values ignored). */
3052
+ export declare function sameViewState(a: DataTableViewState, b: DataTableViewState): boolean;
3053
+ interface ViewSwitcherProps {
3054
+ labels?: Partial<DataTableLabels>;
3055
+ views: readonly DataTableView[];
3056
+ activeId: string | null;
3057
+ /** The table differs from the active view (or from the defaults when none is active). */
3058
+ dirty: boolean;
3059
+ onSelect: (id: string | null) => void;
3060
+ onSaveAs: (name: string) => void;
3061
+ onSave: () => void;
3062
+ onRename: (id: string, name: string) => void;
3063
+ onDelete: (id: string) => void;
3064
+ onReset: () => void;
3065
+ }
3066
+ /** "Views" menu: switch between saved views, save the current table as a view, rename, delete, reset. */
3067
+ declare function ViewSwitcher({ labels, views, activeId, dirty, onSelect, onSaveAs, onSave, onRename, onDelete, onReset }: ViewSwitcherProps): import("react").JSX.Element;
3068
+ //#endregion
3069
+ //#region src/tables/DataTable/data-table-props.d.ts
3070
+ interface DataTableCommonProps<T> {
3071
+ /** Per-key overrides; omitted keys keep existing defaults and provider translations. */
3072
+ labels?: Partial<DataTableLabels>;
3073
+ rows?: readonly T[];
3074
+ columns?: ReadonlyArray<DataTableColumn<T>>;
3075
+ /** Stable row id (defaults to `row.id`). */
3076
+ getRowId?: (row: T) => string;
3077
+ /** Row name for selection and menu labels (defaults to the first column's value). */
3078
+ getRowLabel?: (row: T) => string;
3079
+ /** Table name (screen-reader caption unless `showCaption`). */
3080
+ caption?: string;
3081
+ showCaption?: boolean;
3082
+ /** Row selection with a select-all header checkbox (current page). */
3083
+ selectable?: boolean;
3084
+ /** Native radio name in single mode. Supplied names must be unique per page. */
3085
+ selectionName?: string;
3086
+ selectedId?: string | null;
3087
+ defaultSelectedId?: string | null;
3088
+ onSelectedIdChange?: (id: string) => void;
3089
+ isRowDisabled?: (row: T) => boolean;
3090
+ selectedIds?: readonly string[];
3091
+ defaultSelectedIds?: readonly string[];
3092
+ onSelectionChange?: (ids: string[]) => void;
3093
+ /** Rendered in the toolbar while rows are selected. */
3094
+ bulkActions?: (selectedIds: string[]) => ReactNode;
3095
+ /**
3096
+ * Shows the "N selected" text in the toolbar while rows are selected (default true). Turn it
3097
+ * off when the page renders its own count, e.g. a BulkActionBar.
3098
+ */
3099
+ selectionSummary?: boolean;
3100
+ /** Row-actions menu items. */
3101
+ rowActions?: (row: T) => Array<MoreMenuAction | 'separator'>;
3102
+ sort?: SortState | null;
3103
+ defaultSort?: SortState | null;
3104
+ onSortChange?: (sort: SortState) => void;
3105
+ /** Rows arrive sorted (server side): headers still toggle, rows are not re-sorted. */
3106
+ manualSorting?: boolean;
3107
+ defaultPageSize?: number;
3108
+ pageSizeOptions?: readonly number[];
3109
+ /** Controlled row density. */
3110
+ density?: TableDensity;
3111
+ /** Initial density; omitted, the table follows the surrounding DensityProvider (comfortable outside one). */
3112
+ defaultDensity?: TableDensity;
3113
+ onDensityChange?: (density: TableDensity) => void;
3114
+ showDensityToggle?: boolean;
3115
+ showColumnMenu?: boolean;
3116
+ loading?: boolean;
3117
+ loadingRows?: number;
3118
+ emptyState?: ReactNode;
3119
+ /**
3120
+ * Groups rows under header rows (a field key or a function returning the group key). Groups keep
3121
+ * the order in which their keys first appear in `rows`; sorting applies inside each group, and
3122
+ * pagination pages through the grouped rows (each header shows the group's full count).
3123
+ */
3124
+ groupBy?: DataTableGroupBy<T>;
3125
+ /** Header text of a group (default: the key, or "No group" for rows without a value). */
3126
+ groupLabel?: (key: string, rows: readonly T[]) => ReactNode;
3127
+ /** Group headers render a keyboard-accessible collapse button (default true). */
3128
+ collapsibleGroups?: boolean;
3129
+ /** Controlled collapsed group keys. */
3130
+ collapsedGroups?: readonly string[];
3131
+ /** Group keys collapsed initially. */
3132
+ defaultCollapsedGroups?: readonly string[];
3133
+ onCollapsedGroupsChange?: (keys: string[]) => void;
3134
+ /** Called when a saved view switches grouping (a field key, or `null` for none). */
3135
+ onGroupByChange?: (groupBy: string | null) => void;
3136
+ /** Controlled hidden column ids (default: columns with `defaultHidden`). */
3137
+ hiddenColumns?: readonly string[];
3138
+ onHiddenColumnsChange?: (ids: string[]) => void;
3139
+ /** Resize handles on the column headers (pointer drag, or arrow keys on the focused handle). */
3140
+ resizable?: boolean;
3141
+ /** Controlled column widths in px by column id. */
3142
+ columnWidths?: ColumnWidths;
3143
+ defaultColumnWidths?: ColumnWidths;
3144
+ onColumnWidthsChange?: (widths: Record<string, number>) => void;
3145
+ /** Controlled pinned columns (sticky at the start or end edge while scrolling sideways). */
3146
+ pinnedColumns?: PinnedColumns;
3147
+ defaultPinnedColumns?: PinnedColumns;
3148
+ onPinnedColumnsChange?: (pinned: PinnedColumns) => void;
3149
+ /** Pin / unpin from the column menu (default true when pinning is in use: a pinned prop or callback). */
3150
+ showPinMenu?: boolean;
3151
+ /**
3152
+ * Renders only the rows in view (plus overscan) inside a scrolling body with a sticky header.
3153
+ * `'auto'` (default) turns it on above `virtualizeThreshold` rendered rows (with pagination,
3154
+ * the rows of the current page). The table exposes `aria-rowcount` and each row its
3155
+ * `aria-rowindex`; selection (select-all covers every row) and grouping keep working.
3156
+ * Limits: rows get a fixed height (`rowHeight`), so multi-line cells are clipped; a row that
3157
+ * scrolls out of view unmounts, so focus inside it (or an open inline editor) is lost; a group's
3158
+ * header row renders only while it is in view.
3159
+ */
3160
+ virtualize?: boolean | 'auto';
3161
+ virtualizeThreshold?: number;
3162
+ /** Row height in px for virtualization (default by density: 44 comfortable, 36 compact). */
3163
+ rowHeight?: number;
3164
+ /** Classes of the virtualized scroll container: its max height (default `max-h-[32rem]`). */
3165
+ virtualContainerClassName?: string;
3166
+ /**
3167
+ * Inline editing of `editable` columns. Return nothing to accept (and update `rows`), or a
3168
+ * message (or throw) to reject: the message is shown inline under the editor.
3169
+ */
3170
+ onCellEdit?: DataTableCellEditHandler<T>;
3171
+ /** Saved views (controlled). Each captures filters, sort, visible columns, widths, pinning and grouping. */
3172
+ views?: readonly DataTableView[];
3173
+ defaultViews?: readonly DataTableView[];
3174
+ onViewsChange?: (views: DataTableView[]) => void;
3175
+ activeViewId?: string | null;
3176
+ defaultActiveViewId?: string | null;
3177
+ onActiveViewChange?: (id: string | null) => void;
3178
+ /** Shows the view switcher (default: when views are in use). */
3179
+ showViewSwitcher?: boolean;
3180
+ /** Opaque filter state of the page's toolbar, saved with views. */
3181
+ filters?: unknown;
3182
+ /** Called when a view (or a reset) restores filters. */
3183
+ onFiltersChange?: (filters: unknown) => void;
3184
+ /** Left side of the toolbar (title, search, FilterBar…). */
3185
+ toolbar?: ReactNode;
3186
+ className?: string;
3187
+ }
3188
+ type DataTableProps<T> = DataTableCommonProps<T> & ({
3189
+ selectionMode: 'single';
3190
+ paginated?: false;
3191
+ /** Consumer-supplied accessible group label; the kit adds no default. */
3192
+ legend?: ReactNode;
3193
+ 'aria-label'?: string;
3194
+ 'aria-labelledby'?: string;
3195
+ } | {
3196
+ selectionMode?: 'none' | 'multiple';
3197
+ paginated?: boolean;
3198
+ legend?: never;
3199
+ 'aria-label'?: never;
3200
+ 'aria-labelledby'?: never;
3201
+ });
3202
+ //#endregion
3203
+ //#region src/tables/DataTable/fixtures.d.ts
3204
+ interface DeploymentRow {
3205
+ id: string;
3206
+ name: string;
3207
+ region: string;
3208
+ status: 'running' | 'queued' | 'paused' | 'degraded' | 'failed';
3209
+ requests: number;
3210
+ cost: number;
3211
+ updatedAt: Date;
3212
+ }
3213
+ /** Deterministic deployments (the first 24 are DEPLOYMENT_ROWS); large counts exercise virtualization. */
3214
+ export declare function generateDeployments(count: number): DeploymentRow[];
3215
+ /** 24 deployments: enough for two pages at the default page size. */
3216
+ export declare const DEPLOYMENT_ROWS: DeploymentRow[];
3217
+ /** Columns for DEPLOYMENT_ROWS. */
3218
+ export declare const DEPLOYMENT_COLUMNS: DataTableColumn<DeploymentRow>[];
3219
+ //#endregion
3220
+ //#region src/tables/DataTable/DataTable.d.ts
3221
+ /**
3222
+ * Generic data table on the kit Table: typed columns, sortable headers (aria-sort), row selection
3223
+ * with select-all / indeterminate, column visibility menu, density toggle, row actions, loading
3224
+ * and empty states, client-side sort + pagination, optional collapsible row groups (`groupBy`),
3225
+ * column resize and pinning, row virtualization, inline cell editing and saved views.
3226
+ */
3227
+ export declare function DataTable<T = (typeof DEPLOYMENT_ROWS)[number]>({ rows, columns, getRowId, getRowLabel, caption, showCaption, selectable: selectableProp, selectionMode, selectionName, legend, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, selectedId, defaultSelectedId, onSelectedIdChange, isRowDisabled, selectedIds, defaultSelectedIds, onSelectionChange, bulkActions, selectionSummary, rowActions, sort: sortProp, defaultSort, onSortChange, manualSorting, paginated: paginatedProp, defaultPageSize, pageSizeOptions, density: densityProp, defaultDensity, onDensityChange, showDensityToggle, showColumnMenu, loading, loadingRows, emptyState, groupBy, groupLabel, collapsibleGroups, collapsedGroups: collapsedProp, defaultCollapsedGroups, onCollapsedGroupsChange, onGroupByChange, hiddenColumns: hiddenProp, onHiddenColumnsChange, resizable, columnWidths: widthsProp, defaultColumnWidths, onColumnWidthsChange, pinnedColumns: pinnedProp, defaultPinnedColumns, onPinnedColumnsChange, showPinMenu, virtualize, virtualizeThreshold, rowHeight: rowHeightProp, virtualContainerClassName, onCellEdit, views: viewsProp, defaultViews, onViewsChange, activeViewId, defaultActiveViewId, onActiveViewChange, showViewSwitcher, filters, onFiltersChange, toolbar, className, labels }: DataTableProps<T>): import("react").JSX.Element;
3228
+ //#endregion
3229
+ //#region src/tables/DataTable/column-menu.d.ts
3230
+ interface ColumnVisibilityMenuProps<T> {
3231
+ columns: ReadonlyArray<DataTableColumn<T>>;
3232
+ hidden: ReadonlySet<string>;
3233
+ onToggle: (columnId: string, visible: boolean) => void;
3234
+ label?: string;
3235
+ labels?: Partial<DataTableLabels>;
3236
+ /** Pin side of a column; with `onPin`, the menu gets a "Pin columns" section. */
3237
+ pinOf?: (columnId: string) => PinSide | null;
3238
+ onPin?: (columnId: string, side: PinSide | null) => void;
3239
+ }
3240
+ /**
3241
+ * "Columns" menu: one checkbox item per hideable column (the last visible column cannot be
3242
+ * hidden) and, when pinning is on, a submenu per visible column to pin it left, right or unpin it.
3243
+ */
3244
+ export declare function ColumnVisibilityMenu<T>({ columns, hidden, onToggle, label: labelProp, labels, pinOf, onPin }: ColumnVisibilityMenuProps<T>): import("react").JSX.Element;
3245
+ //#endregion
3246
+ //#region src/tables/DataTable/density-toggle.d.ts
3247
+ interface DensityToggleProps {
3248
+ labels?: Partial<DataTableLabels>;
3249
+ value: TableDensity;
3250
+ onChange: (density: TableDensity) => void;
3251
+ }
3252
+ /** Two-icon segmented control: comfortable or compact rows. */
3253
+ export declare function DensityToggle({ value, onChange, labels }: DensityToggleProps): import("react").JSX.Element;
3254
+ //#endregion
3255
+ //#region src/tables/DataTable/resize-handle.d.ts
3256
+ interface ColumnResizeHandleProps {
3257
+ labels?: Partial<DataTableLabels>;
3258
+ /** Column name for the accessible label ("Resize Region column"). */
3259
+ label: string;
3260
+ width: number;
3261
+ min: number;
3262
+ max: number;
3263
+ onResize: (width: number) => void;
3264
+ /** Called once a drag or a key press ends a resize. */
3265
+ onResizeEnd?: (width: number) => void;
3266
+ }
3267
+ /**
3268
+ * Column resize handle at the end edge of a header cell: a focusable `role="separator"` with
3269
+ * aria-valuenow/min/max (the width in px). Drag it with a pointer; from the keyboard,
3270
+ * ArrowLeft/ArrowRight change the width by 10px (Shift: 50px), Home/End jump to the limits.
3271
+ */
3272
+ export declare function ColumnResizeHandle({ label, width, min, max, onResize, onResizeEnd, labels }: ColumnResizeHandleProps): import("react").JSX.Element;
3273
+ //#endregion
3274
+ //#region src/tables/DataTable/block.meta.d.ts
3275
+ declare const meta$16: BlockMeta;
3276
+ //#endregion
3277
+ //#region src/tables/FilterBar/FilterBar.d.ts
3278
+ export interface FilterField {
3279
+ id: string;
3280
+ label: string;
3281
+ options: readonly string[];
3282
+ }
3283
+ export interface ActiveFilter {
3284
+ field: string;
3285
+ value: string;
3286
+ }
3287
+ export interface SavedView {
3288
+ value: string;
3289
+ label: string;
3290
+ query?: string;
3291
+ filters: readonly ActiveFilter[];
3292
+ }
3293
+ export interface FilterBarLabels {
3294
+ searchLandmark: string;
3295
+ searchLabel: string;
3296
+ searchPlaceholder: string;
3297
+ savedViewLabel: string;
3298
+ savedViewPlaceholder: string;
3299
+ addFilter: string;
3300
+ activeFilters: string;
3301
+ filters: string;
3302
+ clearAll: string;
3303
+ removeFilter: (field: string, value: string) => string;
3304
+ resultCount: (count: number) => string;
3305
+ }
3306
+ export interface FilterBarProps {
3307
+ /** Per-key overrides take precedence over the legacy search props and provider catalog. */
3308
+ labels?: Partial<FilterBarLabels>;
3309
+ fields?: readonly FilterField[];
3310
+ /** Search text (controlled). */
3311
+ query?: string;
3312
+ defaultQuery?: string;
3313
+ onQueryChange?: (query: string) => void;
3314
+ /** Active filters (controlled). */
3315
+ filters?: readonly ActiveFilter[];
3316
+ defaultFilters?: readonly ActiveFilter[];
3317
+ onFiltersChange?: (filters: ActiveFilter[]) => void;
3318
+ /** Saved views; picking one applies its query and filters. Empty hides the Select. */
3319
+ views?: readonly SavedView[];
3320
+ defaultView?: string | null;
3321
+ onViewChange?: (view: SavedView) => void;
3322
+ searchLabel?: string;
3323
+ placeholder?: string;
3324
+ /** Optional result count shown at the end ("12 results"). */
3325
+ resultCount?: number;
3326
+ className?: string;
3327
+ }
3328
+ /**
3329
+ * Filter bar: search Input, saved views Select, an "Add filter" Menu (multi-select per field),
3330
+ * removable filter chips (Token) and Clear all.
3331
+ */
3332
+ export declare function FilterBar({ fields, query: queryProp, defaultQuery, onQueryChange, filters: filtersProp, defaultFilters, onFiltersChange, views, defaultView, onViewChange, searchLabel: searchLabelProp, placeholder: placeholderProp, resultCount, className, labels }: FilterBarProps): import("react").JSX.Element;
3333
+ //#endregion
3334
+ //#region src/tables/FilterBar/block.meta.d.ts
3335
+ declare const meta$27: BlockMeta;
3336
+ //#endregion
3337
+ //#region src/tables/FilterBar/fixtures.d.ts
3338
+ export declare const DEPLOYMENT_FILTER_FIELDS: FilterField[];
3339
+ export declare const DEPLOYMENT_DEFAULT_FILTERS: ActiveFilter[];
3340
+ export declare const DEPLOYMENT_SAVED_VIEWS: SavedView[];
3341
+ //#endregion
3342
+ //#region src/tables/PaginationFooter/block.meta.d.ts
3343
+ declare const meta$46: BlockMeta;
3344
+ //#endregion
3345
+ //#region src/tables/TruncatedCollectionFooter/TruncatedCollectionFooter.d.ts
3346
+ export interface TruncatedCollectionFooterProps {
3347
+ /** Number of records already loaded; never an estimated total. */
3348
+ visibleCount: number;
3349
+ /** More records exist beyond this first page, making the count a lower bound. */
3350
+ hasMore: boolean;
3351
+ /** Localized noun used in the default summary label and note. */
3352
+ noun?: string;
3353
+ /** Number-formatting locale; translated defaults come from I18nProvider. */
3354
+ locale?: string;
3355
+ /** Plain text label before the count; null hides it. */
3356
+ summaryLabel?: ReactNode;
3357
+ /** Replaces the entire count, including the lower-bound marker. Return plain text nodes. */
3358
+ formatCount?: (count: number, hasMore: boolean) => ReactNode;
3359
+ /** Plain text note or formatter, rendered only when hasMore is true. */
3360
+ truncationNote?: ((count: number) => ReactNode) | ReactNode;
3361
+ /** Id of the note for a consumer's aria-describedby reference. */
3362
+ noteId?: string;
3363
+ className?: string;
3364
+ }
3365
+ /** Static first-page summary with no total, navigation, focus stops or live region. */
3366
+ export declare function TruncatedCollectionFooter({ visibleCount, hasMore, noun: nounProp, locale: localeProp, summaryLabel, formatCount, truncationNote, noteId, className }: TruncatedCollectionFooterProps): import("react").JSX.Element;
3367
+ //#endregion
3368
+ //#region src/tables/TruncatedCollectionFooter/block.meta.d.ts
3369
+ declare const meta$73: BlockMeta;
3370
+ //#endregion
3371
+ //#region src/tables/InlineEditRow/fixtures.d.ts
3372
+ interface EditableMember {
3373
+ id: string;
3374
+ name: string;
3375
+ email: string;
3376
+ role: string;
3377
+ seats: number;
3378
+ }
3379
+ export declare const EDITABLE_MEMBER_FIELDS: InlineEditField<EditableMember>[];
3380
+ export declare const EDITABLE_MEMBERS: EditableMember[];
3381
+ //#endregion
3382
+ //#region src/tables/InlineEditRow/InlineEditRow.d.ts
3383
+ export interface InlineEditField<T> {
3384
+ key: Extract<keyof T, string>;
3385
+ label: string;
3386
+ type?: 'text' | 'number' | 'email';
3387
+ align?: 'left' | 'right';
3388
+ required?: boolean;
3389
+ /** Read-mode cell classes. */
3390
+ className?: string;
3391
+ }
3392
+ export interface InlineEditRowProps<T extends object> {
3393
+ row: T;
3394
+ fields: ReadonlyArray<InlineEditField<T>>;
3395
+ /** Called with the edited row on Save (or Enter). */
3396
+ onSave?: (next: T) => void;
3397
+ onCancel?: () => void;
3398
+ /** Row name for the Edit button label ("Edit Ana Lopez"). */
3399
+ rowLabel?: string;
3400
+ /** Start in edit mode. */
3401
+ defaultEditing?: boolean;
3402
+ }
3403
+ /**
3404
+ * A table row that switches into edit mode: inputs replace the cells, with Save and Cancel.
3405
+ * Enter saves, Escape cancels; focus moves to the first input and back to Edit afterwards.
3406
+ */
3407
+ export declare function InlineEditRow<T extends object>({ row, fields, onSave, onCancel, rowLabel, defaultEditing }: InlineEditRowProps<T>): import("react").JSX.Element;
3408
+ export interface InlineEditTableProps<T extends object> {
3409
+ rows?: readonly T[];
3410
+ fields?: ReadonlyArray<InlineEditField<T>>;
3411
+ getRowId?: (row: T) => string;
3412
+ caption?: string;
3413
+ /** Called with the saved row; rows also update locally. */
3414
+ onRowSave?: (row: T) => void;
3415
+ className?: string;
3416
+ }
3417
+ /** Standalone demo of InlineEditRow: a small editable table that keeps its rows in state. */
3418
+ export declare function InlineEditTable<T extends object = EditableMember>({ rows: initialRows, fields, getRowId, caption, onRowSave, className }: InlineEditTableProps<T>): import("react").JSX.Element;
3419
+ //#endregion
3420
+ //#region src/tables/InlineEditRow/block.meta.d.ts
3421
+ declare const meta$34: BlockMeta;
3422
+ //#endregion
3423
+ //#region src/tables/SubordinateList/SubordinateList.d.ts
3424
+ export interface SubordinateListPagination {
3425
+ /** Positive server page size. */
3426
+ limit: number;
3427
+ /** Zero-based server offset. */
3428
+ offset: number;
3429
+ total: number;
3430
+ onPageChange: (offset: number) => void;
3431
+ }
3432
+ export interface SubordinateListError {
3433
+ title: string;
3434
+ message: string;
3435
+ /** null hides the error code chip. */
3436
+ code: string | number | null;
3437
+ }
3438
+ export interface SubordinateListProps<T> {
3439
+ title: string;
3440
+ headingLevel: 'h2' | 'h3';
3441
+ /** Server total, or the length of an unpaginated collection (including zero). */
3442
+ count: number;
3443
+ columns: ReadonlyArray<DataTableColumn<T>>;
3444
+ rows: readonly T[];
3445
+ getRowId: (row: T) => string;
3446
+ pagination: SubordinateListPagination | null;
3447
+ loading: boolean;
3448
+ error: SubordinateListError | null;
3449
+ onRetry: () => void | Promise<void>;
3450
+ /** Host-supplied EmptyStates composition. */
3451
+ emptyState: ReactNode;
3452
+ }
3453
+ /** Read-only list section with explicit host data and no demo defaults. */
3454
+ export declare function SubordinateList<T>({ title, headingLevel, count, columns, rows, getRowId, pagination, loading, error, onRetry, emptyState }: SubordinateListProps<T>): import("react").JSX.Element;
3455
+ //#endregion
3456
+ //#region src/tables/SubordinateList/block.meta.d.ts
3457
+ declare const meta$68: BlockMeta;
3458
+ //#endregion
3459
+ //#region src/team/MembersTable/fixtures.d.ts
3460
+ interface Member {
3461
+ id: string;
3462
+ name: string;
3463
+ email: string;
3464
+ avatarUrl?: string;
3465
+ role: string;
3466
+ /** ISO date of the last activity; null when the member never signed in. */
3467
+ lastActive: string | null;
3468
+ }
3469
+ declare const members$1: Member[];
3470
+ //#endregion
3471
+ //#region src/team/MembersTable/MembersTable.d.ts
3472
+ export interface MembersTableProps {
3473
+ members?: Member[];
3474
+ roles?: RoleOption[];
3475
+ /** Id of the signed-in member: shown with a "You" badge, and their role and removal are locked. */
3476
+ currentUserId?: string;
3477
+ onRoleChange?: (memberId: string, role: string) => void;
3478
+ onRemove?: (member: Member) => void;
3479
+ onEmail?: (member: Member) => void;
3480
+ /** Table caption (screen-reader only by default). */
3481
+ caption?: string;
3482
+ className?: string;
3483
+ }
3484
+ /** Workspace members: avatar, name and email, inline role select, last activity and a row menu. */
3485
+ export declare function MembersTable({ members, roles, currentUserId, onRoleChange, onRemove, onEmail, caption, className }: MembersTableProps): import("react").JSX.Element;
3486
+ //#endregion
3487
+ //#region src/team/MembersTable/block.meta.d.ts
3488
+ declare const meta$39: BlockMeta;
3489
+ //#endregion
3490
+ //#region src/team/NotificationMatrix/fixtures.d.ts
3491
+ interface NotificationChannel {
3492
+ id: string;
3493
+ label: string;
3494
+ }
3495
+ interface NotificationEvent {
3496
+ id: string;
3497
+ label: string;
3498
+ description?: string;
3499
+ /** Channels that are always on for this event (shown checked and disabled). */
3500
+ locked?: string[];
3501
+ }
3502
+ type NotificationMatrixValue = Record<string, string[]>;
3503
+ export declare const notificationChannels: NotificationChannel[];
3504
+ export declare const notificationEvents: NotificationEvent[];
3505
+ export declare const notificationDefaults: NotificationMatrixValue;
3506
+ //#endregion
3507
+ //#region src/team/NotificationMatrix/NotificationMatrix.d.ts
3508
+ export interface NotificationMatrixProps {
3509
+ channels?: NotificationChannel[];
3510
+ events?: NotificationEvent[];
3511
+ /** Event id → enabled channel ids (controlled). */
3512
+ value?: NotificationMatrixValue;
3513
+ defaultValue?: NotificationMatrixValue;
3514
+ onValueChange?: (value: NotificationMatrixValue) => void;
3515
+ caption?: string;
3516
+ className?: string;
3517
+ }
3518
+ /**
3519
+ * Event × channel grid of checkboxes. Column headers toggle a channel for every event, the last
3520
+ * column toggles every channel for one event; both show the mixed state. Locked cells stay on.
3521
+ */
3522
+ export declare function NotificationMatrix({ channels, events, value: valueProp, defaultValue, onValueChange, caption, className }: NotificationMatrixProps): import("react").JSX.Element;
3523
+ //#endregion
3524
+ //#region src/team/NotificationMatrix/block.meta.d.ts
3525
+ declare const meta$43: BlockMeta;
3526
+ //#endregion
3527
+ //#region src/team/PendingInvitations/fixtures.d.ts
3528
+ interface Invitation {
3529
+ id: string;
3530
+ email: string;
3531
+ role: string;
3532
+ invitedBy?: string;
3533
+ /** ISO date the invitation was sent. */
3534
+ invitedAt: string;
3535
+ /** ISO date it expires. */
3536
+ expiresAt?: string;
3537
+ }
3538
+ declare const invitations$1: Invitation[];
3539
+ //#endregion
3540
+ //#region src/team/PendingInvitations/PendingInvitations.d.ts
3541
+ export interface PendingInvitationsProps {
3542
+ invitations?: Invitation[];
3543
+ /** Resends one invitation. A returned promise shows a loading state. */
3544
+ onResend?: (invitation: Invitation) => void | Promise<void>;
3545
+ onRevoke?: (invitation: Invitation) => void;
3546
+ title?: ReactNode;
3547
+ headingLevel?: 'h2' | 'h3' | 'h4';
3548
+ className?: string;
3549
+ }
3550
+ /** Pending invitations with who sent them, expiry, and resend / revoke actions. */
3551
+ export declare function PendingInvitations({ invitations, onResend, onRevoke, title, headingLevel: Heading, className }: PendingInvitationsProps): import("react").JSX.Element;
3552
+ //#endregion
3553
+ //#region src/team/PendingInvitations/block.meta.d.ts
3554
+ declare const meta$48: BlockMeta;
3555
+ //#endregion
3556
+ //#region src/team/ProfileHeader/fixtures.d.ts
3557
+ interface ProfileMetaItem {
3558
+ icon?: LucideIcon;
3559
+ label: string;
3560
+ }
3561
+ interface Profile {
3562
+ name: string;
3563
+ /** Role or title shown as a badge. */
3564
+ role?: string;
3565
+ /** One-line headline under the name. */
3566
+ headline?: string;
3567
+ avatarUrl?: string;
3568
+ meta?: ProfileMetaItem[];
3569
+ }
3570
+ declare const profile$1: Profile;
3571
+ //#endregion
3572
+ //#region src/team/ProfileHeader/ProfileHeader.d.ts
3573
+ export interface ProfileHeaderProps {
3574
+ profile?: Profile;
3575
+ /** Called with the picked image; the avatar previews it right away. `null` hides the change action. */
3576
+ onAvatarChange?: ((file: File) => void) | null;
3577
+ /** Called by the Edit profile button. `null` hides it. */
3578
+ onEdit?: (() => void) | null;
3579
+ /** Extra actions next to Edit. */
3580
+ actions?: ReactNode;
3581
+ headingLevel?: 'h1' | 'h2';
3582
+ className?: string;
3583
+ }
3584
+ /** Profile header: large avatar with a change action, name, role, headline, meta row and edit button. */
3585
+ export declare function ProfileHeader({ profile, onAvatarChange, onEdit, actions, headingLevel: Heading, className }: ProfileHeaderProps): import("react").JSX.Element;
3586
+ //#endregion
3587
+ //#region src/team/ProfileHeader/block.meta.d.ts
3588
+ declare const meta$52: BlockMeta;
3589
+ //#endregion
3590
+ //#region src/team/SessionsDevices/fixtures.d.ts
3591
+ type DeviceKind = 'desktop' | 'mobile' | 'tablet';
3592
+ interface DeviceSession {
3593
+ id: string;
3594
+ /** Device name, e.g. "MacBook Pro". */
3595
+ device: string;
3596
+ /** Browser or client, e.g. "Chrome 128 on macOS". */
3597
+ client: string;
3598
+ kind: DeviceKind;
3599
+ location: string;
3600
+ ip?: string;
3601
+ /** ISO date of the last request. */
3602
+ lastSeen: string;
3603
+ /** The session making this request. */
3604
+ current?: boolean;
3605
+ }
3606
+ declare const deviceSessions: DeviceSession[];
3607
+ //#endregion
3608
+ //#region src/team/SessionsDevices/SessionsDevices.d.ts
3609
+ export interface SessionsDevicesProps {
3610
+ sessions?: DeviceSession[];
3611
+ onRevoke?: (session: DeviceSession) => void;
3612
+ /** Signs out every session except the current one. */
3613
+ onRevokeOthers?: (sessions: DeviceSession[]) => void;
3614
+ title?: ReactNode;
3615
+ description?: ReactNode;
3616
+ headingLevel?: 'h2' | 'h3' | 'h4';
3617
+ className?: string;
3618
+ }
3619
+ /** Signed-in sessions and devices: client, location, last seen, the current one marked, and revoke. */
3620
+ export declare function SessionsDevices({ sessions, onRevoke, onRevokeOthers, title, description, headingLevel: Heading, className }: SessionsDevicesProps): import("react").JSX.Element;
3621
+ //#endregion
3622
+ //#region src/team/SessionsDevices/block.meta.d.ts
3623
+ declare const meta$58: BlockMeta;
3624
+ //#endregion
3625
+ export { type ApiKeyExpiry, type ApiKeyScope, type Assistant, type AssistantStatus, type AuthFormAccessibilityProps, type AuthHeaderProps, type AuthIdentifierConfig, type AuthSignUpField, type AuthSignUpValidationMessages, type AuthUnavailableState, type AuthValidationMessages, type BlockMeta, type CodeFile, type CodePanelMarker, type CodeProblem, type ColumnResizeHandleProps, type ColumnVisibilityMenuProps, type ColumnWidths, type ConfirmDestructiveDialogProps, type ConsoleEntry, type CostPoint, type DangerZoneAction, type DataTableCellEdit, type DataTableCellEditHandler, type DataTableCellEditResult, type DataTableLabels, type DataTableProps, type DataTableView, type DataTableViewState, ViewSwitcher as DataTableViewSwitcher, type ViewSwitcherProps as DataTableViewSwitcherProps, type DensityToggleProps, type DeploymentRow, type DeviceKind, type DeviceSession, type EditableMember, type EvalMetric, type EvalRow, type EventKind, type EventTone, type FeedbackAction, type FlowConnection, type FlowConnectionRejection, type FlowEdge, type FlowHandle, type FlowNode, type FlowNodeData, type FlowNodeKind, type FlowNodeRenderProps, type FlowNodeRenderer, type FlowTone, type FlowValidationIssue, type Invitation, type LogLevel, type LogLine, type MarketingAction, type Member, type ModelKey, type ModelKeyStatus, type MonacoReady, type NodeInspectorProps, type NodePaletteProps, type NotificationChannel, type NotificationEvent, type NotificationMatrixValue, type PageChromeAction, type PaletteItem, type PanelHeading, type PinSide, type PinnedColumns, type PlanSummaryProps, type ProblemSeverity, type Profile, type ProfileMetaItem, type RoleOption, type RunConsoleProps, type ScheduleEvent, type SpanDetailsProps, type SpanKind, type SsoProvider, type SummaryPlan, type TokenUsagePeriod, type TraceSpan, type TrafficRow, type UploadItem, type UploadStatus, type ValidationIssue, meta$1 as activityFeedMeta, meta$2 as agendaListMeta, meta$3 as appSidebarMeta, meta$4 as appTopbarMeta, meta$5 as assistantCardGridMeta, meta$6 as bulkActionBarMeta, meta$7 as chartCardMeta, meta$8 as codePanelMeta, meta$9 as commentThreadMeta, meta$10 as comparisonTableMeta, meta$11 as confirmDestructiveMeta, meta$12 as costBreakdownMeta, meta$13 as createApiKeyDialogMeta, meta$14 as credentialDisclosureDialogMeta, meta$15 as dangerZoneMeta, meta$16 as dataTableMeta, meta$17 as dateRangeFilterMeta, meta$18 as descriptionListCardMeta, meta$19 as dialogWizardMeta, meta$20 as emptyStatesMeta, meta$21 as environmentBadgeMeta, meta$22 as errorPanelMeta, meta$23 as evaluationScorecardMeta, meta$24 as faqMeta, meta$25 as featureGridMeta, meta$26 as fileUploadPanelMeta, meta$27 as filterBarMeta, meta$28 as flowBuilderMeta, meta$29 as forgotPasswordFormMeta, meta$30 as formSectionMeta, meta$31 as globalSearchMeta, meta$32 as heroMeta, meta$33 as inlineCalloutMeta, meta$34 as inlineEditRowMeta, meta$35 as inviteMembersDialogMeta, meta$36 as invoiceTableMeta, meta$37 as kpiRowMeta, meta$38 as logViewerMeta, meta$39 as membersTableMeta, meta$40 as mfaChallengeMeta, meta$41 as modelKeysListMeta, meta$42 as monthCalendarMeta, meta$43 as notificationMatrixMeta, meta$44 as pageHeaderMeta, meta$45 as pageToolbarMeta, meta$46 as paginationFooterMeta, meta$47 as paymentMethodCardMeta, meta$48 as pendingInvitationsMeta, meta$49 as planCardMeta, meta$50 as planDefinitionCardMeta, meta$51 as pricingTableMeta, meta$52 as profileHeaderMeta, meta$53 as promptEditorMeta, meta$54 as quotaMetersMeta, meta$55 as resetPasswordFormMeta, meta$56 as resourceCardGridMeta, deviceSessions as sampleDeviceSessions, invitations$1 as sampleInvitations, members$1 as sampleMembers, profile$1 as sampleProfile, sampleEvents as sampleScheduleEvents, sampleToday as sampleScheduleToday, meta$57 as sectionHeaderMeta, meta$58 as sessionsDevicesMeta, meta$59 as settingsRowMeta, meta$60 as signInFormMeta, meta$61 as signUpFormMeta, meta$62 as skeletonsMeta, meta$63 as spendVsBudgetMeta, meta$64 as ssoButtonsMeta, meta$65 as statCardMeta, meta$66 as statusTimelineMeta, meta$67 as stickyActionBarMeta, meta$68 as subordinateListMeta, meta$69 as systemBannerMeta, meta$70 as timeSlotPickerMeta, meta$71 as tokenCostCardMeta, meta$72 as traceWaterfallMeta, meta$73 as truncatedCollectionFooterMeta, validationIssues$1 as validationIssues, meta$74 as validationSummaryMeta, meta$75 as weekCalendarMeta };
3626
+ //# sourceMappingURL=index.d.ts.map