@ghxstship/xos-ui 0.0.0-stage → 4.16.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 (487) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +32 -2
  3. package/package.json +76 -4
  4. package/scripts/generate-stories.mjs +85 -0
  5. package/src/AIDisclosureBadge/README.md +7 -0
  6. package/src/AccessGridMatrix/README.md +3 -0
  7. package/src/Accordion/README.md +7 -0
  8. package/src/ActivityFeedItem/README.md +3 -0
  9. package/src/AgencySlate/README.md +3 -0
  10. package/src/AppShell/README.md +5 -0
  11. package/src/ApplicationForm/README.md +3 -0
  12. package/src/AssertionRankBadge/README.md +5 -0
  13. package/src/AvailabilityCalendar/README.md +3 -0
  14. package/src/Avatar/Avatar.tsx +56 -0
  15. package/src/Avatar/README.md +3 -0
  16. package/src/Avatar/avatar-class.ts +19 -0
  17. package/src/AvatarStack/README.md +3 -0
  18. package/src/Badge/README.md +3 -0
  19. package/src/Banner/README.md +3 -0
  20. package/src/BidSheet/README.md +3 -0
  21. package/src/Board/README.md +6 -0
  22. package/src/BrandMark/BrandMark.tsx +95 -0
  23. package/src/BrandMark/README.md +7 -0
  24. package/src/BrandSlot/README.md +6 -0
  25. package/src/Breadcrumbs/README.md +3 -0
  26. package/src/BudgetGrid/README.md +10 -0
  27. package/src/BulkActionBar/README.md +3 -0
  28. package/src/Button/Button.tsx +100 -0
  29. package/src/Button/README.md +10 -0
  30. package/src/Button/button-class.ts +54 -0
  31. package/src/ButtonLink/README.md +7 -0
  32. package/src/Calendar/README.md +3 -0
  33. package/src/Card/README.md +3 -0
  34. package/src/Chart/README.md +9 -0
  35. package/src/Charts/Calendar.tsx +228 -0
  36. package/src/Charts/Chart.tsx +547 -0
  37. package/src/Charts/Charts.tsx +20 -0
  38. package/src/Charts/Charts.types.ts +40 -0
  39. package/src/Charts/Gallery.tsx +25 -0
  40. package/src/Charts/Heatmap.tsx +116 -0
  41. package/src/Charts/OrgChart.tsx +53 -0
  42. package/src/Charts/ResourceSchedule.tsx +91 -0
  43. package/src/Charts/Sparkline.tsx +59 -0
  44. package/src/Charts/Timeline.tsx +777 -0
  45. package/src/Charts/categories.ts +21 -0
  46. package/src/Charts/timeline-plan.ts +191 -0
  47. package/src/Checkbox/README.md +6 -0
  48. package/src/ChecklistRunner/README.md +3 -0
  49. package/src/Chips/Badge.tsx +27 -0
  50. package/src/Chips/Chips.shared.tsx +34 -0
  51. package/src/Chips/Chips.tsx +21 -0
  52. package/src/Chips/Chips.types.ts +35 -0
  53. package/src/Chips/DepartmentChip.tsx +16 -0
  54. package/src/Chips/PhaseChip.tsx +16 -0
  55. package/src/Chips/PropertyChip.tsx +15 -0
  56. package/src/Chips/RecordKindChip.tsx +14 -0
  57. package/src/Chips/StateChip.tsx +19 -0
  58. package/src/Chips/Tag.tsx +47 -0
  59. package/src/Chips/URIDChip.tsx +14 -0
  60. package/src/Chips/chipClass.tsx +8 -0
  61. package/src/Chips/codeClass.tsx +6 -0
  62. package/src/ClockButton/README.md +6 -0
  63. package/src/CodeSample/README.md +7 -0
  64. package/src/ColorPicker/README.md +5 -0
  65. package/src/Combobox/README.md +7 -0
  66. package/src/CommandMenu/CommandMenu.tsx +179 -0
  67. package/src/CommandMenu/README.md +5 -0
  68. package/src/ComparisonTable/README.md +9 -0
  69. package/src/Compass/ChecklistRunner.tsx +128 -0
  70. package/src/Compass/ClockButton.tsx +57 -0
  71. package/src/Compass/Compass.shared.tsx +58 -0
  72. package/src/Compass/Compass.tsx +26 -0
  73. package/src/Compass/Compass.types.ts +79 -0
  74. package/src/Compass/DaySheetView.tsx +104 -0
  75. package/src/Compass/ForceUpdateScreen.tsx +29 -0
  76. package/src/Compass/LiveActivity.tsx +60 -0
  77. package/src/Compass/OfflineBanner.tsx +31 -0
  78. package/src/Compass/PhotoCapture.tsx +69 -0
  79. package/src/Compass/QuickIncidentSheet.tsx +46 -0
  80. package/src/Compass/ScanSheet.tsx +83 -0
  81. package/src/Compass/ShiftCard.tsx +55 -0
  82. package/src/Compass/SignaturePad.tsx +71 -0
  83. package/src/Compass/SyncConflictSheet.tsx +60 -0
  84. package/src/ConsentBanner/ConsentBanner.tsx +210 -0
  85. package/src/ConsentBanner/ConsentBannerStatic.tsx +163 -0
  86. package/src/ConsentBanner/ConsentSettings.tsx +213 -0
  87. package/src/ConsentBanner/README.md +101 -0
  88. package/src/ConsentBanner/consent.ts +238 -0
  89. package/src/ConsentBanner/index.ts +40 -0
  90. package/src/ConsentBanner/static.ts +11 -0
  91. package/src/ConsentBanner/useConsent.ts +160 -0
  92. package/src/ContextMenu/README.md +3 -0
  93. package/src/CoordinateMatrix/README.md +6 -0
  94. package/src/CredentialBadge/README.md +7 -0
  95. package/src/CurrencyInput/README.md +7 -0
  96. package/src/DataTable/DataTable.tsx +1034 -0
  97. package/src/DataTable/DataTableResizer.tsx +72 -0
  98. package/src/DataTable/DataTableVirtualizer.tsx +58 -0
  99. package/src/DataTable/README.md +9 -0
  100. package/src/DatePicker/README.md +5 -0
  101. package/src/DateRangePicker/README.md +3 -0
  102. package/src/DaySheetView/README.md +3 -0
  103. package/src/DepartmentChip/README.md +3 -0
  104. package/src/DepartmentGlyph/README.md +18 -0
  105. package/src/Dialog/README.md +3 -0
  106. package/src/DiffViewer/README.md +3 -0
  107. package/src/Divider/README.md +3 -0
  108. package/src/Drawer/README.md +3 -0
  109. package/src/DropdownMenu/README.md +3 -0
  110. package/src/EPKViewer/README.md +3 -0
  111. package/src/Editing/ColorPicker.tsx +125 -0
  112. package/src/Editing/DiffViewer.tsx +49 -0
  113. package/src/Editing/Editing.tsx +29 -0
  114. package/src/Editing/Editing.types.ts +71 -0
  115. package/src/Editing/FilterBuilder.tsx +72 -0
  116. package/src/Editing/QuickAdd.tsx +102 -0
  117. package/src/Editing/QuickAddChips.tsx +180 -0
  118. package/src/Editing/contrastRatio.tsx +11 -0
  119. package/src/Editing/parseQuickAdd.tsx +187 -0
  120. package/src/Editing/quickAddCore.ts +204 -0
  121. package/src/Editing/timeShorthand.ts +157 -0
  122. package/src/Editing/useQuickAdd.ts +201 -0
  123. package/src/EmergencyCodeCard/README.md +10 -0
  124. package/src/EmptyState/README.md +5 -0
  125. package/src/EngagementTimeline/README.md +3 -0
  126. package/src/ErrorState/README.md +3 -0
  127. package/src/FAQ/README.md +7 -0
  128. package/src/FeatureGrid/README.md +7 -0
  129. package/src/Feedback/Banner.tsx +40 -0
  130. package/src/Feedback/EmptyState.tsx +32 -0
  131. package/src/Feedback/ErrorState.tsx +32 -0
  132. package/src/Feedback/Feedback.shared.tsx +38 -0
  133. package/src/Feedback/Feedback.tsx +18 -0
  134. package/src/Feedback/Feedback.types.ts +40 -0
  135. package/src/Feedback/InlineAlert.tsx +19 -0
  136. package/src/Feedback/RefusalNotice.tsx +46 -0
  137. package/src/Feedback/RegionBoundary.tsx +102 -0
  138. package/src/Feedback/Toast.tsx +31 -0
  139. package/src/Feedback/ToastRegion.tsx +26 -0
  140. package/src/Feedback/UndoToast.tsx +97 -0
  141. package/src/FeedbackWidget/README.md +3 -0
  142. package/src/Field/Field.tsx +81 -0
  143. package/src/FileDrop/README.md +3 -0
  144. package/src/FilePreviewer/README.md +3 -0
  145. package/src/FilterBuilder/README.md +3 -0
  146. package/src/ForceUpdateScreen/README.md +3 -0
  147. package/src/Forms/Checkbox.tsx +14 -0
  148. package/src/Forms/CurrencyInput.tsx +40 -0
  149. package/src/Forms/Forms.shared.tsx +5 -0
  150. package/src/Forms/Forms.tsx +20 -0
  151. package/src/Forms/Forms.types.ts +33 -0
  152. package/src/Forms/Input.tsx +28 -0
  153. package/src/Forms/Money.tsx +15 -0
  154. package/src/Forms/NumberInput.tsx +85 -0
  155. package/src/Forms/Radio.tsx +31 -0
  156. package/src/Forms/Select.tsx +54 -0
  157. package/src/Forms/Switch.tsx +14 -0
  158. package/src/Forms/Textarea.tsx +30 -0
  159. package/src/Gallery/README.md +5 -0
  160. package/src/GateLifecycleRail/README.md +7 -0
  161. package/src/GateReadinessPanel/README.md +8 -0
  162. package/src/Gateway/AgencySlate.tsx +76 -0
  163. package/src/Gateway/ApplicationForm.tsx +48 -0
  164. package/src/Gateway/AvailabilityCalendar.tsx +82 -0
  165. package/src/Gateway/EPKViewer.tsx +77 -0
  166. package/src/Gateway/EngagementTimeline.tsx +43 -0
  167. package/src/Gateway/Gateway.shared.tsx +5 -0
  168. package/src/Gateway/Gateway.tsx +30 -0
  169. package/src/Gateway/Gateway.types.ts +69 -0
  170. package/src/Gateway/OnboardingPacket.tsx +61 -0
  171. package/src/Gateway/OpportunityCard.tsx +73 -0
  172. package/src/Gateway/OpportunityFilters.tsx +64 -0
  173. package/src/Gateway/PaymentTracker.tsx +71 -0
  174. package/src/Gateway/PayoutDetailsForm.tsx +62 -0
  175. package/src/Gateway/ProfileEditor.tsx +45 -0
  176. package/src/Gateway/ProgressBar.tsx +30 -0
  177. package/src/Gateway/RatingDialog.tsx +83 -0
  178. package/src/Gateway/UpNextCard.tsx +76 -0
  179. package/src/Glyphs/Glyphs.tsx +66 -0
  180. package/src/Grids/BidSheet.tsx +63 -0
  181. package/src/Grids/BudgetGrid.tsx +164 -0
  182. package/src/Grids/Grids.shared.tsx +5 -0
  183. package/src/Grids/Grids.tsx +11 -0
  184. package/src/Grids/Grids.types.ts +38 -0
  185. package/src/Grids/SpreadsheetGrid.tsx +445 -0
  186. package/src/Grids/columnTotal.tsx +14 -0
  187. package/src/Grids/glForCode.tsx +11 -0
  188. package/src/Grids/parseCell.tsx +16 -0
  189. package/src/Help/FeedbackWidget.tsx +89 -0
  190. package/src/Help/Help.tsx +14 -0
  191. package/src/Help/Help.types.ts +51 -0
  192. package/src/Help/HelpPanel.tsx +116 -0
  193. package/src/Help/NotificationCenter.tsx +100 -0
  194. package/src/Help/OnboardingChecklist.tsx +57 -0
  195. package/src/Help/ShortcutEditor.tsx +81 -0
  196. package/src/Help/WhatsNew.tsx +33 -0
  197. package/src/HelpPanel/README.md +5 -0
  198. package/src/HoverCard/README.md +3 -0
  199. package/src/Icon/Icon.tsx +47 -0
  200. package/src/Icon/README.md +9 -0
  201. package/src/IconButton/README.md +6 -0
  202. package/src/Identity/BrandSlot.tsx +20 -0
  203. package/src/Identity/BrandSlotFrame.tsx +38 -0
  204. package/src/Identity/CredentialBadge.tsx +92 -0
  205. package/src/Identity/Identity.tsx +14 -0
  206. package/src/Identity/Identity.types.ts +25 -0
  207. package/src/Identity/PresenceIndicator.tsx +37 -0
  208. package/src/Identity/QRCode.tsx +22 -0
  209. package/src/Identity/WhiteLabelPreview.tsx +33 -0
  210. package/src/Identity/qrPath.tsx +16 -0
  211. package/src/Identity/tokenVariable.tsx +9 -0
  212. package/src/InlineAlert/README.md +3 -0
  213. package/src/Input/README.md +8 -0
  214. package/src/Kbd/Kbd.tsx +30 -0
  215. package/src/Kbd/README.md +6 -0
  216. package/src/Layout/AppShell.tsx +151 -0
  217. package/src/Layout/Layout.tsx +14 -0
  218. package/src/Layout/Layout.types.ts +43 -0
  219. package/src/Layout/PageHeader.tsx +22 -0
  220. package/src/Layout/ResizablePanel.tsx +81 -0
  221. package/src/Layout/ScrollRegion.tsx +107 -0
  222. package/src/Layout/SplitView.tsx +78 -0
  223. package/src/Layout/Stepper.tsx +39 -0
  224. package/src/LegalText/LegalText.tsx +289 -0
  225. package/src/LegalText/README.md +10 -0
  226. package/src/LegalText/index.ts +29 -0
  227. package/src/LegalText/legal-markdown.ts +581 -0
  228. package/src/Link/Link.tsx +25 -0
  229. package/src/Link/README.md +5 -0
  230. package/src/Link/link-class.ts +10 -0
  231. package/src/LiveActivity/README.md +3 -0
  232. package/src/LogoSlotWall/README.md +7 -0
  233. package/src/MapView/README.md +5 -0
  234. package/src/Marketing/AIDisclosureBadge.tsx +31 -0
  235. package/src/Marketing/ButtonLink.tsx +32 -0
  236. package/src/Marketing/CodeSample.tsx +47 -0
  237. package/src/Marketing/ComparisonScroll.tsx +7 -0
  238. package/src/Marketing/ComparisonTable.tsx +104 -0
  239. package/src/Marketing/FAQ.tsx +26 -0
  240. package/src/Marketing/FeatureGrid.tsx +65 -0
  241. package/src/Marketing/GateLifecycleRail.tsx +52 -0
  242. package/src/Marketing/LogoSlotWall.tsx +53 -0
  243. package/src/Marketing/Marketing.tsx +49 -0
  244. package/src/Marketing/Marketing.types.ts +64 -0
  245. package/src/Marketing/MarketingFooter.tsx +88 -0
  246. package/src/Marketing/MarketingHero.tsx +45 -0
  247. package/src/Marketing/MarketingNav.tsx +76 -0
  248. package/src/Marketing/MarketingPoints.tsx +16 -0
  249. package/src/Marketing/MarketingSection.tsx +52 -0
  250. package/src/Marketing/PersonaSwitcher.tsx +137 -0
  251. package/src/Marketing/PriceDisplay.tsx +56 -0
  252. package/src/Marketing/PricingTable.tsx +122 -0
  253. package/src/Marketing/ProofStatStrip.tsx +35 -0
  254. package/src/Marketing/ScreenshotFrame.tsx +56 -0
  255. package/src/Marketing/SurfaceTriptych.tsx +43 -0
  256. package/src/Marketing/Testimonial.tsx +45 -0
  257. package/src/Marketing/marketing-copy.ts +25 -0
  258. package/src/Marketing/provided.tsx +36 -0
  259. package/src/MarketingFooter/README.md +7 -0
  260. package/src/MarketingHero/README.md +7 -0
  261. package/src/MarketingNav/README.md +7 -0
  262. package/src/MarketingSection/README.md +7 -0
  263. package/src/Media/FilePreviewer.tsx +86 -0
  264. package/src/Media/MapView.tsx +200 -0
  265. package/src/Media/Media.tsx +11 -0
  266. package/src/Media/Media.types.ts +47 -0
  267. package/src/Media/RichTextEditor.tsx +198 -0
  268. package/src/Media/toLngLat.tsx +13 -0
  269. package/src/Menus/ContextMenu.tsx +106 -0
  270. package/src/Menus/DropdownMenu.tsx +51 -0
  271. package/src/Menus/Menus.shared.tsx +67 -0
  272. package/src/Menus/Menus.tsx +13 -0
  273. package/src/Menus/Menus.types.ts +49 -0
  274. package/src/Menus/OrgSwitcher.tsx +69 -0
  275. package/src/Menus/compactTriggerClass.tsx +7 -0
  276. package/src/Menus/menuClass.tsx +4 -0
  277. package/src/Menus/menuItemClass.tsx +7 -0
  278. package/src/Menus/orgSwitcherTriggerClass.tsx +7 -0
  279. package/src/Money/README.md +6 -0
  280. package/src/MultiSelect/README.md +3 -0
  281. package/src/Navigation/Accordion.tsx +59 -0
  282. package/src/Navigation/Breadcrumbs.tsx +59 -0
  283. package/src/Navigation/MoreFields.tsx +42 -0
  284. package/src/Navigation/Navigation.shared.tsx +32 -0
  285. package/src/Navigation/Navigation.tsx +21 -0
  286. package/src/Navigation/Navigation.types.ts +63 -0
  287. package/src/Navigation/Pagination.tsx +30 -0
  288. package/src/Navigation/SegmentedControl.tsx +87 -0
  289. package/src/Navigation/Sidebar.tsx +106 -0
  290. package/src/Navigation/TabBar.tsx +61 -0
  291. package/src/Navigation/Tabs.tsx +79 -0
  292. package/src/Navigation/TopNav.tsx +86 -0
  293. package/src/Navigation/sidebar-classes.ts +18 -0
  294. package/src/NotificationCenter/README.md +3 -0
  295. package/src/NumberInput/README.md +3 -0
  296. package/src/OfflineBanner/README.md +3 -0
  297. package/src/OnboardingChecklist/README.md +3 -0
  298. package/src/OnboardingPacket/README.md +3 -0
  299. package/src/OpportunityCard/README.md +5 -0
  300. package/src/OpportunityFilters/README.md +3 -0
  301. package/src/OrgChart/README.md +5 -0
  302. package/src/OrgSwitcher/README.md +3 -0
  303. package/src/Overlays/Dialog.tsx +54 -0
  304. package/src/Overlays/Drawer.tsx +62 -0
  305. package/src/Overlays/HoverCard.tsx +59 -0
  306. package/src/Overlays/Overlays.shared.tsx +12 -0
  307. package/src/Overlays/Overlays.tsx +20 -0
  308. package/src/Overlays/Overlays.types.ts +66 -0
  309. package/src/Overlays/Popover.tsx +70 -0
  310. package/src/Overlays/PropertyList.tsx +19 -0
  311. package/src/Overlays/ShortcutSheet.tsx +62 -0
  312. package/src/Overlays/SidePeek.tsx +117 -0
  313. package/src/Overlays/Tooltip.tsx +73 -0
  314. package/src/Overlays/panelClass.tsx +6 -0
  315. package/src/Overlays/popoverPanelClass.tsx +6 -0
  316. package/src/PageHeader/README.md +3 -0
  317. package/src/Pagination/README.md +3 -0
  318. package/src/PaymentTracker/README.md +3 -0
  319. package/src/PayoutDetailsForm/README.md +3 -0
  320. package/src/PersonaSwitcher/README.md +7 -0
  321. package/src/PhaseChip/README.md +5 -0
  322. package/src/PhaseGlyph/README.md +17 -0
  323. package/src/PhotoCapture/README.md +3 -0
  324. package/src/Pickers/Combobox.tsx +91 -0
  325. package/src/Pickers/DatePicker.tsx +60 -0
  326. package/src/Pickers/DateRangePicker.tsx +78 -0
  327. package/src/Pickers/FileDrop.tsx +84 -0
  328. package/src/Pickers/MultiSelect.tsx +118 -0
  329. package/src/Pickers/Pickers.shared.tsx +337 -0
  330. package/src/Pickers/Pickers.tsx +17 -0
  331. package/src/Pickers/Pickers.types.ts +47 -0
  332. package/src/Pickers/Slider.tsx +59 -0
  333. package/src/Pickers/TimePicker.tsx +68 -0
  334. package/src/Pickers/rankOptions.tsx +12 -0
  335. package/src/Popover/README.md +3 -0
  336. package/src/PresenceIndicator/README.md +3 -0
  337. package/src/PriceDisplay/README.md +7 -0
  338. package/src/PricingTable/README.md +9 -0
  339. package/src/ProfileEditor/README.md +3 -0
  340. package/src/ProgressBar/README.md +3 -0
  341. package/src/ProofStatStrip/README.md +7 -0
  342. package/src/PropertyChip/README.md +3 -0
  343. package/src/ProvenanceBadge/README.md +3 -0
  344. package/src/QRCode/README.md +6 -0
  345. package/src/QuickAdd/README.md +5 -0
  346. package/src/QuickIncidentSheet/README.md +3 -0
  347. package/src/Radio/README.md +3 -0
  348. package/src/RadioChannelTable/README.md +7 -0
  349. package/src/RatingDialog/README.md +3 -0
  350. package/src/ReconciliationTable/README.md +3 -0
  351. package/src/RecordKindChip/README.md +3 -0
  352. package/src/RecordKindGlyph/README.md +34 -0
  353. package/src/RecordRow/README.md +7 -0
  354. package/src/RefusalNotice/README.md +5 -0
  355. package/src/ResizablePanel/README.md +3 -0
  356. package/src/ResourceSchedule/README.md +6 -0
  357. package/src/RichTextEditor/README.md +3 -0
  358. package/src/RichTextEditor/extensions.ts +217 -0
  359. package/src/RunOfShowLive/README.md +5 -0
  360. package/src/ScanSheet/README.md +3 -0
  361. package/src/ScreenshotFrame/README.md +7 -0
  362. package/src/ScrollRegion/README.md +9 -0
  363. package/src/SegmentedControl/README.md +5 -0
  364. package/src/Select/README.md +5 -0
  365. package/src/ShiftCard/README.md +3 -0
  366. package/src/ShortcutEditor/README.md +3 -0
  367. package/src/ShortcutSheet/README.md +3 -0
  368. package/src/SidePeek/README.md +6 -0
  369. package/src/Sidebar/README.md +5 -0
  370. package/src/SignaturePad/README.md +3 -0
  371. package/src/Skeleton/README.md +3 -0
  372. package/src/Slider/README.md +3 -0
  373. package/src/SplitView/README.md +3 -0
  374. package/src/SpreadsheetGrid/README.md +9 -0
  375. package/src/StalenessIndicator/README.md +3 -0
  376. package/src/StatTile/README.md +6 -0
  377. package/src/StateChip/README.md +6 -0
  378. package/src/StateIcon/README.md +6 -0
  379. package/src/StateIcon/StateIcon.tsx +127 -0
  380. package/src/StatusHeatmap/README.md +15 -0
  381. package/src/Stepper/README.md +3 -0
  382. package/src/Surface/Skeleton.tsx +21 -0
  383. package/src/Surface/Surface.tsx +63 -0
  384. package/src/SurfaceTriptych/README.md +7 -0
  385. package/src/Switch/README.md +5 -0
  386. package/src/SyncConflictSheet/README.md +3 -0
  387. package/src/TabBar/README.md +7 -0
  388. package/src/Tabs/README.md +6 -0
  389. package/src/Tag/README.md +3 -0
  390. package/src/TemplateAuth/README.md +6 -0
  391. package/src/TemplateCollection/README.md +6 -0
  392. package/src/TemplateDashboard/README.md +8 -0
  393. package/src/TemplateDocument/README.md +5 -0
  394. package/src/TemplateGatewayShell/README.md +5 -0
  395. package/src/TemplateGridEditor/README.md +3 -0
  396. package/src/TemplateRecord/README.md +3 -0
  397. package/src/TemplateSettings/README.md +5 -0
  398. package/src/TemplateSplitView/README.md +3 -0
  399. package/src/TemplateSystem/README.md +5 -0
  400. package/src/TemplateWizard/README.md +3 -0
  401. package/src/Templates/TemplateAuth.tsx +16 -0
  402. package/src/Templates/TemplateCollection.tsx +35 -0
  403. package/src/Templates/TemplateDashboard.tsx +200 -0
  404. package/src/Templates/TemplateDocument.tsx +24 -0
  405. package/src/Templates/TemplateGatewayShell.tsx +36 -0
  406. package/src/Templates/TemplateGridEditor.tsx +17 -0
  407. package/src/Templates/TemplateRecord.tsx +31 -0
  408. package/src/Templates/TemplateSettings.tsx +26 -0
  409. package/src/Templates/TemplateSplitView.tsx +27 -0
  410. package/src/Templates/TemplateSystem.tsx +19 -0
  411. package/src/Templates/TemplateSystemLink.tsx +55 -0
  412. package/src/Templates/TemplateWizard.tsx +43 -0
  413. package/src/Templates/Templates.tsx +29 -0
  414. package/src/Templates/Templates.types.ts +153 -0
  415. package/src/Testimonial/README.md +7 -0
  416. package/src/Textarea/README.md +3 -0
  417. package/src/TimePicker/README.md +5 -0
  418. package/src/Timeline/README.md +6 -0
  419. package/src/Toast/README.md +3 -0
  420. package/src/Tooltip/README.md +3 -0
  421. package/src/TopNav/README.md +5 -0
  422. package/src/TreeView/README.md +3 -0
  423. package/src/URIDChip/README.md +5 -0
  424. package/src/UndoToast/README.md +3 -0
  425. package/src/UpNextCard/README.md +6 -0
  426. package/src/Views/ActivityFeedItem.tsx +52 -0
  427. package/src/Views/Board.tsx +229 -0
  428. package/src/Views/BulkActionBar.tsx +76 -0
  429. package/src/Views/RecordList.tsx +146 -0
  430. package/src/Views/RecordRow.tsx +132 -0
  431. package/src/Views/StatTile.tsx +88 -0
  432. package/src/Views/TreeView.tsx +161 -0
  433. package/src/Views/Views.tsx +18 -0
  434. package/src/Views/Views.types.ts +99 -0
  435. package/src/WhatsNew/README.md +3 -0
  436. package/src/WhiteLabelPreview/README.md +8 -0
  437. package/src/XOS/AccessGridMatrix.tsx +111 -0
  438. package/src/XOS/AssertionRankBadge.tsx +27 -0
  439. package/src/XOS/CoordinateMatrix.tsx +123 -0
  440. package/src/XOS/EmergencyCodeCard.tsx +109 -0
  441. package/src/XOS/GateReadinessPanel.tsx +100 -0
  442. package/src/XOS/ProvenanceBadge.tsx +19 -0
  443. package/src/XOS/RadioChannelTable.tsx +50 -0
  444. package/src/XOS/ReconciliationTable.tsx +64 -0
  445. package/src/XOS/RunOfShowLive.tsx +97 -0
  446. package/src/XOS/StalenessIndicator.tsx +31 -0
  447. package/src/XOS/StatusHeatmap.tsx +200 -0
  448. package/src/XOS/XOS.shared.tsx +90 -0
  449. package/src/XOS/XOS.tsx +29 -0
  450. package/src/XOS/XOS.types.ts +99 -0
  451. package/src/XOS/resolveStep.tsx +16 -0
  452. package/src/brand/defaults/README.md +13 -0
  453. package/src/brand/defaults/app-icon.svg +6 -0
  454. package/src/brand/defaults/favicon.svg +6 -0
  455. package/src/brand/defaults/logo-dark.svg +6 -0
  456. package/src/brand/defaults/logo-light.svg +6 -0
  457. package/src/brand/defaults/splash.svg +6 -0
  458. package/src/index.ts +606 -0
  459. package/src/lib/context.tsx +156 -0
  460. package/src/lib/cx.ts +4 -0
  461. package/src/lib/format.ts +200 -0
  462. package/src/lib/hooks.ts +187 -0
  463. package/src/lib/i18n.ts +97 -0
  464. package/src/lib/icons.ts +45 -0
  465. package/src/lib/live.ts +92 -0
  466. package/src/lib/preferences.ts +242 -0
  467. package/src/lib/route-transition.tsx +22 -0
  468. package/src/lib/selection.ts +92 -0
  469. package/src/lib/shortcut-targets.ts +125 -0
  470. package/src/lib/theme.ts +50 -0
  471. package/src/lib/undo-stack.ts +125 -0
  472. package/src/marketing.ts +33 -0
  473. package/src/pwa/action-outcome.tsx +81 -0
  474. package/src/pwa/analytics.ts +236 -0
  475. package/src/pwa/browser-push.tsx +132 -0
  476. package/src/pwa/client.ts +126 -0
  477. package/src/pwa/index.ts +40 -0
  478. package/src/pwa/offline-key.ts +18 -0
  479. package/src/pwa/service-worker.ts +229 -0
  480. package/src/static.ts +10 -0
  481. package/src/styles/base.css +208 -0
  482. package/src/styles/components.css +453 -0
  483. package/src/styles/index.css +16 -0
  484. package/src/styles/marketing.css +1260 -0
  485. package/src/styles/reference.css +5792 -0
  486. package/src/types/reference.d.ts +1608 -0
  487. package/tailwind.config.cjs +3 -0
