@lar-works/design-system 0.0.0-stage → 0.1.1
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 +54 -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 +71 -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,80 @@
|
|
|
1
|
+
import { Link } from "../typography/Link.js";
|
|
2
|
+
import { Text } from "../typography/Typography.js";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { CheckIcon } from "lucide-react";
|
|
5
|
+
// src/display/RatingLink.tsx
|
|
6
|
+
/** The sources' own marks and colors, as the Apple apps draw them. Anything else reads by its name. */
|
|
7
|
+
function ratingMark(source) {
|
|
8
|
+
switch (source.trim().toLowerCase()) {
|
|
9
|
+
case "trakt": return {
|
|
10
|
+
name: "Trakt",
|
|
11
|
+
label: "Trakt",
|
|
12
|
+
mark: /* @__PURE__ */ jsx("span", {
|
|
13
|
+
className: "inline-flex size-5 items-center justify-center rounded-full bg-[#ed1c24] text-white [&>svg]:size-3 [&>svg]:stroke-[3]",
|
|
14
|
+
children: /* @__PURE__ */ jsx(CheckIcon, {})
|
|
15
|
+
})
|
|
16
|
+
};
|
|
17
|
+
case "imdb": return {
|
|
18
|
+
name: "IMDb",
|
|
19
|
+
mark: /* @__PURE__ */ jsx("span", {
|
|
20
|
+
className: "inline-flex h-5 items-center rounded-sm bg-[#f5c518] px-1 text-xs font-black text-black",
|
|
21
|
+
children: "IMDb"
|
|
22
|
+
})
|
|
23
|
+
};
|
|
24
|
+
case "rotten tomatoes critics": return {
|
|
25
|
+
name: "Tomatometer",
|
|
26
|
+
mark: /* @__PURE__ */ jsx("span", { children: "🍅" })
|
|
27
|
+
};
|
|
28
|
+
case "rotten tomatoes audience": return {
|
|
29
|
+
name: "Popcornmeter",
|
|
30
|
+
mark: /* @__PURE__ */ jsx("span", { children: "🍿" })
|
|
31
|
+
};
|
|
32
|
+
default: return {
|
|
33
|
+
name: source,
|
|
34
|
+
label: source,
|
|
35
|
+
mark: null
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** A provider's mark and its score, linked to the original rating. */
|
|
40
|
+
function RatingLink({ source, value, scale, href }) {
|
|
41
|
+
const { name, label, mark } = ratingMark(source);
|
|
42
|
+
return /* @__PURE__ */ jsxs(Link, {
|
|
43
|
+
href,
|
|
44
|
+
external: true,
|
|
45
|
+
"aria-label": [
|
|
46
|
+
name,
|
|
47
|
+
value,
|
|
48
|
+
scale
|
|
49
|
+
].filter(Boolean).join(" "),
|
|
50
|
+
className: "max-w-full gap-1.5",
|
|
51
|
+
children: [
|
|
52
|
+
mark ? /* @__PURE__ */ jsx("span", {
|
|
53
|
+
"aria-hidden": "true",
|
|
54
|
+
children: mark
|
|
55
|
+
}) : null,
|
|
56
|
+
label ? /* @__PURE__ */ jsx(Text, {
|
|
57
|
+
as: "span",
|
|
58
|
+
variant: "caption",
|
|
59
|
+
"aria-hidden": "true",
|
|
60
|
+
children: label
|
|
61
|
+
}) : null,
|
|
62
|
+
/* @__PURE__ */ jsx(Text, {
|
|
63
|
+
as: "span",
|
|
64
|
+
variant: "label",
|
|
65
|
+
className: "tabular-nums",
|
|
66
|
+
children: value
|
|
67
|
+
}),
|
|
68
|
+
scale ? /* @__PURE__ */ jsx(Text, {
|
|
69
|
+
as: "span",
|
|
70
|
+
variant: "caption",
|
|
71
|
+
tone: "muted",
|
|
72
|
+
className: "tabular-nums",
|
|
73
|
+
children: scale
|
|
74
|
+
}) : null
|
|
75
|
+
]
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
export { RatingLink };
|
|
79
|
+
|
|
80
|
+
//# sourceMappingURL=RatingLink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RatingLink.js","names":[],"sources":["../../src/display/RatingLink.tsx"],"sourcesContent":["import { CheckIcon } from 'lucide-react';\n\nimport { Link } from '../typography/Link';\nimport { Text } from '../typography/Typography';\n\n/** The sources' own marks and colors, as the Apple apps draw them. Anything else reads by its name. */\nfunction ratingMark(source: string) {\n switch (source.trim().toLowerCase()) {\n case 'trakt':\n return {\n name: 'Trakt',\n label: 'Trakt',\n mark: (\n <span className=\"inline-flex size-5 items-center justify-center rounded-full bg-[#ed1c24] text-white [&>svg]:size-3 [&>svg]:stroke-[3]\">\n <CheckIcon />\n </span>\n ),\n };\n case 'imdb':\n return {\n name: 'IMDb',\n mark: (\n <span className=\"inline-flex h-5 items-center rounded-sm bg-[#f5c518] px-1 text-xs font-black text-black\">\n IMDb\n </span>\n ),\n };\n case 'rotten tomatoes critics':\n return { name: 'Tomatometer', mark: <span>🍅</span> };\n case 'rotten tomatoes audience':\n return { name: 'Popcornmeter', mark: <span>🍿</span> };\n default:\n return { name: source, label: source, mark: null };\n }\n}\n\n/** A provider's mark and its score, linked to the original rating. */\nexport function RatingLink({\n source,\n value,\n scale,\n href,\n}: {\n source: string;\n /** The score as it reads, such as \"6.5\" or \"57%\". */\n value: string;\n /** The scale shown after the score, such as \"/ 10\"; none for percentages. */\n scale?: string;\n href: string;\n}) {\n const { name, label, mark } = ratingMark(source);\n\n return (\n <Link\n href={href}\n external\n aria-label={[name, value, scale].filter(Boolean).join(' ')}\n className=\"max-w-full gap-1.5\"\n >\n {mark ? <span aria-hidden=\"true\">{mark}</span> : null}\n {label ? (\n <Text as=\"span\" variant=\"caption\" aria-hidden=\"true\">\n {label}\n </Text>\n ) : null}\n <Text as=\"span\" variant=\"label\" className=\"tabular-nums\">\n {value}\n </Text>\n {scale ? (\n <Text as=\"span\" variant=\"caption\" tone=\"muted\" className=\"tabular-nums\">\n {scale}\n </Text>\n ) : null}\n </Link>\n );\n}\n"],"mappings":";;;;;;AAMA,SAAS,WAAW,QAAgB;CAChC,QAAQ,OAAO,KAAK,CAAC,CAAC,YAAY,GAAlC;EACI,KAAK,SACD,OAAO;GACH,MAAM;GACN,OAAO;GACP,MACI,oBAAC,QAAD;IAAM,WAAU;IACZ,UAAA,oBAAC,WAAD,CAAY,CAAA;GACV,CAAA;EAEd;EACJ,KAAK,QACD,OAAO;GACH,MAAM;GACN,MACI,oBAAC,QAAD;IAAM,WAAU;IAA0F,UAAA;GAEpG,CAAA;EAEd;EACJ,KAAK,2BACD,OAAO;GAAE,MAAM;GAAe,MAAM,oBAAC,QAAD,EAAA,UAAM,KAAQ,CAAA;EAAE;EACxD,KAAK,4BACD,OAAO;GAAE,MAAM;GAAgB,MAAM,oBAAC,QAAD,EAAA,UAAM,KAAQ,CAAA;EAAE;EACzD,SACI,OAAO;GAAE,MAAM;GAAQ,OAAO;GAAQ,MAAM;EAAK;CACzD;AACJ;;AAGA,SAAgB,WAAW,EACvB,QACA,OACA,OACA,QAQD;CACC,MAAM,EAAE,MAAM,OAAO,SAAS,WAAW,MAAM;CAE/C,OACI,qBAAC,MAAD;EACU;EACN,UAAA;EACA,cAAY;GAAC;GAAM;GAAO;EAAK,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EACzD,WAAU;EAJd,UAAA;GAMK,OAAO,oBAAC,QAAD;IAAM,eAAY;IAAQ,UAAA;GAAW,CAAA,IAAI;GAChD,QACG,oBAAC,MAAD;IAAM,IAAG;IAAO,SAAQ;IAAU,eAAY;IACzC,UAAA;GACC,CAAA,IACN;GACJ,oBAAC,MAAD;IAAM,IAAG;IAAO,SAAQ;IAAQ,WAAU;IACrC,UAAA;GACC,CAAA;GACL,QACG,oBAAC,MAAD;IAAM,IAAG;IAAO,SAAQ;IAAU,MAAK;IAAQ,WAAU;IACpD,UAAA;GACC,CAAA,IACN;EACF;;AAEd"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
interface ResourceCardProps {
|
|
3
|
+
presentation?: 'default' | 'overview' | 'scan';
|
|
4
|
+
metrics?: readonly {
|
|
5
|
+
label: ReactNode;
|
|
6
|
+
value: ReactNode;
|
|
7
|
+
}[];
|
|
8
|
+
metricsLabel?: string;
|
|
9
|
+
actions: ReactNode;
|
|
10
|
+
compact?: boolean;
|
|
11
|
+
details: ReactNode;
|
|
12
|
+
leading?: ReactNode;
|
|
13
|
+
panel?: ReactNode;
|
|
14
|
+
status: ReactNode;
|
|
15
|
+
trailing?: ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export declare function ResourceCard({ actions, compact, presentation, metrics, metricsLabel, details, leading, panel, status, trailing }: ResourceCardProps): import("react").JSX.Element;
|
|
18
|
+
export declare function ResourceCardSkeleton({ presentation }: Pick<ResourceCardProps, 'presentation'>): import("react").JSX.Element;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=ResourceCard.d.ts.map
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import { SkeletonLoader } from "../feedback/SkeletonLoader.js";
|
|
2
|
+
import { Stack } from "../layout/Flow.js";
|
|
3
|
+
import { Text } from "../typography/Typography.js";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
// src/display/ResourceCard.tsx
|
|
6
|
+
function ResourceCard({ actions, compact = false, presentation = "default", metrics, metricsLabel, details, leading, panel, status, trailing }) {
|
|
7
|
+
if (presentation === "scan") return /* @__PURE__ */ jsx("article", {
|
|
8
|
+
className: "border-base-300 @container border-b last:border-0",
|
|
9
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
10
|
+
className: "grid min-w-0 grid-cols-[minmax(0,1fr)_auto] items-center gap-x-3 gap-y-1 px-3 py-1 @min-[40rem]:grid-cols-[minmax(5rem,7rem)_minmax(0,1fr)_auto]",
|
|
11
|
+
children: [
|
|
12
|
+
/* @__PURE__ */ jsxs("div", {
|
|
13
|
+
className: "flex min-w-0 items-center gap-2 pt-1 @min-[40rem]:pt-0",
|
|
14
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
15
|
+
"aria-hidden": "true",
|
|
16
|
+
className: "text-base-700 shrink-0 [&_svg]:size-4",
|
|
17
|
+
children: leading
|
|
18
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
19
|
+
className: "min-w-0 flex-1",
|
|
20
|
+
children: details
|
|
21
|
+
})]
|
|
22
|
+
}),
|
|
23
|
+
/* @__PURE__ */ jsx("div", {
|
|
24
|
+
className: "col-span-full row-start-3 min-w-0 @min-[28rem]:col-span-1 @min-[28rem]:row-start-2 @min-[40rem]:col-start-2 @min-[40rem]:row-start-1",
|
|
25
|
+
children: status
|
|
26
|
+
}),
|
|
27
|
+
/* @__PURE__ */ jsx("div", {
|
|
28
|
+
className: "col-span-full row-start-2 flex flex-wrap items-center gap-2 @min-[28rem]:col-span-1 @min-[28rem]:col-start-2 @min-[28rem]:row-span-2 @min-[28rem]:row-start-1 @min-[40rem]:col-start-3",
|
|
29
|
+
children: actions
|
|
30
|
+
})
|
|
31
|
+
]
|
|
32
|
+
})
|
|
33
|
+
});
|
|
34
|
+
if (presentation === "overview") return /* @__PURE__ */ jsxs("article", {
|
|
35
|
+
className: "group border-base-300 from-base-100/70 to-base-50 hover:border-primary/30 flex min-w-0 flex-col overflow-hidden rounded-xl border bg-linear-to-br shadow-xs/5 transition-colors",
|
|
36
|
+
children: [
|
|
37
|
+
/* @__PURE__ */ jsxs("div", {
|
|
38
|
+
className: "flex min-w-0 items-center gap-3 p-3 pb-2",
|
|
39
|
+
children: [
|
|
40
|
+
leading ? /* @__PURE__ */ jsx("span", {
|
|
41
|
+
"aria-hidden": "true",
|
|
42
|
+
className: "text-base-500 flex shrink-0 self-start pt-0.5 [&_svg]:size-5",
|
|
43
|
+
children: leading
|
|
44
|
+
}) : null,
|
|
45
|
+
/* @__PURE__ */ jsx("div", {
|
|
46
|
+
className: "min-h-10 min-w-0 flex-1 [&_a]:block [&_a]:truncate",
|
|
47
|
+
children: details
|
|
48
|
+
}),
|
|
49
|
+
/* @__PURE__ */ jsx("div", {
|
|
50
|
+
className: "shrink-0 self-start [&>[data-slot=skeleton]]:size-8",
|
|
51
|
+
children: actions
|
|
52
|
+
})
|
|
53
|
+
]
|
|
54
|
+
}),
|
|
55
|
+
/* @__PURE__ */ jsx("dl", {
|
|
56
|
+
"aria-label": metricsLabel,
|
|
57
|
+
className: "flex flex-1 flex-wrap gap-x-5 gap-y-1 px-3 pb-2",
|
|
58
|
+
children: metrics?.map((metric, index) => /* @__PURE__ */ jsxs("div", {
|
|
59
|
+
className: "flex min-w-16 items-center gap-1.5",
|
|
60
|
+
children: [/* @__PURE__ */ jsx("dt", {
|
|
61
|
+
className: "min-h-4 min-w-10",
|
|
62
|
+
children: /* @__PURE__ */ jsx(Text, {
|
|
63
|
+
as: "span",
|
|
64
|
+
variant: "caption",
|
|
65
|
+
tone: "muted",
|
|
66
|
+
className: "block",
|
|
67
|
+
children: metric.label
|
|
68
|
+
})
|
|
69
|
+
}), /* @__PURE__ */ jsx("dd", {
|
|
70
|
+
className: "order-first min-h-8 min-w-6",
|
|
71
|
+
children: /* @__PURE__ */ jsx(Text, {
|
|
72
|
+
as: "span",
|
|
73
|
+
variant: "metric",
|
|
74
|
+
className: "block tabular-nums",
|
|
75
|
+
children: metric.value
|
|
76
|
+
})
|
|
77
|
+
})]
|
|
78
|
+
}, index))
|
|
79
|
+
}),
|
|
80
|
+
/* @__PURE__ */ jsx("div", {
|
|
81
|
+
className: "border-base-300 bg-base-100/40 flex min-h-8 min-w-0 items-center border-t px-3 py-1",
|
|
82
|
+
children: status
|
|
83
|
+
})
|
|
84
|
+
]
|
|
85
|
+
});
|
|
86
|
+
if (compact) return /* @__PURE__ */ jsxs("article", {
|
|
87
|
+
className: "@container",
|
|
88
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
89
|
+
className: `grid min-w-0 items-center gap-3 px-3 sm:px-4 ${trailing ? "min-h-18 py-3" : "min-h-12 py-2"} ${trailing ? leading ? "grid-cols-1 @min-[36rem]:grid-cols-[auto_minmax(0,1fr)_auto]" : "grid-cols-1 @min-[36rem]:grid-cols-[minmax(0,1fr)_auto]" : leading ? "grid-cols-[auto_minmax(0,1fr)_auto]" : "grid-cols-[minmax(0,1fr)_auto]"}`,
|
|
90
|
+
children: [
|
|
91
|
+
leading ? /* @__PURE__ */ jsx("span", {
|
|
92
|
+
"aria-hidden": "true",
|
|
93
|
+
className: `${trailing ? "hidden @min-[36rem]:flex" : "flex"} text-base-500 size-8 items-center justify-center [&_svg]:size-5 [&>[data-slot=skeleton]]:size-full`,
|
|
94
|
+
children: leading
|
|
95
|
+
}) : null,
|
|
96
|
+
trailing ? /* @__PURE__ */ jsxs(Stack, {
|
|
97
|
+
space: "tight",
|
|
98
|
+
className: "min-w-0",
|
|
99
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
100
|
+
className: "min-w-0 truncate",
|
|
101
|
+
children: details
|
|
102
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
103
|
+
className: "flex min-w-0",
|
|
104
|
+
children: status
|
|
105
|
+
})]
|
|
106
|
+
}) : /* @__PURE__ */ jsxs("div", {
|
|
107
|
+
className: "grid min-w-0 items-center gap-x-4 gap-y-1 @min-[40rem]:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]",
|
|
108
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
109
|
+
className: "min-w-0 [&_a]:max-w-full [&_a]:min-w-0 [&_a]:truncate",
|
|
110
|
+
children: details
|
|
111
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
112
|
+
className: "flex min-w-0 @min-[40rem]:justify-end",
|
|
113
|
+
children: status
|
|
114
|
+
})]
|
|
115
|
+
}),
|
|
116
|
+
/* @__PURE__ */ jsxs("div", {
|
|
117
|
+
className: `flex min-w-0 shrink-0 flex-wrap items-center gap-2 ${trailing ? "border-base-300 bg-base-100/40 col-span-full -mx-3 -mb-3 justify-between border-t px-3 py-2 sm:-mx-4 sm:px-4 @min-[36rem]:col-span-1 @min-[36rem]:m-0 @min-[36rem]:justify-end @min-[36rem]:border-0 @min-[36rem]:bg-transparent @min-[36rem]:p-0 [&>button]:min-h-10 @min-[36rem]:[&>button]:min-h-8 [&>label]:min-h-10 @min-[36rem]:[&>label]:min-h-8" : ""}`,
|
|
118
|
+
children: [actions, trailing]
|
|
119
|
+
})
|
|
120
|
+
]
|
|
121
|
+
}), panel ? /* @__PURE__ */ jsx("div", {
|
|
122
|
+
className: "border-base-300 bg-base-100/40 border-t p-4 sm:p-5",
|
|
123
|
+
children: panel
|
|
124
|
+
}) : null]
|
|
125
|
+
});
|
|
126
|
+
return /* @__PURE__ */ jsxs("article", {
|
|
127
|
+
className: "border-base-300 bg-base-100 hover:border-base-300 overflow-hidden rounded-xl border shadow-xs/5 transition-colors",
|
|
128
|
+
children: [
|
|
129
|
+
/* @__PURE__ */ jsxs("div", {
|
|
130
|
+
className: "grid min-w-0 gap-4 p-4 sm:p-5 md:grid-cols-[minmax(0,1fr)_auto] md:items-start",
|
|
131
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
132
|
+
className: "flex min-w-0 items-start gap-3",
|
|
133
|
+
children: [leading ? /* @__PURE__ */ jsx("div", {
|
|
134
|
+
"aria-hidden": "true",
|
|
135
|
+
className: "bg-base-100 text-base-600 flex size-9 shrink-0 items-center justify-center rounded-lg [&_svg]:size-5",
|
|
136
|
+
children: leading
|
|
137
|
+
}) : null, /* @__PURE__ */ jsx("div", {
|
|
138
|
+
className: "min-w-0 flex-1",
|
|
139
|
+
children: details
|
|
140
|
+
})]
|
|
141
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
142
|
+
className: "flex min-h-11 min-w-0 flex-col items-start gap-1 md:max-w-72 md:items-end md:text-right",
|
|
143
|
+
children: status
|
|
144
|
+
})]
|
|
145
|
+
}),
|
|
146
|
+
/* @__PURE__ */ jsxs("div", {
|
|
147
|
+
className: "border-base-300 bg-base-100/60 flex flex-col gap-3 border-t px-3 py-3 sm:flex-row sm:items-center sm:justify-between sm:px-4",
|
|
148
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
149
|
+
className: "-ml-1 flex min-w-0 flex-wrap items-center gap-1",
|
|
150
|
+
children: actions
|
|
151
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
152
|
+
className: "flex min-w-0 flex-wrap items-center gap-3 sm:justify-end",
|
|
153
|
+
children: trailing
|
|
154
|
+
})]
|
|
155
|
+
}),
|
|
156
|
+
panel ? /* @__PURE__ */ jsx("div", {
|
|
157
|
+
className: "border-base-300 bg-base-100 border-t",
|
|
158
|
+
children: panel
|
|
159
|
+
}) : null
|
|
160
|
+
]
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
function ResourceCardSkeleton({ presentation = "default" }) {
|
|
164
|
+
if (presentation === "overview") return /* @__PURE__ */ jsx(ResourceCard, {
|
|
165
|
+
presentation: "overview",
|
|
166
|
+
details: /* @__PURE__ */ jsxs(Stack, {
|
|
167
|
+
space: "tight",
|
|
168
|
+
children: [/* @__PURE__ */ jsx(SkeletonLoader.Shape, {
|
|
169
|
+
presentation: "heading",
|
|
170
|
+
width: "wide"
|
|
171
|
+
}), /* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" })]
|
|
172
|
+
}),
|
|
173
|
+
actions: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation: "circle" }),
|
|
174
|
+
metrics: [0, 1].map(() => ({
|
|
175
|
+
value: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation: "metric" }),
|
|
176
|
+
label: /* @__PURE__ */ jsx(SkeletonLoader.Shape, {})
|
|
177
|
+
})),
|
|
178
|
+
status: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "wide" })
|
|
179
|
+
});
|
|
180
|
+
return /* @__PURE__ */ jsx(ResourceCard, {
|
|
181
|
+
compact: true,
|
|
182
|
+
actions: null,
|
|
183
|
+
leading: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation: "circle" }),
|
|
184
|
+
details: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "medium" }),
|
|
185
|
+
status: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" }),
|
|
186
|
+
trailing: /* @__PURE__ */ jsxs("div", {
|
|
187
|
+
className: "flex w-56 max-w-full items-center gap-3 py-1",
|
|
188
|
+
children: [/* @__PURE__ */ jsx(SkeletonLoader.Shape, {
|
|
189
|
+
presentation: "control",
|
|
190
|
+
width: "medium"
|
|
191
|
+
}), /* @__PURE__ */ jsx(SkeletonLoader.Shape, {
|
|
192
|
+
presentation: "control",
|
|
193
|
+
width: "medium"
|
|
194
|
+
})]
|
|
195
|
+
})
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
export { ResourceCard, ResourceCardSkeleton };
|
|
199
|
+
|
|
200
|
+
//# sourceMappingURL=ResourceCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResourceCard.js","names":[],"sources":["../../src/display/ResourceCard.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { SkeletonLoader } from '../feedback/SkeletonLoader';\nimport { Stack } from '../layout/Flow';\nimport { Text } from '../typography/Typography';\n\ninterface ResourceCardProps {\n presentation?: 'default' | 'overview' | 'scan';\n metrics?: readonly { label: ReactNode; value: ReactNode }[];\n metricsLabel?: string;\n actions: ReactNode;\n compact?: boolean;\n details: ReactNode;\n leading?: ReactNode;\n panel?: ReactNode;\n status: ReactNode;\n trailing?: ReactNode;\n}\n\nexport function ResourceCard({\n actions,\n compact = false,\n presentation = 'default',\n metrics,\n metricsLabel,\n details,\n leading,\n panel,\n status,\n trailing,\n}: ResourceCardProps) {\n if (presentation === 'scan')\n return (\n <article className=\"border-base-300 @container border-b last:border-0\">\n <div className=\"grid min-w-0 grid-cols-[minmax(0,1fr)_auto] items-center gap-x-3 gap-y-1 px-3 py-1 @min-[40rem]:grid-cols-[minmax(5rem,7rem)_minmax(0,1fr)_auto]\">\n <div className=\"flex min-w-0 items-center gap-2 pt-1 @min-[40rem]:pt-0\">\n <span aria-hidden=\"true\" className=\"text-base-700 shrink-0 [&_svg]:size-4\">\n {leading}\n </span>\n <div className=\"min-w-0 flex-1\">{details}</div>\n </div>\n <div className=\"col-span-full row-start-3 min-w-0 @min-[28rem]:col-span-1 @min-[28rem]:row-start-2 @min-[40rem]:col-start-2 @min-[40rem]:row-start-1\">\n {status}\n </div>\n <div className=\"col-span-full row-start-2 flex flex-wrap items-center gap-2 @min-[28rem]:col-span-1 @min-[28rem]:col-start-2 @min-[28rem]:row-span-2 @min-[28rem]:row-start-1 @min-[40rem]:col-start-3\">\n {actions}\n </div>\n </div>\n </article>\n );\n\n if (presentation === 'overview') {\n return (\n <article className=\"group border-base-300 from-base-100/70 to-base-50 hover:border-primary/30 flex min-w-0 flex-col overflow-hidden rounded-xl border bg-linear-to-br shadow-xs/5 transition-colors\">\n <div className=\"flex min-w-0 items-center gap-3 p-3 pb-2\">\n {leading ? (\n <span\n aria-hidden=\"true\"\n className=\"text-base-500 flex shrink-0 self-start pt-0.5 [&_svg]:size-5\"\n >\n {leading}\n </span>\n ) : null}\n <div className=\"min-h-10 min-w-0 flex-1 [&_a]:block [&_a]:truncate\">{details}</div>\n <div className=\"shrink-0 self-start [&>[data-slot=skeleton]]:size-8\">{actions}</div>\n </div>\n <dl aria-label={metricsLabel} className=\"flex flex-1 flex-wrap gap-x-5 gap-y-1 px-3 pb-2\">\n {metrics?.map((metric, index) => (\n <div key={index} className=\"flex min-w-16 items-center gap-1.5\">\n <dt className=\"min-h-4 min-w-10\">\n <Text as=\"span\" variant=\"caption\" tone=\"muted\" className=\"block\">\n {metric.label}\n </Text>\n </dt>\n <dd className=\"order-first min-h-8 min-w-6\">\n <Text as=\"span\" variant=\"metric\" className=\"block tabular-nums\">\n {metric.value}\n </Text>\n </dd>\n </div>\n ))}\n </dl>\n <div className=\"border-base-300 bg-base-100/40 flex min-h-8 min-w-0 items-center border-t px-3 py-1\">\n {status}\n </div>\n </article>\n );\n }\n\n if (compact) {\n return (\n <article className=\"@container\">\n <div\n className={`grid min-w-0 items-center gap-3 px-3 sm:px-4 ${trailing ? 'min-h-18 py-3' : 'min-h-12 py-2'} ${\n trailing\n ? leading\n ? 'grid-cols-1 @min-[36rem]:grid-cols-[auto_minmax(0,1fr)_auto]'\n : 'grid-cols-1 @min-[36rem]:grid-cols-[minmax(0,1fr)_auto]'\n : leading\n ? 'grid-cols-[auto_minmax(0,1fr)_auto]'\n : 'grid-cols-[minmax(0,1fr)_auto]'\n }`}\n >\n {leading ? (\n <span\n aria-hidden=\"true\"\n className={`${trailing ? 'hidden @min-[36rem]:flex' : 'flex'} text-base-500 size-8 items-center justify-center [&_svg]:size-5 [&>[data-slot=skeleton]]:size-full`}\n >\n {leading}\n </span>\n ) : null}\n {trailing ? (\n <Stack space=\"tight\" className=\"min-w-0\">\n <div className=\"min-w-0 truncate\">{details}</div>\n <div className=\"flex min-w-0\">{status}</div>\n </Stack>\n ) : (\n <div className=\"grid min-w-0 items-center gap-x-4 gap-y-1 @min-[40rem]:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]\">\n <div className=\"min-w-0 [&_a]:max-w-full [&_a]:min-w-0 [&_a]:truncate\">{details}</div>\n <div className=\"flex min-w-0 @min-[40rem]:justify-end\">{status}</div>\n </div>\n )}\n <div\n className={`flex min-w-0 shrink-0 flex-wrap items-center gap-2 ${\n trailing\n ? 'border-base-300 bg-base-100/40 col-span-full -mx-3 -mb-3 justify-between border-t px-3 py-2 sm:-mx-4 sm:px-4 @min-[36rem]:col-span-1 @min-[36rem]:m-0 @min-[36rem]:justify-end @min-[36rem]:border-0 @min-[36rem]:bg-transparent @min-[36rem]:p-0 [&>button]:min-h-10 @min-[36rem]:[&>button]:min-h-8 [&>label]:min-h-10 @min-[36rem]:[&>label]:min-h-8'\n : ''\n }`}\n >\n {actions}\n {trailing}\n </div>\n </div>\n {panel ? <div className=\"border-base-300 bg-base-100/40 border-t p-4 sm:p-5\">{panel}</div> : null}\n </article>\n );\n }\n\n return (\n <article className=\"border-base-300 bg-base-100 hover:border-base-300 overflow-hidden rounded-xl border shadow-xs/5 transition-colors\">\n <div className=\"grid min-w-0 gap-4 p-4 sm:p-5 md:grid-cols-[minmax(0,1fr)_auto] md:items-start\">\n <div className=\"flex min-w-0 items-start gap-3\">\n {leading ? (\n <div\n aria-hidden=\"true\"\n className=\"bg-base-100 text-base-600 flex size-9 shrink-0 items-center justify-center rounded-lg [&_svg]:size-5\"\n >\n {leading}\n </div>\n ) : null}\n <div className=\"min-w-0 flex-1\">{details}</div>\n </div>\n <div className=\"flex min-h-11 min-w-0 flex-col items-start gap-1 md:max-w-72 md:items-end md:text-right\">\n {status}\n </div>\n </div>\n <div className=\"border-base-300 bg-base-100/60 flex flex-col gap-3 border-t px-3 py-3 sm:flex-row sm:items-center sm:justify-between sm:px-4\">\n <div className=\"-ml-1 flex min-w-0 flex-wrap items-center gap-1\">{actions}</div>\n <div className=\"flex min-w-0 flex-wrap items-center gap-3 sm:justify-end\">{trailing}</div>\n </div>\n {panel ? <div className=\"border-base-300 bg-base-100 border-t\">{panel}</div> : null}\n </article>\n );\n}\n\nexport function ResourceCardSkeleton({ presentation = 'default' }: Pick<ResourceCardProps, 'presentation'>) {\n if (presentation === 'overview')\n return (\n <ResourceCard\n presentation=\"overview\"\n details={\n <Stack space=\"tight\">\n <SkeletonLoader.Shape presentation=\"heading\" width=\"wide\" />\n <SkeletonLoader.Shape width=\"short\" />\n </Stack>\n }\n actions={<SkeletonLoader.Shape presentation=\"circle\" />}\n metrics={[0, 1].map(() => ({\n value: <SkeletonLoader.Shape presentation=\"metric\" />,\n label: <SkeletonLoader.Shape />,\n }))}\n status={<SkeletonLoader.Shape width=\"wide\" />}\n />\n );\n\n return (\n <ResourceCard\n compact\n actions={null}\n leading={<SkeletonLoader.Shape presentation=\"circle\" />}\n details={<SkeletonLoader.Shape width=\"medium\" />}\n status={<SkeletonLoader.Shape width=\"short\" />}\n trailing={\n <div className=\"flex w-56 max-w-full items-center gap-3 py-1\">\n <SkeletonLoader.Shape presentation=\"control\" width=\"medium\" />\n <SkeletonLoader.Shape presentation=\"control\" width=\"medium\" />\n </div>\n }\n />\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { StatusTone } from "../feedback/StatusIndicator.js";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
/** Rows of one list inside a single bordered panel, separated by rules; or ruled rows in two columns on wide screens. */
|
|
4
|
+
export declare function RowList({ children, label, layout }: {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
label: string;
|
|
7
|
+
layout?: 'panel' | 'columns';
|
|
8
|
+
}): import("react").JSX.Element;
|
|
9
|
+
interface RowListItemProps {
|
|
10
|
+
/** Independent controls at the end of the row. */
|
|
11
|
+
actions?: ReactNode;
|
|
12
|
+
/** Short labels such as "lar can fix", shown before the actions or chevron. */
|
|
13
|
+
badges?: ReactNode;
|
|
14
|
+
detail?: string;
|
|
15
|
+
icon: ReactNode;
|
|
16
|
+
/** A round portrait instead of the tinted square tile. */
|
|
17
|
+
avatar?: boolean;
|
|
18
|
+
/** Makes the whole row a link, with actions remaining independently usable. */
|
|
19
|
+
href?: string;
|
|
20
|
+
onNavigate?: (href: string) => void;
|
|
21
|
+
subtitle?: string;
|
|
22
|
+
title: string;
|
|
23
|
+
tone?: StatusTone;
|
|
24
|
+
}
|
|
25
|
+
/** One row: a tinted icon, what the user recognises, one line about it, and muted facts. */
|
|
26
|
+
export declare function RowListItem({ actions, badges, detail, icon, avatar, href, onNavigate, subtitle, title, tone }: RowListItemProps): import("react").JSX.Element;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=RowList.d.ts.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { LinkBox, LinkOverlay } from "../typography/Link.js";
|
|
2
|
+
import { Text } from "../typography/Typography.js";
|
|
3
|
+
import { toneTileClasses } from "./ToneTile.js";
|
|
4
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { ChevronRightIcon } from "lucide-react";
|
|
6
|
+
// src/display/RowList.tsx
|
|
7
|
+
/** Rows of one list inside a single bordered panel, separated by rules; or ruled rows in two columns on wide screens. */
|
|
8
|
+
function RowList({ children, label, layout = "panel" }) {
|
|
9
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
10
|
+
"aria-label": label,
|
|
11
|
+
className: layout === "columns" ? "[&>li]:border-base-300 grid gap-x-8 md:grid-cols-2 [&>li]:border-b" : "divide-base-300 border-base-300 bg-base-100 divide-y overflow-hidden rounded-lg border",
|
|
12
|
+
children
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
/** One row: a tinted icon, what the user recognises, one line about it, and muted facts. */
|
|
16
|
+
function RowListItem({ actions, badges, detail, icon, avatar = false, href, onNavigate, subtitle, title, tone = "neutral" }) {
|
|
17
|
+
const content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
18
|
+
/* @__PURE__ */ jsx("span", {
|
|
19
|
+
"aria-hidden": "true",
|
|
20
|
+
className: `flex shrink-0 items-center justify-center [&>div]:w-full [&>svg]:size-5 ${avatar ? "size-10 overflow-hidden rounded-full" : "size-9 rounded-lg"} ${toneTileClasses[tone]}`,
|
|
21
|
+
children: icon
|
|
22
|
+
}),
|
|
23
|
+
/* @__PURE__ */ jsxs("span", {
|
|
24
|
+
className: "flex min-w-0 flex-1 flex-col",
|
|
25
|
+
children: [
|
|
26
|
+
/* @__PURE__ */ jsx(Text, {
|
|
27
|
+
as: "span",
|
|
28
|
+
variant: "label",
|
|
29
|
+
truncate: true,
|
|
30
|
+
title,
|
|
31
|
+
children: href ? /* @__PURE__ */ jsx(LinkOverlay, {
|
|
32
|
+
href,
|
|
33
|
+
onNavigate,
|
|
34
|
+
children: title
|
|
35
|
+
}) : title
|
|
36
|
+
}),
|
|
37
|
+
subtitle ? /* @__PURE__ */ jsx(Text, {
|
|
38
|
+
as: "span",
|
|
39
|
+
truncate: true,
|
|
40
|
+
title: subtitle,
|
|
41
|
+
children: subtitle
|
|
42
|
+
}) : null,
|
|
43
|
+
detail ? /* @__PURE__ */ jsx(Text, {
|
|
44
|
+
as: "span",
|
|
45
|
+
variant: "caption",
|
|
46
|
+
tone: "muted",
|
|
47
|
+
truncate: true,
|
|
48
|
+
title: detail,
|
|
49
|
+
children: detail
|
|
50
|
+
}) : null
|
|
51
|
+
]
|
|
52
|
+
}),
|
|
53
|
+
badges ? /* @__PURE__ */ jsx("span", {
|
|
54
|
+
className: "hidden shrink-0 items-center gap-2 sm:flex",
|
|
55
|
+
children: badges
|
|
56
|
+
}) : null
|
|
57
|
+
] });
|
|
58
|
+
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(LinkBox, {
|
|
59
|
+
className: `flex w-full min-w-0 items-center gap-3 px-4 py-3 ${href ? "hover:bg-base-100 focus-within:bg-base-100 transition-colors" : ""}`,
|
|
60
|
+
children: [
|
|
61
|
+
content,
|
|
62
|
+
actions ? /* @__PURE__ */ jsx("span", {
|
|
63
|
+
className: "flex shrink-0 items-center gap-1",
|
|
64
|
+
children: actions
|
|
65
|
+
}) : null,
|
|
66
|
+
href ? /* @__PURE__ */ jsx("span", {
|
|
67
|
+
"aria-hidden": "true",
|
|
68
|
+
className: "text-base-500 flex shrink-0 [&>svg]:size-4",
|
|
69
|
+
children: /* @__PURE__ */ jsx(ChevronRightIcon, {})
|
|
70
|
+
}) : null
|
|
71
|
+
]
|
|
72
|
+
}) });
|
|
73
|
+
}
|
|
74
|
+
export { RowList, RowListItem };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=RowList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RowList.js","names":[],"sources":["../../src/display/RowList.tsx"],"sourcesContent":["import { ChevronRightIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport type { StatusTone } from '../feedback/StatusIndicator';\nimport { LinkBox, LinkOverlay } from '../typography/Link';\nimport { Text } from '../typography/Typography';\nimport { toneTileClasses } from './ToneTile';\n\n/** Rows of one list inside a single bordered panel, separated by rules; or ruled rows in two columns on wide screens. */\nexport function RowList({\n children,\n label,\n layout = 'panel',\n}: {\n children: ReactNode;\n label: string;\n layout?: 'panel' | 'columns';\n}) {\n return (\n <ul\n aria-label={label}\n className={\n layout === 'columns'\n ? '[&>li]:border-base-300 grid gap-x-8 md:grid-cols-2 [&>li]:border-b'\n : 'divide-base-300 border-base-300 bg-base-100 divide-y overflow-hidden rounded-lg border'\n }\n >\n {children}\n </ul>\n );\n}\n\ninterface RowListItemProps {\n /** Independent controls at the end of the row. */\n actions?: ReactNode;\n /** Short labels such as \"lar can fix\", shown before the actions or chevron. */\n badges?: ReactNode;\n detail?: string;\n icon: ReactNode;\n /** A round portrait instead of the tinted square tile. */\n avatar?: boolean;\n /** Makes the whole row a link, with actions remaining independently usable. */\n href?: string;\n onNavigate?: (href: string) => void;\n subtitle?: string;\n title: string;\n tone?: StatusTone;\n}\n\n/** One row: a tinted icon, what the user recognises, one line about it, and muted facts. */\nexport function RowListItem({\n actions,\n badges,\n detail,\n icon,\n avatar = false,\n href,\n onNavigate,\n subtitle,\n title,\n tone = 'neutral',\n}: RowListItemProps) {\n const content = (\n <>\n <span\n aria-hidden=\"true\"\n className={`flex shrink-0 items-center justify-center [&>div]:w-full [&>svg]:size-5 ${avatar ? 'size-10 overflow-hidden rounded-full' : 'size-9 rounded-lg'} ${toneTileClasses[tone]}`}\n >\n {icon}\n </span>\n <span className=\"flex min-w-0 flex-1 flex-col\">\n <Text as=\"span\" variant=\"label\" truncate title={title}>\n {href ? (\n <LinkOverlay href={href} onNavigate={onNavigate}>\n {title}\n </LinkOverlay>\n ) : (\n title\n )}\n </Text>\n {subtitle ? (\n <Text as=\"span\" truncate title={subtitle}>\n {subtitle}\n </Text>\n ) : null}\n {detail ? (\n <Text as=\"span\" variant=\"caption\" tone=\"muted\" truncate title={detail}>\n {detail}\n </Text>\n ) : null}\n </span>\n {badges ? <span className=\"hidden shrink-0 items-center gap-2 sm:flex\">{badges}</span> : null}\n </>\n );\n const row = 'flex w-full min-w-0 items-center gap-3 px-4 py-3';\n\n return (\n <li>\n <LinkBox className={`${row} ${href ? 'hover:bg-base-100 focus-within:bg-base-100 transition-colors' : ''}`}>\n {content}\n {actions ? <span className=\"flex shrink-0 items-center gap-1\">{actions}</span> : null}\n {href ? (\n <span aria-hidden=\"true\" className=\"text-base-500 flex shrink-0 [&>svg]:size-4\">\n <ChevronRightIcon />\n </span>\n ) : null}\n </LinkBox>\n </li>\n );\n}\n"],"mappings":";;;;;;;AASA,SAAgB,QAAQ,EACpB,UACA,OACA,SAAS,WAKV;CACC,OACI,oBAAC,MAAD;EACI,cAAY;EACZ,WACI,WAAW,YACL,uEACA;EAGT;CACD,CAAA;AAEZ;;AAoBA,SAAgB,YAAY,EACxB,SACA,QACA,QACA,MACA,SAAS,OACT,MACA,YACA,UACA,OACA,OAAO,aACU;CACjB,MAAM,UACF,qBAAA,UAAA,EAAA,UAAA;EACI,oBAAC,QAAD;GACI,eAAY;GACZ,WAAW,2EAA2E,SAAS,yCAAyC,oBAAoB,GAAG,gBAAgB;GAE9K,UAAA;EACC,CAAA;EACN,qBAAC,QAAD;GAAM,WAAU;GAAhB,UAAA;IACI,oBAAC,MAAD;KAAM,IAAG;KAAO,SAAQ;KAAQ,UAAA;KAAgB;KAC3C,UAAA,OACG,oBAAC,aAAD;MAAmB;MAAkB;MAChC,UAAA;KACQ,CAAA,IAEb;IAEF,CAAA;IACL,WACG,oBAAC,MAAD;KAAM,IAAG;KAAO,UAAA;KAAS,OAAO;KAC3B,UAAA;IACC,CAAA,IACN;IACH,SACG,oBAAC,MAAD;KAAM,IAAG;KAAO,SAAQ;KAAU,MAAK;KAAQ,UAAA;KAAS,OAAO;KAC1D,UAAA;IACC,CAAA,IACN;GACF;;EACL,SAAS,oBAAC,QAAD;GAAM,WAAU;GAA8C,UAAA;EAAa,CAAA,IAAI;CAC3F,EAAA,CAAA;CAIN,OACI,oBAAC,MAAD,EAAA,UACI,qBAAC,SAAD;EAAS,WAAW,oDAAU,OAAO,iEAAiE;EAAtG,UAAA;GACK;GACA,UAAU,oBAAC,QAAD;IAAM,WAAU;IAAoC,UAAA;GAAc,CAAA,IAAI;GAChF,OACG,oBAAC,QAAD;IAAM,eAAY;IAAO,WAAU;IAC/B,UAAA,oBAAC,kBAAD,CAAmB,CAAA;GACjB,CAAA,IACN;EACC;CACT,CAAA,EAAA,CAAA;AAEZ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type MeterTone = 'primary' | 'info' | 'success' | 'warning';
|
|
2
|
+
export interface MeterSegment {
|
|
3
|
+
id: string;
|
|
4
|
+
/** Shown on hover, for example "Playback 50%". */
|
|
5
|
+
label: string;
|
|
6
|
+
tone: MeterTone;
|
|
7
|
+
/** The share of the whole meter, from 0 to 1. */
|
|
8
|
+
value: number;
|
|
9
|
+
}
|
|
10
|
+
interface StackedMeterProps {
|
|
11
|
+
/** Summarizes the meter for assistive technology. */
|
|
12
|
+
label: string;
|
|
13
|
+
/** A dashed line at a share of the whole, for example a limit. */
|
|
14
|
+
marker?: {
|
|
15
|
+
label: string;
|
|
16
|
+
value: number;
|
|
17
|
+
};
|
|
18
|
+
segments: readonly MeterSegment[];
|
|
19
|
+
}
|
|
20
|
+
/** One bar split into toned segments, with an optional dashed marker. */
|
|
21
|
+
export declare function StackedMeter({ label, marker, segments }: StackedMeterProps): import("react").JSX.Element;
|
|
22
|
+
/** The key to the tones of one or more stacked meters. */
|
|
23
|
+
export declare function MeterLegend({ items, label }: {
|
|
24
|
+
items: readonly Omit<MeterSegment, 'value'>[];
|
|
25
|
+
label: string;
|
|
26
|
+
}): import("react").JSX.Element;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=StackedMeter.d.ts.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Text } from "../typography/Typography.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
// src/display/StackedMeter.tsx
|
|
4
|
+
const toneClasses = {
|
|
5
|
+
primary: "bg-primary",
|
|
6
|
+
info: "bg-info",
|
|
7
|
+
success: "bg-success",
|
|
8
|
+
warning: "bg-warning"
|
|
9
|
+
};
|
|
10
|
+
/** One bar split into toned segments, with an optional dashed marker. */
|
|
11
|
+
function StackedMeter({ label, marker, segments }) {
|
|
12
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
13
|
+
role: "img",
|
|
14
|
+
"aria-label": label,
|
|
15
|
+
className: "bg-base-200 relative flex h-4 w-full overflow-hidden rounded-full",
|
|
16
|
+
children: [segments.filter((segment) => segment.value > 0).map((segment) => /* @__PURE__ */ jsx("span", {
|
|
17
|
+
title: segment.label,
|
|
18
|
+
className: `border-base-50 h-full border-r last:border-r-0 ${toneClasses[segment.tone]}`,
|
|
19
|
+
style: { width: `${Math.min(segment.value, 1) * 100}%` }
|
|
20
|
+
}, segment.id)), marker ? /* @__PURE__ */ jsx("span", {
|
|
21
|
+
title: marker.label,
|
|
22
|
+
className: "border-base-content absolute inset-y-0 border-l-2 border-dashed",
|
|
23
|
+
style: { left: `${Math.min(Math.max(marker.value, 0), 1) * 100}%` }
|
|
24
|
+
}) : null]
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/** The key to the tones of one or more stacked meters. */
|
|
28
|
+
function MeterLegend({ items, label }) {
|
|
29
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
30
|
+
"aria-label": label,
|
|
31
|
+
className: "flex flex-wrap gap-x-4 gap-y-1",
|
|
32
|
+
children: items.map((item) => /* @__PURE__ */ jsxs("li", {
|
|
33
|
+
className: "flex items-center gap-1.5",
|
|
34
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
35
|
+
"aria-hidden": "true",
|
|
36
|
+
className: `size-2 shrink-0 rounded-full ${toneClasses[item.tone]}`
|
|
37
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
38
|
+
as: "span",
|
|
39
|
+
variant: "caption",
|
|
40
|
+
tone: "muted",
|
|
41
|
+
children: item.label
|
|
42
|
+
})]
|
|
43
|
+
}, item.id))
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
export { MeterLegend, StackedMeter };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=StackedMeter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StackedMeter.js","names":[],"sources":["../../src/display/StackedMeter.tsx"],"sourcesContent":["import { Text } from '../typography/Typography';\n\nexport type MeterTone = 'primary' | 'info' | 'success' | 'warning';\n\nconst toneClasses: Record<MeterTone, string> = {\n primary: 'bg-primary',\n info: 'bg-info',\n success: 'bg-success',\n warning: 'bg-warning',\n};\n\nexport interface MeterSegment {\n id: string;\n /** Shown on hover, for example \"Playback 50%\". */\n label: string;\n tone: MeterTone;\n /** The share of the whole meter, from 0 to 1. */\n value: number;\n}\n\ninterface StackedMeterProps {\n /** Summarizes the meter for assistive technology. */\n label: string;\n /** A dashed line at a share of the whole, for example a limit. */\n marker?: { label: string; value: number };\n segments: readonly MeterSegment[];\n}\n\n/** One bar split into toned segments, with an optional dashed marker. */\nexport function StackedMeter({ label, marker, segments }: StackedMeterProps) {\n return (\n <div\n role=\"img\"\n aria-label={label}\n className=\"bg-base-200 relative flex h-4 w-full overflow-hidden rounded-full\"\n >\n {segments\n .filter((segment) => segment.value > 0)\n .map((segment) => (\n <span\n key={segment.id}\n title={segment.label}\n className={`border-base-50 h-full border-r last:border-r-0 ${toneClasses[segment.tone]}`}\n style={{ width: `${Math.min(segment.value, 1) * 100}%` }}\n />\n ))}\n {marker ? (\n <span\n title={marker.label}\n className=\"border-base-content absolute inset-y-0 border-l-2 border-dashed\"\n style={{ left: `${Math.min(Math.max(marker.value, 0), 1) * 100}%` }}\n />\n ) : null}\n </div>\n );\n}\n\n/** The key to the tones of one or more stacked meters. */\nexport function MeterLegend({ items, label }: { items: readonly Omit<MeterSegment, 'value'>[]; label: string }) {\n return (\n <ul aria-label={label} className=\"flex flex-wrap gap-x-4 gap-y-1\">\n {items.map((item) => (\n <li key={item.id} className=\"flex items-center gap-1.5\">\n <span aria-hidden=\"true\" className={`size-2 shrink-0 rounded-full ${toneClasses[item.tone]}`} />\n <Text as=\"span\" variant=\"caption\" tone=\"muted\">\n {item.label}\n </Text>\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":";;;AAIA,MAAM,cAAyC;CAC3C,SAAS;CACT,MAAM;CACN,SAAS;CACT,SAAS;AACb;;AAoBA,SAAgB,aAAa,EAAE,OAAO,QAAQ,YAA+B;CACzE,OACI,qBAAC,OAAD;EACI,MAAK;EACL,cAAY;EACZ,WAAU;EAHd,UAAA,CAKK,SACI,QAAQ,YAAY,QAAQ,QAAQ,CAAC,CAAC,CACtC,KAAK,YACF,oBAAC,QAAD;GAEI,OAAO,QAAQ;GACf,WAAW,kDAAkD,YAAY,QAAQ;GACjF,OAAO,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,OAAO,CAAC,IAAI,IAAI,GAAG;EAC1D,GAJQ,QAAQ,EAIhB,CACJ,GACJ,SACG,oBAAC,QAAD;GACI,OAAO,OAAO;GACd,WAAU;GACV,OAAO,EAAE,MAAM,GAAG,KAAK,IAAI,KAAK,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG;EACrE,CAAA,IACD,IACH;;AAEb;;AAGA,SAAgB,YAAY,EAAE,OAAO,SAA2E;CAC5G,OACI,oBAAC,MAAD;EAAI,cAAY;EAAO,WAAU;EAC5B,UAAA,MAAM,KAAK,SACR,qBAAC,MAAD;GAAkB,WAAU;GAA5B,UAAA,CACI,oBAAC,QAAD;IAAM,eAAY;IAAO,WAAW,gCAAgC,YAAY,KAAK;GAAU,CAAA,GAC/F,oBAAC,MAAD;IAAM,IAAG;IAAO,SAAQ;IAAU,MAAK;IAClC,UAAA,KAAK;GACJ,CAAA,CACN;EALK,GAAA,KAAK,EAKV,CACP;CACD,CAAA;AAEZ"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { StatusTone } from "../feedback/StatusIndicator.js";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
interface StatTileProps {
|
|
4
|
+
label: string;
|
|
5
|
+
onClick: () => void;
|
|
6
|
+
selected: boolean;
|
|
7
|
+
tone: StatusTone;
|
|
8
|
+
value: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
/** A count with a label that doubles as a toggle filter. */
|
|
11
|
+
export declare function StatTile({ label, onClick, selected, tone, value }: StatTileProps): import("react").JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=StatTile.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { StatusIndicator } from "../feedback/StatusIndicator.js";
|
|
2
|
+
import { tabbable } from "../foundations/KeyboardFocus.js";
|
|
3
|
+
import { Inline } from "../layout/Flow.js";
|
|
4
|
+
import { Text } from "../typography/Typography.js";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
// src/display/StatTile.tsx
|
|
7
|
+
/** A count with a label that doubles as a toggle filter. */
|
|
8
|
+
function StatTile({ label, onClick, selected, tone, value }) {
|
|
9
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
10
|
+
...tabbable,
|
|
11
|
+
type: "button",
|
|
12
|
+
"aria-pressed": selected,
|
|
13
|
+
className: `focus-visible:outline-primary flex flex-col items-start gap-2 rounded-lg border p-4 text-left transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 ${selected ? "border-primary bg-primary/5" : "border-base-300 bg-base-100/60 hover:border-base-300"}`,
|
|
14
|
+
onClick,
|
|
15
|
+
children: [/* @__PURE__ */ jsxs(Inline, {
|
|
16
|
+
align: "center",
|
|
17
|
+
space: "related",
|
|
18
|
+
children: [/* @__PURE__ */ jsx(StatusIndicator, {
|
|
19
|
+
size: "sm",
|
|
20
|
+
tone
|
|
21
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
22
|
+
as: "span",
|
|
23
|
+
variant: "label",
|
|
24
|
+
children: label
|
|
25
|
+
})]
|
|
26
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
27
|
+
as: "span",
|
|
28
|
+
variant: "metric",
|
|
29
|
+
children: value
|
|
30
|
+
})]
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export { StatTile };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=StatTile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatTile.js","names":[],"sources":["../../src/display/StatTile.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { StatusIndicator, type StatusTone } from '../feedback/StatusIndicator';\nimport { tabbable } from '../foundations/KeyboardFocus';\nimport { Inline } from '../layout/Flow';\nimport { Text } from '../typography/Typography';\n\ninterface StatTileProps {\n label: string;\n onClick: () => void;\n selected: boolean;\n tone: StatusTone;\n value: ReactNode;\n}\n\n/** A count with a label that doubles as a toggle filter. */\nexport function StatTile({ label, onClick, selected, tone, value }: StatTileProps) {\n return (\n <button\n {...tabbable}\n type=\"button\"\n aria-pressed={selected}\n className={`focus-visible:outline-primary flex flex-col items-start gap-2 rounded-lg border p-4 text-left transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 ${\n selected ? 'border-primary bg-primary/5' : 'border-base-300 bg-base-100/60 hover:border-base-300'\n }`}\n onClick={onClick}\n >\n <Inline align=\"center\" space=\"related\">\n <StatusIndicator size=\"sm\" tone={tone} />\n <Text as=\"span\" variant=\"label\">\n {label}\n </Text>\n </Inline>\n <Text as=\"span\" variant=\"metric\">\n {value}\n </Text>\n </button>\n );\n}\n"],"mappings":";;;;;;;AAgBA,SAAgB,SAAS,EAAE,OAAO,SAAS,UAAU,MAAM,SAAwB;CAC/E,OACI,qBAAC,UAAD;EACI,GAAI;EACJ,MAAK;EACL,gBAAc;EACd,WAAW,0KACP,WAAW,gCAAgC;EAEtC;EAPb,UAAA,CASI,qBAAC,QAAD;GAAQ,OAAM;GAAS,OAAM;GAA7B,UAAA,CACI,oBAAC,iBAAD;IAAiB,MAAK;IAAW;GAAO,CAAA,GACxC,oBAAC,MAAD;IAAM,IAAG;IAAO,SAAQ;IACnB,UAAA;GACC,CAAA,CACF;EACR,CAAA,GAAA,oBAAC,MAAD;GAAM,IAAG;GAAO,SAAQ;GACnB,UAAA;EACC,CAAA,CACF;;AAEhB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
// src/display/StepList.tsx
|
|
3
|
+
/** Numbered instructions in reading order. */
|
|
4
|
+
function StepList({ steps }) {
|
|
5
|
+
return /* @__PURE__ */ jsx("ol", {
|
|
6
|
+
className: "text-base-800 list-decimal space-y-1 pl-5 text-sm",
|
|
7
|
+
children: steps.map((step) => /* @__PURE__ */ jsx("li", { children: step }, step))
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
export { StepList };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=StepList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StepList.js","names":[],"sources":["../../src/display/StepList.tsx"],"sourcesContent":["/** Numbered instructions in reading order. */\nexport function StepList({ steps }: { steps: readonly string[] }) {\n return (\n <ol className=\"text-base-800 list-decimal space-y-1 pl-5 text-sm\">\n {steps.map((step) => (\n <li key={step}>{step}</li>\n ))}\n </ol>\n );\n}\n"],"mappings":";;;AACA,SAAgB,SAAS,EAAE,SAAuC;CAC9D,OACI,oBAAC,MAAD;EAAI,WAAU;EACT,UAAA,MAAM,KAAK,SACR,oBAAC,MAAD,EAAA,UAAgB,KAAS,GAAhB,IAAgB,CAC5B;CACD,CAAA;AAEZ"}
|