@uisatin/ui 0.1.0 → 0.2.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/CHANGELOG.md +19 -0
- package/README.md +10 -2
- package/{chunk-TOMSU4S4.js → chunk-6QMSWITQ.js} +4 -13
- package/chunk-6QMSWITQ.js.map +1 -0
- package/{chunk-2YEWSJD7.js → chunk-D7RZNTFC.js} +3 -3
- package/{chunk-2YEWSJD7.js.map → chunk-D7RZNTFC.js.map} +1 -1
- package/chunk-MYEZXZZC.js +166 -0
- package/chunk-MYEZXZZC.js.map +1 -0
- package/chunk-YX5VNRJX.js +24 -0
- package/chunk-YX5VNRJX.js.map +1 -0
- package/components/agent-picker.d.ts +1 -1
- package/components/announcement-bar.js +3 -2
- package/components/avatar.d.ts +16 -0
- package/components/avatar.js +1 -1
- package/components/banner-mesh.d.ts +11 -0
- package/components/banner-mesh.js +3 -0
- package/components/banner-mesh.js.map +1 -0
- package/components/banner.d.ts +4 -8
- package/components/banner.js +2 -1
- package/components/bar-chart.d.ts +1 -1
- package/components/channel-chart.d.ts +1 -1
- package/components/chip.d.ts +1 -1
- package/components/combobox.d.ts +1 -1
- package/components/context-menu.d.ts +1 -1
- package/components/donut-chart.d.ts +1 -1
- package/components/line-chart.d.ts +1 -1
- package/components/message.d.ts +2 -2
- package/components/select.d.ts +1 -1
- package/components/thinking.d.ts +1 -1
- package/index.d.ts +64 -64
- package/index.js +13 -12
- package/index.js.map +1 -1
- package/package.json +12 -1
- package/styles.css +1 -1
- package/theme/index.d.ts +1 -1
- package/chunk-TOMSU4S4.js.map +0 -1
- package/chunk-TVLGZGYN.js +0 -59
- package/chunk-TVLGZGYN.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { type ChartCardBaseProps } from './chart';
|
|
2
|
+
import { type ChartCardBaseProps } from './chart.js';
|
|
3
3
|
/**
|
|
4
4
|
* Line and Area chart, 1:1 with the uiKit `chart/lineCard` (4076:6759) and `chart/areaCard`
|
|
5
5
|
* (4070:7627), in the shared ChartCard (chart.tsx).
|
package/components/message.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { type MessageFeedback } from './message-actions';
|
|
3
|
-
import { type ThinkingStep } from './thinking';
|
|
2
|
+
import { type MessageFeedback } from './message-actions.js';
|
|
3
|
+
import { type ThinkingStep } from './thinking.js';
|
|
4
4
|
/**
|
|
5
5
|
* Message, 1:1 with the uiKit Message docs view (3890:70165), composed from `_chat/userMessage`
|
|
6
6
|
* (901:20155), `_chat/source` and `_chat/answerActions` (901:20164, see MessageActions).
|
package/components/select.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { type MenuItemContentProps } from './dropdown';
|
|
2
|
+
import { type MenuItemContentProps } from './dropdown.js';
|
|
3
3
|
/**
|
|
4
4
|
* Select, 1:1 with the uiKit `Select` set (4022:3531): the field around it is Input's (a 13px
|
|
5
5
|
* medium label 8px above, a 13px hint or error under it), the trigger is Input's skin with the
|
package/components/thinking.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { type AgentLoadingIndicator } from './agent-loading';
|
|
2
|
+
import { type AgentLoadingIndicator } from './agent-loading.js';
|
|
3
3
|
/**
|
|
4
4
|
* Thinking, 1:1 with the uiKit `Thinking` set (3239:20908) and its parts thinking/header
|
|
5
5
|
* (3239:20766), thinking/step (3239:20791) and thinking/_mark (3239:20674).
|
package/index.d.ts
CHANGED
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
export { cn } from './lib/utils';
|
|
2
|
-
export * from './theme';
|
|
3
|
-
export * from './components/accordion';
|
|
4
|
-
export * from './components/avatar';
|
|
5
|
-
export { Badge, badgeVariants, type BadgeProps, type BadgeTone } from './components/badge';
|
|
6
|
-
export * from './components/banner';
|
|
7
|
-
export { Breadcrumb, type BreadcrumbProps, type BreadcrumbItem } from './components/breadcrumb';
|
|
8
|
-
export { Button, buttonVariants, type ButtonProps } from './components/button';
|
|
9
|
-
export * from './components/card';
|
|
10
|
-
export { ChartCard, ChartTooltip, ChartLegendRow, ChartLegendPill, type ChartDatum, type ChartCardBaseProps } from './components/chart';
|
|
11
|
-
export { LineCard, AreaCard, type LineCardProps } from './components/line-chart';
|
|
12
|
-
export { DonutCard, type DonutCardProps } from './components/donut-chart';
|
|
13
|
-
export { BarCard, type BarCardProps } from './components/bar-chart';
|
|
14
|
-
export { ChannelCard, type ChannelCardProps } from './components/channel-chart';
|
|
15
|
-
export { Checkbox, type CheckboxProps } from './components/checkbox';
|
|
16
|
-
export { Chip, ChipAvatar, chipVariants, type ChipProps } from './components/chip';
|
|
17
|
-
export { Combobox, type ComboboxProps } from './components/combobox';
|
|
18
|
-
export { CommandMenu, type CommandMenuProps, type CommandItem, type CommandGroup } from './components/command-menu';
|
|
19
|
-
export { CodeBlock, type CodeBlockProps } from './components/code-block';
|
|
20
|
-
export { Dialog, DialogClose, DialogAlert, CloseIcon, type DialogProps, type DialogVariant, type DialogAlertProps, type DialogAlertIntent } from './components/dialog';
|
|
21
|
-
export * from './components/dot';
|
|
22
|
-
export { Floating, type FloatingProps, type FloatingSide } from './components/floating';
|
|
23
|
-
export { DropdownMenu, DropdownMenuGroup, DropdownMenuItem, MenuItemContent, menuItemClass, menuSurfaceClass, menuGroupClass, menuGroupLabelClass, type DropdownMenuProps, type DropdownMenuGroupProps, type DropdownMenuItemProps, type MenuItemContentProps } from './components/dropdown';
|
|
24
|
-
export { FormField, useFormField, type FormFieldProps, type FormFieldContextValue } from './components/form-field';
|
|
25
|
-
export { Input, type InputProps } from './components/input';
|
|
26
|
-
export * from './components/kbd';
|
|
27
|
-
export { Pagination, paginationRange, type PaginationProps } from './components/pagination';
|
|
28
|
-
export { Popover, PopoverClose, PopoverPanel, type PopoverProps } from './components/popover';
|
|
29
|
-
export { Progress, type ProgressProps } from './components/progress';
|
|
30
|
-
export { Radio, RadioGroup, type RadioProps, type RadioGroupProps } from './components/radio';
|
|
31
|
-
export { SearchBar, type SearchBarProps } from './components/search-bar';
|
|
32
|
-
export { Select, FieldChrome, useFieldChrome, SelectChevron, type SelectProps, type SelectOption, type SelectGroup } from './components/select';
|
|
33
|
-
export { SegmentedControl, type SegmentedControlItem, type SegmentedControlProps } from './components/segmented-control';
|
|
34
|
-
export { Sheet, SheetClose, type SheetProps } from './components/sheet';
|
|
35
|
-
export * from './components/sidebar';
|
|
36
|
-
export { Skeleton, type SkeletonProps } from './components/skeleton';
|
|
37
|
-
export { Slider, type SliderProps } from './components/slider';
|
|
38
|
-
export { Switch, type SwitchProps } from './components/switch';
|
|
39
|
-
export { Table, type TableProps, type Column, type Row, type Sort } from './components/table';
|
|
40
|
-
export { Tabs, TabsContent, type TabsProps, type TabItem } from './components/tabs';
|
|
41
|
-
export { Textarea, type TextareaProps } from './components/textarea';
|
|
42
|
-
export { Toast, Toaster, toast, type ToastProps, type ToasterProps, type ToastOptions, type ToastIntent, type ToastAction } from './components/toast';
|
|
43
|
-
export { Toggle, toggleVariants, type ToggleProps } from './components/toggle';
|
|
44
|
-
export { Tooltip, TooltipBubble, type TooltipProps } from './components/tooltip';
|
|
45
|
-
export * from './components/agent-picker';
|
|
46
|
-
export * from './components/attachment';
|
|
47
|
-
export * from './components/decision-card';
|
|
48
|
-
export * from './components/empty-state';
|
|
49
|
-
export { Message, type MessageProps, type MessageSource } from './components/message';
|
|
50
|
-
export { MessageActions, type MessageActionsProps, type MessageFeedback } from './components/message-actions';
|
|
51
|
-
export { PromptBar, defaultActions as promptBarDefaultActions, type PromptBarProps, type PromptBarModel, type PromptBarAction } from './components/prompt-bar';
|
|
52
|
-
export { StreamingText, type StreamingTextProps } from './components/streaming-text';
|
|
53
|
-
export { Thinking, type ThinkingProps, type ThinkingStep, type ThinkingState, type ThinkingIndicator } from './components/thinking';
|
|
54
|
-
export { AgentLoading, type AgentLoadingProps, type AgentLoadingIndicator, TetrisMark, TetrisLabel, TetrisStill, FlappySprite, ShimmerLabel, type Glimmer } from './components/agent-loading';
|
|
55
|
-
export { FileUpload, FileUploadItem, fileIconFor, formatBytes, type FileUploadProps, type FileUploadFile, type FileUploadRejection, type FileUploadStatus } from './components/file-upload';
|
|
56
|
-
export { InputOTP, type InputOTPProps } from './components/input-otp';
|
|
57
|
-
export { NumberInput, type NumberInputProps } from './components/number-input';
|
|
58
|
-
export { ContextMenu, ContextMenuItem, ContextMenuSub, ContextMenuSeparator, type ContextMenuProps, type ContextMenuItemProps, type ContextMenuSubProps } from './components/context-menu';
|
|
59
|
-
export { HoverCard, hoverCardClass, type HoverCardProps } from './components/hover-card';
|
|
60
|
-
export { Citation, Sources, type CitationProps, type CitationSource, type SourcesProps } from './components/citations';
|
|
61
|
-
export { Calendar, DatePicker, DatePickerPanel, DateRangePicker, DateRangePickerPanel, formatDate, formatRange, type CalendarProps, type DatePickerProps, type DatePickerPanelProps, type DateRangePickerPanelProps, type DateRangePickerProps, type DateRange } from './components/date-picker';
|
|
62
|
-
export { AgentSuggestion, AgentSuggestionQuote, AgentSuggestionMetric, AgentSuggestionDiff, AgentSuggestionChanges, type AgentSuggestionProps, type AgentSuggestionChange } from './components/agent-suggestion';
|
|
63
|
-
export { CookieConsent, type CookieConsentProps } from './components/cookie-consent';
|
|
64
|
-
export { AnnouncementBar, type AnnouncementBarProps } from './components/announcement-bar';
|
|
1
|
+
export { cn } from './lib/utils.js';
|
|
2
|
+
export * from './theme/index.js';
|
|
3
|
+
export * from './components/accordion.js';
|
|
4
|
+
export * from './components/avatar.js';
|
|
5
|
+
export { Badge, badgeVariants, type BadgeProps, type BadgeTone } from './components/badge.js';
|
|
6
|
+
export * from './components/banner.js';
|
|
7
|
+
export { Breadcrumb, type BreadcrumbProps, type BreadcrumbItem } from './components/breadcrumb.js';
|
|
8
|
+
export { Button, buttonVariants, type ButtonProps } from './components/button.js';
|
|
9
|
+
export * from './components/card.js';
|
|
10
|
+
export { ChartCard, ChartTooltip, ChartLegendRow, ChartLegendPill, type ChartDatum, type ChartCardBaseProps } from './components/chart.js';
|
|
11
|
+
export { LineCard, AreaCard, type LineCardProps } from './components/line-chart.js';
|
|
12
|
+
export { DonutCard, type DonutCardProps } from './components/donut-chart.js';
|
|
13
|
+
export { BarCard, type BarCardProps } from './components/bar-chart.js';
|
|
14
|
+
export { ChannelCard, type ChannelCardProps } from './components/channel-chart.js';
|
|
15
|
+
export { Checkbox, type CheckboxProps } from './components/checkbox.js';
|
|
16
|
+
export { Chip, ChipAvatar, chipVariants, type ChipProps } from './components/chip.js';
|
|
17
|
+
export { Combobox, type ComboboxProps } from './components/combobox.js';
|
|
18
|
+
export { CommandMenu, type CommandMenuProps, type CommandItem, type CommandGroup } from './components/command-menu.js';
|
|
19
|
+
export { CodeBlock, type CodeBlockProps } from './components/code-block.js';
|
|
20
|
+
export { Dialog, DialogClose, DialogAlert, CloseIcon, type DialogProps, type DialogVariant, type DialogAlertProps, type DialogAlertIntent } from './components/dialog.js';
|
|
21
|
+
export * from './components/dot.js';
|
|
22
|
+
export { Floating, type FloatingProps, type FloatingSide } from './components/floating.js';
|
|
23
|
+
export { DropdownMenu, DropdownMenuGroup, DropdownMenuItem, MenuItemContent, menuItemClass, menuSurfaceClass, menuGroupClass, menuGroupLabelClass, type DropdownMenuProps, type DropdownMenuGroupProps, type DropdownMenuItemProps, type MenuItemContentProps } from './components/dropdown.js';
|
|
24
|
+
export { FormField, useFormField, type FormFieldProps, type FormFieldContextValue } from './components/form-field.js';
|
|
25
|
+
export { Input, type InputProps } from './components/input.js';
|
|
26
|
+
export * from './components/kbd.js';
|
|
27
|
+
export { Pagination, paginationRange, type PaginationProps } from './components/pagination.js';
|
|
28
|
+
export { Popover, PopoverClose, PopoverPanel, type PopoverProps } from './components/popover.js';
|
|
29
|
+
export { Progress, type ProgressProps } from './components/progress.js';
|
|
30
|
+
export { Radio, RadioGroup, type RadioProps, type RadioGroupProps } from './components/radio.js';
|
|
31
|
+
export { SearchBar, type SearchBarProps } from './components/search-bar.js';
|
|
32
|
+
export { Select, FieldChrome, useFieldChrome, SelectChevron, type SelectProps, type SelectOption, type SelectGroup } from './components/select.js';
|
|
33
|
+
export { SegmentedControl, type SegmentedControlItem, type SegmentedControlProps } from './components/segmented-control.js';
|
|
34
|
+
export { Sheet, SheetClose, type SheetProps } from './components/sheet.js';
|
|
35
|
+
export * from './components/sidebar.js';
|
|
36
|
+
export { Skeleton, type SkeletonProps } from './components/skeleton.js';
|
|
37
|
+
export { Slider, type SliderProps } from './components/slider.js';
|
|
38
|
+
export { Switch, type SwitchProps } from './components/switch.js';
|
|
39
|
+
export { Table, type TableProps, type Column, type Row, type Sort } from './components/table.js';
|
|
40
|
+
export { Tabs, TabsContent, type TabsProps, type TabItem } from './components/tabs.js';
|
|
41
|
+
export { Textarea, type TextareaProps } from './components/textarea.js';
|
|
42
|
+
export { Toast, Toaster, toast, type ToastProps, type ToasterProps, type ToastOptions, type ToastIntent, type ToastAction } from './components/toast.js';
|
|
43
|
+
export { Toggle, toggleVariants, type ToggleProps } from './components/toggle.js';
|
|
44
|
+
export { Tooltip, TooltipBubble, type TooltipProps } from './components/tooltip.js';
|
|
45
|
+
export * from './components/agent-picker.js';
|
|
46
|
+
export * from './components/attachment.js';
|
|
47
|
+
export * from './components/decision-card.js';
|
|
48
|
+
export * from './components/empty-state.js';
|
|
49
|
+
export { Message, type MessageProps, type MessageSource } from './components/message.js';
|
|
50
|
+
export { MessageActions, type MessageActionsProps, type MessageFeedback } from './components/message-actions.js';
|
|
51
|
+
export { PromptBar, defaultActions as promptBarDefaultActions, type PromptBarProps, type PromptBarModel, type PromptBarAction } from './components/prompt-bar.js';
|
|
52
|
+
export { StreamingText, type StreamingTextProps } from './components/streaming-text.js';
|
|
53
|
+
export { Thinking, type ThinkingProps, type ThinkingStep, type ThinkingState, type ThinkingIndicator } from './components/thinking.js';
|
|
54
|
+
export { AgentLoading, type AgentLoadingProps, type AgentLoadingIndicator, TetrisMark, TetrisLabel, TetrisStill, FlappySprite, ShimmerLabel, type Glimmer } from './components/agent-loading.js';
|
|
55
|
+
export { FileUpload, FileUploadItem, fileIconFor, formatBytes, type FileUploadProps, type FileUploadFile, type FileUploadRejection, type FileUploadStatus } from './components/file-upload.js';
|
|
56
|
+
export { InputOTP, type InputOTPProps } from './components/input-otp.js';
|
|
57
|
+
export { NumberInput, type NumberInputProps } from './components/number-input.js';
|
|
58
|
+
export { ContextMenu, ContextMenuItem, ContextMenuSub, ContextMenuSeparator, type ContextMenuProps, type ContextMenuItemProps, type ContextMenuSubProps } from './components/context-menu.js';
|
|
59
|
+
export { HoverCard, hoverCardClass, type HoverCardProps } from './components/hover-card.js';
|
|
60
|
+
export { Citation, Sources, type CitationProps, type CitationSource, type SourcesProps } from './components/citations.js';
|
|
61
|
+
export { Calendar, DatePicker, DatePickerPanel, DateRangePicker, DateRangePickerPanel, formatDate, formatRange, type CalendarProps, type DatePickerProps, type DatePickerPanelProps, type DateRangePickerPanelProps, type DateRangePickerProps, type DateRange } from './components/date-picker.js';
|
|
62
|
+
export { AgentSuggestion, AgentSuggestionQuote, AgentSuggestionMetric, AgentSuggestionDiff, AgentSuggestionChanges, type AgentSuggestionProps, type AgentSuggestionChange } from './components/agent-suggestion.js';
|
|
63
|
+
export { CookieConsent, type CookieConsentProps } from './components/cookie-consent.js';
|
|
64
|
+
export { AnnouncementBar, type AnnouncementBarProps } from './components/announcement-bar.js';
|
package/index.js
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
'use client';export {
|
|
1
|
+
'use client';export { Toggle, toggleVariants } from './chunk-UC3ZJWOD.js';
|
|
2
|
+
export { StreamingText } from './chunk-RTJ76X5U.js';
|
|
2
3
|
export { Switch } from './chunk-SH6NG6VN.js';
|
|
3
4
|
export { Table } from './chunk-X3PQANZO.js';
|
|
4
5
|
export { Tabs, TabsContent } from './chunk-DETGJAIC.js';
|
|
5
6
|
export { Textarea } from './chunk-QUF2IPOZ.js';
|
|
6
7
|
export { Toast, Toaster, toast } from './chunk-2HKBZFIK.js';
|
|
7
|
-
export {
|
|
8
|
+
export { Radio, RadioGroup } from './chunk-LLHTVIM3.js';
|
|
8
9
|
export { SearchBar } from './chunk-UGRSWP6U.js';
|
|
9
10
|
export { SegmentedControl } from './chunk-WTMZT3IT.js';
|
|
10
11
|
export { Sheet, SheetClose } from './chunk-TKO44NDI.js';
|
|
11
12
|
export { Sidebar, SidebarGroup, SidebarItem, SidebarSubGroup, SidebarSubItem } from './chunk-BNTPPZCK.js';
|
|
12
13
|
export { Skeleton } from './chunk-YG7JOOLJ.js';
|
|
13
14
|
export { Slider } from './chunk-L6NCCSIP.js';
|
|
15
|
+
export { AreaCard, LineCard } from './chunk-SHDFUXYV.js';
|
|
14
16
|
export { Message } from './chunk-PVOLDO4G.js';
|
|
15
17
|
export { Thinking } from './chunk-ESC5JCVQ.js';
|
|
16
18
|
export { MessageActions } from './chunk-AN2RNJLR.js';
|
|
@@ -18,11 +20,11 @@ export { NumberInput } from './chunk-LW3TRU5W.js';
|
|
|
18
20
|
export { Pagination, paginationRange } from './chunk-QS4N4MNP.js';
|
|
19
21
|
export { Popover, PopoverClose, PopoverPanel } from './chunk-BNZVTLHV.js';
|
|
20
22
|
export { PromptBar, defaultActions as promptBarDefaultActions } from './chunk-6YXUBP27.js';
|
|
21
|
-
export {
|
|
23
|
+
export { EmptyState, emptyStateVariants } from './chunk-WX6BP5ZP.js';
|
|
22
24
|
export { FileUpload, FileUploadItem, fileIconFor, formatBytes } from './chunk-GICKPMJU.js';
|
|
23
25
|
export { InputOTP } from './chunk-XL75JRUA.js';
|
|
24
26
|
export { Input } from './chunk-YPNKBE5X.js';
|
|
25
|
-
export {
|
|
27
|
+
export { ContextMenu, ContextMenuItem, ContextMenuSeparator, ContextMenuSub } from './chunk-PF3YBUKT.js';
|
|
26
28
|
export { CookieConsent } from './chunk-NN6PKJWS.js';
|
|
27
29
|
export { Calendar, DatePicker, DatePickerPanel, DateRangePicker, DateRangePickerPanel, formatDate, formatRange } from './chunk-XZNHT6MO.js';
|
|
28
30
|
export { DecisionCard, DecisionItemPreview } from './chunk-TX3H3QMA.js';
|
|
@@ -30,7 +32,7 @@ import './chunk-J3NSDRVH.js';
|
|
|
30
32
|
export { CloseIcon, Dialog, DialogAlert, DialogClose } from './chunk-JPNWHWAQ.js';
|
|
31
33
|
export { DonutCard } from './chunk-CL2II6BX.js';
|
|
32
34
|
export { Dot, dotVariants } from './chunk-B2K45IUR.js';
|
|
33
|
-
export {
|
|
35
|
+
export { ChannelCard } from './chunk-LZMKSFCF.js';
|
|
34
36
|
export { Checkbox } from './chunk-FDKIX4DC.js';
|
|
35
37
|
export { Citation, Sources } from './chunk-6C7CGJX2.js';
|
|
36
38
|
export { HoverCard, hoverCardClass } from './chunk-HRKPV66B.js';
|
|
@@ -38,27 +40,26 @@ export { CodeBlock } from './chunk-A5XEM3GF.js';
|
|
|
38
40
|
export { Combobox } from './chunk-NSRTTYQ4.js';
|
|
39
41
|
export { Chip, ChipAvatar, chipVariants } from './chunk-3ERGAHKA.js';
|
|
40
42
|
export { CommandMenu } from './chunk-P4O6TGDR.js';
|
|
41
|
-
export {
|
|
42
|
-
export { AVATAR_TOOLTIP_DELAY, Avatar, avatarVariants } from './chunk-TVLGZGYN.js';
|
|
43
|
+
export { AVATAR_TOOLTIP_DELAY, Avatar, AvatarGroup, avatarVariants } from './chunk-MYEZXZZC.js';
|
|
43
44
|
export { Tooltip, TooltipBubble } from './chunk-B6V4VSGH.js';
|
|
44
45
|
export { BarCard } from './chunk-DO3TBNSC.js';
|
|
45
|
-
export { Breadcrumb } from './chunk-HL42K2NH.js';
|
|
46
|
-
export { Card, cardVariants } from './chunk-XILQ7GXE.js';
|
|
47
|
-
export { ChannelCard } from './chunk-LZMKSFCF.js';
|
|
48
46
|
export { ChartCard, ChartLegendPill, ChartLegendRow, ChartTooltip } from './chunk-YPJYW624.js';
|
|
49
47
|
export { Floating } from './chunk-Y5AYU7PK.js';
|
|
50
48
|
export { FieldChrome, Select, SelectChevron, useFieldChrome } from './chunk-72OCFAPT.js';
|
|
51
49
|
export { FormField, useFormField } from './chunk-UBNHSZSE.js';
|
|
50
|
+
export { Breadcrumb } from './chunk-HL42K2NH.js';
|
|
52
51
|
export { DropdownMenu, DropdownMenuGroup, DropdownMenuItem, MenuItemContent, menuGroupClass, menuGroupLabelClass, menuItemClass, menuSurfaceClass } from './chunk-3DINAQLL.js';
|
|
53
52
|
export { Kbd, KbdArrowDown, KbdArrowUp, KbdGroup, KbdHint, KbdReturn, keysOf } from './chunk-BKZBWPUH.js';
|
|
53
|
+
export { Card, cardVariants } from './chunk-XILQ7GXE.js';
|
|
54
54
|
export { Accordion, AccordionItem } from './chunk-GQA24FYG.js';
|
|
55
55
|
export { AgentLoading, FlappySprite, ShimmerLabel, TetrisLabel, TetrisMark, TetrisStill } from './chunk-KNUWZNFV.js';
|
|
56
56
|
export { AgentAvatar, AgentMenuItem, AgentPicker, AgentPickerRow } from './chunk-VAGIAREV.js';
|
|
57
57
|
export { AgentSuggestion, AgentSuggestionChanges, AgentSuggestionDiff, AgentSuggestionMetric, AgentSuggestionQuote } from './chunk-MR3JDI7E.js';
|
|
58
58
|
export { Progress } from './chunk-7TXHCRAG.js';
|
|
59
59
|
export { Badge, badgeVariants } from './chunk-O7F3CIDV.js';
|
|
60
|
-
export { AnnouncementBar } from './chunk-
|
|
61
|
-
export { Banner,
|
|
60
|
+
export { AnnouncementBar } from './chunk-D7RZNTFC.js';
|
|
61
|
+
export { Banner, bannerVariants } from './chunk-6QMSWITQ.js';
|
|
62
|
+
export { bannerMesh } from './chunk-YX5VNRJX.js';
|
|
62
63
|
export { Attachment, AttachmentGroup, AttachmentPreview, AttachmentPreviewPager, AttachmentPreviewSheets, FileIcon } from './chunk-H4NU7NPO.js';
|
|
63
64
|
export { Button, buttonVariants } from './chunk-HNQUX43Z.js';
|
|
64
65
|
export { cn } from './chunk-H63FYCMY.js';
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/create-theme.ts"],"names":["vars"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Satin theming: one small config in, CSS variables out. Type isn't part of it: Satin's type\n * scale is fixed (14px body, 13px for compact controls like badges, chips and small fields).\n *\n * Every Satin component reads tokens, never raw values, so a theme only has to repoint a few\n * of them and the whole system follows:\n *\n * - `brand` replaces the brand ramp (the `--color-blue-*` primitives and the dark-mode primary\n * primitives). Each step keeps the lightness of the original ramp, takes the brand's hue and\n * scales its chroma, so tints, borders and soft tones stay in the same places. The solid\n * steps (hover, rest, pressed) sit at the brand's own lightness, lowered just enough that\n * white text reads at 4.5:1 on rest and hover, in Light and Dark. Labels stay white for\n * every brand, so buttons look the same family whatever the colour.\n * - `radius` scales every corner token, pill-shaped controls included; 1 is Satin's own, 0 is\n * square. Circles (avatars, dots, switch and radio marks) stay round.\n *\n * `themeVars()` returns the variables per mode; `themeCss()` the same as a stylesheet to load\n * after `@uisatin/ui/styles.css`.\n */\n\nexport interface SatinTheme {\n /** Brand colour as hex, e.g. \"#4633D7\". */\n brand: string\n /** Corner scale: 0, 0.5, 1 (default) or 1.5. */\n radius: number\n}\n\nexport const defaultTheme: SatinTheme = { brand: '#4633D7', radius: 1 }\n\ntype Vars = Record<string, string>\n\n/* ---------- OKLCH ---------- */\n\ntype Lch = [number, number, number]\n\nconst toLinear = (c: number) => (c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4)\nconst toGamma = (c: number) => (c <= 0.0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055)\n\nfunction hexToRgb(hex: string): [number, number, number] {\n const h = hex.replace('#', '')\n const full = h.length === 3 ? [...h].map((c) => c + c).join('') : h.slice(0, 6)\n return [0, 2, 4].map((i) => parseInt(full.slice(i, i + 2), 16) / 255) as [number, number, number]\n}\n\nfunction rgbToOklch([r, g, b]: [number, number, number]): Lch {\n const [lr, lg, lb] = [r, g, b].map(toLinear)\n const l = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb)\n const m = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb)\n const s = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb)\n const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s\n const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s\n const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n return [L, Math.hypot(A, B), ((Math.atan2(B, A) * 180) / Math.PI + 360) % 360]\n}\n\nfunction oklchToRgb([L, C, H]: Lch): [number, number, number] {\n const a = C * Math.cos((H * Math.PI) / 180)\n const b = C * Math.sin((H * Math.PI) / 180)\n const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3\n const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3\n const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3\n return [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n ]\n}\n\nconst inGamut = (rgb: number[]) => rgb.every((c) => c >= -0.0005 && c <= 1.0005)\n\n/** OKLCH to hex, lowering chroma until the colour fits sRGB. */\nfunction oklchToHex([L, C, H]: Lch) {\n let c = C\n let rgb = oklchToRgb([L, c, H])\n while (!inGamut(rgb) && c > 0) {\n c = Math.max(0, c - 0.005)\n rgb = oklchToRgb([L, c, H])\n }\n return '#' + rgb.map((v) => Math.round(Math.min(1, Math.max(0, toGamma(v))) * 255).toString(16).padStart(2, '0')).join('').toUpperCase()\n}\n\nconst luminance = (hex: string) => {\n const [r, g, b] = hexToRgb(hex).map(toLinear)\n return 0.2126 * r + 0.7152 * g + 0.0722 * b\n}\nexport const contrast = (a: string, b: string) => {\n const [x, y] = [luminance(a), luminance(b)].sort((p, q) => q - p)\n return (x + 0.05) / (y + 0.05)\n}\n\n/* ---------- Brand ---------- */\n\n// Satin's own brand ramp. Each generated step keeps its lightness and chroma ratio.\nconst RAMP: Record<string, string> = {\n 'blue-50': '#F2F4FF',\n 'blue-200': '#CFD6FF',\n 'blue-300': '#B1BBFE',\n 'blue-500': '#5146E9',\n 'blue-600': '#4633D7',\n 'blue-700': '#3923B9',\n 'blue-900': '#1D1168',\n 'blue-950': '#110A47',\n 'blue-soft-50': '#F3F5FF',\n 'blue-soft-200': '#D9DEFB',\n 'blue-soft-300': '#BEC7FC',\n 'blue-soft-700': '#5158A0',\n 'blue-soft-900': '#30344F',\n 'blue-soft-950': '#1F2132',\n 'primary-dark': '#493DD6',\n 'primary-hover-dark': '#554FE7',\n 'primary-pressed-dark': '#3E2AC5',\n 'primary-border-light': '#9085E7',\n 'primary-border-dark': '#928BE6',\n}\n// The steps a button is painted with: they move with the brand's lightness.\nconst SOLID = new Set(['blue-500', 'blue-600', 'blue-700', 'primary-dark', 'primary-hover-dark', 'primary-pressed-dark'])\n\n// Darkest the solid fill may need to go: white on it, and on its hover, reads at 4.5:1\n// (aimed at 4.7, since fitting each step into sRGB trims its chroma a little).\nfunction solidLightness(c: number, h: number, base: number, hoverStep: number) {\n const passes = (L: number) =>\n contrast(oklchToHex([L, c, h]), '#FFFFFF') >= 4.7 && contrast(oklchToHex([L + hoverStep, c, h]), '#FFFFFF') >= 4.7\n if (passes(base)) return base\n let lo = 0.2\n let hi = base\n for (let i = 0; i < 20; i++) {\n const mid = (lo + hi) / 2\n if (passes(mid)) lo = mid\n else hi = mid\n }\n return lo\n}\n\nfunction brandVars(brand: string): Vars {\n const [bl, bc, bh] = rgbToOklch(hexToRgb(brand))\n const lch = (step: string) => rgbToOklch(hexToRgb(RAMP[step]))\n const [rl, rc, rh] = lch('blue-600')\n const chroma = bc / rc\n // Where the light and the dark solid fills sit: the brand's lightness, darker if white needs it.\n const light = solidLightness(bc, bh, bl, lch('blue-500')[0] - rl)\n const darkRest = lch('primary-dark')[0]\n const dark = solidLightness(bc, bh, light + (darkRest - rl), lch('primary-hover-dark')[0] - darkRest)\n const root: Vars = {}\n for (const [step, hex] of Object.entries(RAMP)) {\n const [l, c, h] = rgbToOklch(hexToRgb(hex))\n const isDark = step.endsWith('-dark') && step !== 'primary-border-dark'\n const L = SOLID.has(step) ? (isDark ? dark + (l - darkRest) : light + (l - rl)) : l\n root[`--color-${step}`] =\n step === 'blue-600' && light === bl ? brand.toUpperCase() : oklchToHex([Math.min(0.97, Math.max(0.15, L)), c * chroma, bh + (h - rh)])\n }\n root['--color-blue-600-a20'] = `${root['--color-blue-600']}33`\n root['--color-blue-500-a20'] = `${root['--color-blue-500']}33`\n root['--color-primary-focus-dark'] = `${root['--color-primary-dark']}33`\n return root\n}\n\n/* ---------- Radius ---------- */\n\nconst RADII: Record<string, number> = { xs: 4, sm: 6, md: 8, xl: 12, '2xl': 16, '3xl': 20 }\n\nfunction radiusVars(scale: number): Vars {\n const v: Vars = {}\n for (const [k, px] of Object.entries(RADII)) v[`--radius-${k}`] = `${Math.round(px * scale * 2) / 2}px`\n v['--radius'] = `${Math.round(10 * scale * 2) / 2}px`\n // Pills follow the corners too: square at 0, a soft 8px at 0.5, a full pill from 1.\n v['--radius-pill'] = scale >= 1 ? '9999px' : `${Math.round(16 * scale)}px`\n return v\n}\n\n/* ---------- Output ---------- */\n\nexport function themeVars(theme: SatinTheme): { root: Vars; dark: Vars } {\n return { root: { ...brandVars(theme.brand), ...radiusVars(theme.radius) }, dark: {} }\n}\n\n// Semantic tokens that read the brand ramp or the radius. CSS resolves var() where a property is\n// declared, so a theme limited to part of a page has to declare these again inside it.\nconst SCOPED_LIGHT: Vars = {\n '--border-focus': 'var(--color-blue-600)',\n '--action-primary-bg': 'var(--color-blue-600)',\n '--action-primary-bg-hover': 'var(--color-blue-500)',\n '--action-primary-bg-pressed': 'var(--color-blue-700)',\n '--action-primary-border': 'var(--color-primary-border-light)',\n '--action-focus-ring': 'var(--color-blue-600-a20)',\n '--status-brand-bg': 'var(--color-blue-soft-50)',\n '--status-brand-border': 'var(--color-blue-soft-200)',\n '--status-brand-fg': 'var(--color-blue-soft-700)',\n '--radius-lg': 'var(--radius)',\n}\nconst SCOPED_DARK: Vars = {\n '--border-focus': 'var(--color-primary-hover-dark)',\n '--action-primary-bg': 'var(--color-primary-dark)',\n '--action-primary-bg-hover': 'var(--color-primary-hover-dark)',\n '--action-primary-bg-pressed': 'var(--color-primary-pressed-dark)',\n '--action-primary-border': 'var(--color-primary-border-dark)',\n '--action-focus-ring': 'var(--color-primary-focus-dark)',\n '--status-brand-bg': 'var(--color-blue-soft-950)',\n '--status-brand-border': 'var(--color-blue-soft-900)',\n '--status-brand-fg': 'var(--color-blue-soft-300)',\n}\n\n/**\n * The theme as a stylesheet. Load it after `@uisatin/ui/styles.css`. By default it themes the\n * whole page; pass a `scope` selector to theme only what's inside it (the docs do this for\n * their previews, so the site around them keeps Satin's own look).\n */\nexport function themeCss(theme: SatinTheme, scope?: string) {\n const vars = themeVars(theme)\n const root = scope ? { ...vars.root, ...SCOPED_LIGHT } : vars.root\n const dark = scope ? { ...vars.dark, ...SCOPED_DARK } : vars.dark\n const block = (sel: string, vars: Vars) =>\n `${sel} {\\n${Object.entries(vars)\n .map(([k, v]) => ` ${k}: ${v};`)\n .join('\\n')}\\n}`\n return [\n `/* Satin theme: brand ${theme.brand.toUpperCase()}, radius ${theme.radius}. */`,\n // :root:root outranks Satin's own :root, so the theme wins wherever the file is loaded.\n block(scope ?? ':root:root', root),\n ...(Object.keys(dark).length ? [block(scope ? `.dark ${scope}` : ':root.dark', dark)] : []),\n '',\n ].join('\\n\\n')\n}\n\n/* ---------- Random ---------- */\n\n/**\n * A random theme that still reads: a brand with enough chroma and a corner scale.\n * Pass the current theme to make sure the brand and the corners visibly change.\n */\nexport function randomTheme(current?: SatinTheme): SatinTheme {\n const [, , currentHue] = current ? rgbToOklch(hexToRgb(current.brand)) : [0, 0, -360]\n // At least 60° away from the current hue, so the new brand never looks like the old one.\n const hue = (currentHue + 60 + Math.random() * 240) % 360\n const l = 0.5 + Math.random() * 0.25\n const brand = oklchToHex([l, 0.12 + Math.random() * 0.08, hue])\n const radii = [0, 0.5, 1, 1.5].filter((r) => r !== current?.radius)\n const radius = radii[Math.floor(Math.random() * radii.length)]\n return { brand, radius }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/theme/create-theme.ts"],"names":["vars"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Satin theming: one small config in, CSS variables out. Type isn't part of it: Satin's type\n * scale is fixed (14px body, 13px for compact controls like badges, chips and small fields).\n *\n * Every Satin component reads tokens, never raw values, so a theme only has to repoint a few\n * of them and the whole system follows:\n *\n * - `brand` replaces the brand ramp (the `--color-blue-*` primitives and the dark-mode primary\n * primitives). Each step keeps the lightness of the original ramp, takes the brand's hue and\n * scales its chroma, so tints, borders and soft tones stay in the same places. The solid\n * steps (hover, rest, pressed) sit at the brand's own lightness, lowered just enough that\n * white text reads at 4.5:1 on rest and hover, in Light and Dark. Labels stay white for\n * every brand, so buttons look the same family whatever the colour.\n * - `radius` scales every corner token, pill-shaped controls included; 1 is Satin's own, 0 is\n * square. Circles (avatars, dots, switch and radio marks) stay round.\n *\n * `themeVars()` returns the variables per mode; `themeCss()` the same as a stylesheet to load\n * after `@uisatin/ui/styles.css`.\n */\n\nexport interface SatinTheme {\n /** Brand colour as hex, e.g. \"#4633D7\". */\n brand: string\n /** Corner scale: 0, 0.5, 1 (default) or 1.5. */\n radius: number\n}\n\nexport const defaultTheme: SatinTheme = { brand: '#4633D7', radius: 1 }\n\ntype Vars = Record<string, string>\n\n/* ---------- OKLCH ---------- */\n\ntype Lch = [number, number, number]\n\nconst toLinear = (c: number) => (c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4)\nconst toGamma = (c: number) => (c <= 0.0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055)\n\nfunction hexToRgb(hex: string): [number, number, number] {\n const h = hex.replace('#', '')\n const full = h.length === 3 ? [...h].map((c) => c + c).join('') : h.slice(0, 6)\n return [0, 2, 4].map((i) => parseInt(full.slice(i, i + 2), 16) / 255) as [number, number, number]\n}\n\nfunction rgbToOklch([r, g, b]: [number, number, number]): Lch {\n const [lr, lg, lb] = [r, g, b].map(toLinear)\n const l = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb)\n const m = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb)\n const s = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb)\n const L = 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s\n const A = 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s\n const B = 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n return [L, Math.hypot(A, B), ((Math.atan2(B, A) * 180) / Math.PI + 360) % 360]\n}\n\nfunction oklchToRgb([L, C, H]: Lch): [number, number, number] {\n const a = C * Math.cos((H * Math.PI) / 180)\n const b = C * Math.sin((H * Math.PI) / 180)\n const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3\n const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3\n const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3\n return [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s,\n ]\n}\n\nconst inGamut = (rgb: number[]) => rgb.every((c) => c >= -0.0005 && c <= 1.0005)\n\n/** OKLCH to hex, lowering chroma until the colour fits sRGB. */\nfunction oklchToHex([L, C, H]: Lch) {\n let c = C\n let rgb = oklchToRgb([L, c, H])\n while (!inGamut(rgb) && c > 0) {\n c = Math.max(0, c - 0.005)\n rgb = oklchToRgb([L, c, H])\n }\n return '#' + rgb.map((v) => Math.round(Math.min(1, Math.max(0, toGamma(v))) * 255).toString(16).padStart(2, '0')).join('').toUpperCase()\n}\n\nconst luminance = (hex: string) => {\n const [r, g, b] = hexToRgb(hex).map(toLinear)\n return 0.2126 * r + 0.7152 * g + 0.0722 * b\n}\nexport const contrast = (a: string, b: string) => {\n const [x, y] = [luminance(a), luminance(b)].sort((p, q) => q - p)\n return (x + 0.05) / (y + 0.05)\n}\n\n/* ---------- Brand ---------- */\n\n// Satin's own brand ramp. Each generated step keeps its lightness and chroma ratio.\nconst RAMP: Record<string, string> = {\n 'blue-50': '#F2F4FF',\n 'blue-200': '#CFD6FF',\n 'blue-300': '#B1BBFE',\n 'blue-500': '#5146E9',\n 'blue-600': '#4633D7',\n 'blue-700': '#3923B9',\n 'blue-900': '#1D1168',\n 'blue-950': '#110A47',\n 'blue-soft-50': '#F3F5FF',\n 'blue-soft-200': '#D9DEFB',\n 'blue-soft-300': '#BEC7FC',\n 'blue-soft-700': '#5158A0',\n 'blue-soft-900': '#30344F',\n 'blue-soft-950': '#1F2132',\n 'primary-dark': '#493DD6',\n 'primary-hover-dark': '#554FE7',\n 'primary-pressed-dark': '#3E2AC5',\n 'primary-border-light': '#9085E7',\n 'primary-border-dark': '#928BE6',\n}\n// The steps a button is painted with: they move with the brand's lightness.\nconst SOLID = new Set(['blue-500', 'blue-600', 'blue-700', 'primary-dark', 'primary-hover-dark', 'primary-pressed-dark'])\n\n// Darkest the solid fill may need to go: white on it, and on its hover, reads at 4.5:1\n// (aimed at 4.7, since fitting each step into sRGB trims its chroma a little).\nfunction solidLightness(c: number, h: number, base: number, hoverStep: number) {\n const passes = (L: number) =>\n contrast(oklchToHex([L, c, h]), '#FFFFFF') >= 4.7 && contrast(oklchToHex([L + hoverStep, c, h]), '#FFFFFF') >= 4.7\n if (passes(base)) return base\n let lo = 0.2\n let hi = base\n for (let i = 0; i < 20; i++) {\n const mid = (lo + hi) / 2\n if (passes(mid)) lo = mid\n else hi = mid\n }\n return lo\n}\n\nfunction brandVars(brand: string): Vars {\n const [bl, bc, bh] = rgbToOklch(hexToRgb(brand))\n const lch = (step: string) => rgbToOklch(hexToRgb(RAMP[step]))\n const [rl, rc, rh] = lch('blue-600')\n const chroma = bc / rc\n // Where the light and the dark solid fills sit: the brand's lightness, darker if white needs it.\n const light = solidLightness(bc, bh, bl, lch('blue-500')[0] - rl)\n const darkRest = lch('primary-dark')[0]\n const dark = solidLightness(bc, bh, light + (darkRest - rl), lch('primary-hover-dark')[0] - darkRest)\n const root: Vars = {}\n for (const [step, hex] of Object.entries(RAMP)) {\n const [l, c, h] = rgbToOklch(hexToRgb(hex))\n const isDark = step.endsWith('-dark') && step !== 'primary-border-dark'\n const L = SOLID.has(step) ? (isDark ? dark + (l - darkRest) : light + (l - rl)) : l\n root[`--color-${step}`] =\n step === 'blue-600' && light === bl ? brand.toUpperCase() : oklchToHex([Math.min(0.97, Math.max(0.15, L)), c * chroma, bh + (h - rh)])\n }\n root['--color-blue-600-a20'] = `${root['--color-blue-600']}33`\n root['--color-blue-500-a20'] = `${root['--color-blue-500']}33`\n root['--color-primary-focus-dark'] = `${root['--color-primary-dark']}33`\n return root\n}\n\n/* ---------- Radius ---------- */\n\nconst RADII: Record<string, number> = { xs: 4, sm: 6, md: 8, xl: 12, '2xl': 16, '3xl': 20 }\n\nfunction radiusVars(scale: number): Vars {\n const v: Vars = {}\n for (const [k, px] of Object.entries(RADII)) v[`--radius-${k}`] = `${Math.round(px * scale * 2) / 2}px`\n v['--radius'] = `${Math.round(10 * scale * 2) / 2}px`\n // Pills follow the corners too: square at 0, a soft 8px at 0.5, a full pill from 1.\n v['--radius-pill'] = scale >= 1 ? '9999px' : `${Math.round(16 * scale)}px`\n return v\n}\n\n/* ---------- Output ---------- */\n\nexport function themeVars(theme: SatinTheme): { root: Vars; dark: Vars } {\n return { root: { ...brandVars(theme.brand), ...radiusVars(theme.radius) }, dark: {} }\n}\n\n// Semantic tokens that read the brand ramp or the radius. CSS resolves var() where a property is\n// declared, so a theme limited to part of a page has to declare these again inside it.\nconst SCOPED_LIGHT: Vars = {\n '--border-focus': 'var(--color-blue-600)',\n '--action-primary-bg': 'var(--color-blue-600)',\n '--action-primary-bg-hover': 'var(--color-blue-500)',\n '--action-primary-bg-pressed': 'var(--color-blue-700)',\n '--action-primary-border': 'var(--color-primary-border-light)',\n '--action-focus-ring': 'var(--color-blue-600-a20)',\n '--status-brand-bg': 'var(--color-blue-soft-50)',\n '--status-brand-border': 'var(--color-blue-soft-200)',\n '--status-brand-fg': 'var(--color-blue-soft-700)',\n '--radius-lg': 'var(--radius)',\n}\nconst SCOPED_DARK: Vars = {\n '--border-focus': 'var(--color-primary-hover-dark)',\n '--action-primary-bg': 'var(--color-primary-dark)',\n '--action-primary-bg-hover': 'var(--color-primary-hover-dark)',\n '--action-primary-bg-pressed': 'var(--color-primary-pressed-dark)',\n '--action-primary-border': 'var(--color-primary-border-dark)',\n '--action-focus-ring': 'var(--color-primary-focus-dark)',\n '--status-brand-bg': 'var(--color-blue-soft-950)',\n '--status-brand-border': 'var(--color-blue-soft-900)',\n '--status-brand-fg': 'var(--color-blue-soft-300)',\n}\n\n/**\n * The theme as a stylesheet. Load it after `@uisatin/ui/styles.css`. By default it themes the\n * whole page; pass a `scope` selector to theme only what's inside it (the docs do this for\n * their previews, so the site around them keeps Satin's own look).\n */\nexport function themeCss(theme: SatinTheme, scope?: string) {\n const vars = themeVars(theme)\n const root = scope ? { ...vars.root, ...SCOPED_LIGHT } : vars.root\n const dark = scope ? { ...vars.dark, ...SCOPED_DARK } : vars.dark\n const block = (sel: string, vars: Vars) =>\n `${sel} {\\n${Object.entries(vars)\n .map(([k, v]) => ` ${k}: ${v};`)\n .join('\\n')}\\n}`\n return [\n `/* Satin theme: brand ${theme.brand.toUpperCase()}, radius ${theme.radius}. */`,\n // :root:root outranks Satin's own :root, so the theme wins wherever the file is loaded.\n block(scope ?? ':root:root', root),\n ...(Object.keys(dark).length ? [block(scope ? `.dark ${scope}` : ':root.dark', dark)] : []),\n '',\n ].join('\\n\\n')\n}\n\n/* ---------- Random ---------- */\n\n/**\n * A random theme that still reads: a brand with enough chroma and a corner scale.\n * Pass the current theme to make sure the brand and the corners visibly change.\n */\nexport function randomTheme(current?: SatinTheme): SatinTheme {\n const [, , currentHue] = current ? rgbToOklch(hexToRgb(current.brand)) : [0, 0, -360]\n // At least 60° away from the current hue, so the new brand never looks like the old one.\n const hue = (currentHue + 60 + Math.random() * 240) % 360\n const l = 0.5 + Math.random() * 0.25\n const brand = oklchToHex([l, 0.12 + Math.random() * 0.08, hue])\n const radii = [0, 0.5, 1, 1.5].filter((r) => r !== current?.radius)\n const radius = radii[Math.floor(Math.random() * radii.length)]\n return { brand, radius }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uisatin/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Satin Free: the open-source React components of the Satin design system. shadcn-based, built on Radix, themed with Satin tokens.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Maciej Kownacki",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/maciej-kownacki/ui-satin.git",
|
|
11
|
+
"directory": "packages/ui"
|
|
12
|
+
},
|
|
8
13
|
"homepage": "https://uisatin.dev",
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/maciej-kownacki/ui-satin/issues"
|
|
16
|
+
},
|
|
9
17
|
"keywords": [
|
|
10
18
|
"satin",
|
|
11
19
|
"design-system",
|
|
@@ -38,6 +46,9 @@
|
|
|
38
46
|
"default": "./components/*.js"
|
|
39
47
|
}
|
|
40
48
|
},
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=20.19"
|
|
51
|
+
},
|
|
41
52
|
"peerDependencies": {
|
|
42
53
|
"react": ">=19",
|
|
43
54
|
"react-dom": ">=19"
|