@rojaostudio/ds 2.0.0-next.2 → 2.0.0-next.20
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 +42 -2
- package/THIRD_PARTY_NOTICES.md +66 -0
- package/dist/components/avatar.d.ts +20 -12
- package/dist/components/avatar.js +8 -6
- package/dist/components/badge.d.ts +7 -6
- package/dist/components/badge.js +2 -1
- package/dist/components/breadcrumb.d.ts +4 -4
- package/dist/components/breadcrumb.js +1 -1
- package/dist/components/bubble.d.ts +26 -11
- package/dist/components/bubble.js +3 -3
- package/dist/components/button.d.ts +1 -1
- package/dist/components/card.d.ts +28 -12
- package/dist/components/card.js +4 -2
- package/dist/components/chart.d.ts +17 -3
- package/dist/components/chart.js +70 -24
- package/dist/components/choice-carousel.d.ts +1 -1
- package/dist/components/choice-carousel.js +2 -4
- package/dist/components/choice-list.d.ts +40 -0
- package/dist/components/choice-list.js +122 -0
- package/dist/components/choice-preview-card.d.ts +1 -7
- package/dist/components/color-input.d.ts +1 -1
- package/dist/components/context-menu.d.ts +5 -2
- package/dist/components/currency-input.d.ts +0 -2
- package/dist/components/data-table-header.d.ts +26 -16
- package/dist/components/data-table-header.js +75 -12
- package/dist/components/date-picker.d.ts +1 -1
- package/dist/components/dialog.d.ts +6 -3
- package/dist/components/dialog.js +2 -2
- package/dist/components/dropdown-menu.d.ts +5 -2
- package/dist/components/dropzone.d.ts +2 -2
- package/dist/components/dropzone.js +1 -1
- package/dist/components/file-input.d.ts +13 -8
- package/dist/components/file-input.js +24 -21
- package/dist/components/filter-chip.d.ts +11 -5
- package/dist/components/filter-chip.js +15 -6
- package/dist/components/floating-stepper.d.ts +11 -28
- package/dist/components/floating-stepper.js +2 -30
- package/dist/components/heading.d.ts +42 -0
- package/dist/components/heading.js +25 -0
- package/dist/components/icon-button.d.ts +1 -1
- package/dist/components/image-crop-dialog.d.ts +60 -0
- package/dist/components/image-crop-dialog.js +240 -0
- package/dist/components/image-crop-modal.d.ts +12 -55
- package/dist/components/image-crop-modal.js +2 -249
- package/dist/components/image-upload.d.ts +8 -17
- package/dist/components/image-upload.js +3 -3
- package/dist/components/index.d.ts +11 -8
- package/dist/components/index.js +8 -0
- package/dist/components/internal/button.d.ts +1 -1
- package/dist/components/internal/icons.d.ts +11 -1
- package/dist/components/internal/icons.js +20 -0
- package/dist/components/internal/menu.d.ts +3 -2
- package/dist/components/internal/menu.js +1 -1
- package/dist/components/internal/modal.js +9 -0
- package/dist/components/internal/toggle.d.ts +1 -1
- package/dist/components/item.d.ts +14 -7
- package/dist/components/item.js +5 -2
- package/dist/components/marker.d.ts +11 -3
- package/dist/components/marker.js +4 -3
- package/dist/components/number-input.d.ts +1 -1
- package/dist/components/progress.d.ts +3 -3
- package/dist/components/progress.js +2 -2
- package/dist/components/row-actions.d.ts +3 -0
- package/dist/components/row-actions.js +8 -4
- package/dist/components/saving-bar.d.ts +16 -4
- package/dist/components/saving-bar.js +37 -9
- package/dist/components/section-header.d.ts +4 -3
- package/dist/components/selectable-card.d.ts +2 -10
- package/dist/components/sidebar.d.ts +8 -11
- package/dist/components/sidebar.js +4 -5
- package/dist/components/spinner.d.ts +9 -6
- package/dist/components/spinner.js +3 -3
- package/dist/components/star-rating.d.ts +3 -3
- package/dist/components/star-rating.js +2 -2
- package/dist/components/stat.d.ts +18 -6
- package/dist/components/stat.js +9 -3
- package/dist/components/status.d.ts +4 -4
- package/dist/components/status.js +2 -2
- package/dist/components/stepper.d.ts +33 -0
- package/dist/components/stepper.js +36 -0
- package/dist/components/summary-bar.d.ts +3 -2
- package/dist/components/summary-bar.js +10 -1
- package/dist/components/tile.d.ts +5 -5
- package/dist/components/tile.js +2 -2
- package/dist/components/time-picker.d.ts +1 -1
- package/dist/components/toast.d.ts +17 -6
- package/dist/components/toast.js +5 -3
- package/dist/components/toggle-card-compact.d.ts +6 -25
- package/dist/components/toggle-card-compact.js +8 -35
- package/dist/components/toggle-card.d.ts +23 -9
- package/dist/components/toggle-card.js +38 -2
- package/dist/components/toggle.d.ts +1 -1
- package/dist/components/typing-indicator.d.ts +2 -2
- package/dist/components/typing-indicator.js +1 -1
- package/package.json +4 -4
- package/styles/base.css +13 -1
- package/styles/rds/components-styles.css +593 -172
- package/styles/rds/components.css +40 -25
- package/styles/rds/foundation.css +1 -1
- package/styles/rds/theme.css +40 -29
- package/styles/rds.css +1 -1
|
@@ -8,14 +8,14 @@ export { DropdownMenu, DropdownMenuAlign, DropdownMenuItem, DropdownMenuItemProp
|
|
|
8
8
|
export { ContextMenu, ContextMenuItem, ContextMenuItemProps, ContextMenuItemTone, ContextMenuProps, ContextMenuSeparator } from './context-menu.js';
|
|
9
9
|
export { Command, CommandGroup, CommandGroupProps, CommandItem, CommandItemProps, CommandProps } from './command.js';
|
|
10
10
|
export { FilterChip, FilterChipGroup, FilterChipGroupProps, FilterChipProps } from './filter-chip.js';
|
|
11
|
-
export { DataTableFilterDef, DataTableFilterOption, DataTableHeader, DataTableHeaderProps, DataTableHeaderSearch,
|
|
11
|
+
export { DataTableFilterDef, DataTableFilterOption, DataTableHeader, DataTableHeaderProps, DataTableHeaderSearch, FilterDropdown } from './data-table-header.js';
|
|
12
12
|
export { Button, ButtonIconPosition, ButtonProps } from './button.js';
|
|
13
13
|
export { Badge, BadgeProps, BadgeTone, BadgeVariant, formatBadgeValue } from './badge.js';
|
|
14
14
|
export { Status, StatusProps, StatusSize, StatusTone, StatusVariant } from './status.js';
|
|
15
15
|
export { Delta, DeltaDirection, DeltaProps, DeltaTone } from './delta.js';
|
|
16
16
|
export { Progress, ProgressKind, ProgressProps, ProgressSize } from './progress.js';
|
|
17
17
|
export { StarRating, StarRatingProps, StarRatingSize } from './star-rating.js';
|
|
18
|
-
export { Card, CardContent, CardContentProps, CardFooter, CardFooterProps, CardHeader, CardHeaderProps, CardProps, CardSize, CardSurface } from './card.js';
|
|
18
|
+
export { Card, CardContent, CardContentProps, CardFooter, CardFooterProps, CardHeader, CardHeaderProps, CardProps, CardSize, CardSurface, CardVariant } from './card.js';
|
|
19
19
|
export { Tile, TileProps, TileSize, TileTone, TileVariant } from './tile.js';
|
|
20
20
|
export { Kbd, KbdGroup, KbdGroupProps, KbdProps } from './kbd.js';
|
|
21
21
|
export { Sparkline, SparklineProps } from './sparkline.js';
|
|
@@ -38,15 +38,17 @@ export { Empty, EmptyProps } from './empty.js';
|
|
|
38
38
|
export { InsightCard, InsightCardProps, InsightCardType } from './insight-card.js';
|
|
39
39
|
export { SectionCard, SectionCardProps } from './section-card.js';
|
|
40
40
|
export { SectionHeader, SectionHeaderProps } from './section-header.js';
|
|
41
|
+
export { Stepper, StepperProps, StepperStep } from './stepper.js';
|
|
41
42
|
export { FloatingStepper, FloatingStepperProps, FloatingStepperStep } from './floating-stepper.js';
|
|
42
43
|
export { Stat, StatProps, StatTone } from './stat.js';
|
|
43
44
|
export { SummaryBar, SummaryBarItem, SummaryBarLayout, SummaryBarProps, SummaryBarTone } from './summary-bar.js';
|
|
44
|
-
export { ToggleCard, ToggleCardProps } from './toggle-card.js';
|
|
45
|
+
export { ToggleCard, ToggleCardLayout, ToggleCardProps } from './toggle-card.js';
|
|
45
46
|
export { ToggleCardCompact, ToggleCardCompactProps } from './toggle-card-compact.js';
|
|
46
47
|
export { ChipInput, ChipInputProps } from './chip-input.js';
|
|
47
48
|
export { CopyField, CopyFieldProps } from './copy-field.js';
|
|
48
49
|
export { QRDisplay, QRDisplayProps } from './qr-display.js';
|
|
49
50
|
export { ChoiceCard } from './choice-card.js';
|
|
51
|
+
export { ChoiceList, ChoiceListItem, ChoiceListItemProps, ChoiceListProps } from './choice-list.js';
|
|
50
52
|
export { OptionTile, OptionTileGrid, OptionTileGridProps, OptionTileItem, OptionTileProps } from './option-tile.js';
|
|
51
53
|
export { SelectableCard, SelectableCardProps } from './selectable-card.js';
|
|
52
54
|
export { ChoicePreviewCard, ChoicePreviewCardProps } from './choice-preview-card.js';
|
|
@@ -55,8 +57,8 @@ export { SettingsList, SettingsListProps } from './settings-list.js';
|
|
|
55
57
|
export { Dropzone, DropzoneProps } from './dropzone.js';
|
|
56
58
|
export { MediaTile, MediaTileAspect, MediaTileProps } from './media-tile.js';
|
|
57
59
|
export { Attachment, AttachmentOrientation, AttachmentProps, AttachmentStatus } from './attachment.js';
|
|
58
|
-
export { Bubble, BubbleAlign, BubbleProps, BubbleVariant } from './bubble.js';
|
|
59
|
-
export { Marker, MarkerProps, MarkerVariant } from './marker.js';
|
|
60
|
+
export { Bubble, BubbleAlign, BubbleProps, BubbleTone, BubbleVariant } from './bubble.js';
|
|
61
|
+
export { Marker, MarkerKind, MarkerProps, MarkerVariant } from './marker.js';
|
|
60
62
|
export { Message, MessageAlign, MessageProps } from './message.js';
|
|
61
63
|
export { MessageScroller, MessageScrollerProps } from './message-scroller.js';
|
|
62
64
|
export { Questionnaire, QuestionnaireAnswer, QuestionnaireProps } from './questionnaire.js';
|
|
@@ -64,7 +66,7 @@ export { TypingIndicator, TypingIndicatorProps } from './typing-indicator.js';
|
|
|
64
66
|
export { ChoiceCarousel, ChoiceCarouselProps } from './choice-carousel.js';
|
|
65
67
|
export { Tabs, TabsContent, TabsContentProps, TabsList, TabsListProps, TabsProps, TabsTrigger, TabsTriggerProps } from './tabs.js';
|
|
66
68
|
export { PageHeader, PageHeaderHeading, PageHeaderProps } from './page-header.js';
|
|
67
|
-
export { Sidebar, SidebarHeader, SidebarItem, SidebarItemProps, SidebarProps, SidebarSection, SidebarSectionProps, SidebarSeparator
|
|
69
|
+
export { Sidebar, SidebarHeader, SidebarItem, SidebarItemProps, SidebarProps, SidebarSection, SidebarSectionProps, SidebarSeparator } from './sidebar.js';
|
|
68
70
|
export { NavigationMenu, NavigationMenuEntry, NavigationMenuLink, NavigationMenuLinkComponent, NavigationMenuProps } from './navigation-menu.js';
|
|
69
71
|
export { SavingBar, SavingBarProps, SavingBarStatus } from './saving-bar.js';
|
|
70
72
|
export { SavingBarProvider, SavingBarRegistration, SavingBarRoot, usePageSavingBar } from './saving-bar-context.js';
|
|
@@ -76,7 +78,8 @@ export { Switch, SwitchProps } from './switch.js';
|
|
|
76
78
|
export { Tooltip, TooltipProps, TooltipSide } from './tooltip.js';
|
|
77
79
|
export { ToastFn, ToastOptions, ToastTone, ToastVariant, ToastView, ToastViewProps, Toaster, ToasterProps, toast, toastClassName, useToast } from './toast.js';
|
|
78
80
|
export { Separator, SeparatorOrientation, SeparatorProps } from './separator.js';
|
|
79
|
-
export {
|
|
81
|
+
export { Heading, HeadingElement, HeadingLevel, HeadingMark, HeadingMarkProps, HeadingProps, HeadingTone } from './heading.js';
|
|
82
|
+
export { Avatar, AvatarContent, AvatarGroup, AvatarGroupProps, AvatarGroupSize, AvatarProps, AvatarSize, AvatarType, AvatarVariant, initials } from './avatar.js';
|
|
80
83
|
export { IconButton, IconButtonProps } from './icon-button.js';
|
|
81
84
|
export { ButtonGroup, ButtonGroupOrientation, ButtonGroupProps } from './button-group.js';
|
|
82
85
|
export { ActionBar, ActionBarProps } from './action-bar.js';
|
|
@@ -89,7 +92,7 @@ export { Accordion, AccordionItem, AccordionItemProps, AccordionProps } from './
|
|
|
89
92
|
export { Slider, SliderProps } from './slider.js';
|
|
90
93
|
export { Listbox, ListboxOption, ListboxOptionProps, ListboxProps } from './listbox.js';
|
|
91
94
|
export { Calendar, CalendarProps } from './calendar.js';
|
|
92
|
-
export { FileInput, FileInputProps, FileInputVariant, formatFileSize } from './file-input.js';
|
|
95
|
+
export { FileInput, FileInputLayout, FileInputProps, FileInputVariant, formatFileSize } from './file-input.js';
|
|
93
96
|
export { NumberInput, NumberInputProps, NumberInputStep } from './number-input.js';
|
|
94
97
|
export { InputOTP, InputOTPLength, InputOTPProps } from './input-otp.js';
|
|
95
98
|
export { Combobox, ComboboxMultipleProps, ComboboxOption, ComboboxProps, ComboboxSingleProps } from './combobox.js';
|
package/dist/components/index.js
CHANGED
|
@@ -45,6 +45,7 @@ import { Empty } from "./empty.js";
|
|
|
45
45
|
import { InsightCard } from "./insight-card.js";
|
|
46
46
|
import { SectionCard } from "./section-card.js";
|
|
47
47
|
import { SectionHeader } from "./section-header.js";
|
|
48
|
+
import { Stepper } from "./stepper.js";
|
|
48
49
|
import { FloatingStepper } from "./floating-stepper.js";
|
|
49
50
|
import { Stat } from "./stat.js";
|
|
50
51
|
import { SummaryBar } from "./summary-bar.js";
|
|
@@ -54,6 +55,7 @@ import { ChipInput } from "./chip-input.js";
|
|
|
54
55
|
import { CopyField } from "./copy-field.js";
|
|
55
56
|
import { QRDisplay } from "./qr-display.js";
|
|
56
57
|
import { ChoiceCard, ChoiceCardGroup } from "./choice-card.js";
|
|
58
|
+
import { ChoiceList, ChoiceListItem } from "./choice-list.js";
|
|
57
59
|
import { OptionTile, OptionTileGrid } from "./option-tile.js";
|
|
58
60
|
import { SelectableCard } from "./selectable-card.js";
|
|
59
61
|
import { ChoicePreviewCard } from "./choice-preview-card.js";
|
|
@@ -83,6 +85,7 @@ import { Switch } from "./switch.js";
|
|
|
83
85
|
import { Tooltip } from "./tooltip.js";
|
|
84
86
|
import { Toaster, ToastView, toast, useToast, toastClassName } from "./toast.js";
|
|
85
87
|
import { Separator } from "./separator.js";
|
|
88
|
+
import { Heading, HeadingMark } from "./heading.js";
|
|
86
89
|
import { Avatar, AvatarGroup, initials } from "./avatar.js";
|
|
87
90
|
import { IconButton } from "./icon-button.js";
|
|
88
91
|
import { ButtonGroup } from "./button-group.js";
|
|
@@ -161,6 +164,8 @@ export {
|
|
|
161
164
|
ChoiceCard,
|
|
162
165
|
ChoiceCardGroup,
|
|
163
166
|
ChoiceCarousel,
|
|
167
|
+
ChoiceList,
|
|
168
|
+
ChoiceListItem,
|
|
164
169
|
ChoicePreviewCard,
|
|
165
170
|
ColorInput,
|
|
166
171
|
Combobox,
|
|
@@ -205,6 +210,8 @@ export {
|
|
|
205
210
|
GoogleButton,
|
|
206
211
|
GoogleConsent,
|
|
207
212
|
GoogleSignIn,
|
|
213
|
+
Heading,
|
|
214
|
+
HeadingMark,
|
|
208
215
|
HoverCard,
|
|
209
216
|
IconButton,
|
|
210
217
|
Input,
|
|
@@ -267,6 +274,7 @@ export {
|
|
|
267
274
|
Stat,
|
|
268
275
|
Status,
|
|
269
276
|
StepProgress,
|
|
277
|
+
Stepper,
|
|
270
278
|
SummaryBar,
|
|
271
279
|
Switch,
|
|
272
280
|
Table,
|
|
@@ -2,7 +2,7 @@ import * as react from 'react';
|
|
|
2
2
|
import { MouseEventHandler, MouseEvent } from 'react';
|
|
3
3
|
|
|
4
4
|
type ButtonTone = 'action' | 'neutral' | 'danger' | 'inverse';
|
|
5
|
-
/**
|
|
5
|
+
/** The emphasis (Figma: `variant`): fill, outline or ghost. */
|
|
6
6
|
type ButtonVariant = 'fill' | 'outline' | 'ghost';
|
|
7
7
|
/**
|
|
8
8
|
* The height: sm 36, md 44 (the default), lg 52. The touch target is 44 in every size: on sm, an invisible layer
|
|
@@ -12,6 +12,8 @@ declare function CheckIcon(): react.JSX.Element;
|
|
|
12
12
|
declare function MinusIcon(): react.JSX.Element;
|
|
13
13
|
/** A chevron pointing down: opens a list. */
|
|
14
14
|
declare function ChevronDownIcon(): react.JSX.Element;
|
|
15
|
+
/** A chevron pointing up: opens a panel that comes up from below (the SavingBar's details). */
|
|
16
|
+
declare function ChevronUpIcon(): react.JSX.Element;
|
|
15
17
|
/** An open eye: shows what is hidden (a password). */
|
|
16
18
|
declare function EyeIcon(): react.JSX.Element;
|
|
17
19
|
/** A crossed eye: hides again what was shown. */
|
|
@@ -104,5 +106,13 @@ declare function CopyIcon(): react.JSX.Element;
|
|
|
104
106
|
declare function PencilIcon(): react.JSX.Element;
|
|
105
107
|
/** Three sliders: the filters of a list. */
|
|
106
108
|
declare function SlidersIcon(): react.JSX.Element;
|
|
109
|
+
/** A square: the 1:1 crop. */
|
|
110
|
+
declare function SquareIcon(): react.JSX.Element;
|
|
111
|
+
/** A standing rectangle: a portrait crop (4:5). */
|
|
112
|
+
declare function RectangleVerticalIcon(): react.JSX.Element;
|
|
113
|
+
/** A lying rectangle: a landscape crop (16:9). */
|
|
114
|
+
declare function RectangleHorizontalIcon(): react.JSX.Element;
|
|
115
|
+
/** A dashed square: a free crop, no fixed aspect. */
|
|
116
|
+
declare function SquareDashedIcon(): react.JSX.Element;
|
|
107
117
|
|
|
108
|
-
export { AlertIcon, ArrowDownIcon, ArrowLeftIcon, ArrowUpDownIcon, ArrowUpIcon, BadgeCheckIcon, BuildingIcon, CalendarIcon, CameraIcon, CheckCheckIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, CircleCheckIcon, ClockIcon, CloseIcon, CopyIcon, ExternalLinkIcon, EyeIcon, EyeOffIcon, FileTextIcon, ImageIcon, ImageOffIcon, ImagePlusIcon, InfoIcon, LockIcon, MapPinIcon, MegaphoneIcon, MenuIcon, MicIcon, MinusIcon, MoreVerticalIcon, PaperclipIcon, PencilIcon, PhoneIcon, PlusIcon, QuoteIcon, ReplyIcon, RotateCcwIcon, SearchIcon, SearchXIcon, SlidersIcon, SmileIcon, SparklesIcon, StarFilledIcon, StarIcon, TableIcon, ThumbsUpIcon, TriangleAlertIcon, UploadIcon, UserIcon };
|
|
118
|
+
export { AlertIcon, ArrowDownIcon, ArrowLeftIcon, ArrowUpDownIcon, ArrowUpIcon, BadgeCheckIcon, BuildingIcon, CalendarIcon, CameraIcon, CheckCheckIcon, CheckIcon, ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, ChevronUpIcon, CircleCheckIcon, ClockIcon, CloseIcon, CopyIcon, ExternalLinkIcon, EyeIcon, EyeOffIcon, FileTextIcon, ImageIcon, ImageOffIcon, ImagePlusIcon, InfoIcon, LockIcon, MapPinIcon, MegaphoneIcon, MenuIcon, MicIcon, MinusIcon, MoreVerticalIcon, PaperclipIcon, PencilIcon, PhoneIcon, PlusIcon, QuoteIcon, RectangleHorizontalIcon, RectangleVerticalIcon, ReplyIcon, RotateCcwIcon, SearchIcon, SearchXIcon, SlidersIcon, SmileIcon, SparklesIcon, SquareDashedIcon, SquareIcon, StarFilledIcon, StarIcon, TableIcon, ThumbsUpIcon, TriangleAlertIcon, UploadIcon, UserIcon };
|
|
@@ -21,6 +21,9 @@ function MinusIcon() {
|
|
|
21
21
|
function ChevronDownIcon() {
|
|
22
22
|
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" }) });
|
|
23
23
|
}
|
|
24
|
+
function ChevronUpIcon() {
|
|
25
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "m18 15-6-6-6 6" }) });
|
|
26
|
+
}
|
|
24
27
|
function EyeIcon() {
|
|
25
28
|
return /* @__PURE__ */ jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
|
|
26
29
|
/* @__PURE__ */ jsx("path", { d: "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" }),
|
|
@@ -260,6 +263,18 @@ function PencilIcon() {
|
|
|
260
263
|
function SlidersIcon() {
|
|
261
264
|
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M21 4h-7M10 4H3M21 12h-9M8 12H3M21 20h-5M12 20H3M14 2v4M8 10v4M16 18v4" }) });
|
|
262
265
|
}
|
|
266
|
+
function SquareIcon() {
|
|
267
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }) });
|
|
268
|
+
}
|
|
269
|
+
function RectangleVerticalIcon() {
|
|
270
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("rect", { width: "12", height: "20", x: "6", y: "2", rx: "2" }) });
|
|
271
|
+
}
|
|
272
|
+
function RectangleHorizontalIcon() {
|
|
273
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("rect", { width: "20", height: "12", x: "2", y: "6", rx: "2" }) });
|
|
274
|
+
}
|
|
275
|
+
function SquareDashedIcon() {
|
|
276
|
+
return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M5 3a2 2 0 0 0-2 2M19 3a2 2 0 0 1 2 2M21 19a2 2 0 0 1-2 2M5 21a2 2 0 0 1-2-2M9 3h1M9 21h1M14 3h1M14 21h1M3 9v1M21 9v1M3 14v1M21 14v1" }) });
|
|
277
|
+
}
|
|
263
278
|
export {
|
|
264
279
|
AlertIcon,
|
|
265
280
|
ArrowDownIcon,
|
|
@@ -275,6 +290,7 @@ export {
|
|
|
275
290
|
ChevronDownIcon,
|
|
276
291
|
ChevronLeftIcon,
|
|
277
292
|
ChevronRightIcon,
|
|
293
|
+
ChevronUpIcon,
|
|
278
294
|
CircleCheckIcon,
|
|
279
295
|
ClockIcon,
|
|
280
296
|
CloseIcon,
|
|
@@ -299,6 +315,8 @@ export {
|
|
|
299
315
|
PhoneIcon,
|
|
300
316
|
PlusIcon,
|
|
301
317
|
QuoteIcon,
|
|
318
|
+
RectangleHorizontalIcon,
|
|
319
|
+
RectangleVerticalIcon,
|
|
302
320
|
ReplyIcon,
|
|
303
321
|
RotateCcwIcon,
|
|
304
322
|
SearchIcon,
|
|
@@ -306,6 +324,8 @@ export {
|
|
|
306
324
|
SlidersIcon,
|
|
307
325
|
SmileIcon,
|
|
308
326
|
SparklesIcon,
|
|
327
|
+
SquareDashedIcon,
|
|
328
|
+
SquareIcon,
|
|
309
329
|
StarFilledIcon,
|
|
310
330
|
StarIcon,
|
|
311
331
|
TableIcon,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
/** neutral (default) or danger (Figma: `tone`). */
|
|
5
|
+
type MenuItemTone = 'neutral' | 'danger';
|
|
5
6
|
interface MenuItemContentProps {
|
|
6
7
|
/** The action, a verb ("Duplicar") (Figma: `label`). */
|
|
7
8
|
children: ReactNode;
|
|
@@ -10,7 +11,7 @@ interface MenuItemContentProps {
|
|
|
10
11
|
/** A keyboard shortcut shown on the right (Figma: `showShortcut`), such as "Ctrl D". Not announced. */
|
|
11
12
|
shortcut?: ReactNode;
|
|
12
13
|
}
|
|
13
|
-
declare const menuItemClassName: (tone?: MenuItemTone, extra?: string) => string;
|
|
14
|
+
declare const menuItemClassName: (tone?: MenuItemTone | "default", extra?: string) => string;
|
|
14
15
|
declare function MenuItemContent({ children, icon, shortcut }: MenuItemContentProps): react.JSX.Element;
|
|
15
16
|
|
|
16
17
|
export { MenuItemContent, type MenuItemContentProps, type MenuItemTone, menuItemClassName };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../../chunk-ORMEWXMH.js";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
const menuItemClassName = (tone = "
|
|
3
|
+
const menuItemClassName = (tone = "neutral", extra) => ["rds-menu__item", tone === "danger" && "rds-menu__item--danger", extra].filter(Boolean).join(" ");
|
|
4
4
|
function MenuItemContent({ children, icon, shortcut }) {
|
|
5
5
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
6
6
|
icon && /* @__PURE__ */ jsx("span", { className: "rds-menu__icon", "aria-hidden": "true", children: icon }),
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
__spreadValues
|
|
5
5
|
} from "../../chunk-ORMEWXMH.js";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { useRef } from "react";
|
|
7
8
|
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
8
9
|
import { Button } from "../button.js";
|
|
9
10
|
import { IconButton } from "../icon-button.js";
|
|
@@ -32,6 +33,7 @@ function ModalShell({
|
|
|
32
33
|
container,
|
|
33
34
|
className
|
|
34
35
|
}) {
|
|
36
|
+
const opener = useRef(null);
|
|
35
37
|
const cancel = /* @__PURE__ */ jsx(DialogPrimitive.Close, { asChild: true, children: /* @__PURE__ */ jsx(Button, { tone: "neutral", variant: "outline", children: cancelLabel }) }, "cancel");
|
|
36
38
|
const confirm = /* @__PURE__ */ jsx(Button, { onClick: onConfirm, children: confirmLabel }, "confirm");
|
|
37
39
|
const actions = footer != null ? footer : confirmLabel ? stackedFooter ? [confirm, cancel] : [cancel, confirm] : null;
|
|
@@ -51,6 +53,7 @@ function ModalShell({
|
|
|
51
53
|
className: ["rds-modal", prefix, ...modifiers, className].filter(Boolean).join(" "),
|
|
52
54
|
style: boxStyle,
|
|
53
55
|
onOpenAutoFocus: (event) => {
|
|
56
|
+
opener.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
54
57
|
const box = event.currentTarget;
|
|
55
58
|
const first = box.querySelector(
|
|
56
59
|
'.rds-modal__body :is(input, textarea, select, button, a[href], [tabindex]:not([tabindex="-1"])):not(:disabled)'
|
|
@@ -59,6 +62,12 @@ function ModalShell({
|
|
|
59
62
|
event.preventDefault();
|
|
60
63
|
first.focus();
|
|
61
64
|
}
|
|
65
|
+
},
|
|
66
|
+
onCloseAutoFocus: (event) => {
|
|
67
|
+
var _a;
|
|
68
|
+
if (trigger || !((_a = opener.current) == null ? void 0 : _a.isConnected)) return;
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
opener.current.focus();
|
|
62
71
|
}
|
|
63
72
|
}, description ? {} : { "aria-describedby": void 0 }), {
|
|
64
73
|
children: [
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** The emphasis (Figma: `variant`): ghost in a toolbar, outline when it stands alone. */
|
|
2
2
|
type ToggleVariant = 'ghost' | 'outline';
|
|
3
3
|
declare function toggleClassName(variant: ToggleVariant, extra?: string): string;
|
|
4
4
|
/** A toggle without visible text needs a name, or a screen reader only says "toggle button". */
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { HTMLAttributes, ReactNode } from 'react';
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
type
|
|
4
|
+
/** The emphasis (Figma: `variant`). */
|
|
5
|
+
type ItemVariant = 'ghost' | 'outline' | 'soft';
|
|
6
|
+
type ItemSize = 'md' | 'sm';
|
|
6
7
|
interface ItemProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
7
8
|
/** The thing's name (Figma: `title`). */
|
|
8
9
|
title: ReactNode;
|
|
@@ -12,10 +13,16 @@ interface ItemProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
|
12
13
|
media?: ReactNode;
|
|
13
14
|
/** One action or control on the right (Figma: `showAction` + `action`): a ghost Button, an IconButton, a Switch. */
|
|
14
15
|
action?: ReactNode;
|
|
15
|
-
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
/**
|
|
17
|
+
* ghost (default): loose in the list, a line between rows; outline: each row a block; soft: a background, no
|
|
18
|
+
* border (Figma: `variant`). `'default'` and `'muted'` are deprecated (2.0.0-next): they are ghost and soft.
|
|
19
|
+
*/
|
|
20
|
+
variant?: ItemVariant | 'default' | 'muted';
|
|
21
|
+
/**
|
|
22
|
+
* md (default) or sm for dense lists: 14 and 12 text, 8 12 padding (Figma: `size`). `'default'` is deprecated
|
|
23
|
+
* (2.0.0-next): it is `'md'`.
|
|
24
|
+
*/
|
|
25
|
+
size?: ItemSize | 'default';
|
|
19
26
|
}
|
|
20
27
|
/**
|
|
21
28
|
* Item — Figma [RDS] Content/Item. One row of a list: media, title, description and one action. Inside an ItemGroup
|
|
@@ -26,7 +33,7 @@ interface ItemGroupProps extends HTMLAttributes<HTMLUListElement> {
|
|
|
26
33
|
/** The Items. One variant for the whole list. */
|
|
27
34
|
children: ReactNode;
|
|
28
35
|
}
|
|
29
|
-
/** The list the Items go in (<ul>).
|
|
36
|
+
/** The list the Items go in (<ul>). ghost rows get a line between them; outline and soft rows a gap of 8. */
|
|
30
37
|
declare function ItemGroup({ className, children, ...rest }: ItemGroupProps): react.JSX.Element;
|
|
31
38
|
|
|
32
39
|
export { Item, ItemGroup, type ItemGroupProps, type ItemProps, type ItemSize, type ItemVariant };
|
package/dist/components/item.js
CHANGED
|
@@ -6,14 +6,17 @@ import {
|
|
|
6
6
|
} from "../chunk-ORMEWXMH.js";
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
import { createContext, useContext } from "react";
|
|
9
|
+
const LEGACY_VARIANT = { default: "ghost", muted: "soft" };
|
|
9
10
|
const InGroup = createContext(false);
|
|
10
11
|
function Item(_a) {
|
|
11
|
-
var _b = _a, { title, description, media, action, variant = "
|
|
12
|
+
var _b = _a, { title, description, media, action, variant = "ghost", size = "md", className } = _b, rest = __objRest(_b, ["title", "description", "media", "action", "variant", "size", "className"]);
|
|
13
|
+
var _a2;
|
|
12
14
|
const Root = useContext(InGroup) ? "li" : "div";
|
|
15
|
+
const look = (_a2 = LEGACY_VARIANT[variant]) != null ? _a2 : variant;
|
|
13
16
|
return /* @__PURE__ */ jsxs(
|
|
14
17
|
Root,
|
|
15
18
|
__spreadProps(__spreadValues({}, rest), {
|
|
16
|
-
className: ["rds-item", `rds-item--${
|
|
19
|
+
className: ["rds-item", `rds-item--${look}`, size === "sm" && "rds-item--sm", className].filter(Boolean).join(" "),
|
|
17
20
|
children: [
|
|
18
21
|
media && /* @__PURE__ */ jsx("span", { className: "rds-item__media", children: media }),
|
|
19
22
|
/* @__PURE__ */ jsxs("span", { className: "rds-item__content", children: [
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { HTMLAttributes, ReactNode } from 'react';
|
|
3
3
|
|
|
4
|
+
/** The marker's shape (Figma: `kind`): it is the form, not the emphasis, so it is not a `variant`. */
|
|
5
|
+
type MarkerKind = 'inline' | 'border' | 'separator';
|
|
6
|
+
/** @deprecated Use MarkerKind (2.0.0-next: `variant` is `kind`, and default is inline). */
|
|
4
7
|
type MarkerVariant = 'default' | 'border' | 'separator';
|
|
5
8
|
interface MarkerProps extends HTMLAttributes<HTMLDivElement> {
|
|
6
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* inline (default): icon and text; border: with a line under it, to split rows; separator: the text between two
|
|
11
|
+
* lines (Figma: `kind`).
|
|
12
|
+
*/
|
|
13
|
+
kind?: MarkerKind;
|
|
14
|
+
/** @deprecated Use `kind` (2.0.0-next): default → inline, border and separator stay. */
|
|
7
15
|
variant?: MarkerVariant;
|
|
8
16
|
/** The assistant's status, a system note or a date (Figma: `text`). */
|
|
9
17
|
children: ReactNode;
|
|
@@ -19,6 +27,6 @@ interface MarkerProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
19
27
|
* Marker — Figma [RDS] Chat/Marker. A line inside the conversation that is not a message: the assistant's status
|
|
20
28
|
* ("Buscando…"), a system note or a date between two lines. Styles: marker.css.
|
|
21
29
|
*/
|
|
22
|
-
declare function Marker({ variant, children, icon, loading, className, ...rest }: MarkerProps): react.JSX.Element;
|
|
30
|
+
declare function Marker({ kind: kindProp, variant, children, icon, loading, className, ...rest }: MarkerProps): react.JSX.Element;
|
|
23
31
|
|
|
24
|
-
export { Marker, type MarkerProps, type MarkerVariant };
|
|
32
|
+
export { Marker, type MarkerKind, type MarkerProps, type MarkerVariant };
|
|
@@ -7,10 +7,11 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
7
7
|
import { SparklesIcon } from "./internal/icons.js";
|
|
8
8
|
import { Spinner } from "./spinner.js";
|
|
9
9
|
function Marker(_a) {
|
|
10
|
-
var _b = _a, {
|
|
11
|
-
const
|
|
10
|
+
var _b = _a, { kind: kindProp, variant, children, icon = /* @__PURE__ */ jsx(SparklesIcon, {}), loading, className } = _b, rest = __objRest(_b, ["kind", "variant", "children", "icon", "loading", "className"]);
|
|
11
|
+
const kind = kindProp != null ? kindProp : variant === "default" || variant === void 0 ? "inline" : variant;
|
|
12
|
+
const classes = ["rds-marker", `rds-marker--${kind}`, className].filter(Boolean).join(" ");
|
|
12
13
|
const role = loading ? "status" : void 0;
|
|
13
|
-
if (
|
|
14
|
+
if (kind === "separator") {
|
|
14
15
|
return /* @__PURE__ */ jsxs("div", __spreadProps(__spreadValues({ role }, rest), { className: classes, children: [
|
|
15
16
|
/* @__PURE__ */ jsx("span", { className: "rds-marker__line", "aria-hidden": "true" }),
|
|
16
17
|
/* @__PURE__ */ jsx("span", { className: "rds-marker__text", children }),
|
|
@@ -53,7 +53,7 @@ interface NumberInputProps extends Omit<FieldTextProps, 'labelPosition'> {
|
|
|
53
53
|
* booking, instalments). The number in the middle is typed; the field is a spinbutton, so the arrows move it (Page
|
|
54
54
|
* Up/Down by ten steps, Home/End to the limits) and − and + stay out of the Tab order. At a limit its button turns
|
|
55
55
|
* off. A price, a CPF or a CEP is the Input; a continuous range, the Slider; the steps of a flow, the
|
|
56
|
-
*
|
|
56
|
+
* Stepper. Styles: number-input.css and internal/field.css.
|
|
57
57
|
*/
|
|
58
58
|
declare function NumberInput({ label, hint, error, errorMessage, required, value, defaultValue, onChange, min, max, step, unit, steps, stepsLabel, debounce, decrementLabel, incrementLabel, name, placeholder, disabled, id, className, style, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, }: NumberInputProps): react.JSX.Element;
|
|
59
59
|
|
|
@@ -3,7 +3,7 @@ import { HTMLAttributes, ReactNode } from 'react';
|
|
|
3
3
|
|
|
4
4
|
/** task: something moving to the end (upload, import). measure: a value inside a known range (quota used). */
|
|
5
5
|
type ProgressKind = 'task' | 'measure';
|
|
6
|
-
type ProgressSize = '
|
|
6
|
+
type ProgressSize = 'md' | 'sm';
|
|
7
7
|
interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
8
8
|
/** 0 to `max` (Figma: `value`, 0 to 100 in steps of 5; the code takes any value). */
|
|
9
9
|
value: number;
|
|
@@ -18,8 +18,8 @@ interface ProgressProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'>
|
|
|
18
18
|
valueText?: ReactNode;
|
|
19
19
|
/** task → role="progressbar"; measure → role="meter". */
|
|
20
20
|
kind?: ProgressKind;
|
|
21
|
-
/**
|
|
22
|
-
size?: ProgressSize;
|
|
21
|
+
/** md: 8px bar (default); sm: 4px, for dense lists (Figma: `size`). `'default'` is deprecated (2.0.0-next): it is `'md'`. */
|
|
22
|
+
size?: ProgressSize | 'default';
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
25
|
* Progress — Figma [RDS] Indicators/Progress. A bar with a value: the track is the brand tint, the fill the first
|
|
@@ -15,7 +15,7 @@ function Progress(_a) {
|
|
|
15
15
|
showValue = true,
|
|
16
16
|
valueText,
|
|
17
17
|
kind = "task",
|
|
18
|
-
size = "
|
|
18
|
+
size = "md",
|
|
19
19
|
className
|
|
20
20
|
} = _b, rest = __objRest(_b, [
|
|
21
21
|
"value",
|
|
@@ -32,7 +32,7 @@ function Progress(_a) {
|
|
|
32
32
|
const clamped = Math.min(Math.max(value, 0), max);
|
|
33
33
|
const percent = max > 0 ? clamped / max * 100 : 0;
|
|
34
34
|
const text = valueText != null ? valueText : `${Math.round(percent)}%`;
|
|
35
|
-
return /* @__PURE__ */ jsxs("div", __spreadProps(__spreadValues({}, rest), { className: ["rds-progress", `rds-progress--${size}`, className].filter(Boolean).join(" "), children: [
|
|
35
|
+
return /* @__PURE__ */ jsxs("div", __spreadProps(__spreadValues({}, rest), { className: ["rds-progress", `rds-progress--${size === "default" ? "md" : size}`, className].filter(Boolean).join(" "), children: [
|
|
36
36
|
(showLabel || showValue) && /* @__PURE__ */ jsxs("div", { className: "rds-progress__row", children: [
|
|
37
37
|
showLabel && /* @__PURE__ */ jsx("span", { id: labelId, className: "rds-progress__label", children: label }),
|
|
38
38
|
showValue && /* @__PURE__ */ jsx("span", { className: "rds-progress__value", "aria-hidden": "true", children: text })
|
|
@@ -4,6 +4,9 @@ import { ReactNode } from 'react';
|
|
|
4
4
|
interface RowActionItem {
|
|
5
5
|
label: string;
|
|
6
6
|
icon?: ReactNode;
|
|
7
|
+
/** neutral (default) or danger: danger items go last, after a separator. */
|
|
8
|
+
tone?: 'neutral' | 'danger';
|
|
9
|
+
/** @deprecated Use `tone` (2.0.0-next): default → neutral, danger stays. */
|
|
7
10
|
variant?: 'default' | 'danger';
|
|
8
11
|
disabled?: boolean;
|
|
9
12
|
onClick: () => void;
|
|
@@ -13,10 +13,14 @@ function RowActions({
|
|
|
13
13
|
items = [],
|
|
14
14
|
dangerSeparator
|
|
15
15
|
}) {
|
|
16
|
-
const
|
|
16
|
+
const isDanger = (i) => {
|
|
17
|
+
var _a;
|
|
18
|
+
return ((_a = i.tone) != null ? _a : i.variant) === "danger";
|
|
19
|
+
};
|
|
20
|
+
const hasDanger = items.some(isDanger);
|
|
17
21
|
const showSep = dangerSeparator != null ? dangerSeparator : hasDanger;
|
|
18
|
-
const normalItems = showSep ? items.filter((i) => i
|
|
19
|
-
const dangerItems = showSep ? items.filter(
|
|
22
|
+
const normalItems = showSep ? items.filter((i) => !isDanger(i)) : items;
|
|
23
|
+
const dangerItems = showSep ? items.filter(isDanger) : [];
|
|
20
24
|
return /* @__PURE__ */ jsxs("div", { className: "rds-row-actions", children: [
|
|
21
25
|
primaryHref ? /* @__PURE__ */ jsx(Button, { asChild: true, variant: "outline", tone: "neutral", children: /* @__PURE__ */ jsx("a", { href: primaryHref, onClick: (e) => e.stopPropagation(), children: primaryLabel }) }) : primaryOnClick ? /* @__PURE__ */ jsx(
|
|
22
26
|
Button,
|
|
@@ -48,7 +52,7 @@ function RowActions({
|
|
|
48
52
|
DropdownMenuItem,
|
|
49
53
|
{
|
|
50
54
|
icon: item.icon,
|
|
51
|
-
tone: item
|
|
55
|
+
tone: isDanger(item) ? "danger" : "neutral",
|
|
52
56
|
disabled: item.disabled,
|
|
53
57
|
onSelect: item.onClick,
|
|
54
58
|
children: item.label
|
|
@@ -21,13 +21,25 @@ interface SavingBarProps extends HTMLAttributes<HTMLDivElement> {
|
|
|
21
21
|
saveLabel?: string;
|
|
22
22
|
retryLabel?: string;
|
|
23
23
|
discardLabel?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Turns the unsaved message into a button that opens what is missing (a Drawer with the checklist), in the
|
|
26
|
+
* compact arrangement only; expanded, the message stays text (Figma: `showDetails`).
|
|
27
|
+
*/
|
|
28
|
+
onDetails?: () => void;
|
|
29
|
+
/** Said after the message in the details button's accessible name, hidden on screen. */
|
|
30
|
+
detailsLabel?: string;
|
|
31
|
+
/** Whether the panel the details button opens is open (aria-expanded). */
|
|
32
|
+
detailsExpanded?: boolean;
|
|
33
|
+
/** The id of that panel (aria-controls). */
|
|
34
|
+
detailsControls?: string;
|
|
24
35
|
}
|
|
25
36
|
/**
|
|
26
37
|
* SavingBar — Figma [RDS] Actions/SavingBar. Shows at the foot of the screen while a change is not
|
|
27
|
-
* saved, and leaves once saved.
|
|
28
|
-
* decision, not a notice. It does not place itself: put it
|
|
29
|
-
* Its Buttons
|
|
38
|
+
* saved, and leaves once saved. It is the brand plate on purpose (.ds-plate on the bar, in every brand and in
|
|
39
|
+
* light or dark alike): a state that waits for a decision, not a notice. It does not place itself: put it
|
|
40
|
+
* sticky or fixed at the bottom. Its Buttons are Salvar in tone action and Descartar in tone neutral ghost, read
|
|
41
|
+
* inside the plate. Styles: saving-bar.css.
|
|
30
42
|
*/
|
|
31
|
-
declare function SavingBar({ status, message, savingMessage, errorMessage, onSave, onDiscard, saveLabel, retryLabel, discardLabel, className, ...rest }: SavingBarProps): react.JSX.Element;
|
|
43
|
+
declare function SavingBar({ status, message, savingMessage, errorMessage, onSave, onDiscard, saveLabel, retryLabel, discardLabel, onDetails, detailsLabel, detailsExpanded, detailsControls, className, ...rest }: SavingBarProps): react.JSX.Element;
|
|
32
44
|
|
|
33
45
|
export { SavingBar, type SavingBarProps, type SavingBarStatus };
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
8
|
import { Button } from "./button.js";
|
|
9
9
|
import { Loader } from "./internal/button.js";
|
|
10
|
-
import { AlertIcon } from "./internal/icons.js";
|
|
10
|
+
import { AlertIcon, ChevronUpIcon } from "./internal/icons.js";
|
|
11
11
|
function SavingBar(_a) {
|
|
12
12
|
var _b = _a, {
|
|
13
13
|
status = "unsaved",
|
|
@@ -19,6 +19,10 @@ function SavingBar(_a) {
|
|
|
19
19
|
saveLabel = "Salvar",
|
|
20
20
|
retryLabel = "Tentar de novo",
|
|
21
21
|
discardLabel = "Descartar",
|
|
22
|
+
onDetails,
|
|
23
|
+
detailsLabel = "Ver o que falta",
|
|
24
|
+
detailsExpanded,
|
|
25
|
+
detailsControls,
|
|
22
26
|
className
|
|
23
27
|
} = _b, rest = __objRest(_b, [
|
|
24
28
|
"status",
|
|
@@ -30,28 +34,52 @@ function SavingBar(_a) {
|
|
|
30
34
|
"saveLabel",
|
|
31
35
|
"retryLabel",
|
|
32
36
|
"discardLabel",
|
|
37
|
+
"onDetails",
|
|
38
|
+
"detailsLabel",
|
|
39
|
+
"detailsExpanded",
|
|
40
|
+
"detailsControls",
|
|
33
41
|
"className"
|
|
34
42
|
]);
|
|
35
43
|
const saving = status === "saving";
|
|
36
44
|
const error = status === "error";
|
|
37
|
-
|
|
45
|
+
const text = saving ? savingMessage : error ? errorMessage : message;
|
|
46
|
+
const details = status === "unsaved" && onDetails !== void 0;
|
|
47
|
+
return /* @__PURE__ */ jsx(
|
|
38
48
|
"div",
|
|
39
49
|
__spreadProps(__spreadValues({
|
|
40
50
|
role: "region",
|
|
41
51
|
"aria-label": "Salvar altera\xE7\xF5es"
|
|
42
52
|
}, rest), {
|
|
43
|
-
className: ["rds-savingbar", className].filter(Boolean).join(" "),
|
|
44
|
-
children: [
|
|
45
|
-
/* @__PURE__ */ jsxs("p", { className: "rds-savingbar__message", role: "status", children: [
|
|
53
|
+
className: ["rds-savingbar", "ds-plate", className].filter(Boolean).join(" "),
|
|
54
|
+
children: /* @__PURE__ */ jsxs("div", { className: "rds-savingbar__row", children: [
|
|
55
|
+
/* @__PURE__ */ jsxs("p", { className: ["rds-savingbar__message", details && "rds-savingbar__message--details"].filter(Boolean).join(" "), role: "status", children: [
|
|
46
56
|
saving && /* @__PURE__ */ jsx("span", { className: "rds-savingbar__icon rds-savingbar__loader", "aria-hidden": "true", children: /* @__PURE__ */ jsx(Loader, {}) }),
|
|
47
57
|
error && /* @__PURE__ */ jsx("span", { className: "rds-savingbar__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx(AlertIcon, {}) }),
|
|
48
|
-
/* @__PURE__ */ jsx("span", {
|
|
58
|
+
/* @__PURE__ */ jsx("span", { className: "rds-savingbar__text", children: text }),
|
|
59
|
+
details && /* @__PURE__ */ jsxs(
|
|
60
|
+
"button",
|
|
61
|
+
{
|
|
62
|
+
type: "button",
|
|
63
|
+
className: "rds-savingbar__details",
|
|
64
|
+
"aria-expanded": detailsExpanded != null ? detailsExpanded : false,
|
|
65
|
+
"aria-controls": detailsControls,
|
|
66
|
+
onClick: onDetails,
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ jsx("span", { className: "rds-savingbar__text", children: text }),
|
|
69
|
+
/* @__PURE__ */ jsxs("span", { className: "rds-visually-hidden", children: [
|
|
70
|
+
", ",
|
|
71
|
+
detailsLabel
|
|
72
|
+
] }),
|
|
73
|
+
/* @__PURE__ */ jsx("span", { className: "rds-savingbar__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx(ChevronUpIcon, {}) })
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
)
|
|
49
77
|
] }),
|
|
50
78
|
/* @__PURE__ */ jsxs("div", { className: "rds-savingbar__actions", children: [
|
|
51
|
-
onDiscard && /* @__PURE__ */ jsx(Button, { tone: "
|
|
52
|
-
/* @__PURE__ */ jsx(Button, { tone: "
|
|
79
|
+
onDiscard && /* @__PURE__ */ jsx(Button, { tone: "neutral", variant: "ghost", disabled: saving, onClick: onDiscard, children: discardLabel }),
|
|
80
|
+
/* @__PURE__ */ jsx(Button, { tone: "action", variant: "fill", disabled: saving, onClick: onSave, children: error ? retryLabel : saveLabel })
|
|
53
81
|
] })
|
|
54
|
-
]
|
|
82
|
+
] })
|
|
55
83
|
})
|
|
56
84
|
);
|
|
57
85
|
}
|
|
@@ -6,12 +6,13 @@ import { ReactNode } from 'react';
|
|
|
6
6
|
* title, kept because SettingsList composes it and the products still use it. New code uses
|
|
7
7
|
* `<PageHeader titleAs="h2" title description actions />`.
|
|
8
8
|
*
|
|
9
|
-
* action → actions. eyebrow and number (not in the Figma) still render as a line above the
|
|
9
|
+
* action → actions. eyebrow and number are deprecated (not in the Figma); they still render as a line above the
|
|
10
|
+
* title. Styles: section-header.css.
|
|
10
11
|
*/
|
|
11
12
|
interface SectionHeaderProps {
|
|
12
|
-
/**
|
|
13
|
+
/** @deprecated Not in the Figma [RDS] (the SectionHeader pattern): a small uppercase line above the title. */
|
|
13
14
|
eyebrow?: string;
|
|
14
|
-
/**
|
|
15
|
+
/** @deprecated Not in the Figma [RDS]: the section or step number, before the eyebrow ("02 · CONTEÚDO"). */
|
|
15
16
|
number?: string;
|
|
16
17
|
title: string;
|
|
17
18
|
description?: string;
|