@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,83 @@
|
|
|
1
|
+
import { useDesignSystemLabels } from "../foundations/DesignSystemProvider.js";
|
|
2
|
+
import { tabbable } from "../foundations/KeyboardFocus.js";
|
|
3
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
import { ChevronDownIcon, ChevronRightIcon } from "lucide-react";
|
|
5
|
+
// src/layout/TitleBar.tsx
|
|
6
|
+
/** T3 Code's 52px title bar: the brand and where you are on the left, tools on the right. Its own width,
|
|
7
|
+
* not the window's, decides when search folds to an icon; narrow screens close the gaps so the title keeps
|
|
8
|
+
* the room left. */
|
|
9
|
+
function TitleBar({ actions, brand, search, title }) {
|
|
10
|
+
const labels = useDesignSystemLabels();
|
|
11
|
+
return /* @__PURE__ */ jsxs("header", {
|
|
12
|
+
"aria-label": labels.toolbar,
|
|
13
|
+
className: "@container relative flex h-13 min-w-0 items-center gap-1 px-3 sm:gap-2 sm:px-4",
|
|
14
|
+
children: [
|
|
15
|
+
/* @__PURE__ */ jsx("div", {
|
|
16
|
+
className: "[&_a]:focus-visible:ring-primary flex shrink-0 items-center [&_a]:rounded-sm [&_a]:outline-none [&_a]:focus-visible:ring-2",
|
|
17
|
+
children: brand
|
|
18
|
+
}),
|
|
19
|
+
/* @__PURE__ */ jsx("span", {
|
|
20
|
+
"aria-hidden": "true",
|
|
21
|
+
className: "bg-base-300 mx-1 h-5 w-px shrink-0 max-sm:hidden"
|
|
22
|
+
}),
|
|
23
|
+
/* @__PURE__ */ jsx("div", {
|
|
24
|
+
className: "flex min-w-0 flex-1 items-center gap-1",
|
|
25
|
+
children: title
|
|
26
|
+
}),
|
|
27
|
+
search ? /* @__PURE__ */ jsx("div", {
|
|
28
|
+
className: "flex shrink-0",
|
|
29
|
+
children: search
|
|
30
|
+
}) : null,
|
|
31
|
+
actions ? /* @__PURE__ */ jsx("div", {
|
|
32
|
+
className: "flex shrink-0 items-center gap-1.5",
|
|
33
|
+
children: actions
|
|
34
|
+
}) : null
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/** The title bar's location, T3's "project / thread": each step muted and chevron-separated, the current one
|
|
39
|
+
* in the foreground. Steps that switch somewhere are buttons with a chevron. Narrow screens show only the
|
|
40
|
+
* current step. */
|
|
41
|
+
function TitleBarTrail({ items }) {
|
|
42
|
+
return /* @__PURE__ */ jsx("ol", {
|
|
43
|
+
className: "flex min-w-0 items-center gap-0.5 text-sm",
|
|
44
|
+
children: items.map((item, index) => {
|
|
45
|
+
const last = index === items.length - 1;
|
|
46
|
+
const content = /* @__PURE__ */ jsxs(Fragment, { children: [item.icon ? /* @__PURE__ */ jsx("span", {
|
|
47
|
+
className: "text-base-700 flex shrink-0 [&_svg]:size-4",
|
|
48
|
+
children: item.icon
|
|
49
|
+
}) : null, /* @__PURE__ */ jsx("span", {
|
|
50
|
+
className: "truncate",
|
|
51
|
+
children: item.label
|
|
52
|
+
})] });
|
|
53
|
+
return /* @__PURE__ */ jsxs("li", {
|
|
54
|
+
"aria-current": last ? "page" : void 0,
|
|
55
|
+
className: `flex min-w-0 items-center gap-0.5 ${last ? "text-base-content font-medium" : "text-base-700 hidden shrink-0 sm:flex"}`,
|
|
56
|
+
children: [index > 0 ? /* @__PURE__ */ jsx("span", {
|
|
57
|
+
"aria-hidden": "true",
|
|
58
|
+
className: "text-base-500 flex shrink-0 [&>svg]:size-3.5",
|
|
59
|
+
children: /* @__PURE__ */ jsx(ChevronRightIcon, {})
|
|
60
|
+
}) : null, item.onSelect ? /* @__PURE__ */ jsxs("button", {
|
|
61
|
+
...tabbable,
|
|
62
|
+
type: "button",
|
|
63
|
+
"aria-haspopup": "dialog",
|
|
64
|
+
"aria-description": item.selectLabel,
|
|
65
|
+
title: item.selectLabel,
|
|
66
|
+
onClick: item.onSelect,
|
|
67
|
+
className: "hover:bg-base-200 hover:text-base-content focus-visible:outline-primary dark:hover:bg-base-300 flex h-7 min-w-0 items-center gap-2 rounded-lg px-2 transition-colors focus-visible:outline-2",
|
|
68
|
+
children: [content, /* @__PURE__ */ jsx("span", {
|
|
69
|
+
"aria-hidden": "true",
|
|
70
|
+
className: "text-base-500 flex shrink-0 [&>svg]:size-3.5",
|
|
71
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
|
|
72
|
+
})]
|
|
73
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
74
|
+
className: "flex min-w-0 items-center gap-2 px-2",
|
|
75
|
+
children: content
|
|
76
|
+
})]
|
|
77
|
+
}, item.key);
|
|
78
|
+
})
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
export { TitleBar, TitleBarTrail };
|
|
82
|
+
|
|
83
|
+
//# sourceMappingURL=TitleBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TitleBar.js","names":[],"sources":["../../src/layout/TitleBar.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronRightIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { useDesignSystemLabels } from '../foundations/DesignSystemProvider';\nimport { tabbable } from '../foundations/KeyboardFocus';\n\ninterface TitleBarProps {\n actions?: ReactNode;\n /** The brand, a link home, before a divider and the title. */\n brand: ReactNode;\n search?: ReactNode;\n title: ReactNode;\n}\n\n/** T3 Code's 52px title bar: the brand and where you are on the left, tools on the right. Its own width,\n * not the window's, decides when search folds to an icon; narrow screens close the gaps so the title keeps\n * the room left. */\nexport function TitleBar({ actions, brand, search, title }: TitleBarProps) {\n const labels = useDesignSystemLabels();\n\n return (\n <header\n aria-label={labels.toolbar}\n className=\"@container relative flex h-13 min-w-0 items-center gap-1 px-3 sm:gap-2 sm:px-4\"\n >\n <div className=\"[&_a]:focus-visible:ring-primary flex shrink-0 items-center [&_a]:rounded-sm [&_a]:outline-none [&_a]:focus-visible:ring-2\">\n {brand}\n </div>\n <span aria-hidden=\"true\" className=\"bg-base-300 mx-1 h-5 w-px shrink-0 max-sm:hidden\" />\n <div className=\"flex min-w-0 flex-1 items-center gap-1\">{title}</div>\n {search ? <div className=\"flex shrink-0\">{search}</div> : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1.5\">{actions}</div> : null}\n </header>\n );\n}\n\nexport interface TitleBarTrailItem {\n key: string;\n icon?: ReactNode;\n label: string;\n /** Makes the step a button, such as one switching to its siblings; `selectLabel` says where it leads. */\n onSelect?: () => void;\n selectLabel?: string;\n}\n\n/** The title bar's location, T3's \"project / thread\": each step muted and chevron-separated, the current one\n * in the foreground. Steps that switch somewhere are buttons with a chevron. Narrow screens show only the\n * current step. */\nexport function TitleBarTrail({ items }: { items: readonly TitleBarTrailItem[] }) {\n return (\n <ol className=\"flex min-w-0 items-center gap-0.5 text-sm\">\n {items.map((item, index) => {\n const last = index === items.length - 1;\n const content = (\n <>\n {item.icon ? (\n <span className=\"text-base-700 flex shrink-0 [&_svg]:size-4\">{item.icon}</span>\n ) : null}\n <span className=\"truncate\">{item.label}</span>\n </>\n );\n\n return (\n <li\n key={item.key}\n aria-current={last ? 'page' : undefined}\n className={`flex min-w-0 items-center gap-0.5 ${last ? 'text-base-content font-medium' : 'text-base-700 hidden shrink-0 sm:flex'}`}\n >\n {index > 0 ? (\n <span aria-hidden=\"true\" className=\"text-base-500 flex shrink-0 [&>svg]:size-3.5\">\n <ChevronRightIcon />\n </span>\n ) : null}\n {item.onSelect ? (\n <button\n {...tabbable}\n type=\"button\"\n aria-haspopup=\"dialog\"\n aria-description={item.selectLabel}\n title={item.selectLabel}\n onClick={item.onSelect}\n className=\"hover:bg-base-200 hover:text-base-content focus-visible:outline-primary dark:hover:bg-base-300 flex h-7 min-w-0 items-center gap-2 rounded-lg px-2 transition-colors focus-visible:outline-2\"\n >\n {content}\n <span aria-hidden=\"true\" className=\"text-base-500 flex shrink-0 [&>svg]:size-3.5\">\n <ChevronDownIcon />\n </span>\n </button>\n ) : (\n <span className=\"flex min-w-0 items-center gap-2 px-2\">{content}</span>\n )}\n </li>\n );\n })}\n </ol>\n );\n}\n"],"mappings":";;;;;;;;AAiBA,SAAgB,SAAS,EAAE,SAAS,OAAO,QAAQ,SAAwB;CACvE,MAAM,SAAS,sBAAsB;CAErC,OACI,qBAAC,UAAD;EACI,cAAY,OAAO;EACnB,WAAU;EAFd,UAAA;GAII,oBAAC,OAAD;IAAK,WAAU;IACV,UAAA;GACA,CAAA;GACL,oBAAC,QAAD;IAAM,eAAY;IAAO,WAAU;GAAoD,CAAA;GACvF,oBAAC,OAAD;IAAK,WAAU;IAA0C,UAAA;GAAW,CAAA;GACnE,SAAS,oBAAC,OAAD;IAAK,WAAU;IAAiB,UAAA;GAAY,CAAA,IAAI;GACzD,UAAU,oBAAC,OAAD;IAAK,WAAU;IAAsC,UAAA;GAAa,CAAA,IAAI;EAC7E;;AAEhB;;;;AAcA,SAAgB,cAAc,EAAE,SAAkD;CAC9E,OACI,oBAAC,MAAD;EAAI,WAAU;EACT,UAAA,MAAM,KAAK,MAAM,UAAU;GACxB,MAAM,OAAO,UAAU,MAAM,SAAS;GACtC,MAAM,UACF,qBAAA,UAAA,EAAA,UAAA,CACK,KAAK,OACF,oBAAC,QAAD;IAAM,WAAU;IAA8C,UAAA,KAAK;GAAW,CAAA,IAC9E,MACJ,oBAAC,QAAD;IAAM,WAAU;IAAY,UAAA,KAAK;GAAY,CAAA,CAC/C,EAAA,CAAA;GAGN,OACI,qBAAC,MAAD;IAEI,gBAAc,OAAO,SAAS,KAAA;IAC9B,WAAW,qCAAqC,OAAO,kCAAkC;IAH7F,UAAA,CAKK,QAAQ,IACL,oBAAC,QAAD;KAAM,eAAY;KAAO,WAAU;KAC/B,UAAA,oBAAC,kBAAD,CAAmB,CAAA;IACjB,CAAA,IACN,MACH,KAAK,WACF,qBAAC,UAAD;KACI,GAAI;KACJ,MAAK;KACL,iBAAc;KACd,oBAAkB,KAAK;KACvB,OAAO,KAAK;KACZ,SAAS,KAAK;KACd,WAAU;KAPd,UAAA,CASK,SACD,oBAAC,QAAD;MAAM,eAAY;MAAO,WAAU;MAC/B,UAAA,oBAAC,iBAAD,CAAkB,CAAA;KAChB,CAAA,CACF;IAER,CAAA,IAAA,oBAAC,QAAD;KAAM,WAAU;KAAwC,UAAA;IAAc,CAAA,CAE1E;GA3BK,GAAA,KAAK,GA2BV;EAEZ,CAAC;CACD,CAAA;AAEZ"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
interface WorkspaceActionsHeaderProps {
|
|
3
|
+
children?: ReactNode;
|
|
4
|
+
leading?: ReactNode;
|
|
5
|
+
}
|
|
6
|
+
export declare function WorkspaceActionsHeader({ children, leading }: WorkspaceActionsHeaderProps): import("react").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=WorkspaceActionsHeader.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ContentContainer } from "./ContentContainer.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
// src/layout/WorkspaceActionsHeader.tsx
|
|
4
|
+
function WorkspaceActionsHeader({ children, leading }) {
|
|
5
|
+
return /* @__PURE__ */ jsxs(ContentContainer, {
|
|
6
|
+
className: "bg-base-50 z-40 flex h-14 shrink-0 items-center gap-2 sm:gap-3",
|
|
7
|
+
children: [leading ? /* @__PURE__ */ jsx("div", {
|
|
8
|
+
className: "flex min-w-0 flex-1 items-center gap-1",
|
|
9
|
+
children: leading
|
|
10
|
+
}) : null, children ? /* @__PURE__ */ jsx("div", {
|
|
11
|
+
className: "ml-auto shrink-0",
|
|
12
|
+
children
|
|
13
|
+
}) : null]
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export { WorkspaceActionsHeader };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=WorkspaceActionsHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspaceActionsHeader.js","names":[],"sources":["../../src/layout/WorkspaceActionsHeader.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { ContentContainer } from './ContentContainer';\n\ninterface WorkspaceActionsHeaderProps {\n children?: ReactNode;\n leading?: ReactNode;\n}\n\nexport function WorkspaceActionsHeader({ children, leading }: WorkspaceActionsHeaderProps) {\n return (\n <ContentContainer className=\"bg-base-50 z-40 flex h-14 shrink-0 items-center gap-2 sm:gap-3\">\n {leading ? <div className=\"flex min-w-0 flex-1 items-center gap-1\">{leading}</div> : null}\n {children ? <div className=\"ml-auto shrink-0\">{children}</div> : null}\n </ContentContainer>\n );\n}\n"],"mappings":";;;AASA,SAAgB,uBAAuB,EAAE,UAAU,WAAwC;CACvF,OACI,qBAAC,kBAAD;EAAkB,WAAU;EAA5B,UAAA,CACK,UAAU,oBAAC,OAAD;GAAK,WAAU;GAA0C,UAAA;EAAa,CAAA,IAAI,MACpF,WAAW,oBAAC,OAAD;GAAK,WAAU;GAAoB;EAAc,CAAA,IAAI,IACnD;;AAE1B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AppShell } from "./AppShell.js";
|
|
2
|
+
import { AuthLayout } from "./AuthLayout.js";
|
|
3
|
+
import { FlowSpace, Grid as Grid$1, Inline, Stack as Stack$1, StackProps as StackProps$1 } from "./Flow.js";
|
|
4
|
+
import { PageLayout } from "./PageLayout.js";
|
|
5
|
+
import { ScrollArea, ScrollAreaProps } from "./ScrollArea.js";
|
|
6
|
+
import { Section } from "./Section.js";
|
|
7
|
+
import { SidebarNavigationItem } from "./sidebar/SidebarNavigationItem.js";
|
|
8
|
+
import { SidebarNavigationGroup, SidebarPane } from "./sidebar/SidebarPane.js";
|
|
9
|
+
import { TitleBar, TitleBarTrail, TitleBarTrailItem } from "./TitleBar.js";
|
|
10
|
+
import { CommandPaletteTrigger } from "./toolbar/CommandPaletteTrigger.js";
|
|
11
|
+
import { ToolbarStatusGroup } from "./toolbar/ToolbarStatusGroup.js";
|
|
12
|
+
import { ToolbarStatusItem } from "./toolbar/ToolbarStatusItem.js";
|
|
13
|
+
import { WorkspaceActionsHeader } from "./WorkspaceActionsHeader.js";
|
|
14
|
+
import { ContentContainer } from "./ContentContainer.js";
|
|
15
|
+
import { Eyebrow, PageSection, SectionHeading } from "./PageSection.js";
|
|
16
|
+
import { SiteFooter, SiteHeader, SiteLink, SiteShell } from "./Site.js";
|
|
17
|
+
import { Divider } from "@ninna-ui/primitives";
|
|
18
|
+
import { Box as Box$1 } from "@ninna-ui/layout";
|
|
19
|
+
export { AppShell, AuthLayout, Box$1 as Box, CommandPaletteTrigger, ContentContainer, Divider, Eyebrow, type FlowSpace, Grid$1 as Grid, Inline, PageLayout, PageSection, ScrollArea, type ScrollAreaProps, Section, SectionHeading, SidebarNavigationGroup, SidebarNavigationItem, SidebarPane, SiteFooter, SiteHeader, type SiteLink, SiteShell, Stack$1 as Stack, type StackProps$1 as StackProps, TitleBar, TitleBarTrail, type TitleBarTrailItem, ToolbarStatusGroup, ToolbarStatusItem, WorkspaceActionsHeader };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Grid as Grid$1, Inline, Stack as Stack$1 } from "./Flow.js";
|
|
2
|
+
import { AppShell } from "./AppShell.js";
|
|
3
|
+
import { AuthLayout } from "./AuthLayout.js";
|
|
4
|
+
import { ContentContainer } from "./ContentContainer.js";
|
|
5
|
+
import { PageLayout } from "./PageLayout.js";
|
|
6
|
+
import { ScrollArea } from "./ScrollArea.js";
|
|
7
|
+
import { Section } from "./Section.js";
|
|
8
|
+
import { SidebarNavigationItem } from "./sidebar/SidebarNavigationItem.js";
|
|
9
|
+
import { SidebarNavigationGroup, SidebarPane } from "./sidebar/SidebarPane.js";
|
|
10
|
+
import { TitleBar, TitleBarTrail } from "./TitleBar.js";
|
|
11
|
+
import { CommandPaletteTrigger } from "./toolbar/CommandPaletteTrigger.js";
|
|
12
|
+
import { ToolbarStatusGroup } from "./toolbar/ToolbarStatusGroup.js";
|
|
13
|
+
import { ToolbarStatusItem } from "./toolbar/ToolbarStatusItem.js";
|
|
14
|
+
import { WorkspaceActionsHeader } from "./WorkspaceActionsHeader.js";
|
|
15
|
+
import { Eyebrow, PageSection, SectionHeading } from "./PageSection.js";
|
|
16
|
+
import { SiteFooter, SiteHeader, SiteShell } from "./Site.js";
|
|
17
|
+
import { Divider } from "@ninna-ui/primitives";
|
|
18
|
+
import { Box as Box$1 } from "@ninna-ui/layout";
|
|
19
|
+
export { AppShell, AuthLayout, Box$1 as Box, CommandPaletteTrigger, ContentContainer, Divider, Eyebrow, Grid$1 as Grid, Inline, PageLayout, PageSection, ScrollArea, Section, SectionHeading, SidebarNavigationGroup, SidebarNavigationItem, SidebarPane, SiteFooter, SiteHeader, SiteShell, Stack$1 as Stack, TitleBar, TitleBarTrail, ToolbarStatusGroup, ToolbarStatusItem, WorkspaceActionsHeader };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef } from "react";
|
|
2
|
+
type SidebarNavigationItemProps = Omit<ComponentPropsWithoutRef<'button'>, 'className' | 'style' | 'type'> & {
|
|
3
|
+
active?: boolean;
|
|
4
|
+
/** Styles its only child, such as a router link, instead of wrapping it in a second tab stop. */
|
|
5
|
+
asChild?: boolean;
|
|
6
|
+
notification?: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function SidebarNavigationItem({ active, asChild, children, notification, ...props }: SidebarNavigationItemProps): import("react").JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=SidebarNavigationItem.d.ts.map
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { StatusIndicator } from "../../feedback/StatusIndicator.js";
|
|
2
|
+
import { tabbable } from "../../foundations/KeyboardFocus.js";
|
|
3
|
+
import { cloneElement, isValidElement, useEffect, useRef } from "react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
// src/layout/sidebar/SidebarNavigationItem.tsx
|
|
6
|
+
function SidebarNavigationItem({ active = false, asChild = false, children, notification, ...props }) {
|
|
7
|
+
const target = useRef(null);
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
if (active) target.current?.scrollIntoView?.({
|
|
10
|
+
block: "nearest",
|
|
11
|
+
inline: "nearest"
|
|
12
|
+
});
|
|
13
|
+
}, [active]);
|
|
14
|
+
const item = {
|
|
15
|
+
...tabbable,
|
|
16
|
+
"aria-current": active ? "page" : void 0,
|
|
17
|
+
"aria-description": notification,
|
|
18
|
+
className: `flex h-8 shrink-0 items-center gap-2 rounded-md px-2 text-sm transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary [&>svg]:size-4 ${active ? "bg-base-200 font-medium text-base-content dark:bg-base-300 [&>svg]:text-base-content" : "text-base-content/80 hover:bg-base-200/70 hover:text-base-content [&>svg]:text-base-700"}`
|
|
19
|
+
};
|
|
20
|
+
const indicator = notification ? /* @__PURE__ */ jsx(StatusIndicator, {
|
|
21
|
+
tone: "warning",
|
|
22
|
+
size: "sm",
|
|
23
|
+
className: "ml-auto"
|
|
24
|
+
}) : null;
|
|
25
|
+
if (asChild && isValidElement(children)) return cloneElement(children, item, children.props.children, indicator);
|
|
26
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
27
|
+
ref: target,
|
|
28
|
+
...props,
|
|
29
|
+
...item,
|
|
30
|
+
type: "button",
|
|
31
|
+
children: [children, indicator]
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export { SidebarNavigationItem };
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=SidebarNavigationItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarNavigationItem.js","names":[],"sources":["../../../src/layout/sidebar/SidebarNavigationItem.tsx"],"sourcesContent":["import { cloneElement, type ComponentPropsWithoutRef, isValidElement, useEffect, useRef } from 'react';\n\nimport { StatusIndicator } from '../../feedback/StatusIndicator';\nimport { tabbable } from '../../foundations/KeyboardFocus';\n\ntype SidebarNavigationItemProps = Omit<ComponentPropsWithoutRef<'button'>, 'className' | 'style' | 'type'> & {\n active?: boolean;\n /** Styles its only child, such as a router link, instead of wrapping it in a second tab stop. */\n asChild?: boolean;\n notification?: string;\n};\n\nexport function SidebarNavigationItem({\n active = false,\n asChild = false,\n children,\n notification,\n ...props\n}: SidebarNavigationItemProps) {\n const target = useRef<HTMLButtonElement | null>(null);\n\n useEffect(() => {\n if (active) target.current?.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n }, [active]);\n\n const item = {\n ...tabbable,\n 'aria-current': active ? ('page' as const) : undefined,\n 'aria-description': notification,\n className: `flex h-8 shrink-0 items-center gap-2 rounded-md px-2 text-sm transition-colors focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-primary [&>svg]:size-4 ${active ? 'bg-base-200 font-medium text-base-content dark:bg-base-300 [&>svg]:text-base-content' : 'text-base-content/80 hover:bg-base-200/70 hover:text-base-content [&>svg]:text-base-700'}`,\n };\n\n const indicator = notification ? <StatusIndicator tone=\"warning\" size=\"sm\" className=\"ml-auto\" /> : null;\n\n if (asChild && isValidElement<ComponentPropsWithoutRef<'button'>>(children)) {\n return cloneElement(children, item, children.props.children, indicator);\n }\n\n return (\n <button ref={target} {...props} {...item} type=\"button\">\n {children}\n {indicator}\n </button>\n );\n}\n"],"mappings":";;;;;AAYA,SAAgB,sBAAsB,EAClC,SAAS,OACT,UAAU,OACV,UACA,cACA,GAAG,SACwB;CAC3B,MAAM,SAAS,OAAiC,IAAI;CAEpD,gBAAgB;EACZ,IAAI,QAAQ,OAAO,SAAS,iBAAiB;GAAE,OAAO;GAAW,QAAQ;EAAU,CAAC;CACxF,GAAG,CAAC,MAAM,CAAC;CAEX,MAAM,OAAO;EACT,GAAG;EACH,gBAAgB,SAAU,SAAmB,KAAA;EAC7C,oBAAoB;EACpB,WAAW,uLAAuL,SAAS,yFAAyF;CACxS;CAEA,MAAM,YAAY,eAAe,oBAAC,iBAAD;EAAiB,MAAK;EAAU,MAAK;EAAK,WAAU;CAAW,CAAA,IAAI;CAEpG,IAAI,WAAW,eAAmD,QAAQ,GACtE,OAAO,aAAa,UAAU,MAAM,SAAS,MAAM,UAAU,SAAS;CAG1E,OACI,qBAAC,UAAD;EAAQ,KAAK;EAAQ,GAAI;EAAO,GAAI;EAAM,MAAK;EAA/C,UAAA,CACK,UACA,SACG;;AAEhB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
interface SidebarPaneProps {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function SidebarPane({ children, label }: SidebarPaneProps): import("react").JSX.Element;
|
|
7
|
+
interface SidebarNavigationGroupProps {
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
label: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function SidebarNavigationGroup({ children, label }: SidebarNavigationGroupProps): import("react").JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=SidebarPane.d.ts.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Text } from "../../typography/Typography.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
// src/layout/sidebar/SidebarPane.tsx
|
|
4
|
+
function SidebarPane({ children, label }) {
|
|
5
|
+
return /* @__PURE__ */ jsx("aside", {
|
|
6
|
+
className: "border-base-300 bg-base-100/40 w-full border-y md:h-full md:border-y-0 md:border-r dark:bg-black/20",
|
|
7
|
+
children: /* @__PURE__ */ jsx("nav", {
|
|
8
|
+
"aria-label": label,
|
|
9
|
+
className: "flex items-center gap-1 overflow-x-auto overscroll-contain p-3 md:h-full md:flex-col md:items-stretch md:gap-1 md:overflow-y-auto md:px-3 md:py-4",
|
|
10
|
+
children
|
|
11
|
+
})
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function SidebarNavigationGroup({ children, label }) {
|
|
15
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
16
|
+
role: "group",
|
|
17
|
+
"aria-label": label,
|
|
18
|
+
className: "flex shrink-0 gap-1 md:mb-4 md:flex-col md:last:mb-0",
|
|
19
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
20
|
+
as: "span",
|
|
21
|
+
className: "hidden h-7 px-2 leading-7 font-medium md:block",
|
|
22
|
+
variant: "caption",
|
|
23
|
+
tone: "muted",
|
|
24
|
+
children: label
|
|
25
|
+
}), children]
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
export { SidebarNavigationGroup, SidebarPane };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=SidebarPane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarPane.js","names":[],"sources":["../../../src/layout/sidebar/SidebarPane.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Text } from '../../typography/Typography';\n\ninterface SidebarPaneProps {\n children: ReactNode;\n label: string;\n}\n\nexport function SidebarPane({ children, label }: SidebarPaneProps) {\n return (\n <aside className=\"border-base-300 bg-base-100/40 w-full border-y md:h-full md:border-y-0 md:border-r dark:bg-black/20\">\n <nav\n aria-label={label}\n className=\"flex items-center gap-1 overflow-x-auto overscroll-contain p-3 md:h-full md:flex-col md:items-stretch md:gap-1 md:overflow-y-auto md:px-3 md:py-4\"\n >\n {children}\n </nav>\n </aside>\n );\n}\n\ninterface SidebarNavigationGroupProps {\n children: ReactNode;\n label: string;\n}\n\nexport function SidebarNavigationGroup({ children, label }: SidebarNavigationGroupProps) {\n return (\n <div role=\"group\" aria-label={label} className=\"flex shrink-0 gap-1 md:mb-4 md:flex-col md:last:mb-0\">\n <Text as=\"span\" className=\"hidden h-7 px-2 leading-7 font-medium md:block\" variant=\"caption\" tone=\"muted\">\n {label}\n </Text>\n {children}\n </div>\n );\n}\n"],"mappings":";;;AASA,SAAgB,YAAY,EAAE,UAAU,SAA2B;CAC/D,OACI,oBAAC,SAAD;EAAO,WAAU;EACb,UAAA,oBAAC,OAAD;GACI,cAAY;GACZ,WAAU;GAET;EACA,CAAA;CACF,CAAA;AAEf;AAOA,SAAgB,uBAAuB,EAAE,UAAU,SAAsC;CACrF,OACI,qBAAC,OAAD;EAAK,MAAK;EAAQ,cAAY;EAAO,WAAU;EAA/C,UAAA,CACI,oBAAC,MAAD;GAAM,IAAG;GAAO,WAAU;GAAiD,SAAQ;GAAU,MAAK;GAC7F,UAAA;EACC,CAAA,GACL,QACA;;AAEb"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface CommandPaletteTriggerProps {
|
|
2
|
+
label: string;
|
|
3
|
+
onOpen: () => void;
|
|
4
|
+
/** Key that opens the palette from anywhere, pressed with ⌘ on Apple devices and Ctrl elsewhere. */
|
|
5
|
+
shortcut: string;
|
|
6
|
+
}
|
|
7
|
+
/** The title bar's way into the command palette: a quiet field-like button with its shortcut, folding to its
|
|
8
|
+
* icon when the title bar is narrow. */
|
|
9
|
+
export declare function CommandPaletteTrigger({ label, onOpen, shortcut }: CommandPaletteTriggerProps): import("react").JSX.Element;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=CommandPaletteTrigger.d.ts.map
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Kbd } from "../../display/Kbd.js";
|
|
2
|
+
import { tabbable } from "../../foundations/KeyboardFocus.js";
|
|
3
|
+
import { applePlatform, isShortcut } from "../../foundations/KeyboardShortcut.js";
|
|
4
|
+
import { useEffect, useEffectEvent, useRef } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { SearchIcon } from "lucide-react";
|
|
7
|
+
// src/layout/toolbar/CommandPaletteTrigger.tsx
|
|
8
|
+
/** The title bar's way into the command palette: a quiet field-like button with its shortcut, folding to its
|
|
9
|
+
* icon when the title bar is narrow. */
|
|
10
|
+
function CommandPaletteTrigger({ label, onOpen, shortcut }) {
|
|
11
|
+
const button = useRef(null);
|
|
12
|
+
const openFromShortcut = useEffectEvent((event) => {
|
|
13
|
+
if (!isShortcut(event, shortcut) || button.current?.closest("[aria-hidden=\"true\"]")) return;
|
|
14
|
+
event.preventDefault();
|
|
15
|
+
onOpen();
|
|
16
|
+
});
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
const listener = (event) => openFromShortcut(event);
|
|
19
|
+
document.addEventListener("keydown", listener);
|
|
20
|
+
return () => document.removeEventListener("keydown", listener);
|
|
21
|
+
}, []);
|
|
22
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
23
|
+
...tabbable,
|
|
24
|
+
ref: button,
|
|
25
|
+
type: "button",
|
|
26
|
+
"aria-label": label,
|
|
27
|
+
"aria-haspopup": "dialog",
|
|
28
|
+
"aria-keyshortcuts": `${applePlatform ? "Meta" : "Control"}+${shortcut.toUpperCase()}`,
|
|
29
|
+
onClick: onOpen,
|
|
30
|
+
className: "text-base-600 hover:bg-base-200 hover:text-base-content focus-visible:outline-primary @2xl:border-base-300 @2xl:bg-base-100 @2xl:hover:border-base-400 @2xl:hover:bg-base-100 dark:@2xl:bg-base-200 flex size-7 items-center justify-center gap-2 rounded-lg text-sm transition-colors focus-visible:outline-2 @2xl:w-56 @2xl:justify-start @2xl:border @2xl:px-2.5 [&>svg]:size-4 [&>svg]:shrink-0",
|
|
31
|
+
children: [
|
|
32
|
+
/* @__PURE__ */ jsx(SearchIcon, {}),
|
|
33
|
+
/* @__PURE__ */ jsx("span", {
|
|
34
|
+
className: "hidden flex-1 text-left @2xl:inline",
|
|
35
|
+
children: label
|
|
36
|
+
}),
|
|
37
|
+
/* @__PURE__ */ jsx("span", {
|
|
38
|
+
className: "hidden pointer-fine:@2xl:inline",
|
|
39
|
+
children: /* @__PURE__ */ jsx(Kbd, { children: applePlatform ? `⌘${shortcut.toUpperCase()}` : `Ctrl ${shortcut.toUpperCase()}` })
|
|
40
|
+
})
|
|
41
|
+
]
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
export { CommandPaletteTrigger };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=CommandPaletteTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandPaletteTrigger.js","names":[],"sources":["../../../src/layout/toolbar/CommandPaletteTrigger.tsx"],"sourcesContent":["import { SearchIcon } from 'lucide-react';\nimport { useEffect, useEffectEvent, useRef } from 'react';\n\nimport { Kbd } from '../../display/Kbd';\nimport { tabbable } from '../../foundations/KeyboardFocus';\nimport { applePlatform, isShortcut } from '../../foundations/KeyboardShortcut';\n\ninterface CommandPaletteTriggerProps {\n label: string;\n onOpen: () => void;\n /** Key that opens the palette from anywhere, pressed with ⌘ on Apple devices and Ctrl elsewhere. */\n shortcut: string;\n}\n\n/** The title bar's way into the command palette: a quiet field-like button with its shortcut, folding to its\n * icon when the title bar is narrow. */\nexport function CommandPaletteTrigger({ label, onOpen, shortcut }: CommandPaletteTriggerProps) {\n const button = useRef<HTMLButtonElement>(null);\n const openFromShortcut = useEffectEvent((event: KeyboardEvent) => {\n // An open dialog hides the page behind it, the trigger included.\n if (!isShortcut(event, shortcut) || button.current?.closest('[aria-hidden=\"true\"]')) return;\n\n event.preventDefault();\n onOpen();\n });\n\n useEffect(() => {\n const listener = (event: KeyboardEvent) => openFromShortcut(event);\n\n document.addEventListener('keydown', listener);\n\n return () => document.removeEventListener('keydown', listener);\n }, []);\n\n return (\n <button\n {...tabbable}\n ref={button}\n type=\"button\"\n aria-label={label}\n aria-haspopup=\"dialog\"\n aria-keyshortcuts={`${applePlatform ? 'Meta' : 'Control'}+${shortcut.toUpperCase()}`}\n onClick={onOpen}\n className=\"text-base-600 hover:bg-base-200 hover:text-base-content focus-visible:outline-primary @2xl:border-base-300 @2xl:bg-base-100 @2xl:hover:border-base-400 @2xl:hover:bg-base-100 dark:@2xl:bg-base-200 flex size-7 items-center justify-center gap-2 rounded-lg text-sm transition-colors focus-visible:outline-2 @2xl:w-56 @2xl:justify-start @2xl:border @2xl:px-2.5 [&>svg]:size-4 [&>svg]:shrink-0\"\n >\n <SearchIcon />\n <span className=\"hidden flex-1 text-left @2xl:inline\">{label}</span>\n <span className=\"hidden pointer-fine:@2xl:inline\">\n <Kbd>{applePlatform ? `⌘${shortcut.toUpperCase()}` : `Ctrl ${shortcut.toUpperCase()}`}</Kbd>\n </span>\n </button>\n );\n}\n"],"mappings":";;;;;;;;;AAgBA,SAAgB,sBAAsB,EAAE,OAAO,QAAQ,YAAwC;CAC3F,MAAM,SAAS,OAA0B,IAAI;CAC7C,MAAM,mBAAmB,gBAAgB,UAAyB;EAE9D,IAAI,CAAC,WAAW,OAAO,QAAQ,KAAK,OAAO,SAAS,QAAQ,wBAAsB,GAAG;EAErF,MAAM,eAAe;EACrB,OAAO;CACX,CAAC;CAED,gBAAgB;EACZ,MAAM,YAAY,UAAyB,iBAAiB,KAAK;EAEjE,SAAS,iBAAiB,WAAW,QAAQ;EAE7C,aAAa,SAAS,oBAAoB,WAAW,QAAQ;CACjE,GAAG,CAAC,CAAC;CAEL,OACI,qBAAC,UAAD;EACI,GAAI;EACJ,KAAK;EACL,MAAK;EACL,cAAY;EACZ,iBAAc;EACd,qBAAmB,GAAG,gBAAgB,SAAS,UAAU,GAAG,SAAS,YAAY;EACjF,SAAS;EACT,WAAU;EARd,UAAA;GAUI,oBAAC,YAAD,CAAa,CAAA;GACb,oBAAC,QAAD;IAAM,WAAU;IAAuC,UAAA;GAAY,CAAA;GACnE,oBAAC,QAAD;IAAM,WAAU;IACZ,UAAA,oBAAC,KAAD,EAAA,UAAM,gBAAgB,IAAI,SAAS,YAAY,MAAM,QAAQ,SAAS,YAAY,IAAS,CAAA;GACzF,CAAA;EACF;;AAEhB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { HTMLAttributes } from "react";
|
|
2
|
+
type ToolbarStatusGroupProps = Omit<HTMLAttributes<HTMLDivElement>, 'className'>;
|
|
3
|
+
export declare function ToolbarStatusGroup(props: ToolbarStatusGroupProps): import("react").JSX.Element;
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=ToolbarStatusGroup.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Inline } from "../Flow.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
// src/layout/toolbar/ToolbarStatusGroup.tsx
|
|
4
|
+
function ToolbarStatusGroup(props) {
|
|
5
|
+
return /* @__PURE__ */ jsx(Inline, {
|
|
6
|
+
align: "center",
|
|
7
|
+
justify: "start",
|
|
8
|
+
...props,
|
|
9
|
+
className: "h-8 shrink-0 gap-0 sm:gap-2 sm:px-1"
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export { ToolbarStatusGroup };
|
|
13
|
+
|
|
14
|
+
//# sourceMappingURL=ToolbarStatusGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolbarStatusGroup.js","names":[],"sources":["../../../src/layout/toolbar/ToolbarStatusGroup.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\n\nimport { Inline } from '../Flow';\n\ntype ToolbarStatusGroupProps = Omit<HTMLAttributes<HTMLDivElement>, 'className'>;\n\nexport function ToolbarStatusGroup(props: ToolbarStatusGroupProps) {\n return <Inline align=\"center\" justify=\"start\" {...props} className=\"h-8 shrink-0 gap-0 sm:gap-2 sm:px-1\" />;\n}\n"],"mappings":";;;AAMA,SAAgB,mBAAmB,OAAgC;CAC/D,OAAO,oBAAC,QAAD;EAAQ,OAAM;EAAS,SAAQ;EAAQ,GAAI;EAAO,WAAU;CAAuC,CAAA;AAC9G"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { StatusTone } from "../../feedback/StatusIndicator.js";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
interface ToolbarStatusItemProps {
|
|
4
|
+
icon: ReactNode;
|
|
5
|
+
tone: StatusTone;
|
|
6
|
+
}
|
|
7
|
+
export declare function ToolbarStatusItem({ icon, tone }: ToolbarStatusItemProps): import("react").JSX.Element;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=ToolbarStatusItem.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { StatusIndicator } from "../../feedback/StatusIndicator.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Box } from "@ninna-ui/layout";
|
|
4
|
+
// src/layout/toolbar/ToolbarStatusItem.tsx
|
|
5
|
+
function ToolbarStatusItem({ icon, tone }) {
|
|
6
|
+
return /* @__PURE__ */ jsxs(Box, {
|
|
7
|
+
"aria-hidden": "true",
|
|
8
|
+
className: "relative size-4 shrink-0 text-(--color-header-icon) [&>svg]:size-full",
|
|
9
|
+
children: [icon, /* @__PURE__ */ jsx(StatusIndicator, {
|
|
10
|
+
tone,
|
|
11
|
+
size: "sm",
|
|
12
|
+
className: "absolute -right-0.5 -bottom-0.5"
|
|
13
|
+
})]
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export { ToolbarStatusItem };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=ToolbarStatusItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToolbarStatusItem.js","names":[],"sources":["../../../src/layout/toolbar/ToolbarStatusItem.tsx"],"sourcesContent":["import { Box } from '@ninna-ui/layout';\nimport type { ReactNode } from 'react';\n\nimport { StatusIndicator, type StatusTone } from '../../feedback/StatusIndicator';\n\ninterface ToolbarStatusItemProps {\n icon: ReactNode;\n tone: StatusTone;\n}\n\nexport function ToolbarStatusItem({ icon, tone }: ToolbarStatusItemProps) {\n return (\n <Box aria-hidden=\"true\" className=\"relative size-4 shrink-0 text-(--color-header-icon) [&>svg]:size-full\">\n {icon}\n <StatusIndicator tone={tone} size=\"sm\" className=\"absolute -right-0.5 -bottom-0.5\" />\n </Box>\n );\n}\n"],"mappings":";;;;AAUA,SAAgB,kBAAkB,EAAE,MAAM,QAAgC;CACtE,OACI,qBAAC,KAAD;EAAK,eAAY;EAAO,WAAU;EAAlC,UAAA,CACK,MACD,oBAAC,iBAAD;GAAuB;GAAM,MAAK;GAAK,WAAU;EAAmC,CAAA,CACnF;;AAEb"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
export interface ArtworkTabsItem<T extends string> {
|
|
3
|
+
value: T;
|
|
4
|
+
label: string;
|
|
5
|
+
caption?: string;
|
|
6
|
+
/** Small poster artwork, about 3rem wide. */
|
|
7
|
+
artwork: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
/** One sideways-scrolling row of tabs with small artwork, such as a show's seasons. */
|
|
10
|
+
export declare function ArtworkTabs<T extends string>({ items, label, value, onChange, loading, loadingLabel }: {
|
|
11
|
+
items: readonly ArtworkTabsItem<T>[];
|
|
12
|
+
label: string;
|
|
13
|
+
value: T | undefined;
|
|
14
|
+
onChange: (value: T) => void;
|
|
15
|
+
loading?: boolean;
|
|
16
|
+
loadingLabel?: string;
|
|
17
|
+
}): import("react").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=ArtworkTabs.d.ts.map
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { revealInRow } from "../collections/useScrollRow.js";
|
|
2
|
+
import { SkeletonLoader } from "../feedback/SkeletonLoader.js";
|
|
3
|
+
import { Stack } from "../layout/Flow.js";
|
|
4
|
+
import { Text } from "../typography/Typography.js";
|
|
5
|
+
import { moveTabSelection } from "./TabKeys.js";
|
|
6
|
+
import { useEffect, useRef } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
// src/navigation/ArtworkTabs.tsx
|
|
9
|
+
const row = "-mx-1 flex gap-3 overflow-x-auto px-1 pt-1 pb-2";
|
|
10
|
+
/** One sideways-scrolling row of tabs with small artwork, such as a show's seasons. */
|
|
11
|
+
function ArtworkTabs({ items, label, value, onChange, loading = false, loadingLabel = label }) {
|
|
12
|
+
const tabs = useRef(null);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (tabs.current && value !== void 0) revealInRow(tabs.current, tabs.current.querySelector(`[data-value="${value}"]`));
|
|
15
|
+
}, [value, loading]);
|
|
16
|
+
if (loading) return /* @__PURE__ */ jsx(SkeletonLoader, {
|
|
17
|
+
label: loadingLabel,
|
|
18
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
19
|
+
className: row,
|
|
20
|
+
children: Array.from({ length: 4 }, (_, index) => /* @__PURE__ */ jsxs("div", {
|
|
21
|
+
className: "flex w-56 shrink-0 items-center gap-3 p-1.5",
|
|
22
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
23
|
+
className: "w-12 shrink-0",
|
|
24
|
+
children: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation: "poster" })
|
|
25
|
+
}), /* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "wide" })]
|
|
26
|
+
}, index))
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
return /* @__PURE__ */ jsx("div", {
|
|
30
|
+
ref: tabs,
|
|
31
|
+
role: "tablist",
|
|
32
|
+
"aria-label": label,
|
|
33
|
+
className: row,
|
|
34
|
+
onKeyDown: (event) => {
|
|
35
|
+
if (value !== void 0) moveTabSelection(event, items.map((item) => item.value), value, onChange);
|
|
36
|
+
},
|
|
37
|
+
children: items.map((item) => {
|
|
38
|
+
const selected = item.value === value;
|
|
39
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
40
|
+
type: "button",
|
|
41
|
+
role: "tab",
|
|
42
|
+
"aria-selected": selected,
|
|
43
|
+
tabIndex: selected ? 0 : -1,
|
|
44
|
+
"data-value": item.value,
|
|
45
|
+
className: "group hover:bg-base-200 focus-visible:outline-primary aria-selected:bg-base-200 aria-selected:ring-base-300 flex w-56 shrink-0 items-center gap-3 rounded-lg p-1.5 pr-3 text-left transition-colors focus-visible:outline-2 aria-selected:ring-1",
|
|
46
|
+
onClick: () => onChange(item.value),
|
|
47
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
48
|
+
className: "ring-base-900/10 w-12 shrink-0 overflow-hidden rounded-md ring-1 transition-opacity group-hover:opacity-100 group-aria-[selected=false]:opacity-70",
|
|
49
|
+
children: item.artwork
|
|
50
|
+
}), /* @__PURE__ */ jsxs(Stack, {
|
|
51
|
+
space: "none",
|
|
52
|
+
className: "min-w-0",
|
|
53
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
54
|
+
as: "span",
|
|
55
|
+
variant: "label",
|
|
56
|
+
truncate: true,
|
|
57
|
+
children: item.label
|
|
58
|
+
}), item.caption ? /* @__PURE__ */ jsx(Text, {
|
|
59
|
+
as: "span",
|
|
60
|
+
variant: "caption",
|
|
61
|
+
tone: "muted",
|
|
62
|
+
truncate: true,
|
|
63
|
+
children: item.caption
|
|
64
|
+
}) : null]
|
|
65
|
+
})]
|
|
66
|
+
}, item.value);
|
|
67
|
+
})
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
export { ArtworkTabs };
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=ArtworkTabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArtworkTabs.js","names":[],"sources":["../../src/navigation/ArtworkTabs.tsx"],"sourcesContent":["import { type ReactNode, useEffect, useRef } from 'react';\n\nimport { revealInRow } from '../collections/useScrollRow';\nimport { SkeletonLoader } from '../feedback/SkeletonLoader';\nimport { Stack } from '../layout/Flow';\nimport { Text } from '../typography/Typography';\nimport { moveTabSelection } from './TabKeys';\n\nexport interface ArtworkTabsItem<T extends string> {\n value: T;\n label: string;\n caption?: string;\n /** Small poster artwork, about 3rem wide. */\n artwork: ReactNode;\n}\n\nconst row = '-mx-1 flex gap-3 overflow-x-auto px-1 pt-1 pb-2';\n\n/** One sideways-scrolling row of tabs with small artwork, such as a show's seasons. */\nexport function ArtworkTabs<T extends string>({\n items,\n label,\n value,\n onChange,\n loading = false,\n loadingLabel = label,\n}: {\n items: readonly ArtworkTabsItem<T>[];\n label: string;\n value: T | undefined;\n onChange: (value: T) => void;\n loading?: boolean;\n loadingLabel?: string;\n}) {\n const tabs = useRef<HTMLDivElement>(null);\n\n // The selected tab stays in view however it was chosen, such as by an episode crossing into the next season.\n useEffect(() => {\n if (tabs.current && value !== undefined)\n revealInRow(tabs.current, tabs.current.querySelector(`[data-value=\"${value}\"]`));\n }, [value, loading]);\n\n if (loading)\n return (\n <SkeletonLoader label={loadingLabel}>\n <div className={row}>\n {Array.from({ length: 4 }, (_, index) => (\n <div key={index} className=\"flex w-56 shrink-0 items-center gap-3 p-1.5\">\n <span className=\"w-12 shrink-0\">\n <SkeletonLoader.Shape presentation=\"poster\" />\n </span>\n <SkeletonLoader.Shape width=\"wide\" />\n </div>\n ))}\n </div>\n </SkeletonLoader>\n );\n\n return (\n <div\n ref={tabs}\n role=\"tablist\"\n aria-label={label}\n className={row}\n onKeyDown={(event) => {\n if (value !== undefined)\n moveTabSelection(\n event,\n items.map((item) => item.value),\n value,\n onChange,\n );\n }}\n >\n {items.map((item) => {\n const selected = item.value === value;\n\n return (\n <button\n key={item.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n tabIndex={selected ? 0 : -1}\n data-value={item.value}\n className=\"group hover:bg-base-200 focus-visible:outline-primary aria-selected:bg-base-200 aria-selected:ring-base-300 flex w-56 shrink-0 items-center gap-3 rounded-lg p-1.5 pr-3 text-left transition-colors focus-visible:outline-2 aria-selected:ring-1\"\n onClick={() => onChange(item.value)}\n >\n <span className=\"ring-base-900/10 w-12 shrink-0 overflow-hidden rounded-md ring-1 transition-opacity group-hover:opacity-100 group-aria-[selected=false]:opacity-70\">\n {item.artwork}\n </span>\n <Stack space=\"none\" className=\"min-w-0\">\n <Text as=\"span\" variant=\"label\" truncate>\n {item.label}\n </Text>\n {item.caption ? (\n <Text as=\"span\" variant=\"caption\" tone=\"muted\" truncate>\n {item.caption}\n </Text>\n ) : null}\n </Stack>\n </button>\n );\n })}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAgBA,MAAM,MAAM;;AAGZ,SAAgB,YAA8B,EAC1C,OACA,OACA,OACA,UACA,UAAU,OACV,eAAe,SAQhB;CACC,MAAM,OAAO,OAAuB,IAAI;CAGxC,gBAAgB;EACZ,IAAI,KAAK,WAAW,UAAU,KAAA,GAC1B,YAAY,KAAK,SAAS,KAAK,QAAQ,cAAc,gBAAgB,MAAM,GAAG,CAAC;CACvF,GAAG,CAAC,OAAO,OAAO,CAAC;CAEnB,IAAI,SACA,OACI,oBAAC,gBAAD;EAAgB,OAAO;EACnB,UAAA,oBAAC,OAAD;GAAK,WAAW;GACX,UAAA,MAAM,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAG,UAC3B,qBAAC,OAAD;IAAiB,WAAU;IAA3B,UAAA,CACI,oBAAC,QAAD;KAAM,WAAU;KACZ,UAAA,oBAAC,eAAe,OAAhB,EAAsB,cAAa,SAAU,CAAA;IAC3C,CAAA,GACN,oBAAC,eAAe,OAAhB,EAAsB,OAAM,OAAQ,CAAA,CACnC;GALK,GAAA,KAKL,CACR;EACA,CAAA;CACO,CAAA;CAGxB,OACI,oBAAC,OAAD;EACI,KAAK;EACL,MAAK;EACL,cAAY;EACZ,WAAW;EACX,YAAY,UAAU;GAClB,IAAI,UAAU,KAAA,GACV,iBACI,OACA,MAAM,KAAK,SAAS,KAAK,KAAK,GAC9B,OACA,QACJ;EACR;EAEC,UAAA,MAAM,KAAK,SAAS;GACjB,MAAM,WAAW,KAAK,UAAU;GAEhC,OACI,qBAAC,UAAD;IAEI,MAAK;IACL,MAAK;IACL,iBAAe;IACf,UAAU,WAAW,IAAI;IACzB,cAAY,KAAK;IACjB,WAAU;IACV,eAAe,SAAS,KAAK,KAAK;IARtC,UAAA,CAUI,oBAAC,QAAD;KAAM,WAAU;KACX,UAAA,KAAK;IACJ,CAAA,GACN,qBAAC,OAAD;KAAO,OAAM;KAAO,WAAU;KAA9B,UAAA,CACI,oBAAC,MAAD;MAAM,IAAG;MAAO,SAAQ;MAAQ,UAAA;MAC3B,UAAA,KAAK;KACJ,CAAA,GACL,KAAK,UACF,oBAAC,MAAD;MAAM,IAAG;MAAO,SAAQ;MAAU,MAAK;MAAQ,UAAA;MAC1C,UAAA,KAAK;KACJ,CAAA,IACN,IACD;IACH,CAAA,CAAA;GAtBC,GAAA,KAAK,KAsBN;EAEhB,CAAC;CACA,CAAA;AAEb"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
interface BreadcrumbsProps {
|
|
3
|
+
label: string;
|
|
4
|
+
items: readonly {
|
|
5
|
+
href: string;
|
|
6
|
+
label: ReactNode;
|
|
7
|
+
}[];
|
|
8
|
+
current?: ReactNode;
|
|
9
|
+
onNavigate: (href: string) => void;
|
|
10
|
+
}
|
|
11
|
+
export declare function Breadcrumbs({ label, items, current, onNavigate }: BreadcrumbsProps): import("react").JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=Breadcrumbs.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Link } from "../typography/Link.js";
|
|
2
|
+
import { Text } from "../typography/Typography.js";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
// src/navigation/Breadcrumbs.tsx
|
|
5
|
+
function Breadcrumbs({ label, items, current, onNavigate }) {
|
|
6
|
+
return /* @__PURE__ */ jsx("nav", {
|
|
7
|
+
"aria-label": label,
|
|
8
|
+
className: "min-w-0 overflow-x-auto",
|
|
9
|
+
children: /* @__PURE__ */ jsxs("ol", {
|
|
10
|
+
className: "flex w-max min-w-full items-center gap-2 whitespace-nowrap",
|
|
11
|
+
children: [items.map((item) => /* @__PURE__ */ jsxs("li", {
|
|
12
|
+
className: "flex items-center gap-2",
|
|
13
|
+
children: [/* @__PURE__ */ jsx(Link, {
|
|
14
|
+
href: item.href,
|
|
15
|
+
onNavigate,
|
|
16
|
+
children: item.label
|
|
17
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
18
|
+
as: "span",
|
|
19
|
+
"aria-hidden": "true",
|
|
20
|
+
tone: "muted",
|
|
21
|
+
children: "/"
|
|
22
|
+
})]
|
|
23
|
+
}, item.href)), current ? /* @__PURE__ */ jsx("li", {
|
|
24
|
+
"aria-current": "page",
|
|
25
|
+
children: current
|
|
26
|
+
}) : null]
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
export { Breadcrumbs };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=Breadcrumbs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Breadcrumbs.js","names":[],"sources":["../../src/navigation/Breadcrumbs.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Link } from '../typography/Link';\nimport { Text } from '../typography/Typography';\n\ninterface BreadcrumbsProps {\n label: string;\n items: readonly { href: string; label: ReactNode }[];\n current?: ReactNode;\n onNavigate: (href: string) => void;\n}\n\nexport function Breadcrumbs({ label, items, current, onNavigate }: BreadcrumbsProps) {\n return (\n <nav aria-label={label} className=\"min-w-0 overflow-x-auto\">\n <ol className=\"flex w-max min-w-full items-center gap-2 whitespace-nowrap\">\n {items.map((item) => (\n <li key={item.href} className=\"flex items-center gap-2\">\n <Link href={item.href} onNavigate={onNavigate}>\n {item.label}\n </Link>\n <Text as=\"span\" aria-hidden=\"true\" tone=\"muted\">\n /\n </Text>\n </li>\n ))}\n {current ? <li aria-current=\"page\">{current}</li> : null}\n </ol>\n </nav>\n );\n}\n"],"mappings":";;;;AAYA,SAAgB,YAAY,EAAE,OAAO,OAAO,SAAS,cAAgC;CACjF,OACI,oBAAC,OAAD;EAAK,cAAY;EAAO,WAAU;EAC9B,UAAA,qBAAC,MAAD;GAAI,WAAU;GAAd,UAAA,CACK,MAAM,KAAK,SACR,qBAAC,MAAD;IAAoB,WAAU;IAA9B,UAAA,CACI,oBAAC,MAAD;KAAM,MAAM,KAAK;KAAkB;KAC9B,UAAA,KAAK;IACJ,CAAA,GACN,oBAAC,MAAD;KAAM,IAAG;KAAO,eAAY;KAAO,MAAK;KAAQ,UAAA;IAE1C,CAAA,CACN;GAPK,GAAA,KAAK,IAOV,CACP,GACA,UAAU,oBAAC,MAAD;IAAI,gBAAa;IAAQ,UAAA;GAAY,CAAA,IAAI,IACpD;;CACH,CAAA;AAEb"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from "react";
|
|
2
|
+
interface CollectionBrowseSelectorProps extends Pick<ComponentPropsWithoutRef<'button'>, 'aria-label'> {
|
|
3
|
+
children: ReactNode;
|
|
4
|
+
label: string;
|
|
5
|
+
icon?: ReactNode;
|
|
6
|
+
active?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface CollectionBrowseTriggerProps extends Omit<ComponentPropsWithoutRef<'button'>, 'children' | 'className'> {
|
|
9
|
+
label: string;
|
|
10
|
+
icon?: ReactNode;
|
|
11
|
+
active?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare const CollectionBrowseTrigger: import("react").ForwardRefExoticComponent<CollectionBrowseTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
14
|
+
export declare function CollectionBrowseSelector({ children, ...trigger }: CollectionBrowseSelectorProps): import("react").JSX.Element;
|
|
15
|
+
export declare function CollectionBrowseControls({ children, count, countLabel, filters }: {
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
count: ReactNode;
|
|
18
|
+
countLabel: string;
|
|
19
|
+
filters?: ReactNode;
|
|
20
|
+
}): import("react").JSX.Element;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=CollectionBrowseSelector.d.ts.map
|