@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.
- package/LICENSE +21 -0
- package/README.md +32 -2
- package/package.json +76 -4
- package/scripts/generate-stories.mjs +85 -0
- package/src/AIDisclosureBadge/README.md +7 -0
- package/src/AccessGridMatrix/README.md +3 -0
- package/src/Accordion/README.md +7 -0
- package/src/ActivityFeedItem/README.md +3 -0
- package/src/AgencySlate/README.md +3 -0
- package/src/AppShell/README.md +5 -0
- package/src/ApplicationForm/README.md +3 -0
- package/src/AssertionRankBadge/README.md +5 -0
- package/src/AvailabilityCalendar/README.md +3 -0
- package/src/Avatar/Avatar.tsx +56 -0
- package/src/Avatar/README.md +3 -0
- package/src/Avatar/avatar-class.ts +19 -0
- package/src/AvatarStack/README.md +3 -0
- package/src/Badge/README.md +3 -0
- package/src/Banner/README.md +3 -0
- package/src/BidSheet/README.md +3 -0
- package/src/Board/README.md +6 -0
- package/src/BrandMark/BrandMark.tsx +95 -0
- package/src/BrandMark/README.md +7 -0
- package/src/BrandSlot/README.md +6 -0
- package/src/Breadcrumbs/README.md +3 -0
- package/src/BudgetGrid/README.md +10 -0
- package/src/BulkActionBar/README.md +3 -0
- package/src/Button/Button.tsx +100 -0
- package/src/Button/README.md +10 -0
- package/src/Button/button-class.ts +54 -0
- package/src/ButtonLink/README.md +7 -0
- package/src/Calendar/README.md +3 -0
- package/src/Card/README.md +3 -0
- package/src/Chart/README.md +9 -0
- package/src/Charts/Calendar.tsx +228 -0
- package/src/Charts/Chart.tsx +547 -0
- package/src/Charts/Charts.tsx +20 -0
- package/src/Charts/Charts.types.ts +40 -0
- package/src/Charts/Gallery.tsx +25 -0
- package/src/Charts/Heatmap.tsx +116 -0
- package/src/Charts/OrgChart.tsx +53 -0
- package/src/Charts/ResourceSchedule.tsx +91 -0
- package/src/Charts/Sparkline.tsx +59 -0
- package/src/Charts/Timeline.tsx +777 -0
- package/src/Charts/categories.ts +21 -0
- package/src/Charts/timeline-plan.ts +191 -0
- package/src/Checkbox/README.md +6 -0
- package/src/ChecklistRunner/README.md +3 -0
- package/src/Chips/Badge.tsx +27 -0
- package/src/Chips/Chips.shared.tsx +34 -0
- package/src/Chips/Chips.tsx +21 -0
- package/src/Chips/Chips.types.ts +35 -0
- package/src/Chips/DepartmentChip.tsx +16 -0
- package/src/Chips/PhaseChip.tsx +16 -0
- package/src/Chips/PropertyChip.tsx +15 -0
- package/src/Chips/RecordKindChip.tsx +14 -0
- package/src/Chips/StateChip.tsx +19 -0
- package/src/Chips/Tag.tsx +47 -0
- package/src/Chips/URIDChip.tsx +14 -0
- package/src/Chips/chipClass.tsx +8 -0
- package/src/Chips/codeClass.tsx +6 -0
- package/src/ClockButton/README.md +6 -0
- package/src/CodeSample/README.md +7 -0
- package/src/ColorPicker/README.md +5 -0
- package/src/Combobox/README.md +7 -0
- package/src/CommandMenu/CommandMenu.tsx +179 -0
- package/src/CommandMenu/README.md +5 -0
- package/src/ComparisonTable/README.md +9 -0
- package/src/Compass/ChecklistRunner.tsx +128 -0
- package/src/Compass/ClockButton.tsx +57 -0
- package/src/Compass/Compass.shared.tsx +58 -0
- package/src/Compass/Compass.tsx +26 -0
- package/src/Compass/Compass.types.ts +79 -0
- package/src/Compass/DaySheetView.tsx +104 -0
- package/src/Compass/ForceUpdateScreen.tsx +29 -0
- package/src/Compass/LiveActivity.tsx +60 -0
- package/src/Compass/OfflineBanner.tsx +31 -0
- package/src/Compass/PhotoCapture.tsx +69 -0
- package/src/Compass/QuickIncidentSheet.tsx +46 -0
- package/src/Compass/ScanSheet.tsx +83 -0
- package/src/Compass/ShiftCard.tsx +55 -0
- package/src/Compass/SignaturePad.tsx +71 -0
- package/src/Compass/SyncConflictSheet.tsx +60 -0
- package/src/ConsentBanner/ConsentBanner.tsx +210 -0
- package/src/ConsentBanner/ConsentBannerStatic.tsx +163 -0
- package/src/ConsentBanner/ConsentSettings.tsx +213 -0
- package/src/ConsentBanner/README.md +101 -0
- package/src/ConsentBanner/consent.ts +238 -0
- package/src/ConsentBanner/index.ts +40 -0
- package/src/ConsentBanner/static.ts +11 -0
- package/src/ConsentBanner/useConsent.ts +160 -0
- package/src/ContextMenu/README.md +3 -0
- package/src/CoordinateMatrix/README.md +6 -0
- package/src/CredentialBadge/README.md +7 -0
- package/src/CurrencyInput/README.md +7 -0
- package/src/DataTable/DataTable.tsx +1034 -0
- package/src/DataTable/DataTableResizer.tsx +72 -0
- package/src/DataTable/DataTableVirtualizer.tsx +58 -0
- package/src/DataTable/README.md +9 -0
- package/src/DatePicker/README.md +5 -0
- package/src/DateRangePicker/README.md +3 -0
- package/src/DaySheetView/README.md +3 -0
- package/src/DepartmentChip/README.md +3 -0
- package/src/DepartmentGlyph/README.md +18 -0
- package/src/Dialog/README.md +3 -0
- package/src/DiffViewer/README.md +3 -0
- package/src/Divider/README.md +3 -0
- package/src/Drawer/README.md +3 -0
- package/src/DropdownMenu/README.md +3 -0
- package/src/EPKViewer/README.md +3 -0
- package/src/Editing/ColorPicker.tsx +125 -0
- package/src/Editing/DiffViewer.tsx +49 -0
- package/src/Editing/Editing.tsx +29 -0
- package/src/Editing/Editing.types.ts +71 -0
- package/src/Editing/FilterBuilder.tsx +72 -0
- package/src/Editing/QuickAdd.tsx +102 -0
- package/src/Editing/QuickAddChips.tsx +180 -0
- package/src/Editing/contrastRatio.tsx +11 -0
- package/src/Editing/parseQuickAdd.tsx +187 -0
- package/src/Editing/quickAddCore.ts +204 -0
- package/src/Editing/timeShorthand.ts +157 -0
- package/src/Editing/useQuickAdd.ts +201 -0
- package/src/EmergencyCodeCard/README.md +10 -0
- package/src/EmptyState/README.md +5 -0
- package/src/EngagementTimeline/README.md +3 -0
- package/src/ErrorState/README.md +3 -0
- package/src/FAQ/README.md +7 -0
- package/src/FeatureGrid/README.md +7 -0
- package/src/Feedback/Banner.tsx +40 -0
- package/src/Feedback/EmptyState.tsx +32 -0
- package/src/Feedback/ErrorState.tsx +32 -0
- package/src/Feedback/Feedback.shared.tsx +38 -0
- package/src/Feedback/Feedback.tsx +18 -0
- package/src/Feedback/Feedback.types.ts +40 -0
- package/src/Feedback/InlineAlert.tsx +19 -0
- package/src/Feedback/RefusalNotice.tsx +46 -0
- package/src/Feedback/RegionBoundary.tsx +102 -0
- package/src/Feedback/Toast.tsx +31 -0
- package/src/Feedback/ToastRegion.tsx +26 -0
- package/src/Feedback/UndoToast.tsx +97 -0
- package/src/FeedbackWidget/README.md +3 -0
- package/src/Field/Field.tsx +81 -0
- package/src/FileDrop/README.md +3 -0
- package/src/FilePreviewer/README.md +3 -0
- package/src/FilterBuilder/README.md +3 -0
- package/src/ForceUpdateScreen/README.md +3 -0
- package/src/Forms/Checkbox.tsx +14 -0
- package/src/Forms/CurrencyInput.tsx +40 -0
- package/src/Forms/Forms.shared.tsx +5 -0
- package/src/Forms/Forms.tsx +20 -0
- package/src/Forms/Forms.types.ts +33 -0
- package/src/Forms/Input.tsx +28 -0
- package/src/Forms/Money.tsx +15 -0
- package/src/Forms/NumberInput.tsx +85 -0
- package/src/Forms/Radio.tsx +31 -0
- package/src/Forms/Select.tsx +54 -0
- package/src/Forms/Switch.tsx +14 -0
- package/src/Forms/Textarea.tsx +30 -0
- package/src/Gallery/README.md +5 -0
- package/src/GateLifecycleRail/README.md +7 -0
- package/src/GateReadinessPanel/README.md +8 -0
- package/src/Gateway/AgencySlate.tsx +76 -0
- package/src/Gateway/ApplicationForm.tsx +48 -0
- package/src/Gateway/AvailabilityCalendar.tsx +82 -0
- package/src/Gateway/EPKViewer.tsx +77 -0
- package/src/Gateway/EngagementTimeline.tsx +43 -0
- package/src/Gateway/Gateway.shared.tsx +5 -0
- package/src/Gateway/Gateway.tsx +30 -0
- package/src/Gateway/Gateway.types.ts +69 -0
- package/src/Gateway/OnboardingPacket.tsx +61 -0
- package/src/Gateway/OpportunityCard.tsx +73 -0
- package/src/Gateway/OpportunityFilters.tsx +64 -0
- package/src/Gateway/PaymentTracker.tsx +71 -0
- package/src/Gateway/PayoutDetailsForm.tsx +62 -0
- package/src/Gateway/ProfileEditor.tsx +45 -0
- package/src/Gateway/ProgressBar.tsx +30 -0
- package/src/Gateway/RatingDialog.tsx +83 -0
- package/src/Gateway/UpNextCard.tsx +76 -0
- package/src/Glyphs/Glyphs.tsx +66 -0
- package/src/Grids/BidSheet.tsx +63 -0
- package/src/Grids/BudgetGrid.tsx +164 -0
- package/src/Grids/Grids.shared.tsx +5 -0
- package/src/Grids/Grids.tsx +11 -0
- package/src/Grids/Grids.types.ts +38 -0
- package/src/Grids/SpreadsheetGrid.tsx +445 -0
- package/src/Grids/columnTotal.tsx +14 -0
- package/src/Grids/glForCode.tsx +11 -0
- package/src/Grids/parseCell.tsx +16 -0
- package/src/Help/FeedbackWidget.tsx +89 -0
- package/src/Help/Help.tsx +14 -0
- package/src/Help/Help.types.ts +51 -0
- package/src/Help/HelpPanel.tsx +116 -0
- package/src/Help/NotificationCenter.tsx +100 -0
- package/src/Help/OnboardingChecklist.tsx +57 -0
- package/src/Help/ShortcutEditor.tsx +81 -0
- package/src/Help/WhatsNew.tsx +33 -0
- package/src/HelpPanel/README.md +5 -0
- package/src/HoverCard/README.md +3 -0
- package/src/Icon/Icon.tsx +47 -0
- package/src/Icon/README.md +9 -0
- package/src/IconButton/README.md +6 -0
- package/src/Identity/BrandSlot.tsx +20 -0
- package/src/Identity/BrandSlotFrame.tsx +38 -0
- package/src/Identity/CredentialBadge.tsx +92 -0
- package/src/Identity/Identity.tsx +14 -0
- package/src/Identity/Identity.types.ts +25 -0
- package/src/Identity/PresenceIndicator.tsx +37 -0
- package/src/Identity/QRCode.tsx +22 -0
- package/src/Identity/WhiteLabelPreview.tsx +33 -0
- package/src/Identity/qrPath.tsx +16 -0
- package/src/Identity/tokenVariable.tsx +9 -0
- package/src/InlineAlert/README.md +3 -0
- package/src/Input/README.md +8 -0
- package/src/Kbd/Kbd.tsx +30 -0
- package/src/Kbd/README.md +6 -0
- package/src/Layout/AppShell.tsx +151 -0
- package/src/Layout/Layout.tsx +14 -0
- package/src/Layout/Layout.types.ts +43 -0
- package/src/Layout/PageHeader.tsx +22 -0
- package/src/Layout/ResizablePanel.tsx +81 -0
- package/src/Layout/ScrollRegion.tsx +107 -0
- package/src/Layout/SplitView.tsx +78 -0
- package/src/Layout/Stepper.tsx +39 -0
- package/src/LegalText/LegalText.tsx +289 -0
- package/src/LegalText/README.md +10 -0
- package/src/LegalText/index.ts +29 -0
- package/src/LegalText/legal-markdown.ts +581 -0
- package/src/Link/Link.tsx +25 -0
- package/src/Link/README.md +5 -0
- package/src/Link/link-class.ts +10 -0
- package/src/LiveActivity/README.md +3 -0
- package/src/LogoSlotWall/README.md +7 -0
- package/src/MapView/README.md +5 -0
- package/src/Marketing/AIDisclosureBadge.tsx +31 -0
- package/src/Marketing/ButtonLink.tsx +32 -0
- package/src/Marketing/CodeSample.tsx +47 -0
- package/src/Marketing/ComparisonScroll.tsx +7 -0
- package/src/Marketing/ComparisonTable.tsx +104 -0
- package/src/Marketing/FAQ.tsx +26 -0
- package/src/Marketing/FeatureGrid.tsx +65 -0
- package/src/Marketing/GateLifecycleRail.tsx +52 -0
- package/src/Marketing/LogoSlotWall.tsx +53 -0
- package/src/Marketing/Marketing.tsx +49 -0
- package/src/Marketing/Marketing.types.ts +64 -0
- package/src/Marketing/MarketingFooter.tsx +88 -0
- package/src/Marketing/MarketingHero.tsx +45 -0
- package/src/Marketing/MarketingNav.tsx +76 -0
- package/src/Marketing/MarketingPoints.tsx +16 -0
- package/src/Marketing/MarketingSection.tsx +52 -0
- package/src/Marketing/PersonaSwitcher.tsx +137 -0
- package/src/Marketing/PriceDisplay.tsx +56 -0
- package/src/Marketing/PricingTable.tsx +122 -0
- package/src/Marketing/ProofStatStrip.tsx +35 -0
- package/src/Marketing/ScreenshotFrame.tsx +56 -0
- package/src/Marketing/SurfaceTriptych.tsx +43 -0
- package/src/Marketing/Testimonial.tsx +45 -0
- package/src/Marketing/marketing-copy.ts +25 -0
- package/src/Marketing/provided.tsx +36 -0
- package/src/MarketingFooter/README.md +7 -0
- package/src/MarketingHero/README.md +7 -0
- package/src/MarketingNav/README.md +7 -0
- package/src/MarketingSection/README.md +7 -0
- package/src/Media/FilePreviewer.tsx +86 -0
- package/src/Media/MapView.tsx +200 -0
- package/src/Media/Media.tsx +11 -0
- package/src/Media/Media.types.ts +47 -0
- package/src/Media/RichTextEditor.tsx +198 -0
- package/src/Media/toLngLat.tsx +13 -0
- package/src/Menus/ContextMenu.tsx +106 -0
- package/src/Menus/DropdownMenu.tsx +51 -0
- package/src/Menus/Menus.shared.tsx +67 -0
- package/src/Menus/Menus.tsx +13 -0
- package/src/Menus/Menus.types.ts +49 -0
- package/src/Menus/OrgSwitcher.tsx +69 -0
- package/src/Menus/compactTriggerClass.tsx +7 -0
- package/src/Menus/menuClass.tsx +4 -0
- package/src/Menus/menuItemClass.tsx +7 -0
- package/src/Menus/orgSwitcherTriggerClass.tsx +7 -0
- package/src/Money/README.md +6 -0
- package/src/MultiSelect/README.md +3 -0
- package/src/Navigation/Accordion.tsx +59 -0
- package/src/Navigation/Breadcrumbs.tsx +59 -0
- package/src/Navigation/MoreFields.tsx +42 -0
- package/src/Navigation/Navigation.shared.tsx +32 -0
- package/src/Navigation/Navigation.tsx +21 -0
- package/src/Navigation/Navigation.types.ts +63 -0
- package/src/Navigation/Pagination.tsx +30 -0
- package/src/Navigation/SegmentedControl.tsx +87 -0
- package/src/Navigation/Sidebar.tsx +106 -0
- package/src/Navigation/TabBar.tsx +61 -0
- package/src/Navigation/Tabs.tsx +79 -0
- package/src/Navigation/TopNav.tsx +86 -0
- package/src/Navigation/sidebar-classes.ts +18 -0
- package/src/NotificationCenter/README.md +3 -0
- package/src/NumberInput/README.md +3 -0
- package/src/OfflineBanner/README.md +3 -0
- package/src/OnboardingChecklist/README.md +3 -0
- package/src/OnboardingPacket/README.md +3 -0
- package/src/OpportunityCard/README.md +5 -0
- package/src/OpportunityFilters/README.md +3 -0
- package/src/OrgChart/README.md +5 -0
- package/src/OrgSwitcher/README.md +3 -0
- package/src/Overlays/Dialog.tsx +54 -0
- package/src/Overlays/Drawer.tsx +62 -0
- package/src/Overlays/HoverCard.tsx +59 -0
- package/src/Overlays/Overlays.shared.tsx +12 -0
- package/src/Overlays/Overlays.tsx +20 -0
- package/src/Overlays/Overlays.types.ts +66 -0
- package/src/Overlays/Popover.tsx +70 -0
- package/src/Overlays/PropertyList.tsx +19 -0
- package/src/Overlays/ShortcutSheet.tsx +62 -0
- package/src/Overlays/SidePeek.tsx +117 -0
- package/src/Overlays/Tooltip.tsx +73 -0
- package/src/Overlays/panelClass.tsx +6 -0
- package/src/Overlays/popoverPanelClass.tsx +6 -0
- package/src/PageHeader/README.md +3 -0
- package/src/Pagination/README.md +3 -0
- package/src/PaymentTracker/README.md +3 -0
- package/src/PayoutDetailsForm/README.md +3 -0
- package/src/PersonaSwitcher/README.md +7 -0
- package/src/PhaseChip/README.md +5 -0
- package/src/PhaseGlyph/README.md +17 -0
- package/src/PhotoCapture/README.md +3 -0
- package/src/Pickers/Combobox.tsx +91 -0
- package/src/Pickers/DatePicker.tsx +60 -0
- package/src/Pickers/DateRangePicker.tsx +78 -0
- package/src/Pickers/FileDrop.tsx +84 -0
- package/src/Pickers/MultiSelect.tsx +118 -0
- package/src/Pickers/Pickers.shared.tsx +337 -0
- package/src/Pickers/Pickers.tsx +17 -0
- package/src/Pickers/Pickers.types.ts +47 -0
- package/src/Pickers/Slider.tsx +59 -0
- package/src/Pickers/TimePicker.tsx +68 -0
- package/src/Pickers/rankOptions.tsx +12 -0
- package/src/Popover/README.md +3 -0
- package/src/PresenceIndicator/README.md +3 -0
- package/src/PriceDisplay/README.md +7 -0
- package/src/PricingTable/README.md +9 -0
- package/src/ProfileEditor/README.md +3 -0
- package/src/ProgressBar/README.md +3 -0
- package/src/ProofStatStrip/README.md +7 -0
- package/src/PropertyChip/README.md +3 -0
- package/src/ProvenanceBadge/README.md +3 -0
- package/src/QRCode/README.md +6 -0
- package/src/QuickAdd/README.md +5 -0
- package/src/QuickIncidentSheet/README.md +3 -0
- package/src/Radio/README.md +3 -0
- package/src/RadioChannelTable/README.md +7 -0
- package/src/RatingDialog/README.md +3 -0
- package/src/ReconciliationTable/README.md +3 -0
- package/src/RecordKindChip/README.md +3 -0
- package/src/RecordKindGlyph/README.md +34 -0
- package/src/RecordRow/README.md +7 -0
- package/src/RefusalNotice/README.md +5 -0
- package/src/ResizablePanel/README.md +3 -0
- package/src/ResourceSchedule/README.md +6 -0
- package/src/RichTextEditor/README.md +3 -0
- package/src/RichTextEditor/extensions.ts +217 -0
- package/src/RunOfShowLive/README.md +5 -0
- package/src/ScanSheet/README.md +3 -0
- package/src/ScreenshotFrame/README.md +7 -0
- package/src/ScrollRegion/README.md +9 -0
- package/src/SegmentedControl/README.md +5 -0
- package/src/Select/README.md +5 -0
- package/src/ShiftCard/README.md +3 -0
- package/src/ShortcutEditor/README.md +3 -0
- package/src/ShortcutSheet/README.md +3 -0
- package/src/SidePeek/README.md +6 -0
- package/src/Sidebar/README.md +5 -0
- package/src/SignaturePad/README.md +3 -0
- package/src/Skeleton/README.md +3 -0
- package/src/Slider/README.md +3 -0
- package/src/SplitView/README.md +3 -0
- package/src/SpreadsheetGrid/README.md +9 -0
- package/src/StalenessIndicator/README.md +3 -0
- package/src/StatTile/README.md +6 -0
- package/src/StateChip/README.md +6 -0
- package/src/StateIcon/README.md +6 -0
- package/src/StateIcon/StateIcon.tsx +127 -0
- package/src/StatusHeatmap/README.md +15 -0
- package/src/Stepper/README.md +3 -0
- package/src/Surface/Skeleton.tsx +21 -0
- package/src/Surface/Surface.tsx +63 -0
- package/src/SurfaceTriptych/README.md +7 -0
- package/src/Switch/README.md +5 -0
- package/src/SyncConflictSheet/README.md +3 -0
- package/src/TabBar/README.md +7 -0
- package/src/Tabs/README.md +6 -0
- package/src/Tag/README.md +3 -0
- package/src/TemplateAuth/README.md +6 -0
- package/src/TemplateCollection/README.md +6 -0
- package/src/TemplateDashboard/README.md +8 -0
- package/src/TemplateDocument/README.md +5 -0
- package/src/TemplateGatewayShell/README.md +5 -0
- package/src/TemplateGridEditor/README.md +3 -0
- package/src/TemplateRecord/README.md +3 -0
- package/src/TemplateSettings/README.md +5 -0
- package/src/TemplateSplitView/README.md +3 -0
- package/src/TemplateSystem/README.md +5 -0
- package/src/TemplateWizard/README.md +3 -0
- package/src/Templates/TemplateAuth.tsx +16 -0
- package/src/Templates/TemplateCollection.tsx +35 -0
- package/src/Templates/TemplateDashboard.tsx +200 -0
- package/src/Templates/TemplateDocument.tsx +24 -0
- package/src/Templates/TemplateGatewayShell.tsx +36 -0
- package/src/Templates/TemplateGridEditor.tsx +17 -0
- package/src/Templates/TemplateRecord.tsx +31 -0
- package/src/Templates/TemplateSettings.tsx +26 -0
- package/src/Templates/TemplateSplitView.tsx +27 -0
- package/src/Templates/TemplateSystem.tsx +19 -0
- package/src/Templates/TemplateSystemLink.tsx +55 -0
- package/src/Templates/TemplateWizard.tsx +43 -0
- package/src/Templates/Templates.tsx +29 -0
- package/src/Templates/Templates.types.ts +153 -0
- package/src/Testimonial/README.md +7 -0
- package/src/Textarea/README.md +3 -0
- package/src/TimePicker/README.md +5 -0
- package/src/Timeline/README.md +6 -0
- package/src/Toast/README.md +3 -0
- package/src/Tooltip/README.md +3 -0
- package/src/TopNav/README.md +5 -0
- package/src/TreeView/README.md +3 -0
- package/src/URIDChip/README.md +5 -0
- package/src/UndoToast/README.md +3 -0
- package/src/UpNextCard/README.md +6 -0
- package/src/Views/ActivityFeedItem.tsx +52 -0
- package/src/Views/Board.tsx +229 -0
- package/src/Views/BulkActionBar.tsx +76 -0
- package/src/Views/RecordList.tsx +146 -0
- package/src/Views/RecordRow.tsx +132 -0
- package/src/Views/StatTile.tsx +88 -0
- package/src/Views/TreeView.tsx +161 -0
- package/src/Views/Views.tsx +18 -0
- package/src/Views/Views.types.ts +99 -0
- package/src/WhatsNew/README.md +3 -0
- package/src/WhiteLabelPreview/README.md +8 -0
- package/src/XOS/AccessGridMatrix.tsx +111 -0
- package/src/XOS/AssertionRankBadge.tsx +27 -0
- package/src/XOS/CoordinateMatrix.tsx +123 -0
- package/src/XOS/EmergencyCodeCard.tsx +109 -0
- package/src/XOS/GateReadinessPanel.tsx +100 -0
- package/src/XOS/ProvenanceBadge.tsx +19 -0
- package/src/XOS/RadioChannelTable.tsx +50 -0
- package/src/XOS/ReconciliationTable.tsx +64 -0
- package/src/XOS/RunOfShowLive.tsx +97 -0
- package/src/XOS/StalenessIndicator.tsx +31 -0
- package/src/XOS/StatusHeatmap.tsx +200 -0
- package/src/XOS/XOS.shared.tsx +90 -0
- package/src/XOS/XOS.tsx +29 -0
- package/src/XOS/XOS.types.ts +99 -0
- package/src/XOS/resolveStep.tsx +16 -0
- package/src/brand/defaults/README.md +13 -0
- package/src/brand/defaults/app-icon.svg +6 -0
- package/src/brand/defaults/favicon.svg +6 -0
- package/src/brand/defaults/logo-dark.svg +6 -0
- package/src/brand/defaults/logo-light.svg +6 -0
- package/src/brand/defaults/splash.svg +6 -0
- package/src/index.ts +606 -0
- package/src/lib/context.tsx +156 -0
- package/src/lib/cx.ts +4 -0
- package/src/lib/format.ts +200 -0
- package/src/lib/hooks.ts +187 -0
- package/src/lib/i18n.ts +97 -0
- package/src/lib/icons.ts +45 -0
- package/src/lib/live.ts +92 -0
- package/src/lib/preferences.ts +242 -0
- package/src/lib/route-transition.tsx +22 -0
- package/src/lib/selection.ts +92 -0
- package/src/lib/shortcut-targets.ts +125 -0
- package/src/lib/theme.ts +50 -0
- package/src/lib/undo-stack.ts +125 -0
- package/src/marketing.ts +33 -0
- package/src/pwa/action-outcome.tsx +81 -0
- package/src/pwa/analytics.ts +236 -0
- package/src/pwa/browser-push.tsx +132 -0
- package/src/pwa/client.ts +126 -0
- package/src/pwa/index.ts +40 -0
- package/src/pwa/offline-key.ts +18 -0
- package/src/pwa/service-worker.ts +229 -0
- package/src/static.ts +10 -0
- package/src/styles/base.css +208 -0
- package/src/styles/components.css +453 -0
- package/src/styles/index.css +16 -0
- package/src/styles/marketing.css +1260 -0
- package/src/styles/reference.css +5792 -0
- package/src/types/reference.d.ts +1608 -0
- package/tailwind.config.cjs +3 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
import type { HeatmapProps as ReferenceHeatmapProps } from "../types/reference";
|
|
3
|
+
import { cx } from "../lib/cx.ts";
|
|
4
|
+
import { useT } from "../lib/context.tsx";
|
|
5
|
+
import { Icon } from "../Icon/Icon.tsx";
|
|
6
|
+
import { ScrollRegion } from "../Layout/Layout.tsx";
|
|
7
|
+
|
|
8
|
+
export type HeatmapProps = ReferenceHeatmapProps & {
|
|
9
|
+
/** Called when a cell's button is pressed, with its row and column keys; cells are buttons only when given. */
|
|
10
|
+
onCellActivate?: (row: string, column: string) => void;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const STEP: Record<number, string> = {
|
|
14
|
+
0: cx("bg-bg-canvas text-text-tertiary"),
|
|
15
|
+
1: cx("bg-viz-seq-2 text-viz-ink"),
|
|
16
|
+
2: cx("bg-viz-seq-4 text-viz-ink"),
|
|
17
|
+
3: cx("bg-viz-seq-6 text-accent-text-on"),
|
|
18
|
+
4: cx("bg-viz-seq-8 text-accent-text-on"),
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* A numeric heatmap (B4, G-45; ADR 0143 decision 7): rows against columns as a native table, so a screen reader
|
|
23
|
+
* reads each cell with its row and column headers. Every cell shows its value as text beside its tint, and a cell
|
|
24
|
+
* over its limit carries an icon and a sentence, so the tint is never the only signal. Cells are keyed
|
|
25
|
+
* '<row>:<col>'. With `onCellActivate` each cell is a button that opens its detail.
|
|
26
|
+
*/
|
|
27
|
+
export function Heatmap({
|
|
28
|
+
label,
|
|
29
|
+
rowHeader,
|
|
30
|
+
rows,
|
|
31
|
+
columns,
|
|
32
|
+
cells,
|
|
33
|
+
onCellActivate,
|
|
34
|
+
}: HeatmapProps): ReactElement {
|
|
35
|
+
const t = useT();
|
|
36
|
+
const th =
|
|
37
|
+
"px-8 py-6 text-text-12 font-medium text-text-secondary bg-bg-surface border-b border-e border-border-subtle";
|
|
38
|
+
return (
|
|
39
|
+
<ScrollRegion label={label}>
|
|
40
|
+
<table className="w-full border-collapse text-text-13">
|
|
41
|
+
<caption className="sr-only">{label}</caption>
|
|
42
|
+
<thead>
|
|
43
|
+
<tr>
|
|
44
|
+
<th scope="col" className={cx(th, "text-start")}>
|
|
45
|
+
{rowHeader}
|
|
46
|
+
</th>
|
|
47
|
+
{columns.map((c) => (
|
|
48
|
+
<th key={c.key} scope="col" className={cx(th, "text-center whitespace-nowrap")}>
|
|
49
|
+
{c.fullLabel && c.fullLabel !== c.label ? (
|
|
50
|
+
<abbr title={c.fullLabel} className="no-underline">
|
|
51
|
+
<span aria-hidden="true">{c.label}</span>
|
|
52
|
+
<span className="sr-only">{c.fullLabel}</span>
|
|
53
|
+
</abbr>
|
|
54
|
+
) : (
|
|
55
|
+
c.label
|
|
56
|
+
)}
|
|
57
|
+
</th>
|
|
58
|
+
))}
|
|
59
|
+
</tr>
|
|
60
|
+
</thead>
|
|
61
|
+
<tbody>
|
|
62
|
+
{rows.map((r) => (
|
|
63
|
+
<tr key={r.key}>
|
|
64
|
+
<th
|
|
65
|
+
scope="row"
|
|
66
|
+
className="px-8 py-6 text-start font-medium whitespace-nowrap bg-bg-surface border-b border-e border-border-subtle"
|
|
67
|
+
>
|
|
68
|
+
{r.label}
|
|
69
|
+
</th>
|
|
70
|
+
{columns.map((c) => {
|
|
71
|
+
const cell = cells[`${r.key}:${c.key}`];
|
|
72
|
+
const step = cell?.step ?? 0;
|
|
73
|
+
const content = (
|
|
74
|
+
<span className="inline-flex items-center justify-center gap-4 tabular-nums">
|
|
75
|
+
{cell?.over ? <Icon name="TriangleAlert" size={12} /> : null}
|
|
76
|
+
<span>{cell?.text ?? ""}</span>
|
|
77
|
+
{cell?.over && !onCellActivate ? (
|
|
78
|
+
<span className="sr-only">{cell.over}</span>
|
|
79
|
+
) : null}
|
|
80
|
+
</span>
|
|
81
|
+
);
|
|
82
|
+
return (
|
|
83
|
+
<td
|
|
84
|
+
key={c.key}
|
|
85
|
+
data-step={step}
|
|
86
|
+
title={cell?.over}
|
|
87
|
+
className={cx(
|
|
88
|
+
"h-row-default min-w-(--space-56) p-0 text-center border-b border-e border-border-subtle",
|
|
89
|
+
STEP[step],
|
|
90
|
+
cell?.over &&
|
|
91
|
+
"font-semibold ring-(length:--stroke-width-focus) ring-inset ring-danger",
|
|
92
|
+
"forced-colors:border",
|
|
93
|
+
)}
|
|
94
|
+
>
|
|
95
|
+
{onCellActivate && cell ? (
|
|
96
|
+
<button
|
|
97
|
+
type="button"
|
|
98
|
+
aria-label={`${t("heatmap.cell", { row: r.label, column: c.fullLabel ?? c.label, value: cell.text })}${cell.over ? `, ${cell.over}` : ""}`}
|
|
99
|
+
onClick={() => onCellActivate(r.key, c.key)}
|
|
100
|
+
className="h-full w-full cursor-pointer border-0 bg-transparent px-6 text-inherit focus-visible:outline-(length:--stroke-width-focus) focus-visible:outline-accent"
|
|
101
|
+
>
|
|
102
|
+
{content}
|
|
103
|
+
</button>
|
|
104
|
+
) : (
|
|
105
|
+
<span className="px-6">{content}</span>
|
|
106
|
+
)}
|
|
107
|
+
</td>
|
|
108
|
+
);
|
|
109
|
+
})}
|
|
110
|
+
</tr>
|
|
111
|
+
))}
|
|
112
|
+
</tbody>
|
|
113
|
+
</table>
|
|
114
|
+
</ScrollRegion>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
import type { OrgChartNode } from "../types/reference";
|
|
3
|
+
import { useT } from "../lib/context.tsx";
|
|
4
|
+
import { Icon } from "../Icon/Icon.tsx";
|
|
5
|
+
import { Avatar } from "../Avatar/Avatar.tsx";
|
|
6
|
+
import { ScrollRegion } from "../Layout/Layout.tsx";
|
|
7
|
+
import { type OrgChartProps } from "./Charts.types.ts";
|
|
8
|
+
|
|
9
|
+
function OrgNode({ node }: { node: OrgChartNode }) {
|
|
10
|
+
const t = useT();
|
|
11
|
+
const reports = node.reports ?? [];
|
|
12
|
+
return (
|
|
13
|
+
<li className="relative flex flex-col items-center">
|
|
14
|
+
<div className="flex items-center gap-8 px-12 py-8 whitespace-nowrap rounded-card border border-border-subtle bg-bg-raised text-text-12">
|
|
15
|
+
{node.name ? (
|
|
16
|
+
<Avatar name={node.name} />
|
|
17
|
+
) : (
|
|
18
|
+
<span
|
|
19
|
+
aria-hidden="true"
|
|
20
|
+
className="inline-grid place-items-center size-(--ui-avatar) rounded-full bg-bg-surface text-text-secondary"
|
|
21
|
+
>
|
|
22
|
+
<Icon name="UserPlus" size={12} />
|
|
23
|
+
</span>
|
|
24
|
+
)}
|
|
25
|
+
<span className="flex flex-col">
|
|
26
|
+
<strong className="font-semibold">{node.name ?? t("org.vacant")}</strong>
|
|
27
|
+
<span className="text-text-secondary">{node.role}</span>
|
|
28
|
+
{node.code ? <span className="font-mono text-text-secondary">{node.code}</span> : null}
|
|
29
|
+
</span>
|
|
30
|
+
</div>
|
|
31
|
+
{reports.length ? (
|
|
32
|
+
<ul className="relative flex justify-center gap-16 m-0 pt-20 p-0 list-none before:absolute before:top-0 before:start-1/2 before:h-(--space-12) before:border-s before:border-border-control">
|
|
33
|
+
{reports.map((r) => (
|
|
34
|
+
<OrgNode key={`${r.name ?? ""}-${r.role}`} node={r} />
|
|
35
|
+
))}
|
|
36
|
+
</ul>
|
|
37
|
+
) : null}
|
|
38
|
+
</li>
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Reporting lines as a nested list; vacant positions read Vacant rather than being hidden. */
|
|
43
|
+
export function OrgChart({ label, root }: OrgChartProps): ReactElement {
|
|
44
|
+
return (
|
|
45
|
+
<ScrollRegion label={label}>
|
|
46
|
+
<div role="group" aria-label={label} className="w-max min-w-full">
|
|
47
|
+
<ul className="flex justify-center m-0 p-0 list-none">
|
|
48
|
+
<OrgNode node={root} />
|
|
49
|
+
</ul>
|
|
50
|
+
</div>
|
|
51
|
+
</ScrollRegion>
|
|
52
|
+
);
|
|
53
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
|
+
import { cx } from "../lib/cx.ts";
|
|
3
|
+
import { useT } from "../lib/context.tsx";
|
|
4
|
+
import { Icon } from "../Icon/Icon.tsx";
|
|
5
|
+
import { Avatar } from "../Avatar/Avatar.tsx";
|
|
6
|
+
import { StateIcon } from "../StateIcon/StateIcon.tsx";
|
|
7
|
+
import { ScrollRegion } from "../Layout/Layout.tsx";
|
|
8
|
+
import { type ResourceScheduleProps } from "./Charts.types.ts";
|
|
9
|
+
|
|
10
|
+
/** People against days with their shifts; double bookings are flagged in place. A native table. */
|
|
11
|
+
export function ResourceSchedule({ label, days, people }: ResourceScheduleProps): ReactElement {
|
|
12
|
+
const t = useT();
|
|
13
|
+
return (
|
|
14
|
+
<ScrollRegion label={label}>
|
|
15
|
+
<table className="w-full border-collapse text-text-13">
|
|
16
|
+
<caption className="pb-8 text-start font-semibold">{label}</caption>
|
|
17
|
+
<thead>
|
|
18
|
+
<tr>
|
|
19
|
+
<th
|
|
20
|
+
scope="col"
|
|
21
|
+
className="h-control-lg px-12 text-start font-medium text-text-12 text-text-secondary bg-bg-surface border-b border-border-subtle"
|
|
22
|
+
>
|
|
23
|
+
{t("resource.person")}
|
|
24
|
+
</th>
|
|
25
|
+
{days.map((d) => (
|
|
26
|
+
<th
|
|
27
|
+
key={d.key}
|
|
28
|
+
scope="col"
|
|
29
|
+
className={cx(
|
|
30
|
+
"h-control-lg px-12 text-start font-medium text-text-12 border-b border-border-subtle",
|
|
31
|
+
d.weekend ? "bg-bg-surface" : "bg-bg-surface",
|
|
32
|
+
)}
|
|
33
|
+
>
|
|
34
|
+
<span className="text-text-secondary">{d.dow}</span>{" "}
|
|
35
|
+
<span className="tabular-nums">{d.date}</span>
|
|
36
|
+
</th>
|
|
37
|
+
))}
|
|
38
|
+
</tr>
|
|
39
|
+
</thead>
|
|
40
|
+
<tbody>
|
|
41
|
+
{people.map((p) => (
|
|
42
|
+
<tr key={p.name}>
|
|
43
|
+
<th
|
|
44
|
+
scope="row"
|
|
45
|
+
className="px-12 py-6 text-start font-regular border-b border-border-subtle"
|
|
46
|
+
>
|
|
47
|
+
<span className="flex items-center gap-8 whitespace-nowrap">
|
|
48
|
+
<Avatar name={p.name} />
|
|
49
|
+
<span className="flex flex-col">
|
|
50
|
+
<span>{p.name}</span>
|
|
51
|
+
<span className="text-text-secondary">{p.role}</span>
|
|
52
|
+
</span>
|
|
53
|
+
</span>
|
|
54
|
+
</th>
|
|
55
|
+
{days.map((d) => {
|
|
56
|
+
const shifts = (p.shifts ?? []).filter((s) => s.day === d.key);
|
|
57
|
+
const clash = shifts.length > 1;
|
|
58
|
+
return (
|
|
59
|
+
<td
|
|
60
|
+
key={d.key}
|
|
61
|
+
className={cx(
|
|
62
|
+
"min-w-(--space-64) px-12 py-6 align-top border-b border-border-subtle",
|
|
63
|
+
d.weekend && "bg-bg-surface",
|
|
64
|
+
clash && "ring-(length:--stroke-width-focus) ring-inset ring-danger",
|
|
65
|
+
)}
|
|
66
|
+
>
|
|
67
|
+
{shifts.map((s, i) => (
|
|
68
|
+
<span
|
|
69
|
+
key={i}
|
|
70
|
+
className="flex items-center gap-4 mb-2 px-6 py-2 rounded-chip bg-bg-hover text-text-12"
|
|
71
|
+
>
|
|
72
|
+
<StateIcon state={s.state} size={12} />
|
|
73
|
+
<span className="tabular-nums">{s.time}</span>
|
|
74
|
+
</span>
|
|
75
|
+
))}
|
|
76
|
+
{clash ? (
|
|
77
|
+
<span className="flex items-center gap-4 text-text-11 font-medium text-danger-text">
|
|
78
|
+
<Icon name="TriangleAlert" size={12} />
|
|
79
|
+
{t("resource.doubleBooked")}
|
|
80
|
+
</span>
|
|
81
|
+
) : null}
|
|
82
|
+
</td>
|
|
83
|
+
);
|
|
84
|
+
})}
|
|
85
|
+
</tr>
|
|
86
|
+
))}
|
|
87
|
+
</tbody>
|
|
88
|
+
</table>
|
|
89
|
+
</ScrollRegion>
|
|
90
|
+
);
|
|
91
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
2
|
+
|
|
3
|
+
export interface SparklineProps {
|
|
4
|
+
values: (number | null)[];
|
|
5
|
+
/** Decorative unless labeled; the tile states the figure in text. */
|
|
6
|
+
label?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const WIDTH = 96;
|
|
10
|
+
const HEIGHT = 24;
|
|
11
|
+
|
|
12
|
+
/** Maps `value` from [d0, d1] onto [r0, r1], as a linear scale does. */
|
|
13
|
+
function linear(value: number, d0: number, d1: number, r0: number, r1: number): number {
|
|
14
|
+
return d1 === d0 ? (r0 + r1) / 2 : r0 + ((value - d0) / (d1 - d0)) * (r1 - r0);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** The SVG path of a line through the values; a null value ends one run and starts the next. */
|
|
18
|
+
export function sparklinePath(values: readonly (number | null)[]): string {
|
|
19
|
+
const numbers = values.filter((v): v is number => v !== null);
|
|
20
|
+
const min = Math.min(...numbers, 0);
|
|
21
|
+
const max = Math.max(...numbers, 1);
|
|
22
|
+
const last = Math.max(1, values.length - 1);
|
|
23
|
+
let path = "";
|
|
24
|
+
let drawing = false;
|
|
25
|
+
values.forEach((v, i) => {
|
|
26
|
+
if (v === null) {
|
|
27
|
+
drawing = false;
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const x = linear(i, 0, last, 1, WIDTH - 1);
|
|
31
|
+
const y = linear(v, min, max, HEIGHT - 2, 2);
|
|
32
|
+
path += `${drawing ? "L" : "M"}${x},${y}`;
|
|
33
|
+
drawing = true;
|
|
34
|
+
});
|
|
35
|
+
return path;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* A small trend line for StatTile; decorative unless labeled. Gaps stay gaps. It draws its own
|
|
40
|
+
* path so that the list and board views that show it never load the chart library (A24-009).
|
|
41
|
+
*/
|
|
42
|
+
export function Sparkline({ values, label }: SparklineProps): ReactElement {
|
|
43
|
+
return (
|
|
44
|
+
<svg
|
|
45
|
+
width={WIDTH}
|
|
46
|
+
height={HEIGHT}
|
|
47
|
+
viewBox={`0 0 ${WIDTH} ${HEIGHT}`}
|
|
48
|
+
{...(label ? { role: "img", "aria-label": label } : { "aria-hidden": true })}
|
|
49
|
+
>
|
|
50
|
+
<path
|
|
51
|
+
d={sparklinePath(values)}
|
|
52
|
+
className="fill-none stroke-accent"
|
|
53
|
+
strokeWidth={1.5}
|
|
54
|
+
strokeLinecap="round"
|
|
55
|
+
strokeLinejoin="round"
|
|
56
|
+
/>
|
|
57
|
+
</svg>
|
|
58
|
+
);
|
|
59
|
+
}
|