@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,24 @@
|
|
|
1
|
+
import { StatusTone } from "../feedback/StatusIndicator.js";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
interface NoticeCardProps {
|
|
4
|
+
/** Buttons for what can be done, primary first. */
|
|
5
|
+
actions?: ReactNode;
|
|
6
|
+
/** A short status such as a severity, beside the title. */
|
|
7
|
+
badge?: ReactNode;
|
|
8
|
+
children?: ReactNode;
|
|
9
|
+
description: ReactNode;
|
|
10
|
+
/** Quiet content under the actions, such as a disclosure of technical details. */
|
|
11
|
+
footer?: ReactNode;
|
|
12
|
+
icon: ReactNode;
|
|
13
|
+
/** The title's heading level; one below the section the card sits in. */
|
|
14
|
+
level?: 'h2' | 'h3' | 'h4';
|
|
15
|
+
title: string;
|
|
16
|
+
tone: StatusTone;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A persistent, substantial item that needs examination or a decision, with optional details and
|
|
20
|
+
* actions. Use Alert for current status, InfoBox for optional guidance, and InsetPanel for grouping.
|
|
21
|
+
*/
|
|
22
|
+
export declare function NoticeCard({ actions, badge, children, description, footer, icon, level, title, tone }: NoticeCardProps): import("react").JSX.Element;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=NoticeCard.d.ts.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Heading, Text } from "../typography/Typography.js";
|
|
2
|
+
import { toneTileClasses } from "./ToneTile.js";
|
|
3
|
+
import { useId } from "react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
// src/display/NoticeCard.tsx
|
|
6
|
+
const accentClasses = {
|
|
7
|
+
neutral: "border-l-base-300",
|
|
8
|
+
success: "border-l-success",
|
|
9
|
+
warning: "border-l-warning",
|
|
10
|
+
danger: "border-l-danger",
|
|
11
|
+
info: "border-l-info"
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* A persistent, substantial item that needs examination or a decision, with optional details and
|
|
15
|
+
* actions. Use Alert for current status, InfoBox for optional guidance, and InsetPanel for grouping.
|
|
16
|
+
*/
|
|
17
|
+
function NoticeCard({ actions, badge, children, description, footer, icon, level = "h2", title, tone }) {
|
|
18
|
+
const id = useId();
|
|
19
|
+
return /* @__PURE__ */ jsx("article", {
|
|
20
|
+
"aria-labelledby": id,
|
|
21
|
+
className: `border-base-300 bg-base-100 rounded-lg border border-l-4 p-4 sm:p-5 ${accentClasses[tone]}`,
|
|
22
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
23
|
+
className: "flex min-w-0 gap-3 sm:gap-4",
|
|
24
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
25
|
+
"aria-hidden": "true",
|
|
26
|
+
className: `flex size-9 shrink-0 items-center justify-center rounded-lg [&>svg]:size-5 ${toneTileClasses[tone]}`,
|
|
27
|
+
children: icon
|
|
28
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
29
|
+
className: "flex min-w-0 flex-1 flex-col gap-3",
|
|
30
|
+
children: [
|
|
31
|
+
/* @__PURE__ */ jsxs("div", {
|
|
32
|
+
className: "flex min-w-0 flex-col gap-1",
|
|
33
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
34
|
+
className: "flex min-w-0 flex-wrap items-center justify-between gap-2",
|
|
35
|
+
children: [/* @__PURE__ */ jsx(Heading, {
|
|
36
|
+
id,
|
|
37
|
+
as: level,
|
|
38
|
+
variant: "title",
|
|
39
|
+
children: title
|
|
40
|
+
}), badge]
|
|
41
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
42
|
+
tone: "muted",
|
|
43
|
+
children: description
|
|
44
|
+
})]
|
|
45
|
+
}),
|
|
46
|
+
children,
|
|
47
|
+
actions ? /* @__PURE__ */ jsx("div", {
|
|
48
|
+
className: "flex flex-wrap items-center gap-2",
|
|
49
|
+
children: actions
|
|
50
|
+
}) : null,
|
|
51
|
+
footer
|
|
52
|
+
]
|
|
53
|
+
})]
|
|
54
|
+
})
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
export { NoticeCard };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=NoticeCard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoticeCard.js","names":[],"sources":["../../src/display/NoticeCard.tsx"],"sourcesContent":["import { type ReactNode, useId } from 'react';\n\nimport type { StatusTone } from '../feedback/StatusIndicator';\nimport { Heading, Text } from '../typography/Typography';\nimport { toneTileClasses } from './ToneTile';\n\nconst accentClasses: Record<StatusTone, string> = {\n neutral: 'border-l-base-300',\n success: 'border-l-success',\n warning: 'border-l-warning',\n danger: 'border-l-danger',\n info: 'border-l-info',\n};\n\ninterface NoticeCardProps {\n /** Buttons for what can be done, primary first. */\n actions?: ReactNode;\n /** A short status such as a severity, beside the title. */\n badge?: ReactNode;\n children?: ReactNode;\n description: ReactNode;\n /** Quiet content under the actions, such as a disclosure of technical details. */\n footer?: ReactNode;\n icon: ReactNode;\n /** The title's heading level; one below the section the card sits in. */\n level?: 'h2' | 'h3' | 'h4';\n title: string;\n tone: StatusTone;\n}\n\n/**\n * A persistent, substantial item that needs examination or a decision, with optional details and\n * actions. Use Alert for current status, InfoBox for optional guidance, and InsetPanel for grouping.\n */\nexport function NoticeCard({\n actions,\n badge,\n children,\n description,\n footer,\n icon,\n level = 'h2',\n title,\n tone,\n}: NoticeCardProps) {\n const id = useId();\n\n return (\n <article\n aria-labelledby={id}\n className={`border-base-300 bg-base-100 rounded-lg border border-l-4 p-4 sm:p-5 ${accentClasses[tone]}`}\n >\n <div className=\"flex min-w-0 gap-3 sm:gap-4\">\n <span\n aria-hidden=\"true\"\n className={`flex size-9 shrink-0 items-center justify-center rounded-lg [&>svg]:size-5 ${toneTileClasses[tone]}`}\n >\n {icon}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col gap-3\">\n <div className=\"flex min-w-0 flex-col gap-1\">\n <div className=\"flex min-w-0 flex-wrap items-center justify-between gap-2\">\n <Heading id={id} as={level} variant=\"title\">\n {title}\n </Heading>\n {badge}\n </div>\n <Text tone=\"muted\">{description}</Text>\n </div>\n {children}\n {actions ? <div className=\"flex flex-wrap items-center gap-2\">{actions}</div> : null}\n {footer}\n </div>\n </div>\n </article>\n );\n}\n"],"mappings":";;;;;AAMA,MAAM,gBAA4C;CAC9C,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;AACV;;;;;AAsBA,SAAgB,WAAW,EACvB,SACA,OACA,UACA,aACA,QACA,MACA,QAAQ,MACR,OACA,QACgB;CAChB,MAAM,KAAK,MAAM;CAEjB,OACI,oBAAC,WAAD;EACI,mBAAiB;EACjB,WAAW,uEAAuE,cAAc;EAEhG,UAAA,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACI,oBAAC,QAAD;IACI,eAAY;IACZ,WAAW,8EAA8E,gBAAgB;IAExG,UAAA;GACC,CAAA,GACN,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACI,qBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACI,qBAAC,OAAD;OAAK,WAAU;OAAf,UAAA,CACI,oBAAC,SAAD;QAAa;QAAI,IAAI;QAAO,SAAQ;QAC/B,UAAA;OACI,CAAA,GACR,KACA;MACL,CAAA,GAAA,oBAAC,MAAD;OAAM,MAAK;OAAS,UAAA;MAAkB,CAAA,CACrC;;KACJ;KACA,UAAU,oBAAC,OAAD;MAAK,WAAU;MAAqC,UAAA;KAAa,CAAA,IAAI;KAC/E;IACA;GACJ,CAAA,CAAA;;CACA,CAAA;AAEjB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
export interface PairingListItem {
|
|
3
|
+
key: string;
|
|
4
|
+
/** Short ordinal such as `1` or `2-05`. */
|
|
5
|
+
position: string;
|
|
6
|
+
title: string;
|
|
7
|
+
/** A secondary fact aligned in its own column, such as a duration. */
|
|
8
|
+
detail?: string;
|
|
9
|
+
/** One line under the title; `warning` draws attention to a doubt. */
|
|
10
|
+
note?: string;
|
|
11
|
+
noteTone?: 'muted' | 'warning';
|
|
12
|
+
control: ReactNode;
|
|
13
|
+
}
|
|
14
|
+
/** Rows that pair a numbered item with a chosen counterpart, such as release tracks and files. */
|
|
15
|
+
export declare function PairingList({ items, label }: {
|
|
16
|
+
items: readonly PairingListItem[];
|
|
17
|
+
label: string;
|
|
18
|
+
}): import("react").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=PairingList.d.ts.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Text } from "../typography/Typography.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
// src/display/PairingList.tsx
|
|
4
|
+
/** Rows that pair a numbered item with a chosen counterpart, such as release tracks and files. */
|
|
5
|
+
function PairingList({ items, label }) {
|
|
6
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
7
|
+
"aria-label": label,
|
|
8
|
+
className: "divide-base-300 border-base-300 bg-base-100 divide-y rounded-lg border",
|
|
9
|
+
children: items.map((item) => /* @__PURE__ */ jsxs("li", {
|
|
10
|
+
className: "grid min-w-0 grid-cols-[2.5rem_minmax(0,1fr)_auto] items-center gap-x-3 gap-y-2 px-3 py-2.5 sm:grid-cols-[2.5rem_minmax(0,1fr)_3.5rem_minmax(0,20rem)] sm:px-4",
|
|
11
|
+
children: [
|
|
12
|
+
/* @__PURE__ */ jsx(Text, {
|
|
13
|
+
as: "span",
|
|
14
|
+
tone: "muted",
|
|
15
|
+
className: "tabular-nums",
|
|
16
|
+
children: item.position
|
|
17
|
+
}),
|
|
18
|
+
/* @__PURE__ */ jsxs("span", {
|
|
19
|
+
className: "min-w-0",
|
|
20
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
21
|
+
as: "span",
|
|
22
|
+
className: "block",
|
|
23
|
+
truncate: true,
|
|
24
|
+
title: item.title,
|
|
25
|
+
variant: "label",
|
|
26
|
+
children: item.title
|
|
27
|
+
}), item.note ? /* @__PURE__ */ jsx(Text, {
|
|
28
|
+
as: "span",
|
|
29
|
+
className: "block",
|
|
30
|
+
truncate: true,
|
|
31
|
+
title: item.note,
|
|
32
|
+
variant: "caption",
|
|
33
|
+
tone: item.noteTone === "warning" ? "warning" : "muted",
|
|
34
|
+
children: item.note
|
|
35
|
+
}) : null]
|
|
36
|
+
}),
|
|
37
|
+
/* @__PURE__ */ jsx(Text, {
|
|
38
|
+
as: "span",
|
|
39
|
+
tone: "muted",
|
|
40
|
+
className: "text-right tabular-nums",
|
|
41
|
+
children: item.detail ?? ""
|
|
42
|
+
}),
|
|
43
|
+
/* @__PURE__ */ jsx("span", {
|
|
44
|
+
className: "col-span-3 min-w-0 sm:col-span-1",
|
|
45
|
+
children: item.control
|
|
46
|
+
})
|
|
47
|
+
]
|
|
48
|
+
}, item.key))
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
export { PairingList };
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=PairingList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PairingList.js","names":[],"sources":["../../src/display/PairingList.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Text } from '../typography/Typography';\n\nexport interface PairingListItem {\n key: string;\n /** Short ordinal such as `1` or `2-05`. */\n position: string;\n title: string;\n /** A secondary fact aligned in its own column, such as a duration. */\n detail?: string;\n /** One line under the title; `warning` draws attention to a doubt. */\n note?: string;\n noteTone?: 'muted' | 'warning';\n control: ReactNode;\n}\n\n/** Rows that pair a numbered item with a chosen counterpart, such as release tracks and files. */\nexport function PairingList({ items, label }: { items: readonly PairingListItem[]; label: string }) {\n return (\n <ul aria-label={label} className=\"divide-base-300 border-base-300 bg-base-100 divide-y rounded-lg border\">\n {items.map((item) => (\n <li\n key={item.key}\n className=\"grid min-w-0 grid-cols-[2.5rem_minmax(0,1fr)_auto] items-center gap-x-3 gap-y-2 px-3 py-2.5 sm:grid-cols-[2.5rem_minmax(0,1fr)_3.5rem_minmax(0,20rem)] sm:px-4\"\n >\n <Text as=\"span\" tone=\"muted\" className=\"tabular-nums\">\n {item.position}\n </Text>\n <span className=\"min-w-0\">\n <Text as=\"span\" className=\"block\" truncate title={item.title} variant=\"label\">\n {item.title}\n </Text>\n {item.note ? (\n <Text\n as=\"span\"\n className=\"block\"\n truncate\n title={item.note}\n variant=\"caption\"\n tone={item.noteTone === 'warning' ? 'warning' : 'muted'}\n >\n {item.note}\n </Text>\n ) : null}\n </span>\n <Text as=\"span\" tone=\"muted\" className=\"text-right tabular-nums\">\n {item.detail ?? ''}\n </Text>\n <span className=\"col-span-3 min-w-0 sm:col-span-1\">{item.control}</span>\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":";;;;AAkBA,SAAgB,YAAY,EAAE,OAAO,SAA+D;CAChG,OACI,oBAAC,MAAD;EAAI,cAAY;EAAO,WAAU;EAC5B,UAAA,MAAM,KAAK,SACR,qBAAC,MAAD;GAEI,WAAU;GAFd,UAAA;IAII,oBAAC,MAAD;KAAM,IAAG;KAAO,MAAK;KAAQ,WAAU;KAClC,UAAA,KAAK;IACJ,CAAA;IACN,qBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CACI,oBAAC,MAAD;MAAM,IAAG;MAAO,WAAU;MAAQ,UAAA;MAAS,OAAO,KAAK;MAAO,SAAQ;MACjE,UAAA,KAAK;KACJ,CAAA,GACL,KAAK,OACF,oBAAC,MAAD;MACI,IAAG;MACH,WAAU;MACV,UAAA;MACA,OAAO,KAAK;MACZ,SAAQ;MACR,MAAM,KAAK,aAAa,YAAY,YAAY;MAE/C,UAAA,KAAK;KACJ,CAAA,IACN,IACF;;IACN,oBAAC,MAAD;KAAM,IAAG;KAAO,MAAK;KAAQ,WAAU;KAClC,UAAA,KAAK,UAAU;IACd,CAAA;IACN,oBAAC,QAAD;KAAM,WAAU;KAAoC,UAAA,KAAK;IAAc,CAAA;GACvE;EA3BK,GAAA,KAAK,GA2BV,CACP;CACD,CAAA;AAEZ"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Code } from "@ninna-ui/primitives";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
// src/display/PathList.tsx
|
|
4
|
+
/** File paths as truncated code, one per line. */
|
|
5
|
+
function PathList({ label, paths }) {
|
|
6
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
7
|
+
"aria-label": label,
|
|
8
|
+
className: "space-y-1",
|
|
9
|
+
children: paths.map(({ key, path }) => /* @__PURE__ */ jsx("li", {
|
|
10
|
+
className: "min-w-0",
|
|
11
|
+
children: /* @__PURE__ */ jsx(Code, {
|
|
12
|
+
title: path,
|
|
13
|
+
className: "block max-w-full truncate text-xs",
|
|
14
|
+
children: path
|
|
15
|
+
})
|
|
16
|
+
}, key))
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
export { PathList };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=PathList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PathList.js","names":[],"sources":["../../src/display/PathList.tsx"],"sourcesContent":["import { Code } from '@ninna-ui/primitives';\n\n/** File paths as truncated code, one per line. */\nexport function PathList({ label, paths }: { label: string; paths: readonly { key: string; path: string }[] }) {\n return (\n <ul aria-label={label} className=\"space-y-1\">\n {paths.map(({ key, path }) => (\n <li key={key} className=\"min-w-0\">\n <Code title={path} className=\"block max-w-full truncate text-xs\">\n {path}\n </Code>\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":";;;;AAGA,SAAgB,SAAS,EAAE,OAAO,SAA6E;CAC3G,OACI,oBAAC,MAAD;EAAI,cAAY;EAAO,WAAU;EAC5B,UAAA,MAAM,KAAK,EAAE,KAAK,WACf,oBAAC,MAAD;GAAc,WAAU;GACpB,UAAA,oBAAC,MAAD;IAAM,OAAO;IAAM,WAAU;IACxB,UAAA;GACC,CAAA;EACN,GAJK,GAIL,CACP;CACD,CAAA;AAEZ"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
interface PeoplePreviewItem {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
role: string;
|
|
6
|
+
artwork: ReactNode;
|
|
7
|
+
href?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Render only the cards that fit in one row, including keyboard navigation. */
|
|
10
|
+
export declare function PeoplePreview({ label, items, onNavigate }: {
|
|
11
|
+
label: string;
|
|
12
|
+
items: readonly PeoplePreviewItem[];
|
|
13
|
+
onNavigate?: (href: string) => void;
|
|
14
|
+
}): import("react").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=PeoplePreview.d.ts.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { ImageCard } from "./ImageCard.js";
|
|
2
|
+
import { useLayoutEffect, useRef, useState } from "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
// src/display/PeoplePreview.tsx
|
|
5
|
+
/** Render only the cards that fit in one row, including keyboard navigation. */
|
|
6
|
+
function PeoplePreview({ label, items, onNavigate }) {
|
|
7
|
+
const rowRef = useRef(null);
|
|
8
|
+
const [visibleCount, setVisibleCount] = useState();
|
|
9
|
+
useLayoutEffect(() => {
|
|
10
|
+
const row = rowRef.current;
|
|
11
|
+
if (!row) return;
|
|
12
|
+
const measure = () => {
|
|
13
|
+
const columns = getComputedStyle(row).gridTemplateColumns;
|
|
14
|
+
if (columns && !columns.includes("repeat(") && columns !== "none") setVisibleCount(columns.trim().split(/\s+/).length);
|
|
15
|
+
};
|
|
16
|
+
const observer = new ResizeObserver(measure);
|
|
17
|
+
measure();
|
|
18
|
+
observer.observe(row);
|
|
19
|
+
return () => observer.disconnect();
|
|
20
|
+
}, []);
|
|
21
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
22
|
+
ref: rowRef,
|
|
23
|
+
"aria-label": label,
|
|
24
|
+
className: "grid min-w-0 grid-cols-[repeat(auto-fill,minmax(min(5.5rem,100%),1fr))] gap-x-3 gap-y-5",
|
|
25
|
+
children: items.slice(0, visibleCount).map((person) => /* @__PURE__ */ jsx("li", {
|
|
26
|
+
className: "min-w-0",
|
|
27
|
+
children: /* @__PURE__ */ jsx(ImageCard, {
|
|
28
|
+
presentation: "person",
|
|
29
|
+
title: person.name,
|
|
30
|
+
label: person.name,
|
|
31
|
+
subtitle: person.role,
|
|
32
|
+
artwork: person.artwork,
|
|
33
|
+
href: person.href,
|
|
34
|
+
onNavigate
|
|
35
|
+
})
|
|
36
|
+
}, person.id))
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
export { PeoplePreview };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=PeoplePreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PeoplePreview.js","names":[],"sources":["../../src/display/PeoplePreview.tsx"],"sourcesContent":["import { type ReactNode, useLayoutEffect, useRef, useState } from 'react';\n\nimport { ImageCard } from './ImageCard';\n\ninterface PeoplePreviewItem {\n id: string;\n name: string;\n role: string;\n artwork: ReactNode;\n href?: string;\n}\n\n/** Render only the cards that fit in one row, including keyboard navigation. */\nexport function PeoplePreview({\n label,\n items,\n onNavigate,\n}: {\n label: string;\n items: readonly PeoplePreviewItem[];\n onNavigate?: (href: string) => void;\n}) {\n const rowRef = useRef<HTMLUListElement>(null);\n const [visibleCount, setVisibleCount] = useState<number>();\n\n useLayoutEffect(() => {\n const row = rowRef.current;\n\n if (!row) return;\n\n const measure = () => {\n const columns = getComputedStyle(row).gridTemplateColumns;\n\n if (columns && !columns.includes('repeat(') && columns !== 'none')\n setVisibleCount(columns.trim().split(/\\s+/).length);\n };\n const observer = new ResizeObserver(measure);\n\n measure();\n observer.observe(row);\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <ul\n ref={rowRef}\n aria-label={label}\n className=\"grid min-w-0 grid-cols-[repeat(auto-fill,minmax(min(5.5rem,100%),1fr))] gap-x-3 gap-y-5\"\n >\n {items.slice(0, visibleCount).map((person) => (\n <li key={person.id} className=\"min-w-0\">\n <ImageCard\n presentation=\"person\"\n title={person.name}\n label={person.name}\n subtitle={person.role}\n artwork={person.artwork}\n href={person.href}\n onNavigate={onNavigate}\n />\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":";;;;;AAaA,SAAgB,cAAc,EAC1B,OACA,OACA,cAKD;CACC,MAAM,SAAS,OAAyB,IAAI;CAC5C,MAAM,CAAC,cAAc,mBAAmB,SAAiB;CAEzD,sBAAsB;EAClB,MAAM,MAAM,OAAO;EAEnB,IAAI,CAAC,KAAK;EAEV,MAAM,gBAAgB;GAClB,MAAM,UAAU,iBAAiB,GAAG,CAAC,CAAC;GAEtC,IAAI,WAAW,CAAC,QAAQ,SAAS,SAAS,KAAK,YAAY,QACvD,gBAAgB,QAAQ,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;EAC1D;EACA,MAAM,WAAW,IAAI,eAAe,OAAO;EAE3C,QAAQ;EACR,SAAS,QAAQ,GAAG;EAEpB,aAAa,SAAS,WAAW;CACrC,GAAG,CAAC,CAAC;CAEL,OACI,oBAAC,MAAD;EACI,KAAK;EACL,cAAY;EACZ,WAAU;EAET,UAAA,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,KAAK,WAC/B,oBAAC,MAAD;GAAoB,WAAU;GAC1B,UAAA,oBAAC,WAAD;IACI,cAAa;IACb,OAAO,OAAO;IACd,OAAO,OAAO;IACd,UAAU,OAAO;IACjB,SAAS,OAAO;IAChB,MAAM,OAAO;IACD;GACf,CAAA;EACD,GAVK,OAAO,EAUZ,CACP;CACD,CAAA;AAEZ"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { BadgeListItem } from "./BadgeList.js";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
type PropertySheetProps = {
|
|
4
|
+
title: string;
|
|
5
|
+
} & ({
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
loading?: false;
|
|
8
|
+
loadingLabel?: never;
|
|
9
|
+
} | {
|
|
10
|
+
children?: never;
|
|
11
|
+
loading: true;
|
|
12
|
+
loadingLabel?: string;
|
|
13
|
+
});
|
|
14
|
+
/** A titled sheet of facts about one thing; the body is label/value rows, a row of tags, or a short note. */
|
|
15
|
+
declare function PropertySheetRoot({ children, loading, loadingLabel, title }: PropertySheetProps): import("react").JSX.Element;
|
|
16
|
+
interface PropertySheetRow {
|
|
17
|
+
label: string;
|
|
18
|
+
value: ReactNode;
|
|
19
|
+
}
|
|
20
|
+
type RowsProps = {
|
|
21
|
+
loading: true;
|
|
22
|
+
items?: never;
|
|
23
|
+
} | {
|
|
24
|
+
loading?: false;
|
|
25
|
+
items: readonly PropertySheetRow[];
|
|
26
|
+
};
|
|
27
|
+
declare function PropertySheetRows({ items, loading }: RowsProps): import("react").JSX.Element;
|
|
28
|
+
type PropertySheetTag = Omit<BadgeListItem, 'struck'>;
|
|
29
|
+
declare function PropertySheetTags({ items }: {
|
|
30
|
+
items: readonly PropertySheetTag[];
|
|
31
|
+
}): import("react").JSX.Element;
|
|
32
|
+
declare function PropertySheetNote({ children }: {
|
|
33
|
+
children: ReactNode;
|
|
34
|
+
}): import("react").JSX.Element;
|
|
35
|
+
declare function PropertySheetCollapsible({ children, title, summary }: {
|
|
36
|
+
children: ReactNode;
|
|
37
|
+
title: string;
|
|
38
|
+
summary?: string;
|
|
39
|
+
}): import("react").JSX.Element;
|
|
40
|
+
declare function PropertySheetTable({ label, columns, rows }: {
|
|
41
|
+
label: string;
|
|
42
|
+
columns: readonly string[];
|
|
43
|
+
rows: readonly {
|
|
44
|
+
key: string;
|
|
45
|
+
cells: readonly ReactNode[];
|
|
46
|
+
}[];
|
|
47
|
+
}): import("react").JSX.Element;
|
|
48
|
+
export declare const PropertySheet: typeof PropertySheetRoot & {
|
|
49
|
+
Collapsible: typeof PropertySheetCollapsible;
|
|
50
|
+
Note: typeof PropertySheetNote;
|
|
51
|
+
Rows: typeof PropertySheetRows;
|
|
52
|
+
Table: typeof PropertySheetTable;
|
|
53
|
+
Tags: typeof PropertySheetTags;
|
|
54
|
+
};
|
|
55
|
+
export type { PropertySheetRow, PropertySheetTag };
|
|
56
|
+
//# sourceMappingURL=PropertySheet.d.ts.map
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { SkeletonLoader } from "../feedback/SkeletonLoader.js";
|
|
2
|
+
import { Heading, Text } from "../typography/Typography.js";
|
|
3
|
+
import { BadgeList } from "./BadgeList.js";
|
|
4
|
+
import { InsetPanel } from "./InsetPanel.js";
|
|
5
|
+
import { useId } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { ChevronDownIcon } from "lucide-react";
|
|
8
|
+
// src/display/PropertySheet.tsx
|
|
9
|
+
/** A titled sheet of facts about one thing; the body is label/value rows, a row of tags, or a short note. */
|
|
10
|
+
function PropertySheetRoot({ children, loading = false, loadingLabel, title }) {
|
|
11
|
+
const id = useId();
|
|
12
|
+
const content = /* @__PURE__ */ jsxs("section", {
|
|
13
|
+
"aria-labelledby": loading ? void 0 : id,
|
|
14
|
+
"aria-hidden": loading && !loadingLabel || void 0,
|
|
15
|
+
className: "min-w-0",
|
|
16
|
+
children: [/* @__PURE__ */ jsx(Heading, {
|
|
17
|
+
id,
|
|
18
|
+
as: "h3",
|
|
19
|
+
variant: "label",
|
|
20
|
+
tone: "muted",
|
|
21
|
+
className: "px-1",
|
|
22
|
+
loading,
|
|
23
|
+
"aria-hidden": loading || void 0,
|
|
24
|
+
children: title
|
|
25
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
26
|
+
className: "mt-3",
|
|
27
|
+
children: /* @__PURE__ */ jsx(InsetPanel, {
|
|
28
|
+
presentation: "settings",
|
|
29
|
+
children: loading ? /* @__PURE__ */ jsx(PropertySheetRows, { loading: true }) : children
|
|
30
|
+
})
|
|
31
|
+
})]
|
|
32
|
+
});
|
|
33
|
+
return loading && loadingLabel ? /* @__PURE__ */ jsx(SkeletonLoader, {
|
|
34
|
+
label: loadingLabel,
|
|
35
|
+
children: content
|
|
36
|
+
}) : content;
|
|
37
|
+
}
|
|
38
|
+
function PropertySheetRows({ items, loading = false }) {
|
|
39
|
+
const rows = items ?? Array.from({ length: 3 }, () => ({
|
|
40
|
+
label: "",
|
|
41
|
+
value: ""
|
|
42
|
+
}));
|
|
43
|
+
return /* @__PURE__ */ jsx("dl", {
|
|
44
|
+
className: "divide-base-300 divide-y",
|
|
45
|
+
children: rows.map(({ label, value }, index) => /* @__PURE__ */ jsxs("div", {
|
|
46
|
+
className: "grid grid-cols-[minmax(0,1fr)_minmax(0,1.5fr)] items-baseline gap-x-6 px-4 py-2.5 sm:px-5",
|
|
47
|
+
children: [/* @__PURE__ */ jsx("dt", { children: /* @__PURE__ */ jsx(Text, {
|
|
48
|
+
as: "span",
|
|
49
|
+
tone: "muted",
|
|
50
|
+
loading,
|
|
51
|
+
children: label
|
|
52
|
+
}) }), /* @__PURE__ */ jsx("dd", {
|
|
53
|
+
className: "min-w-0 text-right",
|
|
54
|
+
children: /* @__PURE__ */ jsx(Text, {
|
|
55
|
+
as: "span",
|
|
56
|
+
className: "wrap-break-word tabular-nums",
|
|
57
|
+
variant: "label",
|
|
58
|
+
loading,
|
|
59
|
+
children: value
|
|
60
|
+
})
|
|
61
|
+
})]
|
|
62
|
+
}, loading ? index : label))
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
function PropertySheetTags({ items }) {
|
|
66
|
+
return /* @__PURE__ */ jsx("div", {
|
|
67
|
+
className: "px-4 py-3 sm:px-5",
|
|
68
|
+
children: /* @__PURE__ */ jsx(BadgeList, { items })
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function PropertySheetNote({ children }) {
|
|
72
|
+
return /* @__PURE__ */ jsx(Text, {
|
|
73
|
+
className: "px-4 py-3 sm:px-5",
|
|
74
|
+
tone: "muted",
|
|
75
|
+
children
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function PropertySheetCollapsible({ children, title, summary }) {
|
|
79
|
+
const id = useId();
|
|
80
|
+
return /* @__PURE__ */ jsx("section", {
|
|
81
|
+
"aria-labelledby": id,
|
|
82
|
+
className: "min-w-0",
|
|
83
|
+
children: /* @__PURE__ */ jsx(InsetPanel, {
|
|
84
|
+
presentation: "settings",
|
|
85
|
+
children: /* @__PURE__ */ jsxs("details", {
|
|
86
|
+
className: "group/sheet",
|
|
87
|
+
children: [/* @__PURE__ */ jsxs("summary", {
|
|
88
|
+
className: "hover:bg-base-100 focus-visible:outline-primary flex cursor-pointer list-none items-center gap-4 px-4 py-4 focus-visible:outline-2 focus-visible:-outline-offset-2 sm:px-5 [&::-webkit-details-marker]:hidden",
|
|
89
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
90
|
+
className: "min-w-0 flex-1 wrap-anywhere",
|
|
91
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
92
|
+
as: "span",
|
|
93
|
+
id,
|
|
94
|
+
variant: "label",
|
|
95
|
+
className: "block",
|
|
96
|
+
children: title
|
|
97
|
+
}), summary ? /* @__PURE__ */ jsx(Text, {
|
|
98
|
+
as: "span",
|
|
99
|
+
tone: "muted",
|
|
100
|
+
variant: "caption",
|
|
101
|
+
className: "mt-1 block",
|
|
102
|
+
children: summary
|
|
103
|
+
}) : null]
|
|
104
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
105
|
+
"aria-hidden": "true",
|
|
106
|
+
className: "shrink-0 transition-transform group-open/sheet:rotate-180 [&>svg]:size-4",
|
|
107
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
|
|
108
|
+
})]
|
|
109
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
110
|
+
className: "border-base-300 border-t p-4 sm:p-5",
|
|
111
|
+
children
|
|
112
|
+
})]
|
|
113
|
+
})
|
|
114
|
+
})
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
function PropertySheetTable({ label, columns, rows }) {
|
|
118
|
+
return /* @__PURE__ */ jsx("div", {
|
|
119
|
+
className: "overflow-x-auto",
|
|
120
|
+
tabIndex: 0,
|
|
121
|
+
children: /* @__PURE__ */ jsxs("table", {
|
|
122
|
+
"aria-label": label,
|
|
123
|
+
className: "w-full min-w-[30rem] table-fixed border-collapse text-left text-sm",
|
|
124
|
+
children: [/* @__PURE__ */ jsx("thead", {
|
|
125
|
+
className: "border-base-300 text-base-700 border-b text-xs",
|
|
126
|
+
children: /* @__PURE__ */ jsx("tr", { children: columns.map((column) => /* @__PURE__ */ jsx("th", {
|
|
127
|
+
scope: "col",
|
|
128
|
+
className: "px-4 py-3 font-medium sm:px-5",
|
|
129
|
+
children: column
|
|
130
|
+
}, column)) })
|
|
131
|
+
}), /* @__PURE__ */ jsx("tbody", {
|
|
132
|
+
className: "divide-base-300 divide-y",
|
|
133
|
+
children: rows.map((row) => /* @__PURE__ */ jsx("tr", { children: row.cells.map((cell, index) => /* @__PURE__ */ jsx("td", {
|
|
134
|
+
className: "px-4 py-3 align-top wrap-anywhere sm:px-5",
|
|
135
|
+
children: cell
|
|
136
|
+
}, index)) }, row.key))
|
|
137
|
+
})]
|
|
138
|
+
})
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
const PropertySheet = Object.assign(PropertySheetRoot, {
|
|
142
|
+
Collapsible: PropertySheetCollapsible,
|
|
143
|
+
Note: PropertySheetNote,
|
|
144
|
+
Rows: PropertySheetRows,
|
|
145
|
+
Table: PropertySheetTable,
|
|
146
|
+
Tags: PropertySheetTags
|
|
147
|
+
});
|
|
148
|
+
export { PropertySheet };
|
|
149
|
+
|
|
150
|
+
//# sourceMappingURL=PropertySheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PropertySheet.js","names":[],"sources":["../../src/display/PropertySheet.tsx"],"sourcesContent":["import { ChevronDownIcon } from 'lucide-react';\n/* oxlint-disable react/only-export-components -- Compound members are exported through PropertySheet. */\nimport { type ReactNode, useId } from 'react';\n\nimport { SkeletonLoader } from '../feedback/SkeletonLoader';\nimport { Heading, Text } from '../typography/Typography';\nimport { BadgeList, type BadgeListItem } from './BadgeList';\nimport { InsetPanel } from './InsetPanel';\n\ntype PropertySheetProps = { title: string } & (\n | { children: ReactNode; loading?: false; loadingLabel?: never }\n | { children?: never; loading: true; loadingLabel?: string }\n);\n\n/** A titled sheet of facts about one thing; the body is label/value rows, a row of tags, or a short note. */\nfunction PropertySheetRoot({ children, loading = false, loadingLabel, title }: PropertySheetProps) {\n const id = useId();\n const content = (\n <section\n aria-labelledby={loading ? undefined : id}\n aria-hidden={(loading && !loadingLabel) || undefined}\n className=\"min-w-0\"\n >\n <Heading\n id={id}\n as=\"h3\"\n variant=\"label\"\n tone=\"muted\"\n className=\"px-1\"\n loading={loading}\n aria-hidden={loading || undefined}\n >\n {title}\n </Heading>\n <div className=\"mt-3\">\n <InsetPanel presentation=\"settings\">{loading ? <PropertySheetRows loading /> : children}</InsetPanel>\n </div>\n </section>\n );\n\n return loading && loadingLabel ? <SkeletonLoader label={loadingLabel}>{content}</SkeletonLoader> : content;\n}\n\ninterface PropertySheetRow {\n label: string;\n value: ReactNode;\n}\n\ntype RowsProps = { loading: true; items?: never } | { loading?: false; items: readonly PropertySheetRow[] };\n\nfunction PropertySheetRows({ items, loading = false }: RowsProps) {\n const rows = items ?? Array.from({ length: 3 }, () => ({ label: '', value: '' }));\n\n return (\n <dl className=\"divide-base-300 divide-y\">\n {rows.map(({ label, value }, index) => (\n <div\n key={loading ? index : label}\n className=\"grid grid-cols-[minmax(0,1fr)_minmax(0,1.5fr)] items-baseline gap-x-6 px-4 py-2.5 sm:px-5\"\n >\n <dt>\n <Text as=\"span\" tone=\"muted\" loading={loading}>\n {label}\n </Text>\n </dt>\n <dd className=\"min-w-0 text-right\">\n <Text as=\"span\" className=\"wrap-break-word tabular-nums\" variant=\"label\" loading={loading}>\n {value}\n </Text>\n </dd>\n </div>\n ))}\n </dl>\n );\n}\n\ntype PropertySheetTag = Omit<BadgeListItem, 'struck'>;\n\nfunction PropertySheetTags({ items }: { items: readonly PropertySheetTag[] }) {\n return (\n <div className=\"px-4 py-3 sm:px-5\">\n <BadgeList items={items} />\n </div>\n );\n}\n\nfunction PropertySheetNote({ children }: { children: ReactNode }) {\n return (\n <Text className=\"px-4 py-3 sm:px-5\" tone=\"muted\">\n {children}\n </Text>\n );\n}\n\nfunction PropertySheetCollapsible({\n children,\n title,\n summary,\n}: {\n children: ReactNode;\n title: string;\n summary?: string;\n}) {\n const id = useId();\n\n return (\n <section aria-labelledby={id} className=\"min-w-0\">\n <InsetPanel presentation=\"settings\">\n <details className=\"group/sheet\">\n <summary className=\"hover:bg-base-100 focus-visible:outline-primary flex cursor-pointer list-none items-center gap-4 px-4 py-4 focus-visible:outline-2 focus-visible:-outline-offset-2 sm:px-5 [&::-webkit-details-marker]:hidden\">\n <span className=\"min-w-0 flex-1 wrap-anywhere\">\n <Text as=\"span\" id={id} variant=\"label\" className=\"block\">\n {title}\n </Text>\n {summary ? (\n <Text as=\"span\" tone=\"muted\" variant=\"caption\" className=\"mt-1 block\">\n {summary}\n </Text>\n ) : null}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"shrink-0 transition-transform group-open/sheet:rotate-180 [&>svg]:size-4\"\n >\n <ChevronDownIcon />\n </span>\n </summary>\n <div className=\"border-base-300 border-t p-4 sm:p-5\">{children}</div>\n </details>\n </InsetPanel>\n </section>\n );\n}\n\nfunction PropertySheetTable({\n label,\n columns,\n rows,\n}: {\n label: string;\n columns: readonly string[];\n rows: readonly { key: string; cells: readonly ReactNode[] }[];\n}) {\n return (\n <div className=\"overflow-x-auto\" tabIndex={0}>\n <table aria-label={label} className=\"w-full min-w-[30rem] table-fixed border-collapse text-left text-sm\">\n <thead className=\"border-base-300 text-base-700 border-b text-xs\">\n <tr>\n {columns.map((column) => (\n <th key={column} scope=\"col\" className=\"px-4 py-3 font-medium sm:px-5\">\n {column}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-base-300 divide-y\">\n {rows.map((row) => (\n <tr key={row.key}>\n {row.cells.map((cell, index) => (\n <td key={index} className=\"px-4 py-3 align-top wrap-anywhere sm:px-5\">\n {cell}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport const PropertySheet = Object.assign(PropertySheetRoot, {\n Collapsible: PropertySheetCollapsible,\n Note: PropertySheetNote,\n Rows: PropertySheetRows,\n Table: PropertySheetTable,\n Tags: PropertySheetTags,\n});\n\nexport type { PropertySheetRow, PropertySheetTag };\n"],"mappings":";;;;;;;;;AAeA,SAAS,kBAAkB,EAAE,UAAU,UAAU,OAAO,cAAc,SAA6B;CAC/F,MAAM,KAAK,MAAM;CACjB,MAAM,UACF,qBAAC,WAAD;EACI,mBAAiB,UAAU,KAAA,IAAY;EACvC,eAAc,WAAW,CAAC,gBAAiB,KAAA;EAC3C,WAAU;EAHd,UAAA,CAKI,oBAAC,SAAD;GACQ;GACJ,IAAG;GACH,SAAQ;GACR,MAAK;GACL,WAAU;GACD;GACT,eAAa,WAAW,KAAA;GAEvB,UAAA;EACI,CAAA,GACT,oBAAC,OAAD;GAAK,WAAU;GACX,UAAA,oBAAC,YAAD;IAAY,cAAa;IAAY,UAAA,UAAU,oBAAC,mBAAD,EAAmB,SAAA,KAAS,CAAA,IAAI;GAAqB,CAAA;EACnG,CAAA,CACA;;CAGb,OAAO,WAAW,eAAe,oBAAC,gBAAD;EAAgB,OAAO;EAAe,UAAA;CAAwB,CAAA,IAAI;AACvG;AASA,SAAS,kBAAkB,EAAE,OAAO,UAAU,SAAoB;CAC9D,MAAM,OAAO,SAAS,MAAM,KAAK,EAAE,QAAQ,EAAE,UAAU;EAAE,OAAO;EAAI,OAAO;CAAG,EAAE;CAEhF,OACI,oBAAC,MAAD;EAAI,WAAU;EACT,UAAA,KAAK,KAAK,EAAE,OAAO,SAAS,UACzB,qBAAC,OAAD;GAEI,WAAU;GAFd,UAAA,CAII,oBAAC,MAAD,EAAA,UACI,oBAAC,MAAD;IAAM,IAAG;IAAO,MAAK;IAAiB;IACjC,UAAA;GACC,CAAA,EACN,CAAA,GACJ,oBAAC,MAAD;IAAI,WAAU;IACV,UAAA,oBAAC,MAAD;KAAM,IAAG;KAAO,WAAU;KAA+B,SAAQ;KAAiB;KAC7E,UAAA;IACC,CAAA;GACN,CAAA,CACH;EAbI,GAAA,UAAU,QAAQ,KAatB,CACR;CACD,CAAA;AAEZ;AAIA,SAAS,kBAAkB,EAAE,SAAiD;CAC1E,OACI,oBAAC,OAAD;EAAK,WAAU;EACX,UAAA,oBAAC,WAAD,EAAkB,MAAQ,CAAA;CACzB,CAAA;AAEb;AAEA,SAAS,kBAAkB,EAAE,YAAqC;CAC9D,OACI,oBAAC,MAAD;EAAM,WAAU;EAAoB,MAAK;EACpC;CACC,CAAA;AAEd;AAEA,SAAS,yBAAyB,EAC9B,UACA,OACA,WAKD;CACC,MAAM,KAAK,MAAM;CAEjB,OACI,oBAAC,WAAD;EAAS,mBAAiB;EAAI,WAAU;EACpC,UAAA,oBAAC,YAAD;GAAY,cAAa;GACrB,UAAA,qBAAC,WAAD;IAAS,WAAU;IAAnB,UAAA,CACI,qBAAC,WAAD;KAAS,WAAU;KAAnB,UAAA,CACI,qBAAC,QAAD;MAAM,WAAU;MAAhB,UAAA,CACI,oBAAC,MAAD;OAAM,IAAG;OAAW;OAAI,SAAQ;OAAQ,WAAU;OAC7C,UAAA;MACC,CAAA,GACL,UACG,oBAAC,MAAD;OAAM,IAAG;OAAO,MAAK;OAAQ,SAAQ;OAAU,WAAU;OACpD,UAAA;MACC,CAAA,IACN,IACF;KACN,CAAA,GAAA,oBAAC,QAAD;MACI,eAAY;MACZ,WAAU;MAEV,UAAA,oBAAC,iBAAD,CAAkB,CAAA;KAChB,CAAA,CACD;IACT,CAAA,GAAA,oBAAC,OAAD;KAAK,WAAU;KAAuC;IAAc,CAAA,CAC/D;;EACD,CAAA;CACP,CAAA;AAEjB;AAEA,SAAS,mBAAmB,EACxB,OACA,SACA,QAKD;CACC,OACI,oBAAC,OAAD;EAAK,WAAU;EAAkB,UAAU;EACvC,UAAA,qBAAC,SAAD;GAAO,cAAY;GAAO,WAAU;GAApC,UAAA,CACI,oBAAC,SAAD;IAAO,WAAU;IACb,UAAA,oBAAC,MAAD,EAAA,UACK,QAAQ,KAAK,WACV,oBAAC,MAAD;KAAiB,OAAM;KAAM,WAAU;KAClC,UAAA;IACD,GAFK,MAEL,CACP,EACD,CAAA;GACD,CAAA,GACP,oBAAC,SAAD;IAAO,WAAU;IACZ,UAAA,KAAK,KAAK,QACP,oBAAC,MAAD,EAAA,UACK,IAAI,MAAM,KAAK,MAAM,UAClB,oBAAC,MAAD;KAAgB,WAAU;KACrB,UAAA;IACD,GAFK,KAEL,CACP,EACD,GANK,IAAI,GAMT,CACP;GACE,CAAA,CACJ;;CACN,CAAA;AAEb;AAEA,MAAa,gBAAgB,OAAO,OAAO,mBAAmB;CAC1D,aAAa;CACb,MAAM;CACN,MAAM;CACN,OAAO;CACP,MAAM;AACV,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { SkeletonLoader } from "../feedback/SkeletonLoader.js";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
// src/display/QrCode.tsx
|
|
5
|
+
/** Encodes locally; the value is never sent to a QR service. */
|
|
6
|
+
function QrCode({ label, value }) {
|
|
7
|
+
const [encoded, setEncoded] = useState();
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
let active = true;
|
|
10
|
+
import("qrcode-generator").then(({ default: createQrCode }) => {
|
|
11
|
+
try {
|
|
12
|
+
const code = createQrCode(0, "M");
|
|
13
|
+
code.addData(value, "Byte");
|
|
14
|
+
code.make();
|
|
15
|
+
if (active) setEncoded({
|
|
16
|
+
source: code.createDataURL(4),
|
|
17
|
+
value
|
|
18
|
+
});
|
|
19
|
+
} catch {
|
|
20
|
+
if (active) setEncoded({
|
|
21
|
+
source: null,
|
|
22
|
+
value
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}).catch(() => {
|
|
26
|
+
if (active) setEncoded({
|
|
27
|
+
source: null,
|
|
28
|
+
value
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
return () => {
|
|
32
|
+
active = false;
|
|
33
|
+
};
|
|
34
|
+
}, [value]);
|
|
35
|
+
if (encoded?.value !== value) return /* @__PURE__ */ jsx(SkeletonLoader, {
|
|
36
|
+
label,
|
|
37
|
+
children: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation: "artwork" })
|
|
38
|
+
});
|
|
39
|
+
return encoded.source ? /* @__PURE__ */ jsx("img", {
|
|
40
|
+
alt: label,
|
|
41
|
+
src: encoded.source,
|
|
42
|
+
className: "block w-full max-w-sm rounded-lg bg-white"
|
|
43
|
+
}) : null;
|
|
44
|
+
}
|
|
45
|
+
export { QrCode };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=QrCode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QrCode.js","names":[],"sources":["../../src/display/QrCode.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { SkeletonLoader } from '../feedback/SkeletonLoader';\n\n/** Encodes locally; the value is never sent to a QR service. */\nexport function QrCode({ label, value }: { label: string; value: string }) {\n const [encoded, setEncoded] = useState<{ source: string | null; value: string }>();\n\n useEffect(() => {\n let active = true;\n\n void import('qrcode-generator')\n .then(({ default: createQrCode }) => {\n try {\n const code = createQrCode(0, 'M');\n\n code.addData(value, 'Byte');\n code.make();\n\n if (active) setEncoded({ source: code.createDataURL(4), value });\n } catch {\n // The copyable value remains available if it exceeds QR capacity.\n if (active) setEncoded({ source: null, value });\n }\n })\n .catch(() => {\n // The copyable value remains usable if this optional chunk fails to load.\n if (active) setEncoded({ source: null, value });\n });\n\n return () => {\n active = false;\n };\n }, [value]);\n\n if (encoded?.value !== value) {\n return (\n <SkeletonLoader label={label}>\n <SkeletonLoader.Shape presentation=\"artwork\" />\n </SkeletonLoader>\n );\n }\n\n return encoded.source ? (\n <img alt={label} src={encoded.source} className=\"block w-full max-w-sm rounded-lg bg-white\" />\n ) : null;\n}\n"],"mappings":";;;;;AAKA,SAAgB,OAAO,EAAE,OAAO,SAA2C;CACvE,MAAM,CAAC,SAAS,cAAc,SAAmD;CAEjF,gBAAgB;EACZ,IAAI,SAAS;EAEb,OAAY,mBAAmB,CAC1B,MAAM,EAAE,SAAS,mBAAmB;GACjC,IAAI;IACA,MAAM,OAAO,aAAa,GAAG,GAAG;IAEhC,KAAK,QAAQ,OAAO,MAAM;IAC1B,KAAK,KAAK;IAEV,IAAI,QAAQ,WAAW;KAAE,QAAQ,KAAK,cAAc,CAAC;KAAG;IAAM,CAAC;GACnE,QAAQ;IAEJ,IAAI,QAAQ,WAAW;KAAE,QAAQ;KAAM;IAAM,CAAC;GAClD;EACJ,CAAC,CAAC,CACD,YAAY;GAET,IAAI,QAAQ,WAAW;IAAE,QAAQ;IAAM;GAAM,CAAC;EAClD,CAAC;EAEL,aAAa;GACT,SAAS;EACb;CACJ,GAAG,CAAC,KAAK,CAAC;CAEV,IAAI,SAAS,UAAU,OACnB,OACI,oBAAC,gBAAD;EAAuB;EACnB,UAAA,oBAAC,eAAe,OAAhB,EAAsB,cAAa,UAAW,CAAA;CAClC,CAAA;CAIxB,OAAO,QAAQ,SACX,oBAAC,OAAD;EAAK,KAAK;EAAO,KAAK,QAAQ;EAAQ,WAAU;CAA6C,CAAA,IAC7F;AACR"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
export declare function RadioChoice({ name, checked, onChange, children, trailing }: {
|
|
3
|
+
name: string;
|
|
4
|
+
checked: boolean;
|
|
5
|
+
onChange: () => void;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
trailing?: ReactNode;
|
|
8
|
+
}): import("react").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=RadioChoice.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { tabbable } from "../foundations/KeyboardFocus.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
// src/display/RadioChoice.tsx
|
|
4
|
+
function RadioChoice({ name, checked, onChange, children, trailing }) {
|
|
5
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
6
|
+
className: "hover:bg-base-100 has-checked:bg-primary/10 has-focus-visible:ring-primary flex min-w-0 items-center gap-3 transition-colors has-focus-visible:ring-2 has-focus-visible:ring-inset has-disabled:opacity-60",
|
|
7
|
+
children: [/* @__PURE__ */ jsxs("label", {
|
|
8
|
+
className: "flex min-w-0 flex-1 cursor-pointer items-center gap-3 px-4 py-3 has-disabled:cursor-default",
|
|
9
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
10
|
+
...tabbable,
|
|
11
|
+
type: "radio",
|
|
12
|
+
name,
|
|
13
|
+
checked,
|
|
14
|
+
onChange,
|
|
15
|
+
className: "accent-primary size-4 shrink-0"
|
|
16
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
17
|
+
className: "min-w-0 flex-1",
|
|
18
|
+
children
|
|
19
|
+
})]
|
|
20
|
+
}), trailing ? /* @__PURE__ */ jsx("div", {
|
|
21
|
+
className: "flex shrink-0 items-center gap-3 pr-4",
|
|
22
|
+
children: trailing
|
|
23
|
+
}) : null]
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export { RadioChoice };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=RadioChoice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioChoice.js","names":[],"sources":["../../src/display/RadioChoice.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { tabbable } from '../foundations/KeyboardFocus';\n\nexport function RadioChoice({\n name,\n checked,\n onChange,\n children,\n trailing,\n}: {\n name: string;\n checked: boolean;\n onChange: () => void;\n children: ReactNode;\n trailing?: ReactNode;\n}) {\n return (\n <div className=\"hover:bg-base-100 has-checked:bg-primary/10 has-focus-visible:ring-primary flex min-w-0 items-center gap-3 transition-colors has-focus-visible:ring-2 has-focus-visible:ring-inset has-disabled:opacity-60\">\n <label className=\"flex min-w-0 flex-1 cursor-pointer items-center gap-3 px-4 py-3 has-disabled:cursor-default\">\n <input\n {...tabbable}\n type=\"radio\"\n name={name}\n checked={checked}\n onChange={onChange}\n className=\"accent-primary size-4 shrink-0\"\n />\n <span className=\"min-w-0 flex-1\">{children}</span>\n </label>\n {trailing ? <div className=\"flex shrink-0 items-center gap-3 pr-4\">{trailing}</div> : null}\n </div>\n );\n}\n"],"mappings":";;;AAIA,SAAgB,YAAY,EACxB,MACA,SACA,UACA,UACA,YAOD;CACC,OACI,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACI,qBAAC,SAAD;GAAO,WAAU;GAAjB,UAAA,CACI,oBAAC,SAAD;IACI,GAAI;IACJ,MAAK;IACC;IACG;IACC;IACV,WAAU;GACb,CAAA,GACD,oBAAC,QAAD;IAAM,WAAU;IAAkB;GAAe,CAAA,CAC9C;EACN,CAAA,GAAA,WAAW,oBAAC,OAAD;GAAK,WAAU;GAAyC,UAAA;EAAc,CAAA,IAAI,IACrF;;AAEb"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** A provider's mark and its score, linked to the original rating. */
|
|
2
|
+
export declare function RatingLink({ source, value, scale, href }: {
|
|
3
|
+
source: string;
|
|
4
|
+
/** The score as it reads, such as "6.5" or "57%". */
|
|
5
|
+
value: string;
|
|
6
|
+
/** The scale shown after the score, such as "/ 10"; none for percentages. */
|
|
7
|
+
scale?: string;
|
|
8
|
+
href: string;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=RatingLink.d.ts.map
|