@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,54 @@
1
+ import type { ButtonProps } from "../types/reference";
2
+ import { cx } from "../lib/cx.ts";
3
+
4
+ /**
5
+ * Button classes without the component: no hooks and no context, so server components and the
6
+ * hook-free templates in `@xos/ui/static` can style a link as a Button (ADR 0027).
7
+ */
8
+
9
+ type Variant = NonNullable<ButtonProps["variant"]>;
10
+ type Size = NonNullable<ButtonProps["size"]>;
11
+
12
+ const base = cx(
13
+ "inline-flex items-center justify-center gap-6 rounded-control border font-sans font-medium leading-none",
14
+ "whitespace-nowrap cursor-pointer select-none transition-colors duration-fast ease-standard",
15
+ "disabled:opacity-disabled disabled:cursor-not-allowed",
16
+ "aria-disabled:opacity-disabled aria-disabled:cursor-not-allowed",
17
+ "pointer-coarse:min-h-target-coarse pointer-coarse:min-w-target-coarse",
18
+ "forced-colors:border-[CanvasText] print:hidden",
19
+ );
20
+
21
+ /*
22
+ * State fills never use a brightness filter: it moves the label with the fill, and took the primary
23
+ * label to 4.06:1 hovered in Dark and the danger label under 4.5:1 pressed (A24-004). Primary
24
+ * darkens with the scrim overlay (xos-fill-accent in styles/components.css); the others hold the
25
+ * hover fill while pressed, a pair the contrast gate checks.
26
+ */
27
+ const VARIANT: Record<Variant, string> = {
28
+ primary: cx("xos-fill-accent bg-accent border-accent text-accent-text-on"),
29
+ secondary: cx(
30
+ "bg-bg-raised border-border-control text-text-primary hover:bg-bg-hover active:bg-bg-hover",
31
+ ),
32
+ ghost: cx(
33
+ "bg-transparent border-transparent text-text-secondary hover:bg-bg-hover hover:text-text-primary active:bg-bg-hover active:text-text-primary",
34
+ ),
35
+ danger: cx(
36
+ "bg-transparent border-border-control text-danger-text hover:bg-bg-hover active:bg-bg-hover",
37
+ ),
38
+ };
39
+
40
+ const SIZE: Record<Size, string> = {
41
+ sm: cx("h-control-sm px-8 text-text-12"),
42
+ md: cx("h-control-md px-12 text-text-13"),
43
+ lg: cx("h-control-lg px-16 text-text-13"),
44
+ /* The 44 px call to action on public pages (Marketing layer, decision D20). */
45
+ xl: cx("h-target-coarse px-20 text-text-14"),
46
+ };
47
+
48
+ /** Shared button classes, for controls that look like a Button but are not one (triggers, steppers). */
49
+ export function buttonClass(variant: Variant = "secondary", size: Size = "md"): string {
50
+ return cx(base, VARIANT[variant], SIZE[size]);
51
+ }
52
+
53
+ export const iconButtonClass = (variant: "ghost" | "secondary" = "ghost") =>
54
+ cx(base, VARIANT[variant], "h-control-md min-w-control-md p-0");
@@ -0,0 +1,7 @@
1
+ # ButtonLink
2
+
3
+ ButtonLink is a link drawn as a button, for calls to action that navigate.
4
+
5
+ Use it wherever a call to action goes to another page; Button stays for actions that happen in place. The `xl` size is 44 px tall and is the call to action size on public pages. Labels are at most three words and start with a verb. A page shows one primary ButtonLink per view; the rest are secondary or ghost.
6
+
7
+ The consumer provides `href` and the label. `external` opens a new tab with `rel="noopener noreferrer"`.
@@ -0,0 +1,3 @@
1
+ # Calendar
2
+
3
+ Calendar shows dated records by day, week, month or agenda with state icons.
@@ -0,0 +1,3 @@
1
+ # Card
2
+
3
+ Card groups related content on a raised surface with a 1 px border; dashboards tile them on the 12-column grid.
@@ -0,0 +1,9 @@
1
+ # Chart
2
+
3
+ Chart draws bar and line charts with one y-axis, thin marks, a legend for two or more series and a table view one click away.
4
+
5
+ - Series take `viz-cat-1` to `viz-cat-7` in order, never cycled; an eighth series folds into Other (`viz-other`).
6
+ - Every series also differs by a second encoding: line style and marker shape on lines, texture on alternate bars.
7
+ - Bars have 4 px rounded data ends anchored to the baseline and 2 px gaps; lines are 2 px with 9 px markers.
8
+ - Hover or focus any mark for a tooltip; text never wears the series color.
9
+ - A missing value is drawn as a gap, never as zero, and reads No value in the table.
@@ -0,0 +1,228 @@
1
+ import { useState, type ReactElement } from "react";
2
+ import { cx } from "../lib/cx.ts";
3
+ import { useFormat, useLocale, usePreferences, useT } from "../lib/context.tsx";
4
+ import { isMenuKey, useItemSelection } from "../lib/selection.ts";
5
+ import {
6
+ formatDate,
7
+ monthCells,
8
+ monthTitle,
9
+ parseIso,
10
+ toIso,
11
+ weekdayNames,
12
+ } from "../lib/format.ts";
13
+ import { StateIcon } from "../StateIcon/StateIcon.tsx";
14
+ import { SegmentedControl } from "../Navigation/Navigation.tsx";
15
+ import { Icon } from "../Icon/Icon.tsx";
16
+ import { type CalendarProps, type TimelineCategory } from "./Charts.types.ts";
17
+ import { TL_CATEGORY } from "./categories.ts";
18
+
19
+ /**
20
+ * Dated records by month or agenda with state icons. With `selection`, events that have an `id`
21
+ * select as rows of a list do (X and Shift+X, Cmd or Ctrl+click, Shift+click, Cmd or Ctrl+A, Esc),
22
+ * in date order. Right-click, Shift+F10 or the Context Menu key on such an event calls
23
+ * `onItemContextMenu`. An event carries its `data-item` id and `data-column="title"`, so a page can
24
+ * preview it (hover cards). `days` gives dates their day-type tags (B4), each drawn as text with an icon and a
25
+ * categorical swatch, so a type never reads by colour alone.
26
+ */
27
+ export function Calendar({
28
+ month,
29
+ today,
30
+ events,
31
+ days = [],
32
+ onEventSelect,
33
+ selection,
34
+ onItemContextMenu,
35
+ }: CalendarProps): ReactElement {
36
+ const t = useT();
37
+ const fmt = useFormat();
38
+ const locale = useLocale();
39
+ const { weekStart: firstDay, dateFormat } = usePreferences();
40
+ const [view, setView] = useState("month");
41
+ const { y, m } = parseIso(month);
42
+ const title = monthTitle(locale, y, m);
43
+ const byDate = new Map<string, CalendarProps["events"]>();
44
+ for (const e of events) byDate.set(e.date, [...(byDate.get(e.date) ?? []), e]);
45
+ const sorted = [...events].sort((a, b) => a.date.localeCompare(b.date));
46
+ const tagsByDate = new Map(days.map((d) => [d.date, d.tags]));
47
+ const tagList = (tags: readonly TimelineCategory[] | undefined) =>
48
+ tags && tags.length > 0 ? (
49
+ <ul className="m-0 flex list-none flex-wrap gap-2 p-0" aria-label={t("calendar.dayTypes")}>
50
+ {tags.map((tag) => (
51
+ <li
52
+ key={tag.label}
53
+ className="inline-flex max-w-full items-center gap-2 rounded-chip bg-bg-surface px-2 text-text-11 text-text-secondary"
54
+ >
55
+ <span
56
+ aria-hidden="true"
57
+ className={cx(
58
+ "inline-block size-(--space-6) flex-none rounded-mark",
59
+ TL_CATEGORY[tag.category],
60
+ )}
61
+ />
62
+ {tag.icon ? <Icon name={tag.icon} size={12} /> : null}
63
+ <span className="truncate">{tag.label}</span>
64
+ </li>
65
+ ))}
66
+ </ul>
67
+ ) : null;
68
+ const ids = () => sorted.flatMap((e) => (e.id === undefined ? [] : [e.id]));
69
+ const select = useItemSelection(selection, ids);
70
+ const selectedCount = selection ? ids().filter(select.isSelected).length : 0;
71
+ const eventButton = (e: CalendarProps["events"][number], i: number) => {
72
+ const id = e.id;
73
+ const selected = id !== undefined && select.isSelected(id);
74
+ return (
75
+ <button
76
+ key={`${e.label}-${i}`}
77
+ type="button"
78
+ data-item={id}
79
+ data-column="title"
80
+ data-selected={selected ? "" : undefined}
81
+ onClick={(event) => {
82
+ if (id === undefined || !select.onClick(event, id)) onEventSelect?.(e);
83
+ }}
84
+ {...(id === undefined
85
+ ? {}
86
+ : {
87
+ onKeyDown: (event) => {
88
+ if (onItemContextMenu && isMenuKey(event)) {
89
+ event.preventDefault();
90
+ onItemContextMenu(id, null, event.currentTarget);
91
+ return;
92
+ }
93
+ select.onKey(event, id);
94
+ },
95
+ ...(selection
96
+ ? {
97
+ onMouseDown: (event) => {
98
+ // Shift+click selects a range, not the text between.
99
+ if (event.shiftKey) event.preventDefault();
100
+ },
101
+ }
102
+ : {}),
103
+ ...(onItemContextMenu
104
+ ? {
105
+ onContextMenu: (event) => {
106
+ event.preventDefault();
107
+ onItemContextMenu(
108
+ id,
109
+ { x: event.clientX, y: event.clientY },
110
+ event.currentTarget,
111
+ );
112
+ },
113
+ }
114
+ : {}),
115
+ })}
116
+ className={cx(
117
+ "flex items-center gap-4 w-full min-h-(--space-24) px-4 py-2 rounded-chip border-0 bg-bg-hover text-start text-text-12 truncate cursor-pointer",
118
+ "data-selected:ring-(length:--stroke-width-focus) data-selected:ring-inset data-selected:ring-accent",
119
+ )}
120
+ >
121
+ <StateIcon state={e.state} size={12} />
122
+ <span className="truncate">{e.label}</span>
123
+ {selected ? <span className="sr-only">{t("bulk.itemSelected")}</span> : null}
124
+ </button>
125
+ );
126
+ };
127
+ return (
128
+ <div className="flex flex-col gap-8">
129
+ {selection ? (
130
+ <span role="status" className="sr-only">
131
+ {selectedCount > 0 ? t("bulk.selected", { n: fmt.number(selectedCount) }) : ""}
132
+ </span>
133
+ ) : null}
134
+ <div className="flex flex-wrap items-center justify-between gap-8">
135
+ <h2 className="m-0 text-heading-16 font-semibold">{title}</h2>
136
+ <SegmentedControl
137
+ label={t("calendar.range")}
138
+ value={view}
139
+ onChange={setView}
140
+ options={[
141
+ { value: "month", label: t("calendar.month") },
142
+ { value: "agenda", label: t("calendar.agenda") },
143
+ ]}
144
+ />
145
+ </div>
146
+ {view === "agenda" ? (
147
+ <ol className="flex flex-col m-0 p-0 list-none">
148
+ {sorted.map((e, i) => (
149
+ <li
150
+ key={`${e.date}-${i}`}
151
+ className="grid grid-cols-[var(--ui-props-label)_minmax(0,1fr)] items-center gap-8 min-h-row-default border-b border-border-subtle"
152
+ >
153
+ <time dateTime={e.date} className="text-text-secondary tabular-nums">
154
+ {formatDate(locale, e.date, dateFormat)}
155
+ </time>
156
+ <div className="flex min-w-0 flex-col gap-2">
157
+ {i === sorted.findIndex((x) => x.date === e.date)
158
+ ? tagList(tagsByDate.get(e.date))
159
+ : null}
160
+ {eventButton(e, i)}
161
+ </div>
162
+ </li>
163
+ ))}
164
+ </ol>
165
+ ) : (
166
+ <table
167
+ aria-label={title}
168
+ className="w-full table-fixed border-collapse border-s border-t border-border-subtle"
169
+ >
170
+ <thead>
171
+ <tr>
172
+ {weekdayNames(locale, firstDay).map((d) => (
173
+ <th
174
+ key={d}
175
+ scope="col"
176
+ className="p-6 max-sm:px-2 text-center text-text-11 font-medium text-text-secondary bg-bg-surface border-e border-b border-border-subtle"
177
+ >
178
+ {d}
179
+ </th>
180
+ ))}
181
+ </tr>
182
+ </thead>
183
+ <tbody>
184
+ {monthCells(locale, y, m, firstDay).map((week, wi) => (
185
+ <tr key={wi}>
186
+ {week.map((d, di) => {
187
+ const iso = d === null ? null : toIso(y, m, d);
188
+ const dayEvents = iso ? (byDate.get(iso) ?? []) : [];
189
+ return (
190
+ <td
191
+ key={di}
192
+ className={cx(
193
+ "min-h-(--space-64) p-4 align-top border-e border-b border-border-subtle text-text-12",
194
+ d === null && "bg-bg-surface",
195
+ )}
196
+ >
197
+ {d !== null ? (
198
+ <div className="flex flex-col gap-2">
199
+ <span
200
+ aria-current={iso === today ? "date" : undefined}
201
+ className={cx(
202
+ "self-start px-4 py-2 rounded-chip text-text-11 text-text-secondary tabular-nums",
203
+ iso === today &&
204
+ "text-text-primary font-semibold ring-(length:--stroke-width-focus) ring-inset ring-accent",
205
+ )}
206
+ >
207
+ {d}
208
+ </span>
209
+ {tagList(iso ? tagsByDate.get(iso) : undefined)}
210
+ {dayEvents.slice(0, 3).map(eventButton)}
211
+ {dayEvents.length > 3 ? (
212
+ <span className="text-text-secondary">
213
+ {t("calendar.more", { n: dayEvents.length - 3 })}
214
+ </span>
215
+ ) : null}
216
+ </div>
217
+ ) : null}
218
+ </td>
219
+ );
220
+ })}
221
+ </tr>
222
+ ))}
223
+ </tbody>
224
+ </table>
225
+ )}
226
+ </div>
227
+ );
228
+ }