@lar-works/design-system 0.0.0-stage → 0.1.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/README.md +24 -2
- package/dist/actions/Button.d.ts +25 -0
- package/dist/actions/Button.js +55 -0
- package/dist/actions/Button.js.map +1 -0
- package/dist/actions/ButtonLink.d.ts +21 -0
- package/dist/actions/ButtonLink.js +40 -0
- package/dist/actions/ButtonLink.js.map +1 -0
- package/dist/actions/IconButton.d.ts +14 -0
- package/dist/actions/IconButton.js +29 -0
- package/dist/actions/IconButton.js.map +1 -0
- package/dist/actions/ThemeSwitch.d.ts +7 -0
- package/dist/actions/ThemeSwitch.js +42 -0
- package/dist/actions/ThemeSwitch.js.map +1 -0
- package/dist/actions/index.d.ts +5 -0
- package/dist/collections/CollectionSectionHeader.d.ts +5 -0
- package/dist/collections/CollectionSectionHeader.js +18 -0
- package/dist/collections/CollectionSectionHeader.js.map +1 -0
- package/dist/collections/CollectionState.d.ts +37 -0
- package/dist/collections/CollectionState.js +69 -0
- package/dist/collections/CollectionState.js.map +1 -0
- package/dist/collections/CollectionTokens.d.ts +16 -0
- package/dist/collections/CollectionTokens.js +19 -0
- package/dist/collections/CollectionTokens.js.map +1 -0
- package/dist/collections/CollectionViewport.js +36 -0
- package/dist/collections/CollectionViewport.js.map +1 -0
- package/dist/collections/DataRow.d.ts +23 -0
- package/dist/collections/DataRow.js +57 -0
- package/dist/collections/DataRow.js.map +1 -0
- package/dist/collections/ResultList.d.ts +29 -0
- package/dist/collections/ResultList.js +128 -0
- package/dist/collections/ResultList.js.map +1 -0
- package/dist/collections/ScrollRow.d.ts +23 -0
- package/dist/collections/ScrollRow.js +59 -0
- package/dist/collections/ScrollRow.js.map +1 -0
- package/dist/collections/VirtualGrid.d.ts +14 -0
- package/dist/collections/VirtualGrid.js +71 -0
- package/dist/collections/VirtualGrid.js.map +1 -0
- package/dist/collections/VirtualList.d.ts +34 -0
- package/dist/collections/VirtualList.js +128 -0
- package/dist/collections/VirtualList.js.map +1 -0
- package/dist/collections/index.d.ts +10 -0
- package/dist/collections/useCollectionMotion.d.ts +3 -0
- package/dist/collections/useCollectionMotion.js +34 -0
- package/dist/collections/useCollectionMotion.js.map +1 -0
- package/dist/collections/useScrollRow.d.ts +17 -0
- package/dist/collections/useScrollRow.js +63 -0
- package/dist/collections/useScrollRow.js.map +1 -0
- package/dist/display/ActivityCard.d.ts +17 -0
- package/dist/display/ActivityCard.js +58 -0
- package/dist/display/ActivityCard.js.map +1 -0
- package/dist/display/Artwork.d.ts +25 -0
- package/dist/display/Artwork.js +97 -0
- package/dist/display/Artwork.js.map +1 -0
- package/dist/display/Avatar.d.ts +5 -0
- package/dist/display/Avatar.js +13 -0
- package/dist/display/Avatar.js.map +1 -0
- package/dist/display/Badge.d.ts +10 -0
- package/dist/display/Badge.js +28 -0
- package/dist/display/Badge.js.map +1 -0
- package/dist/display/BadgeList.d.ts +11 -0
- package/dist/display/BadgeList.js +20 -0
- package/dist/display/BadgeList.js.map +1 -0
- package/dist/display/BrandMark.d.ts +21 -0
- package/dist/display/BrandMark.js +60 -0
- package/dist/display/BrandMark.js.map +1 -0
- package/dist/display/ChangeList.d.ts +16 -0
- package/dist/display/ChangeList.js +56 -0
- package/dist/display/ChangeList.js.map +1 -0
- package/dist/display/CheckList.d.ts +10 -0
- package/dist/display/CheckList.js +25 -0
- package/dist/display/CheckList.js.map +1 -0
- package/dist/display/CodeBlock.d.ts +6 -0
- package/dist/display/CodeBlock.js +12 -0
- package/dist/display/CodeBlock.js.map +1 -0
- package/dist/display/CopyButton.d.ts +9 -0
- package/dist/display/CopyButton.js +59 -0
- package/dist/display/CopyButton.js.map +1 -0
- package/dist/display/DataTable.d.ts +35 -0
- package/dist/display/DataTable.js +53 -0
- package/dist/display/DataTable.js.map +1 -0
- package/dist/display/DetailHero.d.ts +39 -0
- package/dist/display/DetailHero.js +146 -0
- package/dist/display/DetailHero.js.map +1 -0
- package/dist/display/DetailList.d.ts +15 -0
- package/dist/display/DetailList.js +53 -0
- package/dist/display/DetailList.js.map +1 -0
- package/dist/display/DeviceCard.d.ts +18 -0
- package/dist/display/DeviceCard.js +48 -0
- package/dist/display/DeviceCard.js.map +1 -0
- package/dist/display/Identity.d.ts +14 -0
- package/dist/display/Identity.js +54 -0
- package/dist/display/Identity.js.map +1 -0
- package/dist/display/ImageCard.d.ts +22 -0
- package/dist/display/ImageCard.js +63 -0
- package/dist/display/ImageCard.js.map +1 -0
- package/dist/display/ImagePicker.d.ts +30 -0
- package/dist/display/ImagePicker.js +108 -0
- package/dist/display/ImagePicker.js.map +1 -0
- package/dist/display/InfoBox.d.ts +15 -0
- package/dist/display/InfoBox.js +41 -0
- package/dist/display/InfoBox.js.map +1 -0
- package/dist/display/InsetPanel.d.ts +13 -0
- package/dist/display/InsetPanel.js +26 -0
- package/dist/display/InsetPanel.js.map +1 -0
- package/dist/display/ItemAction.d.ts +10 -0
- package/dist/display/ItemAction.js +35 -0
- package/dist/display/ItemAction.js.map +1 -0
- package/dist/display/Kbd.d.ts +6 -0
- package/dist/display/Kbd.js +12 -0
- package/dist/display/Kbd.js.map +1 -0
- package/dist/display/KindIcon.d.ts +8 -0
- package/dist/display/KindIcon.js +15 -0
- package/dist/display/KindIcon.js.map +1 -0
- package/dist/display/NoticeCard.d.ts +24 -0
- package/dist/display/NoticeCard.js +59 -0
- package/dist/display/NoticeCard.js.map +1 -0
- package/dist/display/PairingList.d.ts +19 -0
- package/dist/display/PairingList.js +53 -0
- package/dist/display/PairingList.js.map +1 -0
- package/dist/display/PathList.d.ts +9 -0
- package/dist/display/PathList.js +21 -0
- package/dist/display/PathList.js.map +1 -0
- package/dist/display/PeoplePreview.d.ts +16 -0
- package/dist/display/PeoplePreview.js +41 -0
- package/dist/display/PeoplePreview.js.map +1 -0
- package/dist/display/PropertySheet.d.ts +56 -0
- package/dist/display/PropertySheet.js +150 -0
- package/dist/display/PropertySheet.js.map +1 -0
- package/dist/display/QrCode.d.ts +6 -0
- package/dist/display/QrCode.js +47 -0
- package/dist/display/QrCode.js.map +1 -0
- package/dist/display/RadioChoice.d.ts +9 -0
- package/dist/display/RadioChoice.js +28 -0
- package/dist/display/RadioChoice.js.map +1 -0
- package/dist/display/RatingLink.d.ts +10 -0
- package/dist/display/RatingLink.js +80 -0
- package/dist/display/RatingLink.js.map +1 -0
- package/dist/display/ResourceCard.d.ts +20 -0
- package/dist/display/ResourceCard.js +200 -0
- package/dist/display/ResourceCard.js.map +1 -0
- package/dist/display/RowList.d.ts +28 -0
- package/dist/display/RowList.js +76 -0
- package/dist/display/RowList.js.map +1 -0
- package/dist/display/StackedMeter.d.ts +28 -0
- package/dist/display/StackedMeter.js +48 -0
- package/dist/display/StackedMeter.js.map +1 -0
- package/dist/display/StatTile.d.ts +13 -0
- package/dist/display/StatTile.js +35 -0
- package/dist/display/StatTile.js.map +1 -0
- package/dist/display/StepList.d.ts +5 -0
- package/dist/display/StepList.js +12 -0
- package/dist/display/StepList.js.map +1 -0
- package/dist/display/TextPreview.d.ts +14 -0
- package/dist/display/TextPreview.js +46 -0
- package/dist/display/TextPreview.js.map +1 -0
- package/dist/display/TimeSeriesChart.d.ts +19 -0
- package/dist/display/TimeSeriesChart.js +163 -0
- package/dist/display/TimeSeriesChart.js.map +1 -0
- package/dist/display/ToneTile.js +12 -0
- package/dist/display/ToneTile.js.map +1 -0
- package/dist/display/index.d.ts +38 -0
- package/dist/feedback/Alert.d.ts +15 -0
- package/dist/feedback/Alert.js +19 -0
- package/dist/feedback/Alert.js.map +1 -0
- package/dist/feedback/AsyncState.d.ts +16 -0
- package/dist/feedback/AsyncState.js +29 -0
- package/dist/feedback/AsyncState.js.map +1 -0
- package/dist/feedback/ErrorNotification.d.ts +8 -0
- package/dist/feedback/ErrorNotification.js +20 -0
- package/dist/feedback/ErrorNotification.js.map +1 -0
- package/dist/feedback/Notifications.d.ts +2 -0
- package/dist/feedback/Notifications.js +9 -0
- package/dist/feedback/Notifications.js.map +1 -0
- package/dist/feedback/ProgressStatusRow.d.ts +23 -0
- package/dist/feedback/ProgressStatusRow.js +74 -0
- package/dist/feedback/ProgressStatusRow.js.map +1 -0
- package/dist/feedback/SkeletonLoader.d.ts +19 -0
- package/dist/feedback/SkeletonLoader.js +59 -0
- package/dist/feedback/SkeletonLoader.js.map +1 -0
- package/dist/feedback/StatusIndicator.d.ts +9 -0
- package/dist/feedback/StatusIndicator.js +28 -0
- package/dist/feedback/StatusIndicator.js.map +1 -0
- package/dist/feedback/StatusPopoverContent.d.ts +13 -0
- package/dist/feedback/StatusPopoverContent.js +50 -0
- package/dist/feedback/StatusPopoverContent.js.map +1 -0
- package/dist/feedback/StatusRow.d.ts +16 -0
- package/dist/feedback/StatusRow.js +60 -0
- package/dist/feedback/StatusRow.js.map +1 -0
- package/dist/feedback/index.d.ts +11 -0
- package/dist/feedback/index.js +11 -0
- package/dist/forms/Checkbox.d.ts +10 -0
- package/dist/forms/Checkbox.js +48 -0
- package/dist/forms/Checkbox.js.map +1 -0
- package/dist/forms/Field.d.ts +5 -0
- package/dist/forms/Field.js +15 -0
- package/dist/forms/Field.js.map +1 -0
- package/dist/forms/FormControlStyles.js +14 -0
- package/dist/forms/FormControlStyles.js.map +1 -0
- package/dist/forms/FormSection.d.ts +48 -0
- package/dist/forms/FormSection.js +142 -0
- package/dist/forms/FormSection.js.map +1 -0
- package/dist/forms/InlineFields.d.ts +13 -0
- package/dist/forms/InlineFields.js +24 -0
- package/dist/forms/InlineFields.js.map +1 -0
- package/dist/forms/Input.d.ts +5 -0
- package/dist/forms/Input.js +18 -0
- package/dist/forms/Input.js.map +1 -0
- package/dist/forms/OptionSelect.d.ts +21 -0
- package/dist/forms/OptionSelect.js +28 -0
- package/dist/forms/OptionSelect.js.map +1 -0
- package/dist/forms/RadioGroup.d.ts +5 -0
- package/dist/forms/RadioGroup.js +35 -0
- package/dist/forms/RadioGroup.js.map +1 -0
- package/dist/forms/Select.d.ts +6 -0
- package/dist/forms/Select.js +36 -0
- package/dist/forms/Select.js.map +1 -0
- package/dist/forms/Switch.d.ts +4 -0
- package/dist/forms/Switch.js +16 -0
- package/dist/forms/Switch.js.map +1 -0
- package/dist/forms/TagInput.d.ts +19 -0
- package/dist/forms/TagInput.js +60 -0
- package/dist/forms/TagInput.js.map +1 -0
- package/dist/forms/Textarea.d.ts +4 -0
- package/dist/forms/Textarea.js +15 -0
- package/dist/forms/Textarea.js.map +1 -0
- package/dist/forms/index.d.ts +12 -0
- package/dist/foundations/DesignSystemProvider.d.ts +64 -0
- package/dist/foundations/DesignSystemProvider.js +66 -0
- package/dist/foundations/DesignSystemProvider.js.map +1 -0
- package/dist/foundations/KeyboardFocus.d.ts +9 -0
- package/dist/foundations/KeyboardFocus.js +10 -0
- package/dist/foundations/KeyboardFocus.js.map +1 -0
- package/dist/foundations/KeyboardShortcut.d.ts +5 -0
- package/dist/foundations/KeyboardShortcut.js +10 -0
- package/dist/foundations/KeyboardShortcut.js.map +1 -0
- package/dist/foundations/Theme.d.ts +14 -0
- package/dist/foundations/Theme.js +56 -0
- package/dist/foundations/Theme.js.map +1 -0
- package/dist/foundations/index.d.ts +5 -0
- package/dist/icons/BrandIcons.d.ts +3 -0
- package/dist/icons/BrandIcons.js +14 -0
- package/dist/icons/BrandIcons.js.map +1 -0
- package/dist/icons/index.d.ts +3 -0
- package/dist/icons/index.js +2 -0
- package/dist/icons.d.ts +4 -0
- package/dist/icons.js +2 -0
- package/dist/index.d.ts +133 -0
- package/dist/index.js +125 -0
- package/dist/layout/AppShell.d.ts +11 -0
- package/dist/layout/AppShell.js +46 -0
- package/dist/layout/AppShell.js.map +1 -0
- package/dist/layout/AuthLayout.d.ts +11 -0
- package/dist/layout/AuthLayout.js +48 -0
- package/dist/layout/AuthLayout.js.map +1 -0
- package/dist/layout/ContentContainer.d.ts +9 -0
- package/dist/layout/ContentContainer.js +15 -0
- package/dist/layout/ContentContainer.js.map +1 -0
- package/dist/layout/Flow.d.ts +26 -0
- package/dist/layout/Flow.js +65 -0
- package/dist/layout/Flow.js.map +1 -0
- package/dist/layout/PageLayout.d.ts +12 -0
- package/dist/layout/PageLayout.js +31 -0
- package/dist/layout/PageLayout.js.map +1 -0
- package/dist/layout/PageSection.d.ts +43 -0
- package/dist/layout/PageSection.js +63 -0
- package/dist/layout/PageSection.js.map +1 -0
- package/dist/layout/ScrollArea.d.ts +4 -0
- package/dist/layout/ScrollArea.js +11 -0
- package/dist/layout/ScrollArea.js.map +1 -0
- package/dist/layout/Section.d.ts +12 -0
- package/dist/layout/Section.js +36 -0
- package/dist/layout/Section.js.map +1 -0
- package/dist/layout/Site.d.ts +41 -0
- package/dist/layout/Site.js +157 -0
- package/dist/layout/Site.js.map +1 -0
- package/dist/layout/TitleBar.d.ts +28 -0
- package/dist/layout/TitleBar.js +83 -0
- package/dist/layout/TitleBar.js.map +1 -0
- package/dist/layout/WorkspaceActionsHeader.d.ts +8 -0
- package/dist/layout/WorkspaceActionsHeader.js +18 -0
- package/dist/layout/WorkspaceActionsHeader.js.map +1 -0
- package/dist/layout/index.d.ts +19 -0
- package/dist/layout/index.js +19 -0
- package/dist/layout/sidebar/SidebarNavigationItem.d.ts +10 -0
- package/dist/layout/sidebar/SidebarNavigationItem.js +36 -0
- package/dist/layout/sidebar/SidebarNavigationItem.js.map +1 -0
- package/dist/layout/sidebar/SidebarPane.d.ts +13 -0
- package/dist/layout/sidebar/SidebarPane.js +30 -0
- package/dist/layout/sidebar/SidebarPane.js.map +1 -0
- package/dist/layout/toolbar/CommandPaletteTrigger.d.ts +11 -0
- package/dist/layout/toolbar/CommandPaletteTrigger.js +46 -0
- package/dist/layout/toolbar/CommandPaletteTrigger.js.map +1 -0
- package/dist/layout/toolbar/ToolbarStatusGroup.d.ts +5 -0
- package/dist/layout/toolbar/ToolbarStatusGroup.js +14 -0
- package/dist/layout/toolbar/ToolbarStatusGroup.js.map +1 -0
- package/dist/layout/toolbar/ToolbarStatusItem.d.ts +9 -0
- package/dist/layout/toolbar/ToolbarStatusItem.js +18 -0
- package/dist/layout/toolbar/ToolbarStatusItem.js.map +1 -0
- package/dist/navigation/ArtworkTabs.d.ts +18 -0
- package/dist/navigation/ArtworkTabs.js +72 -0
- package/dist/navigation/ArtworkTabs.js.map +1 -0
- package/dist/navigation/Breadcrumbs.d.ts +13 -0
- package/dist/navigation/Breadcrumbs.js +32 -0
- package/dist/navigation/Breadcrumbs.js.map +1 -0
- package/dist/navigation/CollectionBrowseSelector.d.ts +22 -0
- package/dist/navigation/CollectionBrowseSelector.js +70 -0
- package/dist/navigation/CollectionBrowseSelector.js.map +1 -0
- package/dist/navigation/CollectionViewToggle.d.ts +12 -0
- package/dist/navigation/CollectionViewToggle.js +36 -0
- package/dist/navigation/CollectionViewToggle.js.map +1 -0
- package/dist/navigation/DrilldownBrowseSelector.d.ts +31 -0
- package/dist/navigation/DrilldownBrowseSelector.js +174 -0
- package/dist/navigation/DrilldownBrowseSelector.js.map +1 -0
- package/dist/navigation/FolderSelector.d.ts +24 -0
- package/dist/navigation/FolderSelector.js +142 -0
- package/dist/navigation/FolderSelector.js.map +1 -0
- package/dist/navigation/TabKeys.js +13 -0
- package/dist/navigation/TabKeys.js.map +1 -0
- package/dist/navigation/ViewTabs.d.ts +19 -0
- package/dist/navigation/ViewTabs.js +48 -0
- package/dist/navigation/ViewTabs.js.map +1 -0
- package/dist/navigation/index.d.ts +8 -0
- package/dist/overlays/ActionModal.d.ts +21 -0
- package/dist/overlays/ActionModal.js +48 -0
- package/dist/overlays/ActionModal.js.map +1 -0
- package/dist/overlays/CommandPalette.d.ts +43 -0
- package/dist/overlays/CommandPalette.js +163 -0
- package/dist/overlays/CommandPalette.js.map +1 -0
- package/dist/overlays/Drawer.d.ts +19 -0
- package/dist/overlays/Drawer.js +83 -0
- package/dist/overlays/Drawer.js.map +1 -0
- package/dist/overlays/DropdownMenu.d.ts +47 -0
- package/dist/overlays/DropdownMenu.js +58 -0
- package/dist/overlays/DropdownMenu.js.map +1 -0
- package/dist/overlays/ImageViewer.d.ts +21 -0
- package/dist/overlays/ImageViewer.js +82 -0
- package/dist/overlays/ImageViewer.js.map +1 -0
- package/dist/overlays/Modal.d.ts +36 -0
- package/dist/overlays/Modal.js +149 -0
- package/dist/overlays/Modal.js.map +1 -0
- package/dist/overlays/Popover.d.ts +19 -0
- package/dist/overlays/Popover.js +26 -0
- package/dist/overlays/Popover.js.map +1 -0
- package/dist/overlays/Tooltip.d.ts +12 -0
- package/dist/overlays/Tooltip.js +54 -0
- package/dist/overlays/Tooltip.js.map +1 -0
- package/dist/overlays/index.d.ts +9 -0
- package/dist/overlays/useModalAutoFocus.js +84 -0
- package/dist/overlays/useModalAutoFocus.js.map +1 -0
- package/dist/overlays/useScrollFade.js +43 -0
- package/dist/overlays/useScrollFade.js.map +1 -0
- package/dist/showcase/CallToAction.d.ts +11 -0
- package/dist/showcase/CallToAction.js +54 -0
- package/dist/showcase/CallToAction.js.map +1 -0
- package/dist/showcase/Cards.d.ts +34 -0
- package/dist/showcase/Cards.js +122 -0
- package/dist/showcase/Cards.js.map +1 -0
- package/dist/showcase/Devices.d.ts +72 -0
- package/dist/showcase/Devices.js +249 -0
- package/dist/showcase/Devices.js.map +1 -0
- package/dist/showcase/FeatureRow.d.ts +30 -0
- package/dist/showcase/FeatureRow.js +91 -0
- package/dist/showcase/FeatureRow.js.map +1 -0
- package/dist/showcase/Hero.d.ts +15 -0
- package/dist/showcase/Hero.js +73 -0
- package/dist/showcase/Hero.js.map +1 -0
- package/dist/showcase/PhotoSearchConcept.d.ts +14 -0
- package/dist/showcase/PhotoSearchConcept.js +43 -0
- package/dist/showcase/PhotoSearchConcept.js.map +1 -0
- package/dist/showcase/Platforms.d.ts +15 -0
- package/dist/showcase/Platforms.js +48 -0
- package/dist/showcase/Platforms.js.map +1 -0
- package/dist/showcase/ProductBand.d.ts +38 -0
- package/dist/showcase/ProductBand.js +120 -0
- package/dist/showcase/ProductBand.js.map +1 -0
- package/dist/showcase/Roadmap.d.ts +21 -0
- package/dist/showcase/Roadmap.js +111 -0
- package/dist/showcase/Roadmap.js.map +1 -0
- package/dist/showcase/RouteDiagram.d.ts +14 -0
- package/dist/showcase/RouteDiagram.js +57 -0
- package/dist/showcase/RouteDiagram.js.map +1 -0
- package/dist/showcase/ServerUnit.d.ts +50 -0
- package/dist/showcase/ServerUnit.js +175 -0
- package/dist/showcase/ServerUnit.js.map +1 -0
- package/dist/showcase/Stage.d.ts +46 -0
- package/dist/showcase/Stage.js +106 -0
- package/dist/showcase/Stage.js.map +1 -0
- package/dist/showcase/Status.d.ts +30 -0
- package/dist/showcase/Status.js +84 -0
- package/dist/showcase/Status.js.map +1 -0
- package/dist/showcase/StepFlow.d.ts +13 -0
- package/dist/showcase/StepFlow.js +47 -0
- package/dist/showcase/StepFlow.js.map +1 -0
- package/dist/showcase/index.d.ts +15 -0
- package/dist/testing.d.ts +5 -0
- package/dist/testing.js +43 -0
- package/dist/testing.js.map +1 -0
- package/dist/typography/Link.d.ts +21 -0
- package/dist/typography/Link.js +60 -0
- package/dist/typography/Link.js.map +1 -0
- package/dist/typography/Typography.d.ts +53 -0
- package/dist/typography/Typography.js +67 -0
- package/dist/typography/Typography.js.map +1 -0
- package/dist/typography/index.d.ts +4 -0
- package/dist/typography/index.js +4 -0
- package/package.json +80 -3
- package/src/actions/Button.tsx +68 -0
- package/src/actions/ButtonLink.tsx +75 -0
- package/src/actions/IconButton.tsx +55 -0
- package/src/actions/ThemeSwitch.tsx +46 -0
- package/src/actions/index.ts +4 -0
- package/src/collections/CollectionSectionHeader.tsx +13 -0
- package/src/collections/CollectionState.tsx +76 -0
- package/src/collections/CollectionTokens.ts +12 -0
- package/src/collections/CollectionViewport.ts +40 -0
- package/src/collections/DataRow.tsx +79 -0
- package/src/collections/ResultList.tsx +164 -0
- package/src/collections/ScrollRow.tsx +90 -0
- package/src/collections/VirtualGrid.tsx +92 -0
- package/src/collections/VirtualList.tsx +224 -0
- package/src/collections/index.ts +10 -0
- package/src/collections/useCollectionMotion.ts +42 -0
- package/src/collections/useScrollRow.ts +64 -0
- package/src/display/ActivityCard.tsx +76 -0
- package/src/display/Artwork.tsx +140 -0
- package/src/display/Avatar.tsx +7 -0
- package/src/display/Badge.tsx +33 -0
- package/src/display/BadgeList.tsx +25 -0
- package/src/display/BrandMark.tsx +72 -0
- package/src/display/ChangeList.tsx +41 -0
- package/src/display/CheckList.tsx +27 -0
- package/src/display/CodeBlock.tsx +12 -0
- package/src/display/CopyButton.tsx +77 -0
- package/src/display/DataTable.tsx +80 -0
- package/src/display/DetailHero.tsx +191 -0
- package/src/display/DetailList.tsx +74 -0
- package/src/display/DeviceCard.tsx +49 -0
- package/src/display/Identity.tsx +56 -0
- package/src/display/ImageCard.tsx +102 -0
- package/src/display/ImagePicker.tsx +149 -0
- package/src/display/InfoBox.tsx +48 -0
- package/src/display/InsetPanel.tsx +37 -0
- package/src/display/ItemAction.tsx +53 -0
- package/src/display/Kbd.tsx +6 -0
- package/src/display/KindIcon.tsx +15 -0
- package/src/display/NoticeCard.tsx +77 -0
- package/src/display/PairingList.tsx +55 -0
- package/src/display/PathList.tsx +16 -0
- package/src/display/PeoplePreview.tsx +66 -0
- package/src/display/PropertySheet.tsx +180 -0
- package/src/display/QrCode.tsx +47 -0
- package/src/display/RadioChoice.tsx +34 -0
- package/src/display/RatingLink.tsx +76 -0
- package/src/display/ResourceCard.tsx +201 -0
- package/src/display/RowList.tsx +110 -0
- package/src/display/StackedMeter.tsx +72 -0
- package/src/display/StatTile.tsx +39 -0
- package/src/display/StepList.tsx +10 -0
- package/src/display/TextPreview.tsx +66 -0
- package/src/display/TimeSeriesChart.tsx +191 -0
- package/src/display/ToneTile.ts +10 -0
- package/src/display/index.ts +37 -0
- package/src/feedback/Alert.tsx +35 -0
- package/src/feedback/AsyncState.tsx +56 -0
- package/src/feedback/ErrorNotification.ts +24 -0
- package/src/feedback/Notifications.tsx +5 -0
- package/src/feedback/ProgressStatusRow.tsx +104 -0
- package/src/feedback/SkeletonLoader.tsx +88 -0
- package/src/feedback/StatusIndicator.tsx +28 -0
- package/src/feedback/StatusPopoverContent.tsx +54 -0
- package/src/feedback/StatusRow.tsx +70 -0
- package/src/feedback/index.ts +15 -0
- package/src/forms/Checkbox.tsx +61 -0
- package/src/forms/Field.tsx +17 -0
- package/src/forms/FormControlStyles.ts +9 -0
- package/src/forms/FormSection.tsx +175 -0
- package/src/forms/InlineFields.tsx +22 -0
- package/src/forms/Input.tsx +22 -0
- package/src/forms/OptionSelect.tsx +49 -0
- package/src/forms/RadioGroup.tsx +48 -0
- package/src/forms/Select.tsx +46 -0
- package/src/forms/Switch.tsx +10 -0
- package/src/forms/TagInput.tsx +76 -0
- package/src/forms/Textarea.tsx +14 -0
- package/src/forms/index.ts +11 -0
- package/src/foundations/DesignSystemProvider.tsx +79 -0
- package/src/foundations/KeyboardFocus.ts +6 -0
- package/src/foundations/KeyboardShortcut.ts +12 -0
- package/src/foundations/Theme.ts +75 -0
- package/src/foundations/index.ts +10 -0
- package/src/foundations/theme.css +425 -0
- package/src/icons/BrandIcons.tsx +8 -0
- package/src/icons/index.ts +4 -0
- package/src/icons.ts +1 -0
- package/src/index.ts +13 -0
- package/src/layout/AppShell.tsx +63 -0
- package/src/layout/AuthLayout.tsx +40 -0
- package/src/layout/ContentContainer.tsx +16 -0
- package/src/layout/Flow.tsx +56 -0
- package/src/layout/PageLayout.tsx +35 -0
- package/src/layout/PageSection.tsx +103 -0
- package/src/layout/ScrollArea.tsx +7 -0
- package/src/layout/Section.tsx +36 -0
- package/src/layout/Site.tsx +205 -0
- package/src/layout/TitleBar.tsx +97 -0
- package/src/layout/WorkspaceActionsHeader.tsx +17 -0
- package/src/layout/index.ts +18 -0
- package/src/layout/sidebar/SidebarNavigationItem.tsx +45 -0
- package/src/layout/sidebar/SidebarPane.tsx +37 -0
- package/src/layout/toolbar/CommandPaletteTrigger.tsx +53 -0
- package/src/layout/toolbar/ToolbarStatusGroup.tsx +9 -0
- package/src/layout/toolbar/ToolbarStatusItem.tsx +18 -0
- package/src/navigation/ArtworkTabs.tsx +107 -0
- package/src/navigation/Breadcrumbs.tsx +31 -0
- package/src/navigation/CollectionBrowseSelector.tsx +90 -0
- package/src/navigation/CollectionViewToggle.tsx +52 -0
- package/src/navigation/DrilldownBrowseSelector.tsx +229 -0
- package/src/navigation/FolderSelector.tsx +172 -0
- package/src/navigation/TabKeys.ts +21 -0
- package/src/navigation/ViewTabs.tsx +85 -0
- package/src/navigation/index.ts +15 -0
- package/src/overlays/ActionModal.tsx +81 -0
- package/src/overlays/CommandPalette.tsx +199 -0
- package/src/overlays/Drawer.tsx +107 -0
- package/src/overlays/DropdownMenu.tsx +122 -0
- package/src/overlays/ImageViewer.tsx +96 -0
- package/src/overlays/Modal.tsx +234 -0
- package/src/overlays/Popover.tsx +40 -0
- package/src/overlays/Tooltip.tsx +56 -0
- package/src/overlays/index.ts +8 -0
- package/src/overlays/useModalAutoFocus.ts +119 -0
- package/src/overlays/useScrollFade.ts +49 -0
- package/src/showcase/CallToAction.tsx +46 -0
- package/src/showcase/Cards.tsx +133 -0
- package/src/showcase/Devices.tsx +259 -0
- package/src/showcase/FeatureRow.tsx +107 -0
- package/src/showcase/Hero.tsx +70 -0
- package/src/showcase/PhotoSearchConcept.tsx +50 -0
- package/src/showcase/Platforms.tsx +49 -0
- package/src/showcase/ProductBand.tsx +148 -0
- package/src/showcase/Roadmap.tsx +115 -0
- package/src/showcase/RouteDiagram.tsx +56 -0
- package/src/showcase/ServerUnit.tsx +191 -0
- package/src/showcase/Stage.tsx +160 -0
- package/src/showcase/Status.tsx +107 -0
- package/src/showcase/StepFlow.tsx +48 -0
- package/src/showcase/devices.css +441 -0
- package/src/showcase/index.ts +34 -0
- package/src/showcase/server-unit.css +258 -0
- package/src/showcase/stage.css +175 -0
- package/src/styles.css +5 -0
- package/src/testing.ts +34 -0
- package/src/typography/Link.tsx +105 -0
- package/src/typography/Typography.tsx +113 -0
- package/src/typography/index.ts +3 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
type TextPreviewProps = {
|
|
3
|
+
loading: true;
|
|
4
|
+
} | {
|
|
5
|
+
loading?: false;
|
|
6
|
+
children?: ReactNode;
|
|
7
|
+
value: string;
|
|
8
|
+
moreLabel: string;
|
|
9
|
+
language?: string;
|
|
10
|
+
title: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function TextPreview(props: TextPreviewProps): import("react").JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=TextPreview.d.ts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Button } from "../actions/Button.js";
|
|
2
|
+
import { Stack } from "../layout/Flow.js";
|
|
3
|
+
import { Modal } from "../overlays/Modal.js";
|
|
4
|
+
import { Text } from "../typography/Typography.js";
|
|
5
|
+
import { useState } from "react";
|
|
6
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
// src/display/TextPreview.tsx
|
|
8
|
+
function TextPreview(props) {
|
|
9
|
+
const [open, setOpen] = useState(false);
|
|
10
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", {
|
|
11
|
+
className: "flex max-w-3xl min-w-0 items-center gap-3",
|
|
12
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
13
|
+
lang: props.loading ? void 0 : props.language,
|
|
14
|
+
tone: "muted",
|
|
15
|
+
className: `min-w-0 truncate leading-6 ${props.loading ? "flex-1" : ""}`,
|
|
16
|
+
loading: props.loading,
|
|
17
|
+
children: !props.loading && props.value
|
|
18
|
+
}), props.loading ? /* @__PURE__ */ jsx(Text, {
|
|
19
|
+
className: "w-20 shrink-0 leading-6",
|
|
20
|
+
loading: true
|
|
21
|
+
}) : /* @__PURE__ */ jsx(Button, {
|
|
22
|
+
className: "h-auto shrink-0 px-0 py-0 text-sm leading-6 before:-inset-y-2.5",
|
|
23
|
+
"aria-haspopup": "dialog",
|
|
24
|
+
onClick: () => setOpen(true),
|
|
25
|
+
variant: "quiet",
|
|
26
|
+
children: props.moreLabel
|
|
27
|
+
})]
|
|
28
|
+
}), !props.loading && open ? /* @__PURE__ */ jsx(Modal, {
|
|
29
|
+
onClose: () => setOpen(false),
|
|
30
|
+
children: /* @__PURE__ */ jsx(Modal.Content, {
|
|
31
|
+
title: props.title,
|
|
32
|
+
children: /* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs(Stack, {
|
|
33
|
+
space: "section",
|
|
34
|
+
children: [props.children, /* @__PURE__ */ jsx(Text, {
|
|
35
|
+
lang: props.language,
|
|
36
|
+
className: "leading-7 text-pretty wrap-break-word whitespace-pre-line",
|
|
37
|
+
variant: "description",
|
|
38
|
+
children: props.value
|
|
39
|
+
})]
|
|
40
|
+
}) })
|
|
41
|
+
})
|
|
42
|
+
}) : null] });
|
|
43
|
+
}
|
|
44
|
+
export { TextPreview };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=TextPreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextPreview.js","names":[],"sources":["../../src/display/TextPreview.tsx"],"sourcesContent":["import { type ReactNode, useState } from 'react';\n\nimport { Button } from '../actions/Button';\nimport { Stack } from '../layout/Flow';\nimport { Modal } from '../overlays/Modal';\nimport { Text } from '../typography/Typography';\n\ntype TextPreviewProps =\n | { loading: true }\n | {\n loading?: false;\n children?: ReactNode;\n value: string;\n moreLabel: string;\n language?: string;\n title: string;\n };\n\nexport function TextPreview(props: TextPreviewProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <>\n <div className=\"flex max-w-3xl min-w-0 items-center gap-3\">\n <Text\n lang={props.loading ? undefined : props.language}\n tone=\"muted\"\n className={`min-w-0 truncate leading-6 ${props.loading ? 'flex-1' : ''}`}\n loading={props.loading}\n >\n {!props.loading && props.value}\n </Text>\n {props.loading ? (\n <Text className=\"w-20 shrink-0 leading-6\" loading />\n ) : (\n <Button\n className=\"h-auto shrink-0 px-0 py-0 text-sm leading-6 before:-inset-y-2.5\"\n aria-haspopup=\"dialog\"\n onClick={() => setOpen(true)}\n variant=\"quiet\"\n >\n {props.moreLabel}\n </Button>\n )}\n </div>\n {!props.loading && open ? (\n <Modal onClose={() => setOpen(false)}>\n <Modal.Content title={props.title}>\n <Modal.Body>\n <Stack space=\"section\">\n {props.children}\n <Text\n lang={props.language}\n className=\"leading-7 text-pretty wrap-break-word whitespace-pre-line\"\n variant=\"description\"\n >\n {props.value}\n </Text>\n </Stack>\n </Modal.Body>\n </Modal.Content>\n </Modal>\n ) : null}\n </>\n );\n}\n"],"mappings":";;;;;;;AAkBA,SAAgB,YAAY,OAAyB;CACjD,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CAEtC,OACI,qBAAA,YAAA,EAAA,UAAA,CACI,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACI,oBAAC,MAAD;GACI,MAAM,MAAM,UAAU,KAAA,IAAY,MAAM;GACxC,MAAK;GACL,WAAW,8BAA8B,MAAM,UAAU,WAAW;GACpE,SAAS,MAAM;GAEd,UAAA,CAAC,MAAM,WAAW,MAAM;EACvB,CAAA,GACL,MAAM,UACH,oBAAC,MAAD;GAAM,WAAU;GAA0B,SAAA;EAAS,CAAA,IAEnD,oBAAC,QAAD;GACI,WAAU;GACV,iBAAc;GACd,eAAe,QAAQ,IAAI;GAC3B,SAAQ;GAEP,UAAA,MAAM;EACH,CAAA,CAEX;CACJ,CAAA,GAAA,CAAC,MAAM,WAAW,OACf,oBAAC,OAAD;EAAO,eAAe,QAAQ,KAAK;EAC/B,UAAA,oBAAC,MAAM,SAAP;GAAe,OAAO,MAAM;GACxB,UAAA,oBAAC,MAAM,MAAP,EAAA,UACI,qBAAC,OAAD;IAAO,OAAM;IAAb,UAAA,CACK,MAAM,UACP,oBAAC,MAAD;KACI,MAAM,MAAM;KACZ,WAAU;KACV,SAAQ;KAEP,UAAA,MAAM;IACL,CAAA,CACH;GACC,CAAA,EAAA,CAAA;EACD,CAAA;CACZ,CAAA,IACP,IACN,EAAA,CAAA;AAEV"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface TimeSeriesPoint {
|
|
2
|
+
timestamp: number;
|
|
3
|
+
lar: number | null;
|
|
4
|
+
host: number | null;
|
|
5
|
+
}
|
|
6
|
+
export declare function TimeSeriesChartSkeleton(): import("react").JSX.Element;
|
|
7
|
+
interface TimeSeriesChartProps {
|
|
8
|
+
label: string;
|
|
9
|
+
larLabel: string;
|
|
10
|
+
hostLabel: string;
|
|
11
|
+
points: readonly TimeSeriesPoint[];
|
|
12
|
+
formatValue: (value: number) => string;
|
|
13
|
+
maximum?: number;
|
|
14
|
+
unavailableLabel: string;
|
|
15
|
+
}
|
|
16
|
+
/** Host and lar series, each drawn only when the server measured it, with gaps for missed samples. */
|
|
17
|
+
export declare function TimeSeriesChart({ label, larLabel, hostLabel, points, formatValue, maximum, unavailableLabel }: TimeSeriesChartProps): import("react").JSX.Element | null;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=TimeSeriesChart.d.ts.map
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { SkeletonLoader } from "../feedback/SkeletonLoader.js";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
// src/display/TimeSeriesChart.tsx
|
|
5
|
+
function TimeSeriesChartSkeleton() {
|
|
6
|
+
return /* @__PURE__ */ jsxs("figure", {
|
|
7
|
+
className: "border-base-300 bg-base-100 min-w-0 rounded-lg border p-4",
|
|
8
|
+
children: [
|
|
9
|
+
/* @__PURE__ */ jsx("div", {
|
|
10
|
+
className: "mb-3 h-5",
|
|
11
|
+
children: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" })
|
|
12
|
+
}),
|
|
13
|
+
/* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation: "chart" }),
|
|
14
|
+
/* @__PURE__ */ jsxs("div", {
|
|
15
|
+
className: "mt-3 flex h-4 items-center gap-5",
|
|
16
|
+
children: [/* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" }), /* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" })]
|
|
17
|
+
}),
|
|
18
|
+
/* @__PURE__ */ jsxs("div", {
|
|
19
|
+
className: "mt-1 flex h-4 items-center justify-between",
|
|
20
|
+
children: [/* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" }), /* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" })]
|
|
21
|
+
})
|
|
22
|
+
]
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
const colors = {
|
|
26
|
+
host: "var(--color-base-600)",
|
|
27
|
+
lar: "var(--color-primary)"
|
|
28
|
+
};
|
|
29
|
+
const time = (timestamp) => new Date(timestamp).toLocaleTimeString();
|
|
30
|
+
/** Host and lar series, each drawn only when the server measured it, with gaps for missed samples. */
|
|
31
|
+
function TimeSeriesChart({ label, larLabel, hostLabel, points, formatValue, maximum, unavailableLabel }) {
|
|
32
|
+
const [hovered, setHovered] = useState(null);
|
|
33
|
+
const labels = {
|
|
34
|
+
host: hostLabel,
|
|
35
|
+
lar: larLabel
|
|
36
|
+
};
|
|
37
|
+
const series = ["host", "lar"].filter((kind) => points.some((point) => point[kind] !== null));
|
|
38
|
+
if (series.length === 0) return null;
|
|
39
|
+
const observed = points.flatMap((point) => series.map((kind) => point[kind])).filter((value) => value !== null);
|
|
40
|
+
const upper = Math.max(maximum ?? 0, ...observed, 1);
|
|
41
|
+
const latest = points.at(-1);
|
|
42
|
+
const first = points[0]?.timestamp ?? 0;
|
|
43
|
+
const last = latest?.timestamp ?? first;
|
|
44
|
+
const span = Math.max(last - first, 1);
|
|
45
|
+
const x = (timestamp) => 2 + (timestamp - first) / span * 96;
|
|
46
|
+
const y = (value) => 38 - Math.max(0, value) / upper * 36;
|
|
47
|
+
const path = (kind) => points.map((point, index) => {
|
|
48
|
+
const value = point[kind];
|
|
49
|
+
if (value === null) return "";
|
|
50
|
+
const start = points[index - 1]?.[kind] == null;
|
|
51
|
+
return `${start ? "M" : "L"}${x(point.timestamp).toFixed(2)},${y(value).toFixed(2)}${start ? "h0" : ""}`;
|
|
52
|
+
}).join(" ");
|
|
53
|
+
const latestText = (kind) => latest?.[kind] == null ? unavailableLabel : formatValue(latest[kind]);
|
|
54
|
+
const swatch = (kind) => /* @__PURE__ */ jsx("span", {
|
|
55
|
+
"aria-hidden": "true",
|
|
56
|
+
className: "size-2 shrink-0 rounded-full",
|
|
57
|
+
style: { backgroundColor: colors[kind] }
|
|
58
|
+
});
|
|
59
|
+
const active = hovered === null ? void 0 : points[hovered];
|
|
60
|
+
const readings = active ? series.flatMap((kind) => {
|
|
61
|
+
const value = active[kind];
|
|
62
|
+
return value === null ? [] : [{
|
|
63
|
+
kind,
|
|
64
|
+
value
|
|
65
|
+
}];
|
|
66
|
+
}) : [];
|
|
67
|
+
const trackPointer = (event) => {
|
|
68
|
+
const bounds = event.currentTarget.getBoundingClientRect();
|
|
69
|
+
const target = (event.clientX - bounds.left) / bounds.width * 100;
|
|
70
|
+
const distance = (point) => Math.abs(x(point.timestamp) - target);
|
|
71
|
+
setHovered(points.reduce((best, point, index) => distance(point) < distance(points[best] ?? point) ? index : best, 0));
|
|
72
|
+
};
|
|
73
|
+
return /* @__PURE__ */ jsxs("figure", {
|
|
74
|
+
className: "border-base-300 bg-base-100 min-w-0 rounded-lg border p-4",
|
|
75
|
+
children: [
|
|
76
|
+
/* @__PURE__ */ jsx("figcaption", {
|
|
77
|
+
className: "text-base-content mb-3 text-sm font-medium",
|
|
78
|
+
children: label
|
|
79
|
+
}),
|
|
80
|
+
/* @__PURE__ */ jsxs("div", {
|
|
81
|
+
className: "relative h-36 w-full touch-pan-y",
|
|
82
|
+
onPointerMove: trackPointer,
|
|
83
|
+
onPointerLeave: () => setHovered(null),
|
|
84
|
+
children: [/* @__PURE__ */ jsxs("svg", {
|
|
85
|
+
"aria-label": `${label}: ${series.map((kind) => `${labels[kind]} ${latestText(kind)}`).join(", ")}`,
|
|
86
|
+
className: "size-full overflow-visible",
|
|
87
|
+
preserveAspectRatio: "none",
|
|
88
|
+
role: "img",
|
|
89
|
+
viewBox: "0 0 100 40",
|
|
90
|
+
children: [/* @__PURE__ */ jsx("path", {
|
|
91
|
+
d: "M2,38 H98 M2,20 H98 M2,2 H98",
|
|
92
|
+
fill: "none",
|
|
93
|
+
stroke: "currentColor",
|
|
94
|
+
strokeOpacity: "0.12",
|
|
95
|
+
strokeWidth: "0.25"
|
|
96
|
+
}), series.map((kind) => /* @__PURE__ */ jsx("path", {
|
|
97
|
+
d: path(kind),
|
|
98
|
+
fill: "none",
|
|
99
|
+
stroke: colors[kind],
|
|
100
|
+
strokeLinecap: "round",
|
|
101
|
+
strokeWidth: "2",
|
|
102
|
+
vectorEffect: "non-scaling-stroke"
|
|
103
|
+
}, kind))]
|
|
104
|
+
}), active && readings.length > 0 ? /* @__PURE__ */ jsxs("div", {
|
|
105
|
+
"aria-hidden": "true",
|
|
106
|
+
className: "pointer-events-none absolute inset-0",
|
|
107
|
+
children: [
|
|
108
|
+
/* @__PURE__ */ jsx("div", {
|
|
109
|
+
className: "bg-base-content/20 absolute inset-y-0 w-px -translate-x-1/2",
|
|
110
|
+
style: { left: `${x(active.timestamp)}%` }
|
|
111
|
+
}),
|
|
112
|
+
readings.map(({ kind, value }) => /* @__PURE__ */ jsx("div", {
|
|
113
|
+
className: "ring-base-50 absolute size-2.5 -translate-x-1/2 -translate-y-1/2 rounded-full ring-2",
|
|
114
|
+
style: {
|
|
115
|
+
left: `${x(active.timestamp)}%`,
|
|
116
|
+
top: `${y(value) / 40 * 100}%`,
|
|
117
|
+
backgroundColor: colors[kind]
|
|
118
|
+
}
|
|
119
|
+
}, kind)),
|
|
120
|
+
/* @__PURE__ */ jsxs("div", {
|
|
121
|
+
className: `border-base-300 bg-base-100 absolute top-0 z-10 w-max rounded-md border px-2 py-1 text-xs shadow-sm ${x(active.timestamp) > 50 ? "-ml-2 -translate-x-full" : "ml-2"}`,
|
|
122
|
+
style: { left: `${x(active.timestamp)}%` },
|
|
123
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
124
|
+
className: "text-base-600 tabular-nums",
|
|
125
|
+
children: time(active.timestamp)
|
|
126
|
+
}), readings.map(({ kind, value }) => /* @__PURE__ */ jsxs("div", {
|
|
127
|
+
className: "text-base-content flex items-center gap-1.5 tabular-nums",
|
|
128
|
+
children: [
|
|
129
|
+
swatch(kind),
|
|
130
|
+
labels[kind],
|
|
131
|
+
": ",
|
|
132
|
+
formatValue(value)
|
|
133
|
+
]
|
|
134
|
+
}, kind))]
|
|
135
|
+
})
|
|
136
|
+
]
|
|
137
|
+
}) : null]
|
|
138
|
+
}),
|
|
139
|
+
/* @__PURE__ */ jsxs("div", {
|
|
140
|
+
className: "text-base-700 mt-3 flex flex-wrap items-center gap-x-5 gap-y-1 text-xs",
|
|
141
|
+
children: [series.map((kind) => /* @__PURE__ */ jsxs("span", {
|
|
142
|
+
className: "inline-flex items-center gap-1.5",
|
|
143
|
+
children: [
|
|
144
|
+
swatch(kind),
|
|
145
|
+
labels[kind],
|
|
146
|
+
": ",
|
|
147
|
+
latestText(kind)
|
|
148
|
+
]
|
|
149
|
+
}, kind)), /* @__PURE__ */ jsx("span", {
|
|
150
|
+
className: "ml-auto tabular-nums",
|
|
151
|
+
children: formatValue(upper)
|
|
152
|
+
})]
|
|
153
|
+
}),
|
|
154
|
+
points.length > 1 ? /* @__PURE__ */ jsxs("div", {
|
|
155
|
+
className: "text-base-600 mt-1 flex justify-between text-xs tabular-nums",
|
|
156
|
+
children: [/* @__PURE__ */ jsx("span", { children: time(first) }), /* @__PURE__ */ jsx("span", { children: time(last) })]
|
|
157
|
+
}) : null
|
|
158
|
+
]
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
export { TimeSeriesChart, TimeSeriesChartSkeleton };
|
|
162
|
+
|
|
163
|
+
//# sourceMappingURL=TimeSeriesChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TimeSeriesChart.js","names":[],"sources":["../../src/display/TimeSeriesChart.tsx"],"sourcesContent":["import { type PointerEvent, useState } from 'react';\n\nimport { SkeletonLoader } from '../feedback/SkeletonLoader';\n\nexport interface TimeSeriesPoint {\n timestamp: number;\n lar: number | null;\n host: number | null;\n}\n\nexport function TimeSeriesChartSkeleton() {\n return (\n <figure className=\"border-base-300 bg-base-100 min-w-0 rounded-lg border p-4\">\n <div className=\"mb-3 h-5\">\n <SkeletonLoader.Shape width=\"short\" />\n </div>\n <SkeletonLoader.Shape presentation=\"chart\" />\n <div className=\"mt-3 flex h-4 items-center gap-5\">\n <SkeletonLoader.Shape width=\"short\" />\n <SkeletonLoader.Shape width=\"short\" />\n </div>\n <div className=\"mt-1 flex h-4 items-center justify-between\">\n <SkeletonLoader.Shape width=\"short\" />\n <SkeletonLoader.Shape width=\"short\" />\n </div>\n </figure>\n );\n}\n\ntype Series = 'host' | 'lar';\n\ninterface TimeSeriesChartProps {\n label: string;\n larLabel: string;\n hostLabel: string;\n points: readonly TimeSeriesPoint[];\n formatValue: (value: number) => string;\n maximum?: number;\n unavailableLabel: string;\n}\n\nconst colors: Record<Series, string> = { host: 'var(--color-base-600)', lar: 'var(--color-primary)' };\nconst time = (timestamp: number) => new Date(timestamp).toLocaleTimeString();\n\n/** Host and lar series, each drawn only when the server measured it, with gaps for missed samples. */\nexport function TimeSeriesChart({\n label,\n larLabel,\n hostLabel,\n points,\n formatValue,\n maximum,\n unavailableLabel,\n}: TimeSeriesChartProps) {\n const [hovered, setHovered] = useState<number | null>(null);\n const labels: Record<Series, string> = { host: hostLabel, lar: larLabel };\n const series = (['host', 'lar'] as const).filter((kind) => points.some((point) => point[kind] !== null));\n\n if (series.length === 0) return null;\n\n const observed = points.flatMap((point) => series.map((kind) => point[kind])).filter((value) => value !== null);\n const upper = Math.max(maximum ?? 0, ...observed, 1);\n const latest = points.at(-1);\n const first = points[0]?.timestamp ?? 0;\n const last = latest?.timestamp ?? first;\n const span = Math.max(last - first, 1);\n // Plot coordinates in percent of the viewBox, shared by the SVG lines and the HTML hover layer.\n const x = (timestamp: number) => 2 + ((timestamp - first) / span) * 96;\n const y = (value: number) => 38 - (Math.max(0, value) / upper) * 36;\n const path = (kind: Series) =>\n points\n .map((point, index) => {\n const value = point[kind];\n\n if (value === null) return '';\n\n // A sample after a gap starts a segment; a zero-length one draws as a dot through the round cap.\n const start = points[index - 1]?.[kind] == null;\n\n return `${start ? 'M' : 'L'}${x(point.timestamp).toFixed(2)},${y(value).toFixed(2)}${start ? 'h0' : ''}`;\n })\n .join(' ');\n const latestText = (kind: Series) => (latest?.[kind] == null ? unavailableLabel : formatValue(latest[kind]));\n const swatch = (kind: Series) => (\n <span aria-hidden=\"true\" className=\"size-2 shrink-0 rounded-full\" style={{ backgroundColor: colors[kind] }} />\n );\n const active = hovered === null ? undefined : points[hovered];\n const readings = active\n ? series.flatMap((kind) => {\n const value = active[kind];\n\n return value === null ? [] : [{ kind, value }];\n })\n : [];\n const trackPointer = (event: PointerEvent<HTMLDivElement>) => {\n const bounds = event.currentTarget.getBoundingClientRect();\n const target = ((event.clientX - bounds.left) / bounds.width) * 100;\n const distance = (point: TimeSeriesPoint) => Math.abs(x(point.timestamp) - target);\n\n setHovered(\n points.reduce(\n (best, point, index) => (distance(point) < distance(points[best] ?? point) ? index : best),\n 0,\n ),\n );\n };\n\n return (\n <figure className=\"border-base-300 bg-base-100 min-w-0 rounded-lg border p-4\">\n <figcaption className=\"text-base-content mb-3 text-sm font-medium\">{label}</figcaption>\n <div\n className=\"relative h-36 w-full touch-pan-y\"\n onPointerMove={trackPointer}\n onPointerLeave={() => setHovered(null)}\n >\n <svg\n aria-label={`${label}: ${series.map((kind) => `${labels[kind]} ${latestText(kind)}`).join(', ')}`}\n className=\"size-full overflow-visible\"\n preserveAspectRatio=\"none\"\n role=\"img\"\n viewBox=\"0 0 100 40\"\n >\n <path\n d=\"M2,38 H98 M2,20 H98 M2,2 H98\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.12\"\n strokeWidth=\"0.25\"\n />\n {series.map((kind) => (\n <path\n key={kind}\n d={path(kind)}\n fill=\"none\"\n stroke={colors[kind]}\n strokeLinecap=\"round\"\n strokeWidth=\"2\"\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </svg>\n {active && readings.length > 0 ? (\n <div aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0\">\n <div\n className=\"bg-base-content/20 absolute inset-y-0 w-px -translate-x-1/2\"\n style={{ left: `${x(active.timestamp)}%` }}\n />\n {readings.map(({ kind, value }) => (\n <div\n key={kind}\n className=\"ring-base-50 absolute size-2.5 -translate-x-1/2 -translate-y-1/2 rounded-full ring-2\"\n style={{\n left: `${x(active.timestamp)}%`,\n top: `${(y(value) / 40) * 100}%`,\n backgroundColor: colors[kind],\n }}\n />\n ))}\n <div\n className={`border-base-300 bg-base-100 absolute top-0 z-10 w-max rounded-md border px-2 py-1 text-xs shadow-sm ${x(active.timestamp) > 50 ? '-ml-2 -translate-x-full' : 'ml-2'}`}\n style={{ left: `${x(active.timestamp)}%` }}\n >\n <div className=\"text-base-600 tabular-nums\">{time(active.timestamp)}</div>\n {readings.map(({ kind, value }) => (\n <div key={kind} className=\"text-base-content flex items-center gap-1.5 tabular-nums\">\n {swatch(kind)}\n {labels[kind]}: {formatValue(value)}\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n <div className=\"text-base-700 mt-3 flex flex-wrap items-center gap-x-5 gap-y-1 text-xs\">\n {series.map((kind) => (\n <span key={kind} className=\"inline-flex items-center gap-1.5\">\n {swatch(kind)}\n {labels[kind]}: {latestText(kind)}\n </span>\n ))}\n <span className=\"ml-auto tabular-nums\">{formatValue(upper)}</span>\n </div>\n {points.length > 1 ? (\n <div className=\"text-base-600 mt-1 flex justify-between text-xs tabular-nums\">\n <span>{time(first)}</span>\n <span>{time(last)}</span>\n </div>\n ) : null}\n </figure>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// src/display/ToneTile.ts
|
|
2
|
+
/** A small square holding an icon, tinted by tone: T3 Code's 8% tint behind its foreground colour. */
|
|
3
|
+
const toneTileClasses = {
|
|
4
|
+
neutral: "bg-base-200 text-base-700 ring-1 ring-inset ring-base-300/70 dark:bg-base-300/60",
|
|
5
|
+
success: "bg-success/10 text-(--lar-success-text) dark:bg-success/16",
|
|
6
|
+
warning: "bg-warning/12 text-(--lar-warning-text) dark:bg-warning/16",
|
|
7
|
+
danger: "bg-danger/10 text-(--lar-danger-text) dark:bg-danger/16",
|
|
8
|
+
info: "bg-info/10 text-(--lar-info-text) dark:bg-info/16"
|
|
9
|
+
};
|
|
10
|
+
export { toneTileClasses };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=ToneTile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToneTile.js","names":[],"sources":["../../src/display/ToneTile.ts"],"sourcesContent":["import type { StatusTone } from '../feedback/StatusIndicator';\n\n/** A small square holding an icon, tinted by tone: T3 Code's 8% tint behind its foreground colour. */\nexport const toneTileClasses: Record<StatusTone, string> = {\n neutral: 'bg-base-200 text-base-700 ring-1 ring-inset ring-base-300/70 dark:bg-base-300/60',\n success: 'bg-success/10 text-(--lar-success-text) dark:bg-success/16',\n warning: 'bg-warning/12 text-(--lar-warning-text) dark:bg-warning/16',\n danger: 'bg-danger/10 text-(--lar-danger-text) dark:bg-danger/16',\n info: 'bg-info/10 text-(--lar-info-text) dark:bg-info/16',\n};\n"],"mappings":";;AAGA,MAAa,kBAA8C;CACvD,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;AACV"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ActivityCard, ActivityCardSkeleton } from "./ActivityCard.js";
|
|
2
|
+
import { ItemAction } from "./ItemAction.js";
|
|
3
|
+
import { Artwork } from "./Artwork.js";
|
|
4
|
+
import { Avatar } from "./Avatar.js";
|
|
5
|
+
import { Badge, BadgeProps } from "./Badge.js";
|
|
6
|
+
import { BadgeList, BadgeListItem } from "./BadgeList.js";
|
|
7
|
+
import { BrandLink, BrandMark } from "./BrandMark.js";
|
|
8
|
+
import { ChangeList, ChangeListItem } from "./ChangeList.js";
|
|
9
|
+
import { CheckList, CheckListItem } from "./CheckList.js";
|
|
10
|
+
import { CodeBlock } from "./CodeBlock.js";
|
|
11
|
+
import { CopyButton } from "./CopyButton.js";
|
|
12
|
+
import { DataTable, DataTableCell, DataTableRow } from "./DataTable.js";
|
|
13
|
+
import { DetailHero, DetailHeroDetail, DetailHeroDetails, DetailHeroTags } from "./DetailHero.js";
|
|
14
|
+
import { DetailList } from "./DetailList.js";
|
|
15
|
+
import { DeviceCard } from "./DeviceCard.js";
|
|
16
|
+
import { Identity } from "./Identity.js";
|
|
17
|
+
import { ImageCard } from "./ImageCard.js";
|
|
18
|
+
import { ImagePicker, ImagePickerGrid, ImagePickerOption, ImageUpload } from "./ImagePicker.js";
|
|
19
|
+
import { InfoBox } from "./InfoBox.js";
|
|
20
|
+
import { InsetPanel } from "./InsetPanel.js";
|
|
21
|
+
import { Kbd } from "./Kbd.js";
|
|
22
|
+
import { KindIcon } from "./KindIcon.js";
|
|
23
|
+
import { NoticeCard } from "./NoticeCard.js";
|
|
24
|
+
import { PairingList, PairingListItem } from "./PairingList.js";
|
|
25
|
+
import { PathList } from "./PathList.js";
|
|
26
|
+
import { PeoplePreview } from "./PeoplePreview.js";
|
|
27
|
+
import { PropertySheet, PropertySheetRow, PropertySheetTag } from "./PropertySheet.js";
|
|
28
|
+
import { QrCode } from "./QrCode.js";
|
|
29
|
+
import { RadioChoice } from "./RadioChoice.js";
|
|
30
|
+
import { RatingLink } from "./RatingLink.js";
|
|
31
|
+
import { ResourceCard, ResourceCardSkeleton } from "./ResourceCard.js";
|
|
32
|
+
import { RowList, RowListItem } from "./RowList.js";
|
|
33
|
+
import { MeterLegend, MeterSegment, MeterTone, StackedMeter } from "./StackedMeter.js";
|
|
34
|
+
import { StatTile } from "./StatTile.js";
|
|
35
|
+
import { StepList } from "./StepList.js";
|
|
36
|
+
import { TextPreview } from "./TextPreview.js";
|
|
37
|
+
import { TimeSeriesChart, TimeSeriesChartSkeleton, TimeSeriesPoint } from "./TimeSeriesChart.js";
|
|
38
|
+
export { ActivityCard, ActivityCardSkeleton, Artwork, Avatar, Badge, BadgeList, type BadgeListItem, type BadgeProps, BrandLink, BrandMark, ChangeList, type ChangeListItem, CheckList, type CheckListItem, CodeBlock, CopyButton, DataTable, type DataTableCell, type DataTableRow, DetailHero, DetailHeroDetail, DetailHeroDetails, DetailHeroTags, DetailList, DeviceCard, Identity, ImageCard, ImagePicker, ImagePickerGrid, ImagePickerOption, ImageUpload, InfoBox, InsetPanel, ItemAction, Kbd, KindIcon, MeterLegend, type MeterSegment, type MeterTone, NoticeCard, PairingList, type PairingListItem, PathList, PeoplePreview, PropertySheet, type PropertySheetRow, type PropertySheetTag, QrCode, RadioChoice, RatingLink, ResourceCard, ResourceCardSkeleton, RowList, RowListItem, StackedMeter, StatTile, StepList, TextPreview, TimeSeriesChart, TimeSeriesChartSkeleton, type TimeSeriesPoint };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { StatusTone } from "./StatusIndicator.js";
|
|
2
|
+
import { AlertProps } from "@ninna-ui/feedback";
|
|
3
|
+
type AlertProps$1 = Omit<AlertProps, 'color' | 'size' | 'variant'> & {
|
|
4
|
+
compact?: boolean;
|
|
5
|
+
/** Stays below the application header while its containing region is visible. */
|
|
6
|
+
sticky?: boolean;
|
|
7
|
+
tone?: Exclude<StatusTone, 'neutral'>;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* An immediate status about a condition or operation. Compact notes can hold short inline guidance.
|
|
11
|
+
* Use NoticeCard for content that needs examination and InfoBox for guidance that opens another surface.
|
|
12
|
+
*/
|
|
13
|
+
declare function Alert$1({ compact, sticky, tone, className, ...props }: AlertProps$1): import("react").JSX.Element;
|
|
14
|
+
export { Alert$1 as Alert };
|
|
15
|
+
//# sourceMappingURL=Alert.d.ts.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Alert } from "@ninna-ui/feedback";
|
|
3
|
+
// src/feedback/Alert.tsx
|
|
4
|
+
/**
|
|
5
|
+
* An immediate status about a condition or operation. Compact notes can hold short inline guidance.
|
|
6
|
+
* Use NoticeCard for content that needs examination and InfoBox for guidance that opens another surface.
|
|
7
|
+
*/
|
|
8
|
+
function Alert$1({ compact = false, sticky = false, tone = "info", className = "", ...props }) {
|
|
9
|
+
return /* @__PURE__ */ jsx(Alert, {
|
|
10
|
+
size: compact ? "xs" : "sm",
|
|
11
|
+
showIcon: true,
|
|
12
|
+
...props,
|
|
13
|
+
color: tone,
|
|
14
|
+
className: (sticky ? "bg-base-50 sticky top-(--lar-header-height,0px) z-30 shadow-sm " : "") + (compact ? "[&_[data-slot=description]]:text-xs [&_[data-slot=icon]>svg]:size-4 [&_[data-slot=title]]:text-xs " : "") + (tone === "warning" ? "[&_[data-slot=description]]:text-(--lar-warning-text) [&_[data-slot=description]]:opacity-100 [&_[data-slot=title]]:text-(--lar-warning-text) " : "") + className
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export { Alert$1 as Alert };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=Alert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Alert.js","names":["Alert","NinnaAlert"],"sources":["../../src/feedback/Alert.tsx"],"sourcesContent":["import { Alert as NinnaAlert, type AlertProps as NinnaAlertProps } from '@ninna-ui/feedback';\n\nimport type { StatusTone } from './StatusIndicator';\n\ntype AlertProps = Omit<NinnaAlertProps, 'color' | 'size' | 'variant'> & {\n compact?: boolean;\n /** Stays below the application header while its containing region is visible. */\n sticky?: boolean;\n tone?: Exclude<StatusTone, 'neutral'>;\n};\n\n/**\n * An immediate status about a condition or operation. Compact notes can hold short inline guidance.\n * Use NoticeCard for content that needs examination and InfoBox for guidance that opens another surface.\n */\nexport function Alert({ compact = false, sticky = false, tone = 'info', className = '', ...props }: AlertProps) {\n return (\n <NinnaAlert\n size={compact ? 'xs' : 'sm'}\n showIcon\n {...props}\n color={tone}\n className={\n (sticky ? 'bg-base-50 sticky top-(--lar-header-height,0px) z-30 shadow-sm ' : '') +\n (compact\n ? '[&_[data-slot=description]]:text-xs [&_[data-slot=icon]>svg]:size-4 [&_[data-slot=title]]:text-xs '\n : '') +\n (tone === 'warning'\n ? '[&_[data-slot=description]]:text-(--lar-warning-text) [&_[data-slot=description]]:opacity-100 [&_[data-slot=title]]:text-(--lar-warning-text) '\n : '') +\n className\n }\n />\n );\n}\n"],"mappings":";;;;;;;AAeA,SAAgBA,QAAM,EAAE,UAAU,OAAO,SAAS,OAAO,OAAO,QAAQ,YAAY,IAAI,GAAG,SAAqB;CAC5G,OACI,oBAACC,OAAD;EACI,MAAM,UAAU,OAAO;EACvB,UAAA;EACA,GAAI;EACJ,OAAO;EACP,YACK,SAAS,oEAAoE,OAC7E,UACK,uGACA,OACL,SAAS,YACJ,mJACA,MACN;CAEP,CAAA;AAET"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
interface AsyncStateProps {
|
|
3
|
+
placeholder?: ReactNode;
|
|
4
|
+
error?: string;
|
|
5
|
+
errorTitle: string;
|
|
6
|
+
label: string;
|
|
7
|
+
loading: boolean;
|
|
8
|
+
onRetry?: () => void;
|
|
9
|
+
presentation?: 'card' | 'line';
|
|
10
|
+
retryLabel?: string;
|
|
11
|
+
retrying?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** Owns a region's loading geometry and load failure; use Alert for other operation feedback. */
|
|
14
|
+
export declare function AsyncState({ error, errorTitle, label, loading, onRetry, presentation, placeholder, retryLabel, retrying }: AsyncStateProps): import("react").JSX.Element | null;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=AsyncState.d.ts.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Button } from "../actions/Button.js";
|
|
2
|
+
import { SkeletonLoader } from "./SkeletonLoader.js";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { Alert } from "@ninna-ui/feedback";
|
|
5
|
+
// src/feedback/AsyncState.tsx
|
|
6
|
+
/** Owns a region's loading geometry and load failure; use Alert for other operation feedback. */
|
|
7
|
+
function AsyncState({ error, errorTitle, label, loading, onRetry, presentation = "card", placeholder, retryLabel, retrying = false }) {
|
|
8
|
+
if (loading) return /* @__PURE__ */ jsx(SkeletonLoader, {
|
|
9
|
+
label,
|
|
10
|
+
children: placeholder ?? /* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation })
|
|
11
|
+
});
|
|
12
|
+
if (!error) return null;
|
|
13
|
+
return /* @__PURE__ */ jsx(Alert, {
|
|
14
|
+
color: "danger",
|
|
15
|
+
title: errorTitle,
|
|
16
|
+
description: error,
|
|
17
|
+
showIcon: true,
|
|
18
|
+
action: onRetry && retryLabel ? /* @__PURE__ */ jsx(Button, {
|
|
19
|
+
type: "button",
|
|
20
|
+
onClick: onRetry,
|
|
21
|
+
variant: "primary",
|
|
22
|
+
loading: retrying,
|
|
23
|
+
children: retryLabel
|
|
24
|
+
}) : void 0
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
export { AsyncState };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=AsyncState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncState.js","names":[],"sources":["../../src/feedback/AsyncState.tsx"],"sourcesContent":["import { Alert } from '@ninna-ui/feedback';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '../actions/Button';\nimport { SkeletonLoader } from './SkeletonLoader';\n\ninterface AsyncStateProps {\n placeholder?: ReactNode;\n error?: string;\n errorTitle: string;\n label: string;\n loading: boolean;\n onRetry?: () => void;\n presentation?: 'card' | 'line';\n retryLabel?: string;\n retrying?: boolean;\n}\n\n/** Owns a region's loading geometry and load failure; use Alert for other operation feedback. */\nexport function AsyncState({\n error,\n errorTitle,\n label,\n loading,\n onRetry,\n presentation = 'card',\n placeholder,\n retryLabel,\n retrying = false,\n}: AsyncStateProps) {\n if (loading) {\n return (\n <SkeletonLoader label={label}>\n {placeholder ?? <SkeletonLoader.Shape presentation={presentation} />}\n </SkeletonLoader>\n );\n }\n\n if (!error) return null;\n\n return (\n <Alert\n color=\"danger\"\n title={errorTitle}\n description={error}\n showIcon\n action={\n onRetry && retryLabel ? (\n <Button type=\"button\" onClick={onRetry} variant=\"primary\" loading={retrying}>\n {retryLabel}\n </Button>\n ) : undefined\n }\n />\n );\n}\n"],"mappings":";;;;;;AAmBA,SAAgB,WAAW,EACvB,OACA,YACA,OACA,SACA,SACA,eAAe,QACf,aACA,YACA,WAAW,SACK;CAChB,IAAI,SACA,OACI,oBAAC,gBAAD;EAAuB;EAClB,UAAA,eAAe,oBAAC,eAAe,OAAhB,EAAoC,aAAe,CAAA;CACvD,CAAA;CAIxB,IAAI,CAAC,OAAO,OAAO;CAEnB,OACI,oBAAC,OAAD;EACI,OAAM;EACN,OAAO;EACP,aAAa;EACb,UAAA;EACA,QACI,WAAW,aACP,oBAAC,QAAD;GAAQ,MAAK;GAAS,SAAS;GAAS,SAAQ;GAAU,SAAS;GAC9D,UAAA;EACG,CAAA,IACR,KAAA;CAEX,CAAA;AAET"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ErrorNotification {
|
|
2
|
+
description: string;
|
|
3
|
+
title: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function dismissAllNotifications(): void;
|
|
6
|
+
export declare function showErrorNotification(notification: ErrorNotification): void;
|
|
7
|
+
export declare function showSuccessNotification(message: string): void;
|
|
8
|
+
//# sourceMappingURL=ErrorNotification.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { toast } from "@ninna-ui/feedback";
|
|
2
|
+
// src/feedback/ErrorNotification.ts
|
|
3
|
+
function dismissAllNotifications() {
|
|
4
|
+
toast.dismissAll();
|
|
5
|
+
}
|
|
6
|
+
function showErrorNotification(notification) {
|
|
7
|
+
toast.create({
|
|
8
|
+
...notification,
|
|
9
|
+
color: "danger"
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function showSuccessNotification(message) {
|
|
13
|
+
toast.create({
|
|
14
|
+
color: "success",
|
|
15
|
+
title: message
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export { dismissAllNotifications, showErrorNotification, showSuccessNotification };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=ErrorNotification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorNotification.js","names":[],"sources":["../../src/feedback/ErrorNotification.ts"],"sourcesContent":["import { toast } from '@ninna-ui/feedback';\n\nexport interface ErrorNotification {\n description: string;\n title: string;\n}\n\nexport function dismissAllNotifications(): void {\n toast.dismissAll();\n}\n\nexport function showErrorNotification(notification: ErrorNotification): void {\n toast.create({\n ...notification,\n color: 'danger',\n });\n}\n\nexport function showSuccessNotification(message: string): void {\n toast.create({\n color: 'success',\n title: message,\n });\n}\n"],"mappings":";;AAOA,SAAgB,0BAAgC;CAC5C,MAAM,WAAW;AACrB;AAEA,SAAgB,sBAAsB,cAAuC;CACzE,MAAM,OAAO;EACT,GAAG;EACH,OAAO;CACX,CAAC;AACL;AAEA,SAAgB,wBAAwB,SAAuB;CAC3D,MAAM,OAAO;EACT,OAAO;EACP,OAAO;CACX,CAAC;AACL"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Toaster } from "@ninna-ui/feedback";
|
|
3
|
+
// src/feedback/Notifications.tsx
|
|
4
|
+
function Notifications() {
|
|
5
|
+
return /* @__PURE__ */ jsx(Toaster, { position: "bottom-right" });
|
|
6
|
+
}
|
|
7
|
+
export { Notifications };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=Notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Notifications.js","names":[],"sources":["../../src/feedback/Notifications.tsx"],"sourcesContent":["import { Toaster } from '@ninna-ui/feedback';\n\nexport function Notifications() {\n return <Toaster position=\"bottom-right\" />;\n}\n"],"mappings":";;;AAEA,SAAgB,gBAAgB;CAC5B,OAAO,oBAAC,SAAD,EAAS,UAAS,eAAgB,CAAA;AAC7C"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { StatusTone } from "./StatusIndicator.js";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
interface ProgressStatusRowProps {
|
|
4
|
+
active: boolean;
|
|
5
|
+
detail?: string;
|
|
6
|
+
secondaryDetail?: string;
|
|
7
|
+
issue?: string;
|
|
8
|
+
label: string;
|
|
9
|
+
progress?: {
|
|
10
|
+
max: number;
|
|
11
|
+
value: number;
|
|
12
|
+
};
|
|
13
|
+
tone?: StatusTone;
|
|
14
|
+
trailing?: ReactNode;
|
|
15
|
+
onDetails?: () => void;
|
|
16
|
+
detailsLabel?: string;
|
|
17
|
+
progressLabel?: string;
|
|
18
|
+
compact?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** Ledger rows reserve the count line and track so updates never displace controls. */
|
|
21
|
+
export declare function ProgressStatusRow({ active, detail, secondaryDetail, issue, label, progress, tone, trailing, onDetails, detailsLabel, progressLabel, compact }: ProgressStatusRowProps): import("react").JSX.Element;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=ProgressStatusRow.d.ts.map
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Button } from "../actions/Button.js";
|
|
2
|
+
import { StatusIndicator } from "./StatusIndicator.js";
|
|
3
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { ChevronRightIcon } from "lucide-react";
|
|
5
|
+
// src/feedback/ProgressStatusRow.tsx
|
|
6
|
+
/** Ledger rows reserve the count line and track so updates never displace controls. */
|
|
7
|
+
function ProgressStatusRow({ active, detail, secondaryDetail, issue, label, progress, tone = "info", trailing, onDetails, detailsLabel, progressLabel, compact = false }) {
|
|
8
|
+
const known = progress && progress.max > 0 ? progress : void 0;
|
|
9
|
+
const colors = {
|
|
10
|
+
info: "bg-primary",
|
|
11
|
+
success: "bg-success",
|
|
12
|
+
danger: "bg-danger",
|
|
13
|
+
warning: "bg-warning",
|
|
14
|
+
neutral: "bg-base-400"
|
|
15
|
+
};
|
|
16
|
+
const heading = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(StatusIndicator, { tone }), /* @__PURE__ */ jsx("span", {
|
|
17
|
+
className: "text-base-content min-w-0 flex-1 truncate",
|
|
18
|
+
title: label,
|
|
19
|
+
children: label
|
|
20
|
+
})] });
|
|
21
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
22
|
+
className: "w-full min-w-0",
|
|
23
|
+
children: [
|
|
24
|
+
/* @__PURE__ */ jsxs("div", {
|
|
25
|
+
className: "grid min-h-12 min-w-0 grid-cols-[minmax(0,1fr)_auto] content-center items-center gap-x-3 gap-y-1",
|
|
26
|
+
children: [
|
|
27
|
+
onDetails ? /* @__PURE__ */ jsxs(Button, {
|
|
28
|
+
variant: "status",
|
|
29
|
+
className: "w-full",
|
|
30
|
+
onClick: onDetails,
|
|
31
|
+
"aria-label": detailsLabel,
|
|
32
|
+
"aria-haspopup": "dialog",
|
|
33
|
+
children: [heading, /* @__PURE__ */ jsx(ChevronRightIcon, {})]
|
|
34
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
35
|
+
className: "flex h-4 min-w-0 items-center gap-1.5 text-xs",
|
|
36
|
+
children: heading
|
|
37
|
+
}),
|
|
38
|
+
trailing ? /* @__PURE__ */ jsx("div", {
|
|
39
|
+
className: "col-start-2 row-span-3 row-start-1 shrink-0",
|
|
40
|
+
children: trailing
|
|
41
|
+
}) : null,
|
|
42
|
+
/* @__PURE__ */ jsx("div", {
|
|
43
|
+
className: `text-2xs text-base-700 col-start-1 tabular-nums ${compact ? "truncate" : "break-words"}`,
|
|
44
|
+
title: detail,
|
|
45
|
+
children: detail || "\xA0"
|
|
46
|
+
}),
|
|
47
|
+
/* @__PURE__ */ jsx("div", {
|
|
48
|
+
className: "bg-base-300/70 col-start-1 h-1.5 overflow-hidden rounded-full",
|
|
49
|
+
role: active ? "progressbar" : void 0,
|
|
50
|
+
"aria-label": active ? progressLabel || detail || label : void 0,
|
|
51
|
+
"aria-valuenow": active && known ? known.value : void 0,
|
|
52
|
+
"aria-valuemin": active && known ? 0 : void 0,
|
|
53
|
+
"aria-valuemax": active && known ? known.max : void 0,
|
|
54
|
+
children: active ? /* @__PURE__ */ jsx("div", {
|
|
55
|
+
className: `h-full rounded-full ${colors[tone]} ${known ? "" : "lar-progress-indeterminate"}`,
|
|
56
|
+
style: known ? { width: `${Math.min(100, Math.max(0, known.value / known.max * 100))}%` } : void 0
|
|
57
|
+
}) : null
|
|
58
|
+
})
|
|
59
|
+
]
|
|
60
|
+
}),
|
|
61
|
+
issue ? /* @__PURE__ */ jsx("div", {
|
|
62
|
+
className: "text-2xs break-words text-(--lar-danger-text) tabular-nums",
|
|
63
|
+
children: issue
|
|
64
|
+
}) : null,
|
|
65
|
+
secondaryDetail ? /* @__PURE__ */ jsx("div", {
|
|
66
|
+
className: "text-2xs text-base-700 break-words tabular-nums",
|
|
67
|
+
children: secondaryDetail
|
|
68
|
+
}) : null
|
|
69
|
+
]
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
export { ProgressStatusRow };
|
|
73
|
+
|
|
74
|
+
//# sourceMappingURL=ProgressStatusRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressStatusRow.js","names":[],"sources":["../../src/feedback/ProgressStatusRow.tsx"],"sourcesContent":["import { ChevronRightIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '../actions/Button';\nimport { StatusIndicator, type StatusTone } from './StatusIndicator';\n\ninterface ProgressStatusRowProps {\n active: boolean;\n detail?: string;\n secondaryDetail?: string;\n issue?: string;\n label: string;\n progress?: { max: number; value: number };\n tone?: StatusTone;\n trailing?: ReactNode;\n onDetails?: () => void;\n detailsLabel?: string;\n progressLabel?: string;\n compact?: boolean;\n}\n\n/** Ledger rows reserve the count line and track so updates never displace controls. */\nexport function ProgressStatusRow({\n active,\n detail,\n secondaryDetail,\n issue,\n label,\n progress,\n tone = 'info',\n trailing,\n onDetails,\n detailsLabel,\n progressLabel,\n compact = false,\n}: ProgressStatusRowProps) {\n const known = progress && progress.max > 0 ? progress : undefined;\n const colors = {\n info: 'bg-primary',\n success: 'bg-success',\n danger: 'bg-danger',\n warning: 'bg-warning',\n neutral: 'bg-base-400',\n };\n const heading = (\n <>\n <StatusIndicator tone={tone} />\n <span className=\"text-base-content min-w-0 flex-1 truncate\" title={label}>\n {label}\n </span>\n </>\n );\n\n return (\n <div className=\"w-full min-w-0\">\n <div className=\"grid min-h-12 min-w-0 grid-cols-[minmax(0,1fr)_auto] content-center items-center gap-x-3 gap-y-1\">\n {onDetails ? (\n <Button\n variant=\"status\"\n className=\"w-full\"\n onClick={onDetails}\n aria-label={detailsLabel}\n aria-haspopup=\"dialog\"\n >\n {heading}\n <ChevronRightIcon />\n </Button>\n ) : (\n <div className=\"flex h-4 min-w-0 items-center gap-1.5 text-xs\">{heading}</div>\n )}\n {trailing ? <div className=\"col-start-2 row-span-3 row-start-1 shrink-0\">{trailing}</div> : null}\n <div\n className={`text-2xs text-base-700 col-start-1 tabular-nums ${compact ? 'truncate' : 'break-words'}`}\n title={detail}\n >\n {detail || '\\u00a0'}\n </div>\n <div\n className=\"bg-base-300/70 col-start-1 h-1.5 overflow-hidden rounded-full\"\n role={active ? 'progressbar' : undefined}\n aria-label={active ? progressLabel || detail || label : undefined}\n aria-valuenow={active && known ? known.value : undefined}\n aria-valuemin={active && known ? 0 : undefined}\n aria-valuemax={active && known ? known.max : undefined}\n >\n {active ? (\n <div\n className={`h-full rounded-full ${colors[tone]} ${known ? '' : 'lar-progress-indeterminate'}`}\n style={\n known\n ? { width: `${Math.min(100, Math.max(0, (known.value / known.max) * 100))}%` }\n : undefined\n }\n />\n ) : null}\n </div>\n </div>\n {issue ? <div className=\"text-2xs break-words text-(--lar-danger-text) tabular-nums\">{issue}</div> : null}\n {secondaryDetail ? (\n <div className=\"text-2xs text-base-700 break-words tabular-nums\">{secondaryDetail}</div>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;;;AAsBA,SAAgB,kBAAkB,EAC9B,QACA,QACA,iBACA,OACA,OACA,UACA,OAAO,QACP,UACA,WACA,cACA,eACA,UAAU,SACa;CACvB,MAAM,QAAQ,YAAY,SAAS,MAAM,IAAI,WAAW,KAAA;CACxD,MAAM,SAAS;EACX,MAAM;EACN,SAAS;EACT,QAAQ;EACR,SAAS;EACT,SAAS;CACb;CACA,MAAM,UACF,qBAAA,UAAA,EAAA,UAAA,CACI,oBAAC,iBAAD,EAAuB,KAAO,CAAA,GAC9B,oBAAC,QAAD;EAAM,WAAU;EAA4C,OAAO;EAC9D,UAAA;CACC,CAAA,CACR,EAAA,CAAA;CAGN,OACI,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACI,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACK,YACG,qBAAC,QAAD;MACI,SAAQ;MACR,WAAU;MACV,SAAS;MACT,cAAY;MACZ,iBAAc;MALlB,UAAA,CAOK,SACD,oBAAC,kBAAD,CAAmB,CAAA,CACf;KAER,CAAA,IAAA,oBAAC,OAAD;MAAK,WAAU;MAAiD,UAAA;KAAa,CAAA;KAEhF,WAAW,oBAAC,OAAD;MAAK,WAAU;MAA+C,UAAA;KAAc,CAAA,IAAI;KAC5F,oBAAC,OAAD;MACI,WAAW,mDAAmD,UAAU,aAAa;MACrF,OAAO;MAEN,UAAA,UAAU;KACV,CAAA;KACL,oBAAC,OAAD;MACI,WAAU;MACV,MAAM,SAAS,gBAAgB,KAAA;MAC/B,cAAY,SAAS,iBAAiB,UAAU,QAAQ,KAAA;MACxD,iBAAe,UAAU,QAAQ,MAAM,QAAQ,KAAA;MAC/C,iBAAe,UAAU,QAAQ,IAAI,KAAA;MACrC,iBAAe,UAAU,QAAQ,MAAM,MAAM,KAAA;MAE5C,UAAA,SACG,oBAAC,OAAD;OACI,WAAW,uBAAuB,OAAO,MAAM,GAAG,QAAQ,KAAK;OAC/D,OACI,QACM,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,GAAI,MAAM,QAAQ,MAAM,MAAO,GAAG,CAAC,EAAE,GAAG,IAC3E,KAAA;MAEb,CAAA,IACD;KACH,CAAA;IACJ;;GACJ,QAAQ,oBAAC,OAAD;IAAK,WAAU;IAA8D,UAAA;GAAW,CAAA,IAAI;GACpG,kBACG,oBAAC,OAAD;IAAK,WAAU;IAAmD,UAAA;GAAqB,CAAA,IACvF;EACH;;AAEb"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
type SkeletonPresentation = 'artwork' | 'poster' | 'video' | 'card' | 'chart' | 'circle' | 'control' | 'heading' | 'line' | 'metric';
|
|
3
|
+
type SkeletonWidth = 'action' | 'full' | 'medium' | 'short' | 'wide';
|
|
4
|
+
interface SkeletonLoaderProps {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
label: string;
|
|
7
|
+
loading?: boolean;
|
|
8
|
+
}
|
|
9
|
+
declare function SkeletonLoaderRoot({ children, label, loading }: SkeletonLoaderProps): import("react").JSX.Element;
|
|
10
|
+
interface SkeletonShapeProps {
|
|
11
|
+
presentation?: SkeletonPresentation;
|
|
12
|
+
width?: SkeletonWidth;
|
|
13
|
+
}
|
|
14
|
+
declare function SkeletonShape({ presentation, width }: SkeletonShapeProps): import("react").JSX.Element;
|
|
15
|
+
export declare const SkeletonLoader: typeof SkeletonLoaderRoot & {
|
|
16
|
+
Shape: typeof SkeletonShape;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=SkeletonLoader.d.ts.map
|