@@ -0,0 +1,1608 @@
1
+ import type * as React from "react";
2
+ export type RecordState =
3
+ | "proposed"
4
+ | "ready"
5
+ | "scheduled"
6
+ | "active"
7
+ | "blocked"
8
+ | "in-review"
9
+ | "complete"
10
+ | "deferred"
11
+ | "canceled";
12
+ /** Any lucide-react icon name in PascalCase (Hammer) or kebab-case (chevron-right). */
13
+ export type IconName = string;
14
+ export type DepartmentCode =
15
+ "0000" | "1000" | "2000" | "3000" | "4000" | "5000" | "6000" | "7000" | "8000" | "9000";
16
+ export type PhaseCode = "SCP" | "ENG" | "ADV" | "PRC" | "BLD" | "INS" | "OPR" | "AMP" | "CLS";
17
+ export type RecordKind =
18
+ | "Build"
19
+ | "Rehearsal"
20
+ | "Shift"
21
+ | "Strike"
22
+ | "Task"
23
+ | "Training"
24
+ | "Document"
25
+ | "Supply"
26
+ | "Booking"
27
+ | "Contract"
28
+ | "Payment"
29
+ | "Recruitment"
30
+ | "Approval"
31
+ | "Compliance"
32
+ | "Deadline"
33
+ | "Decision"
34
+ | "Inspection"
35
+ | "Permit"
36
+ | "Distribution"
37
+ | "Event"
38
+ | "Goal"
39
+ | "Meeting"
40
+ | "Milestone"
41
+ | "Report"
42
+ | "Risk"
43
+ | "Timeline";
44
+ export interface Option {
45
+ value: string;
46
+ label: string;
47
+ code?: string;
48
+ icon?: IconName;
49
+ help?: string;
50
+ }
51
+ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
52
+ variant?: "primary" | "secondary" | "ghost" | "danger";
53
+ size?: "sm" | "md" | "lg" | "xl";
54
+ loading?: boolean;
55
+ icon?: IconName;
56
+ shortcut?: string;
57
+ }
58
+ export interface IconButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
59
+ icon: IconName;
60
+ label: string;
61
+ shortcut?: string;
62
+ variant?: "ghost" | "secondary";
63
+ }
64
+ export interface KbdProps {
65
+ children: React.ReactNode;
66
+ }
67
+ export interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "width"> {
68
+ label?: string;
69
+ help?: string;
70
+ error?: string;
71
+ /** Field width; 280 px by default, never wider than its container. */ width?: number | string;
72
+ }
73
+ export interface CurrencyInputProps {
74
+ label?: string;
75
+ value: number | null;
76
+ currency?: string;
77
+ help?: string;
78
+ unpricedLabel?: string;
79
+ id?: string;
80
+ onChange?: React.ChangeEventHandler<HTMLInputElement>;
81
+ }
82
+ export interface MoneyProps {
83
+ amount: number | null;
84
+ currency?: string;
85
+ unpricedLabel?: string;
86
+ }
87
+ export interface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {
88
+ label: React.ReactNode;
89
+ }
90
+ export interface SwitchProps extends React.InputHTMLAttributes<HTMLInputElement> {
91
+ label: React.ReactNode;
92
+ }
93
+ export interface SegmentedControlProps {
94
+ label: string;
95
+ value?: string;
96
+ options: { value: string; label: string; icon?: IconName }[];
97
+ onChange?: (value: string) => void;
98
+ }
99
+ export interface TabsProps {
100
+ label: string;
101
+ value?: string;
102
+ tabs: { value: string; label: string; count?: number }[];
103
+ onChange?: (value: string) => void;
104
+ }
105
+ export interface BreadcrumbsProps {
106
+ items: { label: string; href?: string }[];
107
+ }
108
+ export interface IconProps {
109
+ name: IconName;
110
+ size?: number;
111
+ label?: string;
112
+ color?: string;
113
+ className?: string;
114
+ strokeWidth?: number;
115
+ }
116
+ export interface StateIconProps {
117
+ state: RecordState;
118
+ size?: number;
119
+ }
120
+ export interface StateChipProps {
121
+ state: RecordState;
122
+ label: string;
123
+ compact?: boolean;
124
+ onClick?: () => void;
125
+ }
126
+ export interface PhaseChipProps {
127
+ gate: number;
128
+ name: string;
129
+ code: PhaseCode;
130
+ }
131
+ export interface DepartmentChipProps {
132
+ name: string;
133
+ code: DepartmentCode;
134
+ }
135
+ export interface URIDChipProps {
136
+ name: string;
137
+ urid: string;
138
+ }
139
+ export interface PropertyChipProps {
140
+ label?: string;
141
+ value: React.ReactNode;
142
+ icon?: IconName;
143
+ onClick?: () => void;
144
+ }
145
+ export interface TagProps {
146
+ tone?: "neutral" | "accent" | "success" | "warning" | "danger";
147
+ children: React.ReactNode;
148
+ }
149
+ export interface ProvenanceBadgeProps {
150
+ source: string;
151
+ rank: number;
152
+ }
153
+ export interface AssertionRankBadgeProps {
154
+ label: string;
155
+ rank: 0 | 1 | 2 | 3 | 4;
156
+ }
157
+ export interface RefusalNoticeProps {
158
+ outcome: "NO_ANSWER" | "UNRATIFIED" | "REFUSE";
159
+ title: string;
160
+ reason: string;
161
+ actionLabel?: string;
162
+ onAction?: () => void;
163
+ }
164
+ export interface InlineAlertProps {
165
+ tone?: "info" | "success" | "warning" | "danger";
166
+ title?: string;
167
+ children: React.ReactNode;
168
+ }
169
+ export interface ToastProps {
170
+ message: string;
171
+ actionLabel?: string;
172
+ actionIcon?: IconName;
173
+ shortcut?: string;
174
+ onAction?: () => void;
175
+ }
176
+ export interface EmptyStateProps {
177
+ sentence: string;
178
+ actionLabel: string;
179
+ icon?: IconName;
180
+ shortcut?: string;
181
+ onAction?: () => void;
182
+ }
183
+ export interface ProgressBarProps {
184
+ label: string;
185
+ value: number;
186
+ }
187
+ export interface SkeletonProps {
188
+ width?: number | string;
189
+ height?: number | string;
190
+ }
191
+ export interface AvatarProps {
192
+ name: string;
193
+ size?: "md" | "lg";
194
+ }
195
+ export interface AvatarStackProps {
196
+ names: string[];
197
+ max?: number;
198
+ }
199
+ export interface TooltipProps {
200
+ label: string;
201
+ shortcut?: string;
202
+ }
203
+ export interface DataTableColumn {
204
+ key: string;
205
+ label: string;
206
+ type?: "text" | "code" | "number" | "money" | "state";
207
+ currency?: string;
208
+ /** A long text column wraps instead of widening the table. */ wrap?: boolean;
209
+ }
210
+ export interface DataTableProps {
211
+ columns: DataTableColumn[];
212
+ rows: Record<string, unknown>[];
213
+ caption?: string;
214
+ density?: "compact" | "default" | "comfortable";
215
+ totals?: Record<string, unknown>;
216
+ totalsLabel?: string;
217
+ }
218
+ export interface CommandMenuProps {
219
+ query?: string;
220
+ placeholder?: string;
221
+ groups: {
222
+ label: string;
223
+ items: {
224
+ label: string;
225
+ code?: string;
226
+ icon?: IconName;
227
+ state?: RecordState;
228
+ shortcut?: string;
229
+ selected?: boolean;
230
+ }[];
231
+ }[];
232
+ }
233
+ export interface DialogProps {
234
+ title: string;
235
+ children: React.ReactNode;
236
+ actions: React.ReactNode;
237
+ }
238
+ export interface SidebarProps {
239
+ label?: string;
240
+ active?: string;
241
+ groups: {
242
+ label?: string;
243
+ collapsed?: boolean;
244
+ items: { label: string; icon?: IconName; badge?: number }[];
245
+ }[];
246
+ }
247
+ export interface ClockButtonProps {
248
+ state?: "out" | "on" | "break" | "blocked";
249
+ label: string;
250
+ detail?: string;
251
+ timer?: string;
252
+ geofence?: string;
253
+ geofenceOk?: boolean;
254
+ onClick?: () => void;
255
+ }
256
+ type C<P> = (props: P) => React.ReactElement;
257
+ export declare const Button: C<ButtonProps>;
258
+ export declare const IconButton: C<IconButtonProps>;
259
+ export declare const Kbd: C<KbdProps>;
260
+ export declare const Input: C<InputProps>;
261
+ export declare const CurrencyInput: C<CurrencyInputProps>;
262
+ export declare const Money: C<MoneyProps>;
263
+ export declare const Checkbox: C<CheckboxProps>;
264
+ export declare const Switch: C<SwitchProps>;
265
+ export declare const SegmentedControl: C<SegmentedControlProps>;
266
+ export declare const Tabs: C<TabsProps>;
267
+ export declare const Breadcrumbs: C<BreadcrumbsProps>;
268
+ export declare const Icon: C<IconProps>;
269
+ export declare const StateIcon: C<StateIconProps>;
270
+ export declare const StateChip: C<StateChipProps>;
271
+ export declare const PhaseChip: C<PhaseChipProps>;
272
+ export declare const DepartmentChip: C<DepartmentChipProps>;
273
+ export declare const URIDChip: C<URIDChipProps>;
274
+ export declare const PropertyChip: C<PropertyChipProps>;
275
+ export declare const Tag: C<TagProps>;
276
+ export declare const ProvenanceBadge: C<ProvenanceBadgeProps>;
277
+ export declare const AssertionRankBadge: C<AssertionRankBadgeProps>;
278
+ export declare const RefusalNotice: C<RefusalNoticeProps>;
279
+ export declare const InlineAlert: C<InlineAlertProps>;
280
+ export declare const Toast: C<ToastProps>;
281
+ export declare const EmptyState: C<EmptyStateProps>;
282
+ export declare const ProgressBar: C<ProgressBarProps>;
283
+ export declare const Skeleton: C<SkeletonProps>;
284
+ export declare const Avatar: C<AvatarProps>;
285
+ export declare const AvatarStack: C<AvatarStackProps>;
286
+ export declare const Tooltip: C<TooltipProps>;
287
+ export declare const DataTable: C<DataTableProps>;
288
+ export declare const CommandMenu: C<CommandMenuProps>;
289
+ export declare const Dialog: C<DialogProps>;
290
+ export declare const Sidebar: C<SidebarProps>;
291
+ export declare const ClockButton: C<ClockButtonProps>;
292
+
293
+ export interface DepartmentGlyphProps {
294
+ code: DepartmentCode;
295
+ size?: number;
296
+ label?: string;
297
+ color?: string;
298
+ }
299
+ export interface PhaseGlyphProps {
300
+ code: PhaseCode;
301
+ size?: number;
302
+ label?: string;
303
+ color?: string;
304
+ }
305
+ export interface RecordKindGlyphProps {
306
+ kind: RecordKind;
307
+ size?: number;
308
+ label?: string;
309
+ color?: string;
310
+ }
311
+ export interface RecordKindChipProps {
312
+ kind: RecordKind;
313
+ label?: string;
314
+ }
315
+ export interface BrandMarkProps {
316
+ name: string;
317
+ logoLight?: string;
318
+ logoDark?: string;
319
+ monogram?: string;
320
+ size?: "sm" | "md" | "lg";
321
+ iconOnly?: boolean;
322
+ }
323
+ /** width and height are the delivery size in pixels; the frame draws in proportion, at most 160 by 148. */
324
+ export interface BrandSlotProps {
325
+ label: string;
326
+ width: number;
327
+ height: number;
328
+ formats: string;
329
+ }
330
+ export interface WhiteLabelPreviewProps {
331
+ sample: React.ReactNode;
332
+ brands: {
333
+ name: string;
334
+ domain: string;
335
+ theme: "dark" | "light" | "sunlight";
336
+ tokens: Record<string, string>;
337
+ }[];
338
+ }
339
+ export interface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
340
+ external?: boolean;
341
+ }
342
+ export interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {
343
+ label?: string;
344
+ help?: string;
345
+ error?: string;
346
+ width?: number | string;
347
+ }
348
+ export interface SelectProps {
349
+ label?: string;
350
+ help?: string;
351
+ error?: string;
352
+ value?: string;
353
+ placeholder?: string;
354
+ options: Option[];
355
+ disabled?: boolean;
356
+ onChange?: React.ChangeEventHandler<HTMLSelectElement>;
357
+ }
358
+ export interface ComboboxProps {
359
+ label?: string;
360
+ help?: string;
361
+ value?: string;
362
+ placeholder?: string;
363
+ noMatch?: string;
364
+ options: Option[];
365
+ defaultOpen?: boolean;
366
+ onChange?: (value: string) => void;
367
+ }
368
+ export interface MultiSelectProps {
369
+ label?: string;
370
+ help?: string;
371
+ value?: string[];
372
+ placeholder?: string;
373
+ options: Option[];
374
+ defaultOpen?: boolean;
375
+ onChange?: (value: string[]) => void;
376
+ }
377
+ export interface RadioProps {
378
+ label: string;
379
+ name?: string;
380
+ value?: string;
381
+ options: Option[];
382
+ onChange?: React.ChangeEventHandler<HTMLInputElement>;
383
+ }
384
+ export interface SliderProps {
385
+ label: string;
386
+ min: number;
387
+ max: number;
388
+ step?: number;
389
+ value: number;
390
+ unit?: string;
391
+ onChange?: (value: number) => void;
392
+ }
393
+ export interface NumberInputProps {
394
+ label?: string;
395
+ help?: string;
396
+ value?: number | null;
397
+ unit?: string;
398
+ step?: number;
399
+ placeholder?: string;
400
+ onChange?: (value: number | null) => void;
401
+ }
402
+ export interface DatePickerProps {
403
+ label?: string;
404
+ help?: string;
405
+ value?: string;
406
+ month?: string;
407
+ today?: string;
408
+ placeholder?: string;
409
+ defaultOpen?: boolean;
410
+ onChange?: (isoDate: string) => void;
411
+ }
412
+ export interface DateRangePickerProps {
413
+ label?: string;
414
+ help?: string;
415
+ start?: string;
416
+ end?: string;
417
+ defaultOpen?: boolean;
418
+ onChange?: (range: [string, string]) => void;
419
+ }
420
+ export interface TimePickerProps {
421
+ label?: string;
422
+ help?: string;
423
+ value?: string;
424
+ step?: number;
425
+ timeZone: string;
426
+ zoneLabel: string;
427
+ onChange?: React.ChangeEventHandler<HTMLSelectElement>;
428
+ }
429
+ export interface FileDropProps {
430
+ label?: string;
431
+ hint?: string;
432
+ accept?: string;
433
+ width?: number;
434
+ files?: { name: string; size: number }[];
435
+ onFiles?: (files: FileList) => void;
436
+ }
437
+ export interface BannerProps {
438
+ tone?: "info" | "success" | "warning" | "danger";
439
+ icon?: IconName;
440
+ children: React.ReactNode;
441
+ actionLabel?: string;
442
+ onAction?: () => void;
443
+ onDismiss?: () => void;
444
+ }
445
+ export interface ErrorStateProps {
446
+ title: string;
447
+ sentence: string;
448
+ actionLabel?: string;
449
+ reference?: string;
450
+ onRetry?: () => void;
451
+ }
452
+ export interface MenuItem {
453
+ label?: string;
454
+ icon?: IconName;
455
+ shortcut?: string;
456
+ danger?: boolean;
457
+ active?: boolean;
458
+ submenu?: boolean;
459
+ separator?: boolean;
460
+ heading?: string;
461
+ }
462
+ export interface DropdownMenuProps {
463
+ label: string;
464
+ icon?: IconName;
465
+ items: MenuItem[];
466
+ defaultOpen?: boolean;
467
+ }
468
+ export interface ContextMenuProps {
469
+ label?: string;
470
+ items: MenuItem[];
471
+ }
472
+ export interface PopoverProps {
473
+ title?: string;
474
+ children: React.ReactNode;
475
+ learnMore?: string;
476
+ }
477
+ export interface HoverCardProps {
478
+ recordKey: string;
479
+ kind: RecordKind;
480
+ title: string;
481
+ state: RecordState;
482
+ stateLabel: string;
483
+ owner: string;
484
+ next: string;
485
+ }
486
+ export interface DrawerProps {
487
+ title: string;
488
+ side?: "right" | "left";
489
+ children: React.ReactNode;
490
+ footer?: React.ReactNode;
491
+ onClose?: () => void;
492
+ }
493
+ export interface SidePeekProps {
494
+ recordKey: string;
495
+ kind: RecordKind;
496
+ title: string;
497
+ state: RecordState;
498
+ stateLabel: string;
499
+ chips?: React.ReactNode;
500
+ properties?: { label: string; value: React.ReactNode }[];
501
+ children?: React.ReactNode;
502
+ }
503
+ export interface ShortcutSheetProps {
504
+ title?: string;
505
+ groups: { label: string; items: { label: string; keys: string }[] }[];
506
+ }
507
+ export interface PaginationProps {
508
+ summary: string;
509
+ hasPrev: boolean;
510
+ hasNext: boolean;
511
+ onPrev?: () => void;
512
+ onNext?: () => void;
513
+ }
514
+ export interface PageHeaderProps {
515
+ title: string;
516
+ glyph?: IconName;
517
+ count?: number;
518
+ views?: React.ReactNode;
519
+ actions?: React.ReactNode;
520
+ }
521
+ export interface CardProps {
522
+ title?: string;
523
+ meta?: React.ReactNode;
524
+ footer?: React.ReactNode;
525
+ interactive?: boolean;
526
+ children: React.ReactNode;
527
+ }
528
+ export interface DividerProps {
529
+ label?: string;
530
+ }
531
+ export interface AccordionProps {
532
+ items: { title: string; meta?: string; open?: boolean; content: React.ReactNode }[];
533
+ }
534
+ export interface StepperProps {
535
+ steps: string[];
536
+ current: number;
537
+ }
538
+ export interface ResizablePanelProps {
539
+ initial: number;
540
+ min: number;
541
+ max: number;
542
+ side?: "left" | "right";
543
+ label?: string;
544
+ children: React.ReactNode;
545
+ }
546
+ export interface SplitViewProps {
547
+ label: string;
548
+ selected: number;
549
+ items: { title: string; meta: string; state?: RecordState }[];
550
+ detail: React.ReactNode;
551
+ }
552
+ export interface AppShellProps {
553
+ brand?: React.ReactNode;
554
+ sidebar: React.ReactNode;
555
+ header?: React.ReactNode;
556
+ children: React.ReactNode;
557
+ }
558
+ export interface BadgeProps {
559
+ count: number;
560
+ tone?: "neutral" | "accent" | "danger";
561
+ label?: string;
562
+ }
563
+ export interface PresenceIndicatorProps {
564
+ names: string[];
565
+ verb?: "viewing" | "editing";
566
+ }
567
+ export interface BoardProps {
568
+ addLabel?: string;
569
+ /** Hides the add buttons; cards open but do not move. Used where the viewer cannot create or change records, such as a Gateway applicant's own applications. */ readOnly?: boolean;
570
+ columns: {
571
+ state: RecordState;
572
+ label: string;
573
+ cards: {
574
+ key: string;
575
+ title: string;
576
+ /** One secondary line under the title. */ meta?: string;
577
+ kind?: RecordKind;
578
+ owner?: string;
579
+ due?: string;
580
+ }[];
581
+ }[];
582
+ }
583
+ export interface TimelineRow {
584
+ key: string;
585
+ title: string;
586
+ state: RecordState;
587
+ start: number;
588
+ end: number;
589
+ progress?: number;
590
+ critical?: boolean;
591
+ milestone?: boolean;
592
+ dependsOn?: number;
593
+ baselineStart?: number;
594
+ baselineEnd?: number;
595
+ /** The row stays put when the schedule moves: it cannot be dragged, and a change that would push it is refused. */
596
+ locked?: boolean;
597
+ /**
598
+ * Labelled spans drawn inside the row, such as a production's Load In, Show and Load Out days on the portfolio
599
+ * timeline. Each is named in the table alternative; colour (a categorical step) is never its only signal.
600
+ */
601
+ segments?: TimelineSegment[];
602
+ /**
603
+ * A short tag after the row's title, such as a production's clash count on the portfolio timeline. Its text is
604
+ * named in the table alternative; the tone repeats what the text says.
605
+ */
606
+ badge?: { label: string; tone?: TagProps["tone"] };
607
+ }
608
+ /** A day-type tag or segment: its text, a categorical colour step (viz-cat-1 to viz-cat-7) and an icon. */
609
+ export interface TimelineCategory {
610
+ label: string;
611
+ category: 1 | 2 | 3 | 4 | 5 | 6 | 7;
612
+ icon?: IconName;
613
+ }
614
+ /** A span of days inside a row, first and last day by index. */
615
+ export interface TimelineSegment extends TimelineCategory {
616
+ start: number;
617
+ end: number;
618
+ }
619
+ /** A dependency between two rows, by row index, for the reschedule preview. */
620
+ export interface TimelineLink {
621
+ from: number;
622
+ to: number;
623
+ /** Finish to Start (the default), Start to Start, Finish to Finish or Start to Finish. */
624
+ type?: string;
625
+ /** Days of lag; negative for lead. */
626
+ lagDays?: number;
627
+ }
628
+ /** A row's new first and last day. */
629
+ export interface TimelineChange {
630
+ row: number;
631
+ start: number;
632
+ end: number;
633
+ }
634
+ export type TimelineMove = TimelineChange;
635
+ /** The page's own preview of a pending change, such as the server's answer. */
636
+ export interface TimelinePreview {
637
+ change: TimelineChange;
638
+ /** The other rows the change moves. */
639
+ moves: TimelineMove[];
640
+ /** Why the change cannot be applied, when it cannot. */
641
+ refusal?: string;
642
+ /** A sentence the preview adds, such as records the change moves that the timeline does not show. */
643
+ note?: string;
644
+ }
645
+ export interface TimelineProps {
646
+ label: string;
647
+ /**
648
+ * `label` names the day in full (Wednesday, June 3) for the table and announcements; `tags` are the day's types
649
+ * (Load In, Show), drawn as a header band and named wherever the day is.
650
+ */
651
+ days: {
652
+ dow: string;
653
+ date: number;
654
+ weekend?: boolean;
655
+ label?: string;
656
+ tags?: TimelineCategory[];
657
+ }[];
658
+ rows: TimelineRow[];
659
+ gates?: { day: number; label: string }[];
660
+ today?: number;
661
+ dayWidth?: number;
662
+ /** Dependencies by row index: the preview pushes successors along them and reports the critical path. */
663
+ links?: TimelineLink[];
664
+ /**
665
+ * Bars move and resize, by pointer or keyboard, when given. Called with the change to apply; a
666
+ * promise that resolves to false keeps the change pending.
667
+ */
668
+ onReschedule?: (change: TimelineChange) => void | boolean | Promise<void | boolean>;
669
+ /** Called when a pending change starts, changes or ends (null), so the page can preview it itself. */
670
+ onPendingChange?: (change: TimelineChange | null) => void;
671
+ /** The page's preview of the pending change; it replaces the estimate from `links` while it matches. */
672
+ preview?: TimelinePreview | null;
673
+ /**
674
+ * The page previews every pending change itself: Apply and Enter wait until `preview` matches the
675
+ * change, so nothing is applied on the strength of the estimate alone.
676
+ */
677
+ awaitPreview?: boolean;
678
+ /**
679
+ * The day grid takes a dropped record (MIME type application/x-xos-record): called with the day
680
+ * index under the pointer, mirrored in right-to-left layouts, and the drag's payload.
681
+ */
682
+ onDayDrop?: (day: number, payload: string) => void;
683
+ /**
684
+ * The project's anchor day by index: the table alternative gains an Offset column (D−3, D+1), read as "3 days
685
+ * before the anchor". The page draws the anchor's gate itself.
686
+ */
687
+ anchorDay?: number;
688
+ }
689
+ export interface CalendarProps {
690
+ /** First day of the month shown, as an ISO date such as 2026-11-01. */ month: string;
691
+ today?: string;
692
+ events: { date: string; label: string; state: RecordState }[];
693
+ /** Day-type tags of dates in the month, drawn in each day's cell and named with the day. */
694
+ days?: { date: string; tags: TimelineCategory[] }[];
695
+ }
696
+ export interface TreeNode {
697
+ label: string;
698
+ icon?: IconName;
699
+ meta?: string;
700
+ selected?: boolean;
701
+ expanded?: boolean;
702
+ children?: TreeNode[];
703
+ }
704
+ export interface TreeViewProps {
705
+ label: string;
706
+ nodes: TreeNode[];
707
+ }
708
+ export interface RichTextEditorProps {
709
+ label: string;
710
+ html: string;
711
+ presence?: React.ReactNode;
712
+ }
713
+ /** `multiplier` stores a number (1.5) and displays it as 1.5x. `derive` makes a read-only column computed from the row, for values whose source of truth is another table (job title, GL account). */
714
+ export interface GridColumn {
715
+ key: string;
716
+ label: string;
717
+ /** "time" holds a time or a time range typed as shorthand; its parse turns the text into the cell. */
718
+ type?: "text" | "code" | "number" | "money" | "multiplier" | "time";
719
+ editable?: boolean;
720
+ total?: boolean;
721
+ currency?: string;
722
+ width?: number;
723
+ derive?: (row: Record<string, string | number | null>) => string | number | null | undefined;
724
+ /** Turns typed or pasted text into the cell; the default trims text and parses numbers. */
725
+ parse?: (text: string) => string | number | null;
726
+ /** Shown in secondary text in a blank cell, for a value the cell falls back to. */
727
+ blankHint?: (row: Record<string, string | number | null>) => string | null;
728
+ /** A `total` column counts only the rows this accepts: a row left out neither adds nor blanks it. */
729
+ totalIncludes?: (row: Record<string, string | number | null>) => boolean;
730
+ }
731
+ export interface SpreadsheetGridProps {
732
+ label: string;
733
+ columns: GridColumn[];
734
+ rows: Record<string, string | number | null>[];
735
+ totalsLabel?: string;
736
+ /** A trailing blank row that becomes a new row once something is typed or pasted into it. */
737
+ appendRow?: boolean;
738
+ /** Messages for cells keyed "row:col" (0-based row index, column key), shown in place and announced. */
739
+ errors?: Record<string, string>;
740
+ }
741
+ export interface FilterBuilderProps {
742
+ filters: { field: string; op: string; value: string }[];
743
+ addLabel?: string;
744
+ saveLabel?: string;
745
+ }
746
+ export interface QuickAddProps {
747
+ label?: string;
748
+ placeholder?: string;
749
+ value?: string;
750
+ }
751
+ export interface ColorPickerProps {
752
+ label: string;
753
+ value: string;
754
+ checks: { label: string; fg?: string; bg?: string; fgIsValue?: boolean; min?: number }[];
755
+ }
756
+ export interface BulkActionBarProps {
757
+ count: number;
758
+ actions: { label: string; icon?: IconName; shortcut?: string }[];
759
+ }
760
+ export interface DiffViewerProps {
761
+ caption?: string;
762
+ rows: { field: string; before: string; after: string }[];
763
+ }
764
+ export interface ActivityFeedItemProps {
765
+ actor: string;
766
+ action: string;
767
+ target?: string;
768
+ time: string;
769
+ comment?: string;
770
+ reactions?: { icon: IconName; label: string; count: number }[];
771
+ }
772
+ export interface FilePreviewerProps {
773
+ name: string;
774
+ meta: string;
775
+ pages: number;
776
+ page?: number;
777
+ zoom?: string;
778
+ icon?: IconName;
779
+ children: React.ReactNode;
780
+ }
781
+ export interface MapViewProps {
782
+ label: string;
783
+ width: number;
784
+ height: number;
785
+ zones: { label: string; x: number; y: number; w: number; h: number }[];
786
+ pins: { x: number; y: number; label: string; tone?: "accent" | "danger" | "warning" }[];
787
+ geofence?: { x: number; y: number; r: number };
788
+ }
789
+ export interface GateReadinessPanelProps {
790
+ gate: number;
791
+ code: PhaseCode;
792
+ name: string;
793
+ nextLabel: string;
794
+ criteria: {
795
+ code?: string;
796
+ label: string;
797
+ result: "met" | "gap" | "unknown";
798
+ blocking: boolean;
799
+ evidence?: string;
800
+ action?: string;
801
+ }[];
802
+ }
803
+ export interface CoordinateMatrixProps {
804
+ label: string;
805
+ corner: string;
806
+ rows: { code: DepartmentCode; name: string }[];
807
+ cols: { gate: number; code: PhaseCode; name: string }[];
808
+ cells: Record<string, number>;
809
+ }
810
+ /** One budget line. Rates are per grade; amount is derived as qty times the selected grade's rate and is never stored. Line types per Bible tab 34. */
811
+ export interface BudgetLine {
812
+ cc: string;
813
+ urid: string;
814
+ name: string;
815
+ type?: "Scope" | "Overhead" | "Contingency" | "Fee" | "Retainer";
816
+ qty?: number | null;
817
+ unit?: string;
818
+ base: number | null;
819
+ elevated: number | null;
820
+ premium: number | null;
821
+ }
822
+ /** One row of the GL Accounts table. Each department class has exactly one account per account type. */
823
+ export interface GLAccount {
824
+ code: string;
825
+ name: string;
826
+ classCode:
827
+ "0000" | "1000" | "2000" | "3000" | "4000" | "5000" | "6000" | "7000" | "8000" | "9000";
828
+ type: "Asset" | "Liability" | "Equity" | "Revenue" | "Expense";
829
+ }
830
+ /** Lines carry no GL fields: each line posts to the account of its URID class and `accountType` (default Expense). Lines with no matching account group under Unmapped Account. */
831
+ export interface BudgetGridProps {
832
+ accounts: GLAccount[];
833
+ accountType?: GLAccount["type"];
834
+ lines: BudgetLine[];
835
+ grades: Option[];
836
+ grade?: "base" | "elevated" | "premium";
837
+ scopeLabel?: string;
838
+ /** Names the scroll region for assistive technology. */ label?: string;
839
+ }
840
+ export interface StalenessIndicatorProps {
841
+ months: number;
842
+ basis?: string;
843
+ }
844
+ export interface ReconciliationTableProps {
845
+ /** Names the scroll region for assistive technology. */ label?: string;
846
+ rows: { requirement: string; capability: string | null; result: "Met" | "Gap" | "Unknown" }[];
847
+ }
848
+ export interface RunOfShowLiveProps {
849
+ cues: {
850
+ number: string;
851
+ time: string;
852
+ title: string;
853
+ dept?: DepartmentCode;
854
+ durationSeconds?: number;
855
+ }[];
856
+ current: number;
857
+ nextInSeconds: number;
858
+ showMode?: boolean;
859
+ }
860
+ export interface AccessGridMatrixProps {
861
+ label: string;
862
+ zones: string[];
863
+ categories: { name: string; color: number }[];
864
+ grants: string[];
865
+ }
866
+ /** One global Standard Library emergency code for one operational domain. `swatch` names an ecode-* color token. Steps name services as {fire}, {ems}, {lawEnforcement}, {bombSquad} or {federal}; `authorities` supplies the agencies for the project's jurisdiction. */
867
+ /** A responding agency for one service, resolved from the project's jurisdiction. */
868
+ export interface EmergencyAuthority {
869
+ service: "fire" | "ems" | "lawEnforcement" | "bombSquad" | "federal";
870
+ agency: string;
871
+ contact?: string;
872
+ }
873
+ export interface EmergencyCodeCardProps {
874
+ authorities?: EmergencyAuthority[];
875
+ recordKey?: string;
876
+ code: string;
877
+ name: string;
878
+ swatch:
879
+ | "ecode-red"
880
+ | "ecode-orange"
881
+ | "ecode-yellow"
882
+ | "ecode-green"
883
+ | "ecode-blue"
884
+ | "ecode-purple"
885
+ | "ecode-white"
886
+ | "ecode-black"
887
+ | "ecode-pink"
888
+ | "ecode-indigo"
889
+ | "ecode-silver"
890
+ | "ecode-grey"
891
+ | "ecode-amber"
892
+ | "ecode-adam";
893
+ domain?: string;
894
+ steps: string[];
895
+ channel?: string;
896
+ }
897
+ /** Radio plan rows; the component sorts by zone, then channel, in numeric order. */
898
+ export interface RadioChannelTableProps {
899
+ caption?: string;
900
+ channels: { zone: number; channel: number; assignment: string; notes: string }[];
901
+ }
902
+ export interface UndoToastProps {
903
+ message: string;
904
+ seconds?: number;
905
+ onUndo?: () => void;
906
+ /** The button's label when the action is not a plain undo, such as "Move back"; Undo by default. */
907
+ undoLabel?: string;
908
+ }
909
+ export interface NotificationItem {
910
+ title: string;
911
+ meta: string;
912
+ kind?: RecordKind;
913
+ action?: string;
914
+ actionKey?: string;
915
+ }
916
+ export interface NotificationCenterProps {
917
+ needsYou: NotificationItem[];
918
+ fyi: NotificationItem[];
919
+ }
920
+ export interface OnboardingChecklistProps {
921
+ title: string;
922
+ steps: { label: string; done: boolean; action?: string }[];
923
+ }
924
+ export interface WhatsNewProps {
925
+ changelogHref: string;
926
+ entries: {
927
+ label: string;
928
+ tone?: "accent" | "neutral";
929
+ date: string;
930
+ title: string;
931
+ body: string;
932
+ }[];
933
+ }
934
+ export interface FeedbackWidgetProps {}
935
+ export interface ShortcutEditorProps {
936
+ /** Names the scroll region for assistive technology. */ label?: string;
937
+ rows: {
938
+ action: string;
939
+ keys: string;
940
+ conflict?: string;
941
+ custom?: boolean;
942
+ recording?: boolean;
943
+ }[];
944
+ }
945
+ export interface ScanSheetProps {
946
+ /** Draws the documentation phone frame; for previews only, never in product UI. */ frame?: boolean;
947
+ mode: "asset" | "receiving" | "credential";
948
+ hint: string;
949
+ count: number;
950
+ countLabel: string;
951
+ doneLabel: string;
952
+ last?: { ok: boolean; title: string; code: string };
953
+ }
954
+ export interface OfflineBannerProps {
955
+ message: string;
956
+ queued: number;
957
+ onView?: () => void;
958
+ }
959
+ export interface QuickIncidentSheetProps {
960
+ /** Draws the documentation phone frame; for previews only, never in product UI. */ frame?: boolean;
961
+ location: string;
962
+ types: { label: string; icon: IconName; critical?: boolean }[];
963
+ }
964
+ export interface ChecklistRunnerProps {
965
+ /** Draws the documentation phone frame; for previews only, never in product UI. */ frame?: boolean;
966
+ title: string;
967
+ index: number;
968
+ items: { code: string; label: string; help?: string; result: "pass" | "fail" | null }[];
969
+ }
970
+ export interface ShiftCardProps {
971
+ state: RecordState;
972
+ stateLabel: string;
973
+ countdown?: string;
974
+ role: string;
975
+ date: string;
976
+ time: string;
977
+ place: string;
978
+ actions?: React.ReactNode;
979
+ }
980
+ export interface DaySheetViewProps {
981
+ /** Draws the documentation phone frame; for previews only, never in product UI. */ frame?: boolean;
982
+ date: string;
983
+ title: string;
984
+ venue: string;
985
+ entries: { time: string; label: string; now?: boolean }[];
986
+ contacts: { name: string; role: string }[];
987
+ /** The day's types (Load In, Show), each with its text, an icon and a categorical swatch. */
988
+ dayTypes?: TimelineCategory[];
989
+ }
990
+ export interface SignaturePadProps {
991
+ label: string;
992
+ attestation: string;
993
+ }
994
+ export interface PhotoCaptureProps {
995
+ /** Draws the documentation phone frame; for previews only, never in product UI. */ frame?: boolean;
996
+ hint: string;
997
+ count: number;
998
+ }
999
+ export interface LiveActivityProps {
1000
+ label: string;
1001
+ elapsed: string;
1002
+ place: string;
1003
+ nextShift: string;
1004
+ nextTime: string;
1005
+ /** On break: the first action becomes End Break. */ onBreak?: boolean;
1006
+ }
1007
+ export interface ForceUpdateScreenProps {
1008
+ /** Draws the documentation phone frame; for previews only, never in product UI. */ frame?: boolean;
1009
+ message: string;
1010
+ version: string;
1011
+ }
1012
+ export interface SyncConflictSheetProps {
1013
+ /** Draws the documentation phone frame; for previews only, never in product UI. */ frame?: boolean;
1014
+ message: string;
1015
+ field: string;
1016
+ mine: string;
1017
+ mineMeta: string;
1018
+ theirs: string;
1019
+ theirsMeta: string;
1020
+ }
1021
+ export interface OpportunityCardProps {
1022
+ org: string;
1023
+ verified?: boolean;
1024
+ role: string;
1025
+ pay: string | null;
1026
+ date: string;
1027
+ place: string;
1028
+ requirements: { missing: string[] };
1029
+ missingAction?: string;
1030
+ deadline: string;
1031
+ saved?: boolean;
1032
+ }
1033
+ export interface OpportunityFiltersProps {
1034
+ placeholder: string;
1035
+ chips: string[];
1036
+ active?: string[];
1037
+ }
1038
+ export interface ApplicationFormProps {
1039
+ role: string;
1040
+ org: string;
1041
+ shared: { label: string; on: boolean }[];
1042
+ questions: string[];
1043
+ }
1044
+ export interface BidSheetProps {
1045
+ deadline: string;
1046
+ lines: {
1047
+ line: string;
1048
+ item: string;
1049
+ unit: string;
1050
+ qty: number;
1051
+ price: number | null;
1052
+ ext: number | null;
1053
+ }[];
1054
+ }
1055
+ export interface AgencySlateProps {
1056
+ positions: number;
1057
+ roster: {
1058
+ name: string;
1059
+ role: string;
1060
+ selected: boolean;
1061
+ certs: { label: string; ok: boolean }[];
1062
+ }[];
1063
+ }
1064
+ export interface ProfileEditorProps {
1065
+ strength: number;
1066
+ nextStep: string;
1067
+ fields: { label: string; value: string; visibility: "private" | "application" | "public" }[];
1068
+ }
1069
+ export interface EPKViewerProps {
1070
+ artist: string;
1071
+ headline: string;
1072
+ badges: string[];
1073
+ bio: string;
1074
+ media: { type: "video" | "audio" | "image"; label: string }[];
1075
+ links: { label: string; href: string }[];
1076
+ }
1077
+ export interface AvailabilityCalendarProps {
1078
+ month: string;
1079
+ available: string[];
1080
+ booked: string[];
1081
+ }
1082
+ export interface OnboardingPacketProps {
1083
+ items: {
1084
+ label: string;
1085
+ state: "verified" | "review" | "todo" | "expired";
1086
+ blocking: boolean;
1087
+ minutes: number;
1088
+ note?: string;
1089
+ action?: string;
1090
+ }[];
1091
+ }
1092
+ export interface EngagementTimelineProps {
1093
+ current: number;
1094
+ stages: { label: string; date?: string; owner?: string }[];
1095
+ }
1096
+ export interface RatingDialogProps {
1097
+ counterpart: string;
1098
+ value?: number;
1099
+ }
1100
+ export interface PayoutDetailsFormProps {
1101
+ rail: string;
1102
+ onFile?: { bank: string; last4: string };
1103
+ }
1104
+ export interface OrgSwitcherProps {
1105
+ current: string;
1106
+ heading: string;
1107
+ orgs: { name: string; role: string; badge?: number }[];
1108
+ }
1109
+ export declare const DepartmentGlyph: C<DepartmentGlyphProps>;
1110
+ export declare const PhaseGlyph: C<PhaseGlyphProps>;
1111
+ export declare const RecordKindGlyph: C<RecordKindGlyphProps>;
1112
+ export declare const RecordKindChip: C<RecordKindChipProps>;
1113
+ export declare const BrandMark: C<BrandMarkProps>;
1114
+ export declare const BrandSlot: C<BrandSlotProps>;
1115
+ export declare const WhiteLabelPreview: C<WhiteLabelPreviewProps>;
1116
+ export declare const Link: C<LinkProps>;
1117
+ export declare const Textarea: C<TextareaProps>;
1118
+ export declare const Select: C<SelectProps>;
1119
+ export declare const Combobox: C<ComboboxProps>;
1120
+ export declare const MultiSelect: C<MultiSelectProps>;
1121
+ export declare const Radio: C<RadioProps>;
1122
+ export declare const Slider: C<SliderProps>;
1123
+ export declare const NumberInput: C<NumberInputProps>;
1124
+ export declare const DatePicker: C<DatePickerProps>;
1125
+ export declare const DateRangePicker: C<DateRangePickerProps>;
1126
+ export declare const TimePicker: C<TimePickerProps>;
1127
+ export declare const FileDrop: C<FileDropProps>;
1128
+ export declare const Banner: C<BannerProps>;
1129
+ export declare const ErrorState: C<ErrorStateProps>;
1130
+ export declare const DropdownMenu: C<DropdownMenuProps>;
1131
+ export declare const ContextMenu: C<ContextMenuProps>;
1132
+ export declare const Popover: C<PopoverProps>;
1133
+ export declare const HoverCard: C<HoverCardProps>;
1134
+ export declare const Drawer: C<DrawerProps>;
1135
+ export declare const SidePeek: C<SidePeekProps>;
1136
+ export declare const ShortcutSheet: C<ShortcutSheetProps>;
1137
+ export declare const Pagination: C<PaginationProps>;
1138
+ export declare const PageHeader: C<PageHeaderProps>;
1139
+ export declare const Card: C<CardProps>;
1140
+ export declare const Divider: C<DividerProps>;
1141
+ export declare const Accordion: C<AccordionProps>;
1142
+ export declare const Stepper: C<StepperProps>;
1143
+ export declare const ResizablePanel: C<ResizablePanelProps>;
1144
+ export declare const SplitView: C<SplitViewProps>;
1145
+ export declare const AppShell: C<AppShellProps>;
1146
+ export declare const Badge: C<BadgeProps>;
1147
+ export declare const PresenceIndicator: C<PresenceIndicatorProps>;
1148
+ export declare const Board: C<BoardProps>;
1149
+ export declare const Timeline: C<TimelineProps>;
1150
+ export declare const Calendar: C<CalendarProps>;
1151
+ export declare const TreeView: C<TreeViewProps>;
1152
+ export declare const RichTextEditor: C<RichTextEditorProps>;
1153
+ export declare const SpreadsheetGrid: C<SpreadsheetGridProps>;
1154
+ export declare const Heatmap: C<HeatmapProps>;
1155
+ export declare const FilterBuilder: C<FilterBuilderProps>;
1156
+ export declare const QuickAdd: C<QuickAddProps>;
1157
+ export declare const ColorPicker: C<ColorPickerProps>;
1158
+ export declare const BulkActionBar: C<BulkActionBarProps>;
1159
+ export declare const DiffViewer: C<DiffViewerProps>;
1160
+ export declare const ActivityFeedItem: C<ActivityFeedItemProps>;
1161
+ export declare const FilePreviewer: C<FilePreviewerProps>;
1162
+ export declare const MapView: C<MapViewProps>;
1163
+ export declare const GateReadinessPanel: C<GateReadinessPanelProps>;
1164
+ export declare const CoordinateMatrix: C<CoordinateMatrixProps>;
1165
+ export declare const BudgetGrid: C<BudgetGridProps>;
1166
+ export declare const StalenessIndicator: C<StalenessIndicatorProps>;
1167
+ export declare const ReconciliationTable: C<ReconciliationTableProps>;
1168
+ export declare const RunOfShowLive: C<RunOfShowLiveProps>;
1169
+ export declare const AccessGridMatrix: C<AccessGridMatrixProps>;
1170
+ export declare const EmergencyCodeCard: C<EmergencyCodeCardProps>;
1171
+ export declare const RadioChannelTable: C<RadioChannelTableProps>;
1172
+ export declare const UndoToast: C<UndoToastProps>;
1173
+ export declare const NotificationCenter: C<NotificationCenterProps>;
1174
+ export declare const OnboardingChecklist: C<OnboardingChecklistProps>;
1175
+ export declare const WhatsNew: C<WhatsNewProps>;
1176
+ export declare const FeedbackWidget: C<FeedbackWidgetProps>;
1177
+ export declare const ShortcutEditor: C<ShortcutEditorProps>;
1178
+ export declare const ScanSheet: C<ScanSheetProps>;
1179
+ export declare const OfflineBanner: C<OfflineBannerProps>;
1180
+ export declare const QuickIncidentSheet: C<QuickIncidentSheetProps>;
1181
+ export declare const ChecklistRunner: C<ChecklistRunnerProps>;
1182
+ export declare const ShiftCard: C<ShiftCardProps>;
1183
+ export declare const DaySheetView: C<DaySheetViewProps>;
1184
+ export declare const SignaturePad: C<SignaturePadProps>;
1185
+ export declare const PhotoCapture: C<PhotoCaptureProps>;
1186
+ export declare const LiveActivity: C<LiveActivityProps>;
1187
+ export declare const ForceUpdateScreen: C<ForceUpdateScreenProps>;
1188
+ export declare const SyncConflictSheet: C<SyncConflictSheetProps>;
1189
+ export declare const OpportunityCard: C<OpportunityCardProps>;
1190
+ export declare const OpportunityFilters: C<OpportunityFiltersProps>;
1191
+ export declare const ApplicationForm: C<ApplicationFormProps>;
1192
+ export declare const BidSheet: C<BidSheetProps>;
1193
+ export declare const AgencySlate: C<AgencySlateProps>;
1194
+ export declare const ProfileEditor: C<ProfileEditorProps>;
1195
+ export declare const EPKViewer: C<EPKViewerProps>;
1196
+ export declare const AvailabilityCalendar: C<AvailabilityCalendarProps>;
1197
+ export declare const OnboardingPacket: C<OnboardingPacketProps>;
1198
+ export declare const EngagementTimeline: C<EngagementTimelineProps>;
1199
+ export declare const RatingDialog: C<RatingDialogProps>;
1200
+ export declare const PayoutDetailsForm: C<PayoutDetailsFormProps>;
1201
+ export declare const OrgSwitcher: C<OrgSwitcherProps>;
1202
+ export declare const glyphs: {
1203
+ departments: Record<DepartmentCode, string>;
1204
+ phases: Record<PhaseCode, string>;
1205
+ recordKinds: Record<RecordKind, string>;
1206
+ };
1207
+ export declare function parseQuickAdd(text: string): {
1208
+ title: string;
1209
+ tokens: { type: "person" | "tag" | "kind" | "scope" | "date"; value: string; icon: string }[];
1210
+ };
1211
+ export declare function contrastRatio(a: string, b: string): number;
1212
+ /** Wraps wide content so it scrolls inside a labeled region instead of widening the page. Focusable only while it overflows. */
1213
+ export interface ScrollRegionProps {
1214
+ label: string;
1215
+ children?: React.ReactNode;
1216
+ }
1217
+ export declare const ScrollRegion: C<ScrollRegionProps>;
1218
+ /** Resolves the GL account for a role code or URID from its class (first segment). Returns null when the table has no account of that type for the class. */
1219
+ export declare function glForCode(
1220
+ code: string,
1221
+ accounts: GLAccount[],
1222
+ type?: GLAccount["type"],
1223
+ ): GLAccount | null;
1224
+ export interface XOSConfig {
1225
+ locale?: string;
1226
+ messages?: Record<string, string>;
1227
+ }
1228
+ /** Sets the locale for Intl formatting and merges a message catalog from packages/i18n. */
1229
+ export declare function configure(config: XOSConfig): void;
1230
+ /** Looks up a catalog message and fills its {arguments}. */
1231
+ export declare function t(key: string, vars?: Record<string, string | number>): string;
1232
+
1233
+ export interface RecordRowProps {
1234
+ state: RecordState;
1235
+ stateLabel: string;
1236
+ recordKey: string;
1237
+ kind?: RecordKind;
1238
+ title: string;
1239
+ chips?: React.ReactNode;
1240
+ next?: string;
1241
+ owner?: string;
1242
+ actionLabel?: string;
1243
+ actionKey?: string;
1244
+ selected?: boolean;
1245
+ onAction?: () => void;
1246
+ }
1247
+ export interface RecordListProps {
1248
+ label: string;
1249
+ children: React.ReactNode;
1250
+ }
1251
+ export interface GalleryProps {
1252
+ label: string;
1253
+ min?: number;
1254
+ children: React.ReactNode;
1255
+ }
1256
+ export interface ResourceScheduleProps {
1257
+ label: string;
1258
+ days: { key: string; dow: string; date: number; weekend?: boolean }[];
1259
+ people: {
1260
+ name: string;
1261
+ role: string;
1262
+ shifts?: { day: string; time: string; state: RecordState }[];
1263
+ }[];
1264
+ }
1265
+ export interface OrgChartNode {
1266
+ name: string | null;
1267
+ role: string;
1268
+ code?: string;
1269
+ reports?: OrgChartNode[];
1270
+ }
1271
+ export interface OrgChartProps {
1272
+ label: string;
1273
+ root: OrgChartNode;
1274
+ }
1275
+ /** One y-axis only. Series take viz-cat-1..7 in order; an eighth series folds into Other. Blank values are gaps, never zero. */
1276
+ /** One cell of a heatmap: its value as text, a tint step and, when over a limit, the sentence that says so. */
1277
+ export interface HeatmapCell {
1278
+ /** What the cell says, such as "9.5 h". */
1279
+ text: string;
1280
+ /** Tint step, 0 (empty) to 4 (at or over the limit). */
1281
+ step: 0 | 1 | 2 | 3 | 4;
1282
+ /** Shown with an icon when the cell is over its limit, such as "Over 10 h". */
1283
+ over?: string;
1284
+ }
1285
+ export interface HeatmapProps {
1286
+ /** Names the table (its caption). */
1287
+ label: string;
1288
+ /** Names the row header column, such as Person. */
1289
+ rowHeader: string;
1290
+ rows: { key: string; label: string }[];
1291
+ /** Columns in order; `label` is short (Mon 3), `fullLabel` is read aloud (Monday, June 3). */
1292
+ columns: { key: string; label: string; fullLabel?: string }[];
1293
+ /** Cells keyed '<row>:<col>'; a missing cell is empty. */
1294
+ cells: Record<string, HeatmapCell>;
1295
+ }
1296
+ export interface ChartProps {
1297
+ type: "bar" | "line";
1298
+ title: string;
1299
+ subtitle?: string;
1300
+ categoryLabel: string;
1301
+ categories: string[];
1302
+ series: { name: string; values: (number | null)[] }[];
1303
+ format?: "number" | "money";
1304
+ currency?: string;
1305
+ width?: number;
1306
+ height?: number;
1307
+ }
1308
+ export interface StatTileProps {
1309
+ label: string;
1310
+ value: number | null;
1311
+ format?: "number" | "money";
1312
+ delta?: number | null;
1313
+ deltaUnit?: string;
1314
+ deltaLabel?: string;
1315
+ goodWhen?: "up" | "down";
1316
+ caption?: string;
1317
+ }
1318
+ export interface HelpPanelProps {
1319
+ articles: string[];
1320
+ shortcuts: { label: string; keys: string }[];
1321
+ assistant?: boolean;
1322
+ }
1323
+ export interface QRCodeProps {
1324
+ value: string;
1325
+ label: string;
1326
+ size?: number;
1327
+ }
1328
+ export interface CredentialBadgeProps {
1329
+ org: string;
1330
+ name: string;
1331
+ role: string;
1332
+ category: string;
1333
+ categoryColor: 1 | 2 | 3 | 4 | 5 | 6 | 7;
1334
+ credentialKey: string;
1335
+ payload: string;
1336
+ zones: string[];
1337
+ validFrom: string;
1338
+ validTo: string;
1339
+ }
1340
+ export interface UpNextCardProps {
1341
+ org: string;
1342
+ countdown: string;
1343
+ title: string;
1344
+ when: string;
1345
+ callTime: string;
1346
+ address: string;
1347
+ parking?: string;
1348
+ contact?: string;
1349
+ bring?: string[];
1350
+ }
1351
+ export interface PaymentTrackerProps {
1352
+ invoiceKey: string;
1353
+ title: string;
1354
+ amount: number | null;
1355
+ current: 0 | 1 | 2 | 3;
1356
+ dates: string[];
1357
+ expected?: string;
1358
+ }
1359
+ export interface TabBarProps {
1360
+ label: string;
1361
+ items: { label: string; icon: IconName; badge?: number }[];
1362
+ active: string;
1363
+ compass?: boolean;
1364
+ centerLabel?: string;
1365
+ }
1366
+ export interface TopNavProps {
1367
+ brand: string;
1368
+ label: string;
1369
+ person: string;
1370
+ active: string;
1371
+ items: { label: string; icon: IconName; badge?: number }[];
1372
+ }
1373
+ export declare const RecordRow: C<RecordRowProps>;
1374
+ export declare const RecordList: C<RecordListProps>;
1375
+ export declare const Gallery: C<GalleryProps>;
1376
+ export declare const ResourceSchedule: C<ResourceScheduleProps>;
1377
+ export declare const OrgChart: C<OrgChartProps>;
1378
+ export declare const Chart: C<ChartProps>;
1379
+ export declare const StatTile: C<StatTileProps>;
1380
+ export declare const HelpPanel: C<HelpPanelProps>;
1381
+ export declare const QRCode: C<QRCodeProps>;
1382
+ export declare const CredentialBadge: C<CredentialBadgeProps>;
1383
+ export declare const UpNextCard: C<UpNextCardProps>;
1384
+ export declare const PaymentTracker: C<PaymentTrackerProps>;
1385
+ export declare const TabBar: C<TabBarProps>;
1386
+ export declare const TopNav: C<TopNavProps>;
1387
+
1388
+ /* Marketing layer (2026-11-14, decision D20). Public page components; every visible label is a prop so each page brings
1389
+ its own catalog. The export also types a consent banner as a reference; public pages use the shared cookie banner, so
1390
+ it has no contract here (HANDOFF section 10). */
1391
+ export interface MarketingLink {
1392
+ label: string;
1393
+ href: string;
1394
+ }
1395
+ export interface ButtonLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
1396
+ variant?: "primary" | "secondary" | "ghost";
1397
+ /** xl is the 44 px call to action size. */ size?: "sm" | "md" | "lg" | "xl";
1398
+ icon?: IconName;
1399
+ trailingIcon?: IconName;
1400
+ external?: boolean;
1401
+ }
1402
+ export interface MarketingNavProps {
1403
+ /** A BrandMark. */ brand: React.ReactNode;
1404
+ homeHref?: string;
1405
+ label?: string;
1406
+ links: { label: string; href: string; current?: boolean }[];
1407
+ /** Always visible; the primary call to action. */ actions: React.ReactNode;
1408
+ /** Hidden below bp-sm and repeated in the menu panel. */ secondaryActions?: React.ReactNode;
1409
+ /** Target of the skip link; defaults to #main. */ skipHref?: string;
1410
+ }
1411
+ export interface MarketingSectionProps {
1412
+ id?: string;
1413
+ eyebrow?: string;
1414
+ glyph?: IconName;
1415
+ title: string;
1416
+ /** The 40 to 60 word direct answer that opens the section. */ lead?: React.ReactNode;
1417
+ badge?: React.ReactNode;
1418
+ tone?: "canvas" | "surface";
1419
+ align?: "start" | "center";
1420
+ headingLevel?: 2 | 3;
1421
+ children?: React.ReactNode;
1422
+ }
1423
+ export interface MarketingHeroProps {
1424
+ id?: string;
1425
+ variant?: "default" | "compact";
1426
+ eyebrow?: string;
1427
+ title: string;
1428
+ lead?: React.ReactNode;
1429
+ /** ButtonLink elements; at most two. */ actions?: React.ReactNode;
1430
+ /** Terms that must sit beside the buttons, such as trial length and renewal. */ note?: React.ReactNode;
1431
+ /** A ScreenshotFrame. */ media?: React.ReactNode;
1432
+ headingLevel?: 1 | 2;
1433
+ }
1434
+ export interface ScreenshotFrameProps {
1435
+ /** Image source; omit to frame live XOS components passed as children. */ src?: string;
1436
+ /** Required. Describes what the picture shows. */ alt: string;
1437
+ width?: number;
1438
+ height?: number | string;
1439
+ ratio?: string;
1440
+ title?: string;
1441
+ chrome?: boolean;
1442
+ eager?: boolean;
1443
+ caption?: React.ReactNode;
1444
+ children?: React.ReactNode;
1445
+ }
1446
+ export interface Persona {
1447
+ value: string;
1448
+ label: string;
1449
+ icon?: IconName;
1450
+ title: string;
1451
+ body: string;
1452
+ pointsTitle?: string;
1453
+ points?: string[];
1454
+ primary?: MarketingLink;
1455
+ secondary?: MarketingLink;
1456
+ }
1457
+ export interface PersonaSwitcherProps {
1458
+ label: string;
1459
+ personas: Persona[];
1460
+ value?: string;
1461
+ /** Keeps the choice in the URL hash; on by default. */ hash?: boolean;
1462
+ hashPrefix?: string;
1463
+ onChange?: (value: string) => void;
1464
+ }
1465
+ export interface ProofStatStripProps {
1466
+ label: string;
1467
+ items: {
1468
+ value: number | string;
1469
+ label: string;
1470
+ /** The file that proves the figure. */ source?: MarketingLink;
1471
+ }[];
1472
+ }
1473
+ export interface GateLifecycleRailProps {
1474
+ label: string;
1475
+ acts: {
1476
+ name: string;
1477
+ range?: string;
1478
+ gates: {
1479
+ n: number;
1480
+ code: PhaseCode;
1481
+ name: string;
1482
+ summary?: string;
1483
+ /** One criterion from the canon, quoted as written. */ evidence?: string;
1484
+ }[];
1485
+ }[];
1486
+ }
1487
+ export interface SurfaceTriptychProps {
1488
+ items: {
1489
+ name: string;
1490
+ icon?: IconName;
1491
+ audience?: string;
1492
+ body: string;
1493
+ status?: { label: string; tone?: TagProps["tone"] };
1494
+ points?: string[];
1495
+ link?: MarketingLink;
1496
+ }[];
1497
+ }
1498
+ export interface FeatureGridProps {
1499
+ columns?: 2 | 3 | 4 | 5;
1500
+ headingLevel?: 2 | 3 | 4;
1501
+ items: {
1502
+ title: string;
1503
+ /** A department code draws its glyph and prints beside the name. */ code?: DepartmentCode;
1504
+ icon?: IconName;
1505
+ body?: string;
1506
+ link?: MarketingLink & { external?: boolean };
1507
+ }[];
1508
+ }
1509
+ export type ComparisonValue = "yes" | "partial" | "no" | "unpublished";
1510
+ export interface ComparisonTableProps {
1511
+ caption: string;
1512
+ /** The date the cells were last checked, already formatted for the locale. */ verified?: string;
1513
+ featureLabel?: string;
1514
+ columns: { name: string; highlight?: boolean }[];
1515
+ rows: {
1516
+ feature: string;
1517
+ cells: { value: ComparisonValue; text?: string; source?: MarketingLink }[];
1518
+ }[];
1519
+ footnote?: React.ReactNode;
1520
+ }
1521
+ export interface PriceDisplayProps {
1522
+ /** null is unpriced and renders Quoted, never zero. */ amount: number | null;
1523
+ currency?: string;
1524
+ period?: "month" | "year" | null;
1525
+ /** Prints the tax label for the visitor's region. */ taxMode?: "exclusive" | "inclusive" | null;
1526
+ from?: boolean;
1527
+ }
1528
+ export interface PricingPlan {
1529
+ name: string;
1530
+ blurb: string;
1531
+ /** Keyed by period value; null is unpriced. */ prices?: Record<string, number | null>;
1532
+ /** A plan sold by quote shows this monthly starting price. */ quoteFrom?: number;
1533
+ note?: React.ReactNode;
1534
+ cta?: MarketingLink;
1535
+ recommended?: boolean;
1536
+ limits?: { label: string; value: string }[];
1537
+ featuresTitle?: string;
1538
+ features?: string[];
1539
+ }
1540
+ export interface PricingTableProps {
1541
+ periods: { value: string; label: string; unit: "month" | "year"; note?: string }[];
1542
+ period?: string;
1543
+ currency?: string;
1544
+ taxMode?: "exclusive" | "inclusive";
1545
+ plans: PricingPlan[];
1546
+ /** Renewal, trial and cancellation terms. */ terms?: React.ReactNode;
1547
+ onChange?: (period: string) => void;
1548
+ }
1549
+ export interface FAQProps {
1550
+ headingLevel?: 2 | 3 | 4;
1551
+ items: { q: string; a: React.ReactNode; open?: boolean }[];
1552
+ }
1553
+ export interface TestimonialProps {
1554
+ quote: string;
1555
+ name: string;
1556
+ role: string;
1557
+ org?: string;
1558
+ /** Required. States the speaker's connection to the publisher. */ disclosure: string;
1559
+ }
1560
+ export interface LogoSlotWallProps {
1561
+ label: string;
1562
+ title?: string;
1563
+ logos?: { name: string; logoLight?: string; logoDark?: string }[];
1564
+ /** Empty slots drawn at 160 by 40 for design review. */ slots?: number;
1565
+ disclosure?: string;
1566
+ }
1567
+ export interface AIDisclosureBadgeProps {
1568
+ label?: string;
1569
+ provider?: string;
1570
+ href?: string;
1571
+ linkLabel?: string;
1572
+ }
1573
+ export interface CodeSampleProps {
1574
+ label: string;
1575
+ code: string;
1576
+ }
1577
+ export interface MarketingFooterProps {
1578
+ brand: React.ReactNode;
1579
+ tagline?: string;
1580
+ label: string;
1581
+ columns: { title: string; links: MarketingLink[] }[];
1582
+ legal: React.ReactNode;
1583
+ /** Only locales of open territories. */ locales?: Option[];
1584
+ locale?: string;
1585
+ onLocale?: React.ChangeEventHandler<HTMLSelectElement>;
1586
+ themes?: boolean;
1587
+ theme?: "dark" | "light" | "sunlight";
1588
+ onTheme?: (theme: string) => void;
1589
+ }
1590
+ export declare const ButtonLink: C<ButtonLinkProps>;
1591
+ export declare const MarketingNav: C<MarketingNavProps>;
1592
+ export declare const MarketingSection: C<MarketingSectionProps>;
1593
+ export declare const MarketingHero: C<MarketingHeroProps>;
1594
+ export declare const ScreenshotFrame: C<ScreenshotFrameProps>;
1595
+ export declare const PersonaSwitcher: C<PersonaSwitcherProps>;
1596
+ export declare const ProofStatStrip: C<ProofStatStripProps>;
1597
+ export declare const GateLifecycleRail: C<GateLifecycleRailProps>;
1598
+ export declare const SurfaceTriptych: C<SurfaceTriptychProps>;
1599
+ export declare const FeatureGrid: C<FeatureGridProps>;
1600
+ export declare const ComparisonTable: C<ComparisonTableProps>;
1601
+ export declare const PriceDisplay: C<PriceDisplayProps>;
1602
+ export declare const PricingTable: C<PricingTableProps>;
1603
+ export declare const FAQ: C<FAQProps>;
1604
+ export declare const Testimonial: C<TestimonialProps>;
1605
+ export declare const LogoSlotWall: C<LogoSlotWallProps>;
1606
+ export declare const AIDisclosureBadge: C<AIDisclosureBadgeProps>;
1607
+ export declare const CodeSample: C<CodeSampleProps>;
1608
+ export declare const MarketingFooter: C<MarketingFooterProps>;