@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,79 @@
|
|
|
1
|
+
/* oxlint-disable react/only-export-components -- Provider and consumer share the same UI label contract. */
|
|
2
|
+
import { LucideProvider } from 'lucide-react';
|
|
3
|
+
import { createContext, type ReactNode, useContext, useMemo } from 'react';
|
|
4
|
+
|
|
5
|
+
/** The design system's own words, in English. Apps pass their translations through DesignSystemProvider. */
|
|
6
|
+
export const defaultDesignSystemLabels = {
|
|
7
|
+
close: 'Close',
|
|
8
|
+
cancel: 'Cancel',
|
|
9
|
+
retry: 'Try again',
|
|
10
|
+
toolbar: 'Toolbar',
|
|
11
|
+
imageSize: (width: number, height: number) => `${width} × ${height}`,
|
|
12
|
+
folders: {
|
|
13
|
+
path: 'Folder path',
|
|
14
|
+
selectedPath: (path: string) => `Selected folder: ${path}`,
|
|
15
|
+
open: (name: string) => `Open ${name}`,
|
|
16
|
+
chooseFolder: 'Choose folder',
|
|
17
|
+
title: 'Select a folder',
|
|
18
|
+
root: 'Root',
|
|
19
|
+
upOneLevel: 'Up one level',
|
|
20
|
+
loading: 'Loading folders',
|
|
21
|
+
loadFailed: 'Could not load folders',
|
|
22
|
+
empty: 'No folders',
|
|
23
|
+
loadMore: 'Load more',
|
|
24
|
+
chooseThis: 'Choose this folder',
|
|
25
|
+
},
|
|
26
|
+
theme: {
|
|
27
|
+
label: 'Appearance',
|
|
28
|
+
system: 'Match system',
|
|
29
|
+
light: 'Light',
|
|
30
|
+
dark: 'Dark',
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export type DesignSystemLabels = typeof defaultDesignSystemLabels;
|
|
35
|
+
|
|
36
|
+
/** The labels an app translates: any group or label left out keeps its English default. */
|
|
37
|
+
export type DesignSystemLabelOverrides = {
|
|
38
|
+
[Key in keyof DesignSystemLabels]?: DesignSystemLabels[Key] extends (...args: never[]) => unknown
|
|
39
|
+
? DesignSystemLabels[Key]
|
|
40
|
+
: DesignSystemLabels[Key] extends object
|
|
41
|
+
? Partial<DesignSystemLabels[Key]>
|
|
42
|
+
: DesignSystemLabels[Key];
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
const LabelContext = createContext(defaultDesignSystemLabels);
|
|
46
|
+
|
|
47
|
+
/** Lucide draws on a 24px grid at a 2px stroke; 1.75 matches the weight of Lar's type at the sizes icons use. */
|
|
48
|
+
const iconStrokeWidth = 1.75;
|
|
49
|
+
|
|
50
|
+
export function DesignSystemProvider({
|
|
51
|
+
children,
|
|
52
|
+
labels,
|
|
53
|
+
}: {
|
|
54
|
+
children: ReactNode;
|
|
55
|
+
labels?: DesignSystemLabelOverrides;
|
|
56
|
+
}) {
|
|
57
|
+
const value = useMemo(() => mergeLabels(labels), [labels]);
|
|
58
|
+
|
|
59
|
+
return (
|
|
60
|
+
<LabelContext.Provider value={value}>
|
|
61
|
+
<LucideProvider strokeWidth={iconStrokeWidth}>{children}</LucideProvider>
|
|
62
|
+
</LabelContext.Provider>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function mergeLabels(labels: DesignSystemLabelOverrides | undefined): DesignSystemLabels {
|
|
67
|
+
if (!labels) return defaultDesignSystemLabels;
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
...defaultDesignSystemLabels,
|
|
71
|
+
...labels,
|
|
72
|
+
folders: { ...defaultDesignSystemLabels.folders, ...labels.folders },
|
|
73
|
+
theme: { ...defaultDesignSystemLabels.theme, ...labels.theme },
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function useDesignSystemLabels() {
|
|
78
|
+
return useContext(LabelContext);
|
|
79
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safari, and Firefox while macOS keyboard navigation is off, move Tab only between text fields unless an
|
|
3
|
+
* element sets its tab index explicitly. Controls spread this before their own props, so Tab reaches every
|
|
4
|
+
* button, switch, select, radio and link in every browser and callers can still opt out with `tabIndex={-1}`.
|
|
5
|
+
*/
|
|
6
|
+
export const tabbable = { tabIndex: 0 } as const;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Apple devices write the app's shortcuts with ⌘; everything else uses Ctrl. */
|
|
2
|
+
export const applePlatform = typeof navigator !== 'undefined' && /Mac|iPhone|iPad/.test(navigator.userAgent);
|
|
3
|
+
|
|
4
|
+
/** Whether a key press is the shortcut ⌘<key> (Ctrl+<key> off Apple devices), with no other modifier. */
|
|
5
|
+
export function isShortcut(event: KeyboardEvent, key: string): boolean {
|
|
6
|
+
return (
|
|
7
|
+
event.key.toLowerCase() === key.toLowerCase() &&
|
|
8
|
+
(applePlatform ? event.metaKey && !event.ctrlKey : event.ctrlKey && !event.metaKey) &&
|
|
9
|
+
!event.altKey &&
|
|
10
|
+
!event.shiftKey
|
|
11
|
+
);
|
|
12
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { useSyncExternalStore } from 'react';
|
|
2
|
+
|
|
3
|
+
export type ThemePreference = 'system' | 'light' | 'dark';
|
|
4
|
+
|
|
5
|
+
export interface ThemeController {
|
|
6
|
+
/** Applies the stored preference before the first render, so the page never flashes the other theme. */
|
|
7
|
+
initialize(): void;
|
|
8
|
+
/** The current preference and a setter that stores and applies it, kept in step across tabs. */
|
|
9
|
+
useTheme(): readonly [ThemePreference, (value: ThemePreference) => void];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function isThemePreference(value: string): value is ThemePreference {
|
|
13
|
+
return value === 'system' || value === 'light' || value === 'dark';
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** The page backgrounds, which Safari and installed web apps extend into their own chrome. */
|
|
17
|
+
const themeColors = { light: '#fcfcfc', dark: '#0a0a0a' } as const;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The light/dark preference of one app, stored under `storageKey` in localStorage. The preference sets `.light` or
|
|
21
|
+
* `.dark` on <html> (nothing follows the system) and points the page's `theme-color` metas at the matching background.
|
|
22
|
+
*/
|
|
23
|
+
export function createThemeController(storageKey: string): ThemeController {
|
|
24
|
+
const changeEvent = `${storageKey}-change`;
|
|
25
|
+
|
|
26
|
+
function read(): ThemePreference {
|
|
27
|
+
const stored = window.localStorage.getItem(storageKey);
|
|
28
|
+
|
|
29
|
+
return stored && isThemePreference(stored) ? stored : 'system';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function set(preference: ThemePreference): void {
|
|
33
|
+
window.localStorage.setItem(storageKey, preference);
|
|
34
|
+
applyThemePreference(preference);
|
|
35
|
+
window.dispatchEvent(new Event(changeEvent));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function subscribe(onChange: () => void): () => void {
|
|
39
|
+
function handleStorageChange(event: StorageEvent): void {
|
|
40
|
+
if (event.key !== storageKey) return;
|
|
41
|
+
|
|
42
|
+
applyThemePreference(read());
|
|
43
|
+
onChange();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
window.addEventListener(changeEvent, onChange);
|
|
47
|
+
window.addEventListener('storage', handleStorageChange);
|
|
48
|
+
|
|
49
|
+
return () => {
|
|
50
|
+
window.removeEventListener(changeEvent, onChange);
|
|
51
|
+
window.removeEventListener('storage', handleStorageChange);
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
initialize: () => applyThemePreference(read()),
|
|
57
|
+
useTheme() {
|
|
58
|
+
const preference = useSyncExternalStore(subscribe, read, () => 'system' as const);
|
|
59
|
+
|
|
60
|
+
return [preference, set] as const;
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function applyThemePreference(preference: ThemePreference): void {
|
|
66
|
+
document.documentElement.classList.remove('light', 'dark');
|
|
67
|
+
|
|
68
|
+
if (preference !== 'system') document.documentElement.classList.add(preference);
|
|
69
|
+
|
|
70
|
+
for (const meta of document.querySelectorAll<HTMLMetaElement>('meta[name="theme-color"]')) {
|
|
71
|
+
const scheme = meta.getAttribute('media')?.includes('dark') ? 'dark' : 'light';
|
|
72
|
+
|
|
73
|
+
meta.content = themeColors[preference === 'system' ? scheme : preference];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export {
|
|
2
|
+
defaultDesignSystemLabels,
|
|
3
|
+
type DesignSystemLabelOverrides,
|
|
4
|
+
type DesignSystemLabels,
|
|
5
|
+
DesignSystemProvider,
|
|
6
|
+
useDesignSystemLabels,
|
|
7
|
+
} from './DesignSystemProvider';
|
|
8
|
+
export { tabbable } from './KeyboardFocus';
|
|
9
|
+
export { applePlatform, isShortcut } from './KeyboardShortcut';
|
|
10
|
+
export { createThemeController, isThemePreference, type ThemeController, type ThemePreference } from './Theme';
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
@import 'tailwindcss';
|
|
2
|
+
@import '@ninna-ui/core/theme/presets/minimal.css';
|
|
3
|
+
@import '../showcase/devices.css';
|
|
4
|
+
@import '../showcase/stage.css';
|
|
5
|
+
@import '../showcase/server-unit.css';
|
|
6
|
+
|
|
7
|
+
/* Dark follows an explicit .dark class, or the system while neither .light nor .dark is set, so dark:
|
|
8
|
+
utilities match the palette in both cases. */
|
|
9
|
+
@custom-variant dark {
|
|
10
|
+
&:where(.dark, .dark *) {
|
|
11
|
+
@slot;
|
|
12
|
+
}
|
|
13
|
+
@media (prefers-color-scheme: dark) {
|
|
14
|
+
&:where(:root:not(.light), :root:not(.light) *) {
|
|
15
|
+
@slot;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* T3 Code's type and radius scale: the platform UI font at 14px with a dense 11px step below text-xs, and
|
|
21
|
+
6, 8, 10, 14 and 18px corners. */
|
|
22
|
+
@theme {
|
|
23
|
+
--font-sans: -apple-system, BlinkMacSystemFont, 'SF Pro Text', 'Segoe UI', system-ui, sans-serif;
|
|
24
|
+
--font-mono: ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Consolas, monospace;
|
|
25
|
+
--text-2xs: 0.6875rem;
|
|
26
|
+
--text-2xs--line-height: calc(1 / 0.6875);
|
|
27
|
+
--radius-sm: 0.375rem;
|
|
28
|
+
--radius-md: 0.5rem;
|
|
29
|
+
--radius-lg: 0.625rem;
|
|
30
|
+
--radius-xl: 0.875rem;
|
|
31
|
+
--radius-2xl: 1.125rem;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* T3 Code's palette (pingdotgg/t3code apps/web/src/index.css) on ninna-ui's scale:
|
|
35
|
+
base-50 page · base-100 card and popover · base-200 accent fill · base-300 border · base-400 input
|
|
36
|
+
base-500…900 the muted ramp, base-700 being T3's muted foreground · base-content foreground.
|
|
37
|
+
Primary is lar's mark navy (#355292, oklch 0.45 0.11 264); dark mode lifts it to keep white text readable. */
|
|
38
|
+
@utility lar-light-palette {
|
|
39
|
+
color-scheme: light;
|
|
40
|
+
--color-primary: oklch(0.45 0.11 264);
|
|
41
|
+
--color-primary-content: #ffffff;
|
|
42
|
+
--color-base-50: oklch(0.992 0 0);
|
|
43
|
+
--color-base-100: #ffffff;
|
|
44
|
+
--color-base-200: #f4f4f5;
|
|
45
|
+
--color-base-300: #e4e4e7;
|
|
46
|
+
--color-base-400: #d4d4d8;
|
|
47
|
+
--color-base-500: #a1a1aa;
|
|
48
|
+
--color-base-600: #8b8b94;
|
|
49
|
+
--color-base-700: #71717a;
|
|
50
|
+
--color-base-800: #3f3f46;
|
|
51
|
+
--color-base-900: #27272a;
|
|
52
|
+
--color-base-content: #27272a;
|
|
53
|
+
--color-border: #e4e4e7;
|
|
54
|
+
--color-border-hover: #d4d4d8;
|
|
55
|
+
--color-border-active: oklch(0.45 0.11 264);
|
|
56
|
+
--color-border-disabled: #f4f4f5;
|
|
57
|
+
--color-success: #10b981;
|
|
58
|
+
--color-success-content: #ffffff;
|
|
59
|
+
--color-danger: #ef4444;
|
|
60
|
+
--color-danger-content: #ffffff;
|
|
61
|
+
--color-warning: #f59e0b;
|
|
62
|
+
--color-warning-content: #1c1917;
|
|
63
|
+
--color-info: #3b82f6;
|
|
64
|
+
--color-info-content: #ffffff;
|
|
65
|
+
--color-header-icon: #27272a;
|
|
66
|
+
--color-brand-ink: #0b0b0c;
|
|
67
|
+
--lar-success-text: #047857;
|
|
68
|
+
--lar-danger-text: #b91c1c;
|
|
69
|
+
--lar-warning-text: #b45309;
|
|
70
|
+
--lar-info-text: #1d4ed8;
|
|
71
|
+
--lar-glass-blur: 18px;
|
|
72
|
+
--lar-glass-opacity: 75%;
|
|
73
|
+
--lar-glass-saturation: 1.14;
|
|
74
|
+
--lar-shadow-popup: 0 16px 40px -18px rgb(0 0 0 / 55%);
|
|
75
|
+
--lar-shadow-dialog: 0 24px 64px -24px rgb(0 0 0 / 65%);
|
|
76
|
+
--lar-scrollbar-thumb: rgb(217 217 217);
|
|
77
|
+
--lar-scrollbar-thumb-hover: rgb(191 191 191);
|
|
78
|
+
--lar-laptop-base: linear-gradient(180deg, #e8e9eb 0%, #c9cbcf 30%, #9fa2a8 72%, #75787e 100%);
|
|
79
|
+
--lar-laptop-base-highlight: rgb(255 255 255 / 70%);
|
|
80
|
+
--lar-laptop-groove: linear-gradient(180deg, #a8abb1, #c4c6ca);
|
|
81
|
+
--lar-device-shadow: rgb(15 23 42 / 22%);
|
|
82
|
+
--lar-glow: oklch(0.62 0.13 264 / 0.2);
|
|
83
|
+
--lar-glow-soft: oklch(0.7 0.1 264 / 0.12);
|
|
84
|
+
--lar-grid-line: rgb(0 0 0 / 4.5%);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@utility lar-dark-palette {
|
|
88
|
+
color-scheme: dark;
|
|
89
|
+
--color-primary: oklch(0.56 0.12 264);
|
|
90
|
+
--color-primary-content: #ffffff;
|
|
91
|
+
--color-base-50: #0a0a0a;
|
|
92
|
+
--color-base-100: #111111;
|
|
93
|
+
--color-base-200: #161616;
|
|
94
|
+
--color-base-300: #1f1f1f;
|
|
95
|
+
--color-base-400: #282828;
|
|
96
|
+
--color-base-500: #404040;
|
|
97
|
+
--color-base-600: #5e5e5e;
|
|
98
|
+
--color-base-700: #818181;
|
|
99
|
+
--color-base-800: #c7c7c7;
|
|
100
|
+
--color-base-900: #e5e5e5;
|
|
101
|
+
--color-base-content: #f5f5f5;
|
|
102
|
+
--color-border: #1f1f1f;
|
|
103
|
+
--color-border-hover: #282828;
|
|
104
|
+
--color-border-active: oklch(0.56 0.12 264);
|
|
105
|
+
--color-border-disabled: #161616;
|
|
106
|
+
--color-success: #10b981;
|
|
107
|
+
--color-danger: color-mix(in srgb, #ef4444 90%, #ffffff);
|
|
108
|
+
--color-warning: #f59e0b;
|
|
109
|
+
--color-info: #3b82f6;
|
|
110
|
+
--color-header-icon: #f5f5f5;
|
|
111
|
+
--color-brand-ink: #f4f4f5;
|
|
112
|
+
--lar-success-text: #34d399;
|
|
113
|
+
--lar-danger-text: #f87171;
|
|
114
|
+
--lar-warning-text: #fbbf24;
|
|
115
|
+
--lar-info-text: #60a5fa;
|
|
116
|
+
--lar-glass-saturation: 1.08;
|
|
117
|
+
--lar-shadow-popup: 0 18px 44px -18px rgb(0 0 0 / 80%);
|
|
118
|
+
--lar-shadow-dialog: inset 0 1px rgb(255 255 255 / 4%), 0 24px 72px -20px rgb(0 0 0 / 90%);
|
|
119
|
+
--lar-scrollbar-thumb: rgb(255 255 255 / 8%);
|
|
120
|
+
--lar-scrollbar-thumb-hover: rgb(255 255 255 / 12%);
|
|
121
|
+
--lar-laptop-base: linear-gradient(180deg, #4a4b50 0%, #2f3034 34%, #1f2023 76%, #141517 100%);
|
|
122
|
+
--lar-laptop-base-highlight: rgb(255 255 255 / 18%);
|
|
123
|
+
--lar-laptop-groove: linear-gradient(180deg, #1b1c1f, #2c2d31);
|
|
124
|
+
--lar-device-shadow: rgb(0 0 0 / 70%);
|
|
125
|
+
--lar-glow: oklch(0.5 0.14 264 / 0.38);
|
|
126
|
+
--lar-glow-soft: oklch(0.55 0.12 264 / 0.16);
|
|
127
|
+
--lar-grid-line: rgb(255 255 255 / 4%);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
html[data-theme='minimal'] {
|
|
131
|
+
@apply lar-light-palette;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
html[data-theme='minimal'].dark {
|
|
135
|
+
@apply lar-dark-palette;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
@media (prefers-color-scheme: dark) {
|
|
139
|
+
html[data-theme='minimal']:not(.light):not(.dark) {
|
|
140
|
+
@apply lar-dark-palette;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
html {
|
|
145
|
+
background: var(--color-base-50);
|
|
146
|
+
-webkit-text-size-adjust: 100%;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
body {
|
|
150
|
+
font-family: var(--font-sans);
|
|
151
|
+
font-size: var(--text-sm);
|
|
152
|
+
line-height: 1.43;
|
|
153
|
+
margin: 0;
|
|
154
|
+
min-width: 320px;
|
|
155
|
+
min-height: 100dvh;
|
|
156
|
+
background: var(--color-base-50);
|
|
157
|
+
color: var(--color-base-content);
|
|
158
|
+
-webkit-font-smoothing: antialiased;
|
|
159
|
+
-moz-osx-font-smoothing: grayscale;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
::selection {
|
|
163
|
+
background: color-mix(in srgb, var(--color-primary) 24%, transparent);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
* {
|
|
167
|
+
scrollbar-width: thin;
|
|
168
|
+
scrollbar-color: var(--lar-scrollbar-thumb) transparent;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
*:hover {
|
|
172
|
+
scrollbar-color: var(--lar-scrollbar-thumb-hover) transparent;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.lar-brand-mark {
|
|
176
|
+
color: var(--color-brand-ink);
|
|
177
|
+
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* t3.codes' navigation glass: the page colour at 75% under an 18px blur. The document is what scrolls,
|
|
181
|
+
so content runs under the bar and Safari's own toolbar picks up the same surface. */
|
|
182
|
+
@utility glass-bar {
|
|
183
|
+
background: color-mix(in srgb, var(--color-base-50) var(--lar-glass-opacity), transparent);
|
|
184
|
+
-webkit-backdrop-filter: blur(var(--lar-glass-blur)) saturate(var(--lar-glass-saturation));
|
|
185
|
+
backdrop-filter: blur(var(--lar-glass-blur)) saturate(var(--lar-glass-saturation));
|
|
186
|
+
|
|
187
|
+
@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
|
|
188
|
+
background: var(--color-base-50);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* T3's dropdown-glass, for menus, popovers, selects, tooltips and toasts. */
|
|
193
|
+
@utility glass-menu {
|
|
194
|
+
background: color-mix(
|
|
195
|
+
in srgb,
|
|
196
|
+
var(--color-base-100) 18%,
|
|
197
|
+
color-mix(in srgb, var(--color-base-100) var(--lar-glass-opacity), transparent)
|
|
198
|
+
);
|
|
199
|
+
-webkit-backdrop-filter: blur(12px) saturate(var(--lar-glass-saturation));
|
|
200
|
+
backdrop-filter: blur(12px) saturate(var(--lar-glass-saturation));
|
|
201
|
+
border: 1px solid color-mix(in srgb, var(--color-base-content) 10%, transparent);
|
|
202
|
+
box-shadow: var(--lar-shadow-popup);
|
|
203
|
+
|
|
204
|
+
@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
|
|
205
|
+
background: var(--color-base-100);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/* T3's dialog-glass and dialog-backdrop. */
|
|
210
|
+
@utility glass-dialog {
|
|
211
|
+
background: color-mix(in srgb, var(--color-base-50) 88%, transparent);
|
|
212
|
+
-webkit-backdrop-filter: blur(16px) saturate(var(--lar-glass-saturation));
|
|
213
|
+
backdrop-filter: blur(16px) saturate(var(--lar-glass-saturation));
|
|
214
|
+
border: 1px solid color-mix(in srgb, var(--color-base-content) 10%, transparent);
|
|
215
|
+
box-shadow: var(--lar-shadow-dialog);
|
|
216
|
+
|
|
217
|
+
@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
|
|
218
|
+
background: var(--color-base-100);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
@utility dialog-backdrop {
|
|
223
|
+
background: color-mix(in srgb, var(--color-base-50) 60%, transparent);
|
|
224
|
+
-webkit-backdrop-filter: blur(4px);
|
|
225
|
+
backdrop-filter: blur(4px);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/* An icon in a muted, low-chroma version of a lar-brand app hue (--lar-kind-hue). */
|
|
229
|
+
@utility kind-icon {
|
|
230
|
+
color: oklch(0.58 0.06 var(--lar-kind-hue));
|
|
231
|
+
|
|
232
|
+
@variant dark {
|
|
233
|
+
color: oklch(0.74 0.05 var(--lar-kind-hue));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* A badge in a lar-brand app hue (--lar-kind-hue): a soft tint under text in the hue. Apply as kind-badge! to
|
|
238
|
+
win over the tone ninna-ui gives the badge. */
|
|
239
|
+
@utility kind-badge {
|
|
240
|
+
background-color: oklch(0.62 0.12 var(--lar-kind-hue) / 0.14);
|
|
241
|
+
color: oklch(0.45 0.11 var(--lar-kind-hue));
|
|
242
|
+
|
|
243
|
+
@variant dark {
|
|
244
|
+
background-color: oklch(0.62 0.12 var(--lar-kind-hue) / 0.2);
|
|
245
|
+
color: oklch(0.82 0.08 var(--lar-kind-hue));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* ninna-ui's overlays in T3's dress. Unlayered, so these win over the utility classes ninna-ui
|
|
250
|
+
renders; the design-system wrappers own every other override. */
|
|
251
|
+
[data-slot='dropdown-content'],
|
|
252
|
+
[data-slot='dropdown-sub-content'],
|
|
253
|
+
[data-slot='popover-content'],
|
|
254
|
+
[data-slot='content'][role='listbox'],
|
|
255
|
+
[data-slot='toast'] {
|
|
256
|
+
@apply glass-menu;
|
|
257
|
+
border-radius: 0.625rem;
|
|
258
|
+
color: var(--color-base-content);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
[data-slot='dropdown-content'],
|
|
262
|
+
[data-slot='dropdown-sub-content'] {
|
|
263
|
+
padding: 0.25rem;
|
|
264
|
+
max-width: min(var(--radix-dropdown-menu-content-available-width), calc(100dvw - 2rem));
|
|
265
|
+
max-height: min(var(--radix-dropdown-menu-content-available-height), calc(100dvh - 1rem));
|
|
266
|
+
overflow-y: auto;
|
|
267
|
+
overscroll-behavior: contain;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
[data-slot='popover-content'] {
|
|
271
|
+
max-width: min(var(--radix-popover-content-available-width), calc(100dvw - 2rem));
|
|
272
|
+
max-height: min(var(--radix-popover-content-available-height), calc(100dvh - 1rem));
|
|
273
|
+
overflow-y: auto;
|
|
274
|
+
overscroll-behavior: contain;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
[data-slot='popover-content'][data-layout='fill'] {
|
|
278
|
+
display: flex;
|
|
279
|
+
flex-direction: column;
|
|
280
|
+
overflow: hidden;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
[data-slot='content'][role='listbox'] {
|
|
284
|
+
width: var(--radix-select-trigger-width);
|
|
285
|
+
max-width: var(--radix-select-content-available-width);
|
|
286
|
+
max-height: min(24rem, var(--radix-select-content-available-height));
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
[data-radix-select-viewport] {
|
|
290
|
+
overscroll-behavior: contain;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/* Menu rows: T3's 28px rows with a 6px radius and an accent highlight. */
|
|
294
|
+
[data-slot='dropdown-item'],
|
|
295
|
+
[data-slot='dropdown-radio-item'],
|
|
296
|
+
[data-slot='dropdown-checkbox-item'],
|
|
297
|
+
[data-slot='dropdown-sub-trigger'],
|
|
298
|
+
[data-slot='content'][role='listbox'] [role='option'] {
|
|
299
|
+
min-height: 1.75rem;
|
|
300
|
+
border-radius: 0.375rem;
|
|
301
|
+
padding-top: 0.25rem;
|
|
302
|
+
padding-bottom: 0.25rem;
|
|
303
|
+
font-size: var(--text-sm);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
[data-slot='dropdown-item'] > svg,
|
|
307
|
+
[data-slot='dropdown-radio-item'] > svg,
|
|
308
|
+
[data-slot='dropdown-sub-trigger'] > svg {
|
|
309
|
+
color: var(--color-base-700);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/* T3 marks the chosen option with a faint fill rather than a radio dot. */
|
|
313
|
+
[data-slot='dropdown-radio-item'][data-presentation='default'] {
|
|
314
|
+
padding-left: 0.5rem;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
[data-slot='dropdown-radio-item'][data-presentation='default'] > span:first-child:not(:only-child) {
|
|
318
|
+
display: none;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
[data-slot='dropdown-radio-item'][data-presentation='default'][data-state='checked'] {
|
|
322
|
+
background: color-mix(in srgb, var(--color-base-content) 7%, transparent);
|
|
323
|
+
font-weight: 500;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
[data-slot='dropdown-label'] {
|
|
327
|
+
padding: 0.375rem 0.5rem;
|
|
328
|
+
font-size: var(--text-xs);
|
|
329
|
+
font-weight: 500;
|
|
330
|
+
letter-spacing: 0;
|
|
331
|
+
text-transform: none;
|
|
332
|
+
color: var(--color-base-700);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
[data-slot='dropdown-separator'] {
|
|
336
|
+
margin: 0.25rem 0.5rem;
|
|
337
|
+
background: var(--color-base-300);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
[data-slot='tooltip-content'] {
|
|
341
|
+
@apply glass-menu;
|
|
342
|
+
max-width: min(var(--radix-tooltip-content-available-width), var(--container-xs));
|
|
343
|
+
overflow-wrap: anywhere;
|
|
344
|
+
border-radius: 0.375rem;
|
|
345
|
+
color: var(--color-base-content);
|
|
346
|
+
font-size: var(--text-xs);
|
|
347
|
+
padding: 0.25rem 0.5rem;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
[data-slot='modal-overlay'],
|
|
351
|
+
[data-slot='drawer-overlay'] {
|
|
352
|
+
@apply dialog-backdrop;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
[data-slot='modal-content'] {
|
|
356
|
+
@apply glass-dialog;
|
|
357
|
+
border-radius: 1.125rem;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
[data-slot='drawer-content'] {
|
|
361
|
+
@apply glass-dialog;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
[data-slot='code'] {
|
|
365
|
+
border-radius: 0.375rem;
|
|
366
|
+
background: var(--color-base-200);
|
|
367
|
+
font-family: var(--font-mono);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
.lar-skeleton {
|
|
371
|
+
position: relative;
|
|
372
|
+
overflow: hidden;
|
|
373
|
+
background: var(--color-base-200);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.lar-skeleton::before {
|
|
377
|
+
content: '';
|
|
378
|
+
position: absolute;
|
|
379
|
+
inset: 0;
|
|
380
|
+
background: linear-gradient(
|
|
381
|
+
90deg,
|
|
382
|
+
transparent,
|
|
383
|
+
color-mix(in srgb, var(--color-base-50) 65%, transparent),
|
|
384
|
+
transparent
|
|
385
|
+
);
|
|
386
|
+
animation: lar-skeleton-shine 1.6s ease-in-out infinite;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
@keyframes lar-skeleton-shine {
|
|
390
|
+
from {
|
|
391
|
+
transform: translateX(-100%);
|
|
392
|
+
}
|
|
393
|
+
to {
|
|
394
|
+
transform: translateX(100%);
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
@media (prefers-reduced-motion: reduce) {
|
|
399
|
+
.lar-skeleton::before {
|
|
400
|
+
animation: none;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
.lar-progress-indeterminate {
|
|
405
|
+
width: 35%;
|
|
406
|
+
animation: lar-progress-travel 1.8s ease-in-out infinite alternate;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
@keyframes lar-progress-travel {
|
|
410
|
+
from {
|
|
411
|
+
transform: translateX(0);
|
|
412
|
+
}
|
|
413
|
+
to {
|
|
414
|
+
transform: translateX(185%);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
@media (prefers-reduced-motion: reduce) {
|
|
419
|
+
.lar-progress-indeterminate {
|
|
420
|
+
animation: none;
|
|
421
|
+
width: 100%;
|
|
422
|
+
opacity: 0.6;
|
|
423
|
+
background-image: repeating-linear-gradient(90deg, transparent 0 6px, var(--color-base-300) 6px 10px);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Brand marks, which lucide does not draw. */
|
|
2
|
+
export function GitHubIcon() {
|
|
3
|
+
return (
|
|
4
|
+
<svg viewBox="0 0 16 16" fill="currentColor" aria-hidden="true">
|
|
5
|
+
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8Z" />
|
|
6
|
+
</svg>
|
|
7
|
+
);
|
|
8
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Every icon comes from lucide (https://lucide.dev/icons), under lucide's `…Icon` names, plus the brand marks
|
|
2
|
+
// lucide does not draw. Apps import icons from `@lar-works/design-system/icons`, never from lucide-react.
|
|
3
|
+
export { GitHubIcon } from './BrandIcons';
|
|
4
|
+
export * from 'lucide-react';
|
package/src/icons.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './icons/index';
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// The design system's public API. Icons have their own entry (`@lar-works/design-system/icons`), and styles are
|
|
2
|
+
// imported once by each app (`@import '@lar-works/design-system/styles.css'`).
|
|
3
|
+
export * from './actions';
|
|
4
|
+
export * from './collections';
|
|
5
|
+
export * from './display';
|
|
6
|
+
export * from './feedback';
|
|
7
|
+
export * from './forms';
|
|
8
|
+
export * from './foundations';
|
|
9
|
+
export * from './layout';
|
|
10
|
+
export * from './navigation';
|
|
11
|
+
export * from './overlays';
|
|
12
|
+
export * from './showcase';
|
|
13
|
+
export * from './typography';
|