@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,126 @@
1
+ import { Badge, Button, Timestamp, cn } from '@gntik-ai/ui';
2
+ import { LogOut, Monitor, Smartphone, Tablet, type LucideIcon } from '@gntik-ai/icons';
3
+ import { useId, useState, type ReactNode } from 'react';
4
+ import { deviceSessions, type DeviceKind, type DeviceSession } from './fixtures';
5
+
6
+ export type { DeviceKind, DeviceSession } from './fixtures';
7
+
8
+ const KIND_ICON: Record<DeviceKind, LucideIcon> = { desktop: Monitor, mobile: Smartphone, tablet: Tablet };
9
+
10
+ export interface SessionsDevicesProps {
11
+ sessions?: DeviceSession[];
12
+ onRevoke?: (session: DeviceSession) => void;
13
+ /** Signs out every session except the current one. */
14
+ onRevokeOthers?: (sessions: DeviceSession[]) => void;
15
+ title?: ReactNode;
16
+ description?: ReactNode;
17
+ headingLevel?: 'h2' | 'h3' | 'h4';
18
+ className?: string;
19
+ }
20
+
21
+ /** Signed-in sessions and devices: client, location, last seen, the current one marked, and revoke. */
22
+ export function SessionsDevices({
23
+ sessions = deviceSessions,
24
+ onRevoke,
25
+ onRevokeOthers,
26
+ title = 'Sessions and devices',
27
+ description = "Places where you're signed in. Revoke anything you don't recognise.",
28
+ headingLevel: Heading = 'h2',
29
+ className,
30
+ }: SessionsDevicesProps) {
31
+ const id = useId();
32
+ const [revoked, setRevoked] = useState<string[]>([]);
33
+ const [announcement, setAnnouncement] = useState('');
34
+ const rows = sessions.filter((s) => !revoked.includes(s.id));
35
+ const others = rows.filter((s) => !s.current);
36
+
37
+ const revoke = (list: DeviceSession[]) => {
38
+ setRevoked((r) => [...r, ...list.map((s) => s.id)]);
39
+ setAnnouncement(list.length === 1 ? `Signed out of ${list[0]?.device}.` : `Signed out of ${list.length} sessions.`);
40
+ };
41
+
42
+ return (
43
+ <section
44
+ aria-labelledby={`${id}-title`}
45
+ className={cn('rounded-lg border border-border bg-card shadow-sm', className)}
46
+ >
47
+ <div className="flex flex-col gap-3 border-b border-border px-5 py-4 sm:flex-row sm:items-start sm:justify-between">
48
+ <div className="min-w-0">
49
+ <Heading id={`${id}-title`} className="text-[14px] font-semibold tracking-tight text-foreground">
50
+ {title}
51
+ </Heading>
52
+ {description != null && <p className="mt-0.5 text-[12.5px] text-muted-foreground">{description}</p>}
53
+ </div>
54
+ <Button
55
+ variant="secondary"
56
+ size="sm"
57
+ icon={LogOut}
58
+ disabled={others.length === 0}
59
+ className="self-start"
60
+ onClick={() => {
61
+ revoke(others);
62
+ onRevokeOthers?.(others);
63
+ }}
64
+ >
65
+ Sign out other sessions
66
+ </Button>
67
+ </div>
68
+ <ul className="divide-y divide-border">
69
+ {rows.map((s) => {
70
+ const KindIcon = KIND_ICON[s.kind];
71
+ return (
72
+ <li key={s.id} className="flex items-center gap-3 px-5 py-3.5">
73
+ <span
74
+ className={cn(
75
+ 'grid size-9 shrink-0 place-items-center rounded-md',
76
+ s.current ? 'bg-primary/14 text-primary-chip-text' : 'bg-secondary text-muted-foreground',
77
+ )}
78
+ >
79
+ <KindIcon size={17} aria-hidden />
80
+ </span>
81
+ <div className="min-w-0 flex-1">
82
+ <div className="flex flex-wrap items-center gap-2">
83
+ <span className="text-[13px] font-medium text-foreground">{s.device}</span>
84
+ {s.current && (
85
+ <Badge size="sm" tone="success" dot>
86
+ This device
87
+ </Badge>
88
+ )}
89
+ </div>
90
+ <div className="mt-0.5 truncate text-[12px] text-muted-foreground">
91
+ {s.client} · {s.location}
92
+ {s.ip && <span className="hidden font-mono sm:inline"> · {s.ip}</span>}
93
+ </div>
94
+ <div className="text-[12px] text-muted-foreground">
95
+ {s.current ? (
96
+ 'Active now'
97
+ ) : (
98
+ <>
99
+ Last seen <Timestamp value={s.lastSeen} tooltip={false} />
100
+ </>
101
+ )}
102
+ </div>
103
+ </div>
104
+ {!s.current && (
105
+ <Button
106
+ variant="ghost"
107
+ size="sm"
108
+ aria-label={`Revoke session on ${s.device}`}
109
+ onClick={() => {
110
+ revoke([s]);
111
+ onRevoke?.(s);
112
+ }}
113
+ >
114
+ Revoke
115
+ </Button>
116
+ )}
117
+ </li>
118
+ );
119
+ })}
120
+ </ul>
121
+ <span role="status" className="sr-only">
122
+ {announcement}
123
+ </span>
124
+ </section>
125
+ );
126
+ }
@@ -0,0 +1,10 @@
1
+ import type { BlockMeta } from '../../meta';
2
+
3
+ export const meta: BlockMeta = {
4
+ name: 'Sessions and devices',
5
+ family: 'team',
6
+ status: 'stable',
7
+ description:
8
+ 'Signed-in sessions with device, client, location, last seen and a current-device badge; revoke one or all others.',
9
+ uses: ['Badge', 'Timestamp', 'Button'],
10
+ };
@@ -0,0 +1,58 @@
1
+ const ago = (minutes: number) => new Date(Date.now() - minutes * 60_000).toISOString();
2
+
3
+ export type DeviceKind = 'desktop' | 'mobile' | 'tablet';
4
+
5
+ export interface DeviceSession {
6
+ id: string;
7
+ /** Device name, e.g. "MacBook Pro". */
8
+ device: string;
9
+ /** Browser or client, e.g. "Chrome 128 on macOS". */
10
+ client: string;
11
+ kind: DeviceKind;
12
+ location: string;
13
+ ip?: string;
14
+ /** ISO date of the last request. */
15
+ lastSeen: string;
16
+ /** The session making this request. */
17
+ current?: boolean;
18
+ }
19
+
20
+ export const deviceSessions: DeviceSession[] = [
21
+ {
22
+ id: 's1',
23
+ device: 'MacBook Pro',
24
+ client: 'Chrome 128 on macOS',
25
+ kind: 'desktop',
26
+ location: 'Lisbon, Portugal',
27
+ ip: '192.0.2.14',
28
+ lastSeen: ago(0),
29
+ current: true,
30
+ },
31
+ {
32
+ id: 's2',
33
+ device: 'Pixel 8',
34
+ client: 'Mobile app 4.2',
35
+ kind: 'mobile',
36
+ location: 'Lisbon, Portugal',
37
+ ip: '198.51.100.7',
38
+ lastSeen: ago(42),
39
+ },
40
+ {
41
+ id: 's3',
42
+ device: 'iPad Air',
43
+ client: 'Safari 17 on iPadOS',
44
+ kind: 'tablet',
45
+ location: 'Madrid, Spain',
46
+ ip: '203.0.113.88',
47
+ lastSeen: ago(60 * 30),
48
+ },
49
+ {
50
+ id: 's4',
51
+ device: 'Workstation',
52
+ client: 'Firefox 130 on Linux',
53
+ kind: 'desktop',
54
+ location: 'Berlin, Germany',
55
+ ip: '203.0.113.5',
56
+ lastSeen: ago(60 * 24 * 12),
57
+ },
58
+ ];
@@ -0,0 +1,15 @@
1
+ export * from './MembersTable/MembersTable';
2
+ export { meta as membersTableMeta } from './MembersTable/block.meta';
3
+ export * from './NotificationMatrix/NotificationMatrix';
4
+ export { meta as notificationMatrixMeta } from './NotificationMatrix/block.meta';
5
+ export * from './PendingInvitations/PendingInvitations';
6
+ export { meta as pendingInvitationsMeta } from './PendingInvitations/block.meta';
7
+ export * from './ProfileHeader/ProfileHeader';
8
+ export { meta as profileHeaderMeta } from './ProfileHeader/block.meta';
9
+ export * from './SessionsDevices/SessionsDevices';
10
+ export { meta as sessionsDevicesMeta } from './SessionsDevices/block.meta';
11
+ export { members as sampleMembers } from './MembersTable/fixtures';
12
+ export { invitations as sampleInvitations } from './PendingInvitations/fixtures';
13
+ export { deviceSessions as sampleDeviceSessions } from './SessionsDevices/fixtures';
14
+ export { notificationChannels, notificationEvents, notificationDefaults } from './NotificationMatrix/fixtures';
15
+ export { profile as sampleProfile } from './ProfileHeader/fixtures';
@@ -0,0 +1,18 @@
1
+ import axe from 'axe-core';
2
+
3
+ /**
4
+ * Runs axe on a container and returns the violations. Colour contrast is checked in the
5
+ * browser suite (jsdom has no layout or computed colours), so it is disabled here.
6
+ */
7
+ export async function axeViolations(container: Element = document.body) {
8
+ const result = await axe.run(container, {
9
+ rules: { 'color-contrast': { enabled: false }, region: { enabled: false } },
10
+ });
11
+ return result.violations.map((v) => `${v.id}: ${v.help} (${v.nodes.map((n) => n.target.join(' ')).join(', ')})`);
12
+ }
13
+
14
+ /** Asserts that a container has no axe violations. */
15
+ export async function expectNoAxeViolations(container: Element = document.body) {
16
+ const violations = await axeViolations(container);
17
+ if (violations.length) throw new Error('axe violations:\n' + violations.join('\n'));
18
+ }
@@ -0,0 +1,69 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import type { ReactElement } from 'react';
3
+ import { AssistantCardGrid } from '../ai/AssistantCardGrid/AssistantCardGrid';
4
+ import { EvaluationScorecard } from '../ai/EvaluationScorecard/EvaluationScorecard';
5
+ import { ModelKeysList } from '../ai/ModelKeysList/ModelKeysList';
6
+ import { PromptEditor } from '../ai/PromptEditor/PromptEditor';
7
+ import { TokenCostCard } from '../ai/TokenCostCard/TokenCostCard';
8
+ import { TraceWaterfall } from '../ai/TraceWaterfall/TraceWaterfall';
9
+ import { CostBreakdown } from '../billing/CostBreakdown/CostBreakdown';
10
+ import { PaymentMethodCard } from '../billing/PaymentMethodCard/PaymentMethodCard';
11
+ import { PlanCard } from '../billing/PlanCard/PlanCard';
12
+ import { PlanDefinitionCard } from '../billing/PlanDefinitionCard/PlanDefinitionCard';
13
+ import { QuotaMeters } from '../billing/QuotaMeters/QuotaMeters';
14
+ import { SpendVsBudget } from '../billing/SpendVsBudget/SpendVsBudget';
15
+ import { LogViewer } from '../builders/LogViewer/LogViewer';
16
+ import { ActivityFeed } from '../data-display/ActivityFeed/ActivityFeed';
17
+ import { ChartCard } from '../data-display/ChartCard/ChartCard';
18
+ import { DescriptionListCard } from '../data-display/DescriptionListCard/DescriptionListCard';
19
+ import { ResourceCardGrid } from '../data-display/ResourceCardGrid/ResourceCardGrid';
20
+ import { StatCard } from '../data-display/StatCard/StatCard';
21
+ import { AgendaList } from '../scheduling/AgendaList/AgendaList';
22
+
23
+ /** Levels of every heading rendered, in document order. */
24
+ const levels = () => screen.queryAllByRole('heading').map((h) => Number(h.tagName.slice(1)));
25
+
26
+ const cases: Array<[string, (as: 'h2' | 'h4') => ReactElement]> = [
27
+ ['ChartCard', (as) => <ChartCard titleAs={as} />],
28
+ ['DescriptionListCard', (as) => <DescriptionListCard titleAs={as} />],
29
+ ['StatCard', (as) => <StatCard titleAs={as} />],
30
+ ['ResourceCardGrid', (as) => <ResourceCardGrid titleAs={as} />],
31
+ ['PlanCard', (as) => <PlanCard titleAs={as} />],
32
+ ['PlanCard summary', (as) => <PlanCard variant="summary" plan={{ name: 'Fixture Plan' }} titleAs={as} />],
33
+ ['PlanDefinitionCard', (as) => <PlanDefinitionCard titleAs={as} />],
34
+ ['QuotaMeters', (as) => <QuotaMeters titleAs={as} />],
35
+ ['CostBreakdown', (as) => <CostBreakdown titleAs={as} />],
36
+ ['SpendVsBudget', (as) => <SpendVsBudget titleAs={as} />],
37
+ ['PaymentMethodCard', (as) => <PaymentMethodCard titleAs={as} />],
38
+ ['TokenCostCard', (as) => <TokenCostCard titleAs={as} />],
39
+ ['ModelKeysList', (as) => <ModelKeysList titleAs={as} />],
40
+ ['EvaluationScorecard', (as) => <EvaluationScorecard titleAs={as} />],
41
+ ['LogViewer', (as) => <LogViewer titleAs={as} />],
42
+ ['TraceWaterfall', (as) => <TraceWaterfall titleAs={as} />],
43
+ ['PromptEditor', (as) => <PromptEditor titleAs={as} />],
44
+ ['AgendaList', (as) => <AgendaList titleAs={as} />],
45
+ ['ActivityFeed', (as) => <ActivityFeed groupHeadingAs={as} />],
46
+ ];
47
+
48
+ describe('heading levels (titleAs)', () => {
49
+ it.each(cases)('%s renders its title at the requested level', (_name, make) => {
50
+ const { unmount } = render(make('h2'));
51
+ const atTwo = levels();
52
+ expect(atTwo[0]).toBe(2);
53
+ expect(Math.max(...atTwo)).toBeLessThanOrEqual(3); // inner headings follow the title
54
+ unmount();
55
+ render(make('h4'));
56
+ expect(levels()[0]).toBe(4);
57
+ });
58
+
59
+ it('AssistantCardGrid shifts its card names with the section title', () => {
60
+ render(<AssistantCardGrid titleAs="h3" />);
61
+ expect(levels()[0]).toBe(3);
62
+ expect(new Set(levels().slice(1))).toEqual(new Set([4]));
63
+ });
64
+
65
+ it('keeps h3 as the default', () => {
66
+ render(<ChartCard />);
67
+ expect(levels()[0]).toBe(3);
68
+ });
69
+ });
@@ -0,0 +1,36 @@
1
+ import '@testing-library/jest-dom/vitest';
2
+ import { cleanup } from '@testing-library/react';
3
+ import { afterEach } from 'vitest';
4
+
5
+ afterEach(() => {
6
+ cleanup();
7
+ document.documentElement.className = '';
8
+ try {
9
+ localStorage.clear();
10
+ } catch {}
11
+ });
12
+
13
+ // jsdom gaps that Base UI touches (positioning, animations, media queries).
14
+ if (!window.matchMedia) {
15
+ window.matchMedia = (query: string) =>
16
+ ({
17
+ matches: false,
18
+ media: query,
19
+ onchange: null,
20
+ addListener: () => {},
21
+ removeListener: () => {},
22
+ addEventListener: () => {},
23
+ removeEventListener: () => {},
24
+ dispatchEvent: () => false,
25
+ }) as MediaQueryList;
26
+ }
27
+ if (!('ResizeObserver' in window)) {
28
+ (window as unknown as { ResizeObserver: unknown }).ResizeObserver = class {
29
+ observe() {}
30
+ unobserve() {}
31
+ disconnect() {}
32
+ };
33
+ }
34
+ if (!Element.prototype.getAnimations) {
35
+ Element.prototype.getAnimations = () => [];
36
+ }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.