@exsto/ds 0.0.1-rc.16 → 0.0.1-rc.18
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 +38 -0
- package/dist/ds/src/file-input.d.ts +9 -0
- package/dist/ds/src/time-field.d.ts +9 -0
- package/dist/file-input.js +2 -0
- package/dist/index.js +4 -3
- package/dist/source-hash.txt +1 -1
- package/dist/styles.css +176 -38
- package/dist/time-field.js +2 -0
- package/dist/ui/src/components/edyn/file-input/file-input.d.ts +90 -0
- package/dist/ui/src/components/edyn/file-input/file-input.js +261 -0
- package/dist/ui/src/components/edyn/file-input/file-input.js.map +1 -0
- package/dist/ui/src/components/edyn/file-input/file-input.test.d.ts +8 -0
- package/dist/ui/src/components/edyn/file-input/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/multi-select/multi-select.d.ts +12 -1
- package/dist/ui/src/components/edyn/multi-select/multi-select.js +11 -7
- package/dist/ui/src/components/edyn/multi-select/multi-select.js.map +1 -1
- package/dist/ui/src/components/edyn/presence/presence.d.ts +1 -1
- package/dist/ui/src/components/edyn/presence/presence.js +5 -1
- package/dist/ui/src/components/edyn/presence/presence.js.map +1 -1
- package/dist/ui/src/components/edyn/time-field/index.d.ts +1 -0
- package/dist/ui/src/components/edyn/time-field/time-field.d.ts +85 -0
- package/dist/ui/src/components/edyn/time-field/time-field.js +330 -0
- package/dist/ui/src/components/edyn/time-field/time-field.js.map +1 -0
- package/dist/ui/src/components/edyn/time-field/time-field.test.d.ts +8 -0
- package/dist/ui/src/components/ui/calendar/calendar.behavior.test.d.ts +9 -0
- package/dist/ui/src/components/ui/calendar/calendar.d.ts +1 -1
- package/dist/ui/src/components/ui/calendar/calendar.js +33 -2
- package/dist/ui/src/components/ui/calendar/calendar.js.map +1 -1
- package/dist/ui/src/components/ui/combobox/combobox.d.ts +10 -0
- package/dist/ui/src/components/ui/combobox/combobox.js +37 -5
- package/dist/ui/src/components/ui/combobox/combobox.js.map +1 -1
- package/dist/ui/src/components/ui/context-menu/context-menu.d.ts +1 -1
- package/dist/ui/src/components/ui/context-menu/context-menu.js +23 -10
- package/dist/ui/src/components/ui/context-menu/context-menu.js.map +1 -1
- package/dist/ui/src/components/ui/dropdown-menu/dropdown-menu.js +5 -4
- package/dist/ui/src/components/ui/dropdown-menu/dropdown-menu.js.map +1 -1
- package/dist/ui/src/components/ui/menubar/menubar.js +1 -1
- package/dist/ui/src/components/ui/menubar/menubar.js.map +1 -1
- package/dist/ui/src/components/ui/scroll-area/scroll-area.js +1 -1
- package/dist/ui/src/components/ui/scroll-area/scroll-area.js.map +1 -1
- package/dist/ui/src/components/ui/select/select.js +7 -6
- package/dist/ui/src/components/ui/select/select.js.map +1 -1
- package/dist/ui/src/components/ui/sheet/sheet.d.ts +8 -0
- package/dist/ui/src/components/ui/sheet/sheet.js +11 -3
- package/dist/ui/src/components/ui/sheet/sheet.js.map +1 -1
- package/dist/ui/src/components/ui/table/table.d.ts +9 -2
- package/dist/ui/src/components/ui/table/table.js +19 -6
- package/dist/ui/src/components/ui/table/table.js.map +1 -1
- package/dist/ui/src/index.d.ts +1 -0
- package/dist/ui/src/lib/popup-list.d.ts +29 -4
- package/dist/ui/src/lib/popup-list.js +30 -5
- package/dist/ui/src/lib/popup-list.js.map +1 -1
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -81,6 +81,8 @@ query, so a subtree can be dark inside a light page.
|
|
|
81
81
|
|---|---|
|
|
82
82
|
| `@exsto/ds` | React components |
|
|
83
83
|
| `@exsto/ds/date-picker` | The DatePicker (one day, typed or picked), on its own entry so the main one stays inside its size budget |
|
|
84
|
+
| `@exsto/ds/time-field` | The TimeField (a time of day typed in segments), on its own entry for the same reason |
|
|
85
|
+
| `@exsto/ds/file-input` | The FileInput (files picked or dropped, listed and removable), on its own entry for the same reason |
|
|
84
86
|
| `@exsto/ds/rich-text-editor` | The rich-text editor, on its own entry so its engine loads only where it is used |
|
|
85
87
|
| `@exsto/ds/styles.css` | Precompiled tokens and component styles |
|
|
86
88
|
| `@exsto/ds/theme.css` | Uncompiled tokens, brand layer, and the Tailwind `@theme` mapping |
|
|
@@ -152,6 +154,42 @@ const missing = state.kind === 'empty'; // 'refused' is already said by the pick
|
|
|
152
154
|
|
|
153
155
|
Refused text is reported each time it changes, also when the field held no day before, and emptying the field afterwards reports `empty`. A parent's `aria-invalid` only draws the invalid border; the picker's own message is added to `aria-describedby` once, after the parent's. `DateRangePicker`, for a range, is in the main entry.
|
|
154
156
|
|
|
157
|
+
## Time
|
|
158
|
+
|
|
159
|
+
`TimeField` is a time of day typed in segments (hours, minutes, optional seconds, AM/PM where the locale uses it), with ArrowUp and ArrowDown to step a segment, ArrowLeft and ArrowRight to move between them, and the names a screen reader needs for each. It is on its own entry, like the DatePicker. The value is an `HH:mm` (or `HH:mm:ss`) string in 24-hour form, whatever the hour cycle on screen.
|
|
160
|
+
|
|
161
|
+
```tsx
|
|
162
|
+
import { TimeField } from '@exsto/ds/time-field';
|
|
163
|
+
|
|
164
|
+
<TimeField aria-label="Start time" value={time} onValueChange={setTime} />;
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## Files
|
|
168
|
+
|
|
169
|
+
`FileInput` chooses files by picking or dropping them. A real `<input type="file">` lies under the drop area, so Tab, Enter and Space, the system's file dialog, a drop and a screen reader's name come from the browser; on top of that it lists the chosen files with their sizes and a remove button named after each, checks them against `accept`, `maxSize` and `maxFiles` (a drop skips the dialog's own filter), and says in one live region what was added, removed or refused. It is on its own entry, like the DatePicker.
|
|
170
|
+
|
|
171
|
+
```tsx
|
|
172
|
+
import { FileInput } from '@exsto/ds/file-input';
|
|
173
|
+
|
|
174
|
+
<FileInput aria-label="Attachments" multiple accept=".pdf,image/*" maxSize={5 * 1024 * 1024} value={files} onValueChange={setFiles} onReject={(rejected) => report(rejected)} />;
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Open popups and keyboard audits
|
|
178
|
+
|
|
179
|
+
While a menu, dialog, sheet, popover, select or drawer is open, Base UI puts two empty `<span tabindex="0" data-base-ui-focus-guard>` around it. They are the sentinels that hand focus back into the popup when Tab runs past either end, so they are focusable on purpose, and they always were. From `0.0.1-rc.16` the design system also takes their `aria-hidden` off while the popup is open, because a focusable element that is hidden from assistive technology fails axe's `aria-hidden-focus` (WCAG 4.1.2). A check that walks the Tab order should skip `[data-base-ui-focus-guard]`, as it skips any other sentinel: they hold no text and name nothing.
|
|
180
|
+
|
|
181
|
+
## Composing a popup of your own
|
|
182
|
+
|
|
183
|
+
Select, Combobox, MultiSelect and the menus share one shape, and the pieces are exported so a popup an app builds itself matches them instead of copying their classes:
|
|
184
|
+
|
|
185
|
+
```tsx
|
|
186
|
+
import { cn, POPUP_FRAME_CLASS, POPUP_LIST_HEIGHT_CLASS, POPUP_LIST_WIDTH_CLASS, popupItemClass } from '@exsto/ds';
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
- `popupItemClass(flavor?, checkable?)` is one row: 32px tall, 8px of padding, the highlight and the chosen weight. `'base-ui'` (the default) is for Base UI parts, `'cmdk'` for cmdk's; `checkable` leaves room at the end for the check, which sits at `POPUP_ITEM_INDICATOR_CLASS`.
|
|
190
|
+
- `POPUP_GROUP_LABEL_CLASS` is a group's heading. `ComboboxGroup`, `ComboboxLabel`, `ComboboxCollection` and `ComboboxSeparator` give a Combobox its groups, drawn the same way Select draws its own.
|
|
191
|
+
- `POPUP_FRAME_CLASS` is the frame (a 10px radius and a 1px ring, no border). `POPUP_LIST_WIDTH_CLASS` is its width: at least the control and 8rem, as wide as the longest row, 28rem at most. `POPUP_LIST_HEIGHT_CLASS` caps the scrolling part: eight rows, or as many whole rows as the room allows, so a list never ends on half a row. Put it on a `ScrollArea` that holds the list's own `p-1`, inside a popup that is a flex column with `max-h-(--available-height)`.
|
|
192
|
+
|
|
155
193
|
## Status
|
|
156
194
|
|
|
157
195
|
Release candidates (`0.0.1-rc.N`). The API is not stable yet; treat minor versions
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@exsto/ds/file-input` - the FileInput, on its own entry on purpose.
|
|
3
|
+
*
|
|
4
|
+
* A file field that is a real `<input type="file">` under a drop area, with the list of what was chosen, the checks against
|
|
5
|
+
* `accept`, `maxSize` and `maxFiles`, and a live region that says what was added, removed or refused: about 10 KB unminified.
|
|
6
|
+
* Re-exported from `@exsto/ds` it would be one more thing in the entry every consumer loads and a bundler cannot always tell
|
|
7
|
+
* it unused. Here an app pays for it only on the pages that import this path.
|
|
8
|
+
*/
|
|
9
|
+
export * from '../../ui/src/components/edyn/file-input';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@exsto/ds/time-field` - the TimeField, on its own entry on purpose.
|
|
3
|
+
*
|
|
4
|
+
* A time of day typed in segments (hours, minutes, optional seconds, AM/PM where the locale uses it) with the arrow keys,
|
|
5
|
+
* Tab and the screen-reader names a native time input has: about 11 KB unminified. Re-exported from `@exsto/ds` it would be
|
|
6
|
+
* one more thing in the entry every consumer loads and a bundler cannot always tell it unused. Here an app pays for it only on
|
|
7
|
+
* the pages that import this path.
|
|
8
|
+
*/
|
|
9
|
+
export * from '../../ui/src/components/edyn/time-field';
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,8 @@ import { AVATAR_TONES, InitialsAvatar, avatarTone, initialsOf } from "./ui/src/c
|
|
|
13
13
|
import { useMergedRefs } from "./ui/src/hooks/use-merged-refs.js";
|
|
14
14
|
import { ScrollArea, ScrollBar } from "./ui/src/components/ui/scroll-area/scroll-area.js";
|
|
15
15
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./ui/src/components/ui/tooltip/tooltip.js";
|
|
16
|
-
import {
|
|
16
|
+
import { POPUP_FRAME_CLASS, POPUP_GROUP_LABEL_CLASS, POPUP_ITEM_INDICATOR_CLASS, POPUP_LIST_HEIGHT_CLASS, POPUP_LIST_WIDTH_CLASS, popupItemClass } from "./ui/src/lib/popup-list.js";
|
|
17
|
+
import { DEFAULT_MULTI_SELECT_LABELS, MultiSelect, SEARCH_FROM, VIRTUALIZE_FROM, fullSelection, resolveChosen, summarize } from "./ui/src/components/edyn/multi-select/multi-select.js";
|
|
17
18
|
import { DEFAULT_PRESENCE_LABELS, PRESENCE_STATES, Presence } from "./ui/src/components/edyn/presence/presence.js";
|
|
18
19
|
import { PROGRESS_LINE_COLOR, ProgressLine } from "./ui/src/components/edyn/progress-line/progress-line.js";
|
|
19
20
|
import { RICH_TEXT_ATTRIBUTES, RICH_TEXT_ELEMENTS, RICH_TEXT_LINK_PROTOCOLS, isAllowedRichTextHref } from "./ui/src/components/edyn/rich-text-content/allow-list.js";
|
|
@@ -33,7 +34,7 @@ import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious
|
|
|
33
34
|
import { ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent } from "./ui/src/components/ui/chart/chart.js";
|
|
34
35
|
import { Checkbox } from "./ui/src/components/ui/checkbox/checkbox.js";
|
|
35
36
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "./ui/src/components/ui/collapsible/collapsible.js";
|
|
36
|
-
import { Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem } from "./ui/src/components/ui/combobox/combobox.js";
|
|
37
|
+
import { Combobox, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxSeparator } from "./ui/src/components/ui/combobox/combobox.js";
|
|
37
38
|
import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from "./ui/src/components/ui/dialog/dialog.js";
|
|
38
39
|
import { Input } from "./ui/src/components/ui/input/input.js";
|
|
39
40
|
import { Textarea } from "./ui/src/components/ui/textarea/textarea.js";
|
|
@@ -74,4 +75,4 @@ import { Tabs, TabsContent, TabsList, TabsTrigger, tabsListVariants } from "./ui
|
|
|
74
75
|
import { Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, createToastManager, toast, useToastManager } from "./ui/src/components/ui/toast/toast.js";
|
|
75
76
|
import { Toggle, toggleVariants } from "./ui/src/components/ui/toggle/toggle.js";
|
|
76
77
|
import { ToggleGroup, ToggleGroupItem } from "./ui/src/components/ui/toggle-group/toggle-group.js";
|
|
77
|
-
export { AVATAR_TONES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AnimatedNumber, AspectRatio, Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger, AudioPlayer, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxContent, ComboboxEmpty, ComboboxInput, ComboboxItem, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DEFAULT_MULTI_SELECT_LABELS, DEFAULT_PRESENCE_LABELS, DateRangePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldDescription, FieldError, FieldLabel, HoverCard, HoverCardContent, HoverCardTrigger, Indicator, InitialsAvatar, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, Marker, MarkerContent, MarkerIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, MultiSelect, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, NumberText, PRESENCE_STATES, PROGRESS_DURATION, PROGRESS_EASE, PROGRESS_LINE_COLOR, Pagination, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Presence, Progress, ProgressLine, Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle, RICH_TEXT_ATTRIBUTES, RICH_TEXT_BODY_CLASS, RICH_TEXT_ELEMENTS, RICH_TEXT_LINK_PROTOCOLS, RICH_TEXT_MENTION_CLASS, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RichTextContent, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, VIRTUALIZE_FROM, VideoPlayer, avatarTone, badgeVariants, buttonVariants, clampPage, cn, createToastManager, dateToDay, dayToDate, formatCount, formatMediaTime, fullSelection, getPaginationRange, indicatorVariants, initialsOf, isAllowedRichTextHref, markerVariants, navigationMenuTriggerStyle, progressFill, progressTrack, resolveChosen, richTextToNodes, spinnerVariants, summarize, tabsListVariants, toast, toggleVariants, useAnimatedValues, useCarousel, useDirection, useIsMobile, useMediaPlayer, useMergedRefs, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, useSidebar, useToastManager };
|
|
78
|
+
export { AVATAR_TONES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AnimatedNumber, AspectRatio, Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger, AudioPlayer, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxSeparator, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DEFAULT_MULTI_SELECT_LABELS, DEFAULT_PRESENCE_LABELS, DateRangePicker, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldDescription, FieldError, FieldLabel, HoverCard, HoverCardContent, HoverCardTrigger, Indicator, InitialsAvatar, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, Marker, MarkerContent, MarkerIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, MultiSelect, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, NumberText, POPUP_FRAME_CLASS, POPUP_GROUP_LABEL_CLASS, POPUP_ITEM_INDICATOR_CLASS, POPUP_LIST_HEIGHT_CLASS, POPUP_LIST_WIDTH_CLASS, PRESENCE_STATES, PROGRESS_DURATION, PROGRESS_EASE, PROGRESS_LINE_COLOR, Pagination, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Presence, Progress, ProgressLine, Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle, RICH_TEXT_ATTRIBUTES, RICH_TEXT_BODY_CLASS, RICH_TEXT_ELEMENTS, RICH_TEXT_LINK_PROTOCOLS, RICH_TEXT_MENTION_CLASS, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RichTextContent, SEARCH_FROM, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, VIRTUALIZE_FROM, VideoPlayer, avatarTone, badgeVariants, buttonVariants, clampPage, cn, createToastManager, dateToDay, dayToDate, formatCount, formatMediaTime, fullSelection, getPaginationRange, indicatorVariants, initialsOf, isAllowedRichTextHref, markerVariants, navigationMenuTriggerStyle, popupItemClass, progressFill, progressTrack, resolveChosen, richTextToNodes, spinnerVariants, summarize, tabsListVariants, toast, toggleVariants, useAnimatedValues, useCarousel, useDirection, useIsMobile, useMediaPlayer, useMergedRefs, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, useSidebar, useToastManager };
|
package/dist/source-hash.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
e7f64dd8a5e900b4cc6189554ed97571e1a11bc66a714ebfa14d32bfe3bae156
|
package/dist/styles.css
CHANGED
|
@@ -1128,6 +1128,10 @@
|
|
|
1128
1128
|
max-height: calc(var(--spacing) * 88);
|
|
1129
1129
|
}
|
|
1130
1130
|
|
|
1131
|
+
.max-h-\[min\(16\.5rem\,round\(down\,var\(--available-height\,100dvh\)_-_0\.5rem\,2rem\)_\+_0\.5rem\)\] {
|
|
1132
|
+
max-height: min(16.5rem, round(down, var(--available-height, 100dvh) - .5rem, 2rem) + .5rem);
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1131
1135
|
.max-h-inherit {
|
|
1132
1136
|
max-height: inherit;
|
|
1133
1137
|
}
|
|
@@ -1220,6 +1224,10 @@
|
|
|
1220
1224
|
width: calc(var(--spacing) * 5);
|
|
1221
1225
|
}
|
|
1222
1226
|
|
|
1227
|
+
.w-7 {
|
|
1228
|
+
width: calc(var(--spacing) * 7);
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1223
1231
|
.w-10 {
|
|
1224
1232
|
width: calc(var(--spacing) * 10);
|
|
1225
1233
|
}
|
|
@@ -1280,10 +1288,6 @@
|
|
|
1280
1288
|
max-width: calc(100% - 2rem);
|
|
1281
1289
|
}
|
|
1282
1290
|
|
|
1283
|
-
.max-w-\[max\(24rem\,var\(--anchor-width\)\)\] {
|
|
1284
|
-
max-width: max(24rem, var(--anchor-width));
|
|
1285
|
-
}
|
|
1286
|
-
|
|
1287
1291
|
.max-w-\[max\(var\(--anchor-width\)\,min\(28rem\,var\(--available-width\)\)\)\] {
|
|
1288
1292
|
max-width: max(var(--anchor-width), min(28rem, var(--available-width)));
|
|
1289
1293
|
}
|
|
@@ -1304,10 +1308,6 @@
|
|
|
1304
1308
|
max-width: var(--container-xs);
|
|
1305
1309
|
}
|
|
1306
1310
|
|
|
1307
|
-
.min-w-\(--anchor-width\) {
|
|
1308
|
-
min-width: var(--anchor-width);
|
|
1309
|
-
}
|
|
1310
|
-
|
|
1311
1311
|
.min-w-\(--cell-size\) {
|
|
1312
1312
|
min-width: var(--cell-size);
|
|
1313
1313
|
}
|
|
@@ -1332,10 +1332,6 @@
|
|
|
1332
1332
|
min-width: calc(var(--spacing) * 32);
|
|
1333
1333
|
}
|
|
1334
1334
|
|
|
1335
|
-
.min-w-36 {
|
|
1336
|
-
min-width: calc(var(--spacing) * 36);
|
|
1337
|
-
}
|
|
1338
|
-
|
|
1339
1335
|
.min-w-40 {
|
|
1340
1336
|
min-width: calc(var(--spacing) * 40);
|
|
1341
1337
|
}
|
|
@@ -1348,12 +1344,8 @@
|
|
|
1348
1344
|
min-width: 14ch;
|
|
1349
1345
|
}
|
|
1350
1346
|
|
|
1351
|
-
.min-w-\[
|
|
1352
|
-
min-width:
|
|
1353
|
-
}
|
|
1354
|
-
|
|
1355
|
-
.min-w-\[var\(--anchor-width\)\] {
|
|
1356
|
-
min-width: var(--anchor-width);
|
|
1347
|
+
.min-w-\[max\(8rem\,var\(--anchor-width\)\)\] {
|
|
1348
|
+
min-width: max(8rem, var(--anchor-width));
|
|
1357
1349
|
}
|
|
1358
1350
|
|
|
1359
1351
|
.flex-1 {
|
|
@@ -1567,6 +1559,10 @@
|
|
|
1567
1559
|
cursor: default;
|
|
1568
1560
|
}
|
|
1569
1561
|
|
|
1562
|
+
.cursor-not-allowed {
|
|
1563
|
+
cursor: not-allowed;
|
|
1564
|
+
}
|
|
1565
|
+
|
|
1570
1566
|
.cursor-pointer {
|
|
1571
1567
|
cursor: pointer;
|
|
1572
1568
|
}
|
|
@@ -1799,6 +1795,10 @@
|
|
|
1799
1795
|
overflow-x: hidden !important;
|
|
1800
1796
|
}
|
|
1801
1797
|
|
|
1798
|
+
.overflow-x-visible {
|
|
1799
|
+
overflow-x: visible;
|
|
1800
|
+
}
|
|
1801
|
+
|
|
1802
1802
|
.overflow-y-auto {
|
|
1803
1803
|
overflow-y: auto;
|
|
1804
1804
|
}
|
|
@@ -1984,6 +1984,10 @@
|
|
|
1984
1984
|
}
|
|
1985
1985
|
}
|
|
1986
1986
|
|
|
1987
|
+
.border-destructive {
|
|
1988
|
+
border-color: var(--destructive);
|
|
1989
|
+
}
|
|
1990
|
+
|
|
1987
1991
|
.border-input {
|
|
1988
1992
|
border-color: var(--input);
|
|
1989
1993
|
}
|
|
@@ -2377,10 +2381,6 @@
|
|
|
2377
2381
|
padding-bottom: calc(var(--spacing) * 4);
|
|
2378
2382
|
}
|
|
2379
2383
|
|
|
2380
|
-
.pl-1\.5 {
|
|
2381
|
-
padding-left: calc(var(--spacing) * 1.5);
|
|
2382
|
-
}
|
|
2383
|
-
|
|
2384
2384
|
.pl-2 {
|
|
2385
2385
|
padding-left: calc(var(--spacing) * 2);
|
|
2386
2386
|
}
|
|
@@ -2619,6 +2619,11 @@
|
|
|
2619
2619
|
font-style: italic;
|
|
2620
2620
|
}
|
|
2621
2621
|
|
|
2622
|
+
.ordinal {
|
|
2623
|
+
--tw-ordinal: ordinal;
|
|
2624
|
+
font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, );
|
|
2625
|
+
}
|
|
2626
|
+
|
|
2622
2627
|
.tabular-nums {
|
|
2623
2628
|
--tw-numeric-spacing: tabular-nums;
|
|
2624
2629
|
font-variant-numeric: var(--tw-ordinal, ) var(--tw-slashed-zero, ) var(--tw-numeric-figure, ) var(--tw-numeric-spacing, ) var(--tw-numeric-fraction, );
|
|
@@ -2628,10 +2633,18 @@
|
|
|
2628
2633
|
text-decoration-line: underline;
|
|
2629
2634
|
}
|
|
2630
2635
|
|
|
2636
|
+
.underline-offset-3 {
|
|
2637
|
+
text-underline-offset: 3px;
|
|
2638
|
+
}
|
|
2639
|
+
|
|
2631
2640
|
.underline-offset-4 {
|
|
2632
2641
|
text-underline-offset: 4px;
|
|
2633
2642
|
}
|
|
2634
2643
|
|
|
2644
|
+
.caret-transparent {
|
|
2645
|
+
caret-color: #0000;
|
|
2646
|
+
}
|
|
2647
|
+
|
|
2635
2648
|
.opacity-0 {
|
|
2636
2649
|
opacity: 0;
|
|
2637
2650
|
}
|
|
@@ -2716,6 +2729,16 @@
|
|
|
2716
2729
|
--tw-ring-color: var(--card);
|
|
2717
2730
|
}
|
|
2718
2731
|
|
|
2732
|
+
.ring-destructive\/20 {
|
|
2733
|
+
--tw-ring-color: var(--destructive);
|
|
2734
|
+
}
|
|
2735
|
+
|
|
2736
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
2737
|
+
.ring-destructive\/20 {
|
|
2738
|
+
--tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);
|
|
2739
|
+
}
|
|
2740
|
+
}
|
|
2741
|
+
|
|
2719
2742
|
.ring-foreground\/10 {
|
|
2720
2743
|
--tw-ring-color: var(--foreground);
|
|
2721
2744
|
}
|
|
@@ -3050,6 +3073,10 @@
|
|
|
3050
3073
|
grid-column-start: 2;
|
|
3051
3074
|
}
|
|
3052
3075
|
|
|
3076
|
+
.group-data-highlighted\:text-foreground:is(:where(.group)[data-highlighted] *) {
|
|
3077
|
+
color: var(--foreground);
|
|
3078
|
+
}
|
|
3079
|
+
|
|
3053
3080
|
.group-data-indeterminate\/checkbox-indicator\:block:is(:where(.group\/checkbox-indicator)[data-indeterminate] *) {
|
|
3054
3081
|
display: block;
|
|
3055
3082
|
}
|
|
@@ -3556,6 +3583,14 @@
|
|
|
3556
3583
|
background-color: var(--primary);
|
|
3557
3584
|
}
|
|
3558
3585
|
|
|
3586
|
+
.selection\:bg-transparent ::selection {
|
|
3587
|
+
background-color: #0000;
|
|
3588
|
+
}
|
|
3589
|
+
|
|
3590
|
+
.selection\:bg-transparent::selection {
|
|
3591
|
+
background-color: #0000;
|
|
3592
|
+
}
|
|
3593
|
+
|
|
3559
3594
|
.selection\:text-primary-foreground ::selection {
|
|
3560
3595
|
color: var(--primary-foreground);
|
|
3561
3596
|
}
|
|
@@ -3761,6 +3796,12 @@
|
|
|
3761
3796
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
3762
3797
|
}
|
|
3763
3798
|
|
|
3799
|
+
.after\:-translate-x-1\/3:after {
|
|
3800
|
+
content: var(--tw-content);
|
|
3801
|
+
--tw-translate-x: calc(calc(1 / 3 * 100%) * -1);
|
|
3802
|
+
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
3803
|
+
}
|
|
3804
|
+
|
|
3764
3805
|
.after\:-translate-y-1\/2:after {
|
|
3765
3806
|
content: var(--tw-content);
|
|
3766
3807
|
--tw-translate-y: calc(calc(1 / 2 * 100%) * -1);
|
|
@@ -3778,11 +3819,33 @@
|
|
|
3778
3819
|
border-width: 1px;
|
|
3779
3820
|
}
|
|
3780
3821
|
|
|
3822
|
+
.after\:border-y-3:after {
|
|
3823
|
+
content: var(--tw-content);
|
|
3824
|
+
border-block-style: var(--tw-border-style);
|
|
3825
|
+
border-block-width: 3px;
|
|
3826
|
+
}
|
|
3827
|
+
|
|
3828
|
+
.after\:border-l-5:after {
|
|
3829
|
+
content: var(--tw-content);
|
|
3830
|
+
border-left-style: var(--tw-border-style);
|
|
3831
|
+
border-left-width: 5px;
|
|
3832
|
+
}
|
|
3833
|
+
|
|
3781
3834
|
.after\:border-border:after {
|
|
3782
3835
|
content: var(--tw-content);
|
|
3783
3836
|
border-color: var(--border);
|
|
3784
3837
|
}
|
|
3785
3838
|
|
|
3839
|
+
.after\:border-y-transparent:after {
|
|
3840
|
+
content: var(--tw-content);
|
|
3841
|
+
border-block-color: #0000;
|
|
3842
|
+
}
|
|
3843
|
+
|
|
3844
|
+
.after\:border-l-background:after {
|
|
3845
|
+
content: var(--tw-content);
|
|
3846
|
+
border-left-color: var(--background);
|
|
3847
|
+
}
|
|
3848
|
+
|
|
3786
3849
|
.after\:bg-background:after {
|
|
3787
3850
|
content: var(--tw-content);
|
|
3788
3851
|
background-color: var(--background);
|
|
@@ -3875,6 +3938,10 @@
|
|
|
3875
3938
|
border-bottom-right-radius: var(--radius);
|
|
3876
3939
|
}
|
|
3877
3940
|
|
|
3941
|
+
.empty\:hidden:empty {
|
|
3942
|
+
display: none;
|
|
3943
|
+
}
|
|
3944
|
+
|
|
3878
3945
|
.empty\:p-0:empty {
|
|
3879
3946
|
padding: 0;
|
|
3880
3947
|
}
|
|
@@ -3928,6 +3995,16 @@
|
|
|
3928
3995
|
}
|
|
3929
3996
|
}
|
|
3930
3997
|
|
|
3998
|
+
.hover\:bg-foreground\/4:hover {
|
|
3999
|
+
background-color: var(--foreground);
|
|
4000
|
+
}
|
|
4001
|
+
|
|
4002
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4003
|
+
.hover\:bg-foreground\/4:hover {
|
|
4004
|
+
background-color: color-mix(in oklab, var(--foreground) 4%, transparent);
|
|
4005
|
+
}
|
|
4006
|
+
}
|
|
4007
|
+
|
|
3931
4008
|
.hover\:bg-foreground\/6:hover {
|
|
3932
4009
|
background-color: var(--foreground);
|
|
3933
4010
|
}
|
|
@@ -4015,6 +4092,16 @@
|
|
|
4015
4092
|
background-color: var(--accent);
|
|
4016
4093
|
}
|
|
4017
4094
|
|
|
4095
|
+
.focus\:bg-foreground\/10:focus {
|
|
4096
|
+
background-color: var(--foreground);
|
|
4097
|
+
}
|
|
4098
|
+
|
|
4099
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4100
|
+
.focus\:bg-foreground\/10:focus {
|
|
4101
|
+
background-color: color-mix(in oklab, var(--foreground) 10%, transparent);
|
|
4102
|
+
}
|
|
4103
|
+
}
|
|
4104
|
+
|
|
4018
4105
|
.focus\:bg-muted:focus {
|
|
4019
4106
|
background-color: var(--muted);
|
|
4020
4107
|
}
|
|
@@ -4444,6 +4531,25 @@
|
|
|
4444
4531
|
padding: 0;
|
|
4445
4532
|
}
|
|
4446
4533
|
|
|
4534
|
+
.has-\[input\:focus-visible\]\:border-ring:has(:is(input:focus-visible)) {
|
|
4535
|
+
border-color: var(--ring);
|
|
4536
|
+
}
|
|
4537
|
+
|
|
4538
|
+
.has-\[input\:focus-visible\]\:ring-3:has(:is(input:focus-visible)) {
|
|
4539
|
+
--tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
|
|
4540
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
4541
|
+
}
|
|
4542
|
+
|
|
4543
|
+
.has-\[input\:focus-visible\]\:ring-ring\/50:has(:is(input:focus-visible)) {
|
|
4544
|
+
--tw-ring-color: var(--ring);
|
|
4545
|
+
}
|
|
4546
|
+
|
|
4547
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4548
|
+
.has-\[input\:focus-visible\]\:ring-ring\/50:has(:is(input:focus-visible)) {
|
|
4549
|
+
--tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);
|
|
4550
|
+
}
|
|
4551
|
+
}
|
|
4552
|
+
|
|
4447
4553
|
.has-\[select\:disabled\]\:opacity-50:has(:is(select:disabled)) {
|
|
4448
4554
|
opacity: .5;
|
|
4449
4555
|
}
|
|
@@ -4682,6 +4788,20 @@
|
|
|
4682
4788
|
opacity: 0;
|
|
4683
4789
|
}
|
|
4684
4790
|
|
|
4791
|
+
.data-dragging\:border-ring[data-dragging] {
|
|
4792
|
+
border-color: var(--ring);
|
|
4793
|
+
}
|
|
4794
|
+
|
|
4795
|
+
.data-dragging\:bg-foreground\/6[data-dragging] {
|
|
4796
|
+
background-color: var(--foreground);
|
|
4797
|
+
}
|
|
4798
|
+
|
|
4799
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
4800
|
+
.data-dragging\:bg-foreground\/6[data-dragging] {
|
|
4801
|
+
background-color: color-mix(in oklab, var(--foreground) 6%, transparent);
|
|
4802
|
+
}
|
|
4803
|
+
}
|
|
4804
|
+
|
|
4685
4805
|
.data-ending-style\:scale-90[data-ending-style] {
|
|
4686
4806
|
--tw-scale-x: 90%;
|
|
4687
4807
|
--tw-scale-y: 90%;
|
|
@@ -4710,6 +4830,10 @@
|
|
|
4710
4830
|
opacity: 1;
|
|
4711
4831
|
}
|
|
4712
4832
|
|
|
4833
|
+
.data-has-overflow-x\:pb-\(--scroll-bar-reserve\)[data-has-overflow-x] {
|
|
4834
|
+
padding-bottom: var(--scroll-bar-reserve);
|
|
4835
|
+
}
|
|
4836
|
+
|
|
4713
4837
|
.data-highlighted\:bg-foreground\/6[data-highlighted] {
|
|
4714
4838
|
background-color: var(--foreground);
|
|
4715
4839
|
}
|
|
@@ -4780,10 +4904,6 @@
|
|
|
4780
4904
|
border-color: var(--ring);
|
|
4781
4905
|
}
|
|
4782
4906
|
|
|
4783
|
-
.data-popup-open\:bg-accent[data-popup-open] {
|
|
4784
|
-
background-color: var(--accent);
|
|
4785
|
-
}
|
|
4786
|
-
|
|
4787
4907
|
.data-popup-open\:bg-foreground\/6[data-popup-open] {
|
|
4788
4908
|
background-color: var(--foreground);
|
|
4789
4909
|
}
|
|
@@ -4804,10 +4924,6 @@
|
|
|
4804
4924
|
}
|
|
4805
4925
|
}
|
|
4806
4926
|
|
|
4807
|
-
.data-popup-open\:text-accent-foreground[data-popup-open] {
|
|
4808
|
-
color: var(--accent-foreground);
|
|
4809
|
-
}
|
|
4810
|
-
|
|
4811
4927
|
.data-popup-open\:ring-3[data-popup-open] {
|
|
4812
4928
|
--tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
|
|
4813
4929
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
@@ -5852,6 +5968,16 @@
|
|
|
5852
5968
|
translate: var(--tw-translate-x) var(--tw-translate-y);
|
|
5853
5969
|
}
|
|
5854
5970
|
|
|
5971
|
+
.dark\:border-destructive\/50:is(.dark *) {
|
|
5972
|
+
border-color: var(--destructive);
|
|
5973
|
+
}
|
|
5974
|
+
|
|
5975
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
5976
|
+
.dark\:border-destructive\/50:is(.dark *) {
|
|
5977
|
+
border-color: color-mix(in oklab, var(--destructive) 50%, transparent);
|
|
5978
|
+
}
|
|
5979
|
+
}
|
|
5980
|
+
|
|
5855
5981
|
.dark\:border-input:is(.dark *) {
|
|
5856
5982
|
border-color: var(--input);
|
|
5857
5983
|
}
|
|
@@ -5942,6 +6068,16 @@
|
|
|
5942
6068
|
color: var(--color-red-300);
|
|
5943
6069
|
}
|
|
5944
6070
|
|
|
6071
|
+
.dark\:ring-destructive\/40:is(.dark *) {
|
|
6072
|
+
--tw-ring-color: var(--destructive);
|
|
6073
|
+
}
|
|
6074
|
+
|
|
6075
|
+
@supports (color: color-mix(in lab, red, red)) {
|
|
6076
|
+
.dark\:ring-destructive\/40:is(.dark *) {
|
|
6077
|
+
--tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);
|
|
6078
|
+
}
|
|
6079
|
+
}
|
|
6080
|
+
|
|
5945
6081
|
.dark\:group-data-checked\/questionnaire-choice\:bg-primary:is(.dark *):is(:is(:where(.group\/questionnaire-choice):where([data-state="checked"]), :where(.group\/questionnaire-choice):where([data-checked]:not([data-checked="false"]))) *) {
|
|
5946
6082
|
background-color: var(--primary);
|
|
5947
6083
|
}
|
|
@@ -6717,6 +6853,12 @@
|
|
|
6717
6853
|
border-bottom-width: 1px;
|
|
6718
6854
|
}
|
|
6719
6855
|
|
|
6856
|
+
@media (hover: hover) {
|
|
6857
|
+
.\[\&_tr\]\:hover\:bg-transparent tr:hover {
|
|
6858
|
+
background-color: #0000;
|
|
6859
|
+
}
|
|
6860
|
+
}
|
|
6861
|
+
|
|
6720
6862
|
.\[\&_tr\:last-child\]\:border-0 tr:last-child {
|
|
6721
6863
|
border-style: var(--tw-border-style);
|
|
6722
6864
|
border-width: 0;
|
|
@@ -6958,14 +7100,6 @@
|
|
|
6958
7100
|
color: currentColor;
|
|
6959
7101
|
}
|
|
6960
7102
|
|
|
6961
|
-
:is(.focus\:\*\:\[svg\]\:text-accent-foreground:focus > *):is(svg) {
|
|
6962
|
-
color: var(--accent-foreground);
|
|
6963
|
-
}
|
|
6964
|
-
|
|
6965
|
-
:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:text-destructive[data-variant="destructive"] > *):is(svg) {
|
|
6966
|
-
color: var(--destructive);
|
|
6967
|
-
}
|
|
6968
|
-
|
|
6969
7103
|
:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:text-destructive\![data-variant="destructive"] > *):is(svg) {
|
|
6970
7104
|
color: var(--destructive) !important;
|
|
6971
7105
|
}
|
|
@@ -7677,6 +7811,10 @@
|
|
|
7677
7811
|
initial-value: 0;
|
|
7678
7812
|
}
|
|
7679
7813
|
|
|
7814
|
+
[data-slot="scroll-area"] {
|
|
7815
|
+
--scroll-bar-reserve: calc(var(--scroll-bar-size) + var(--scroll-bar-gap));
|
|
7816
|
+
}
|
|
7817
|
+
|
|
7680
7818
|
[data-slot="scroll-area-scrollbar"] {
|
|
7681
7819
|
--scroll-bar-offset-top: calc(var(--scroll-bar-gap) + var(--scroll-bar-start));
|
|
7682
7820
|
--scroll-bar-length: calc(100% - var(--scroll-bar-gap) * 2 - var(--scroll-bar-start));
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { DEFAULT_TIME_FIELD_LABELS, EMPTY_TIME, TimeField, editSegment, formatTime, localeHourCycle, parseTime, rangeOf, stepValue, typeDigit } from "./ui/src/components/edyn/time-field/time-field.js";
|
|
2
|
+
export { DEFAULT_TIME_FIELD_LABELS, EMPTY_TIME, TimeField, editSegment, formatTime, localeHourCycle, parseTime, rangeOf, stepValue, typeDigit };
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from 'react';
|
|
2
|
+
export type TFileRejectReason = 'type' | 'size' | 'count';
|
|
3
|
+
export interface IFileRejection {
|
|
4
|
+
file: File;
|
|
5
|
+
reason: TFileRejectReason;
|
|
6
|
+
}
|
|
7
|
+
/** The words a FileInput says and announces. Pass the ones to change. */
|
|
8
|
+
export interface IFileInputLabels {
|
|
9
|
+
/** The prompt in the drop area when it takes one file, before the "browse" link. */
|
|
10
|
+
dropOne: string;
|
|
11
|
+
/** The same, when it takes several. */
|
|
12
|
+
dropMany: string;
|
|
13
|
+
browse: string;
|
|
14
|
+
/** The accessible name of the file chooser itself, when the caller gives it no name of its own. */
|
|
15
|
+
chooseOne: string;
|
|
16
|
+
chooseMany: string;
|
|
17
|
+
/** The accessible name of the list of chosen files. */
|
|
18
|
+
list: string;
|
|
19
|
+
remove: (name: string) => string;
|
|
20
|
+
/** Announced when files are added. */
|
|
21
|
+
added: (count: number) => string;
|
|
22
|
+
/** Announced when a file is taken out. */
|
|
23
|
+
removed: (name: string) => string;
|
|
24
|
+
/** Said, and shown, for a file that was refused. */
|
|
25
|
+
rejection: (name: string, reason: TFileRejectReason, limit: string) => string;
|
|
26
|
+
}
|
|
27
|
+
export declare const DEFAULT_FILE_INPUT_LABELS: IFileInputLabels;
|
|
28
|
+
/** 1,536 bytes as "1.5 KB": the size a person reads next to a file's name. */
|
|
29
|
+
export declare const formatBytes: (bytes: number) => string;
|
|
30
|
+
/** Whether a file is one `accept` allows: an extension (`.pdf`), a type (`application/pdf`) or a family of types (`image/*`). No `accept` allows all. */
|
|
31
|
+
export declare const matchesAccept: (file: {
|
|
32
|
+
name: string;
|
|
33
|
+
type: string;
|
|
34
|
+
}, accept: string | undefined) => boolean;
|
|
35
|
+
export interface ISortFilesInput {
|
|
36
|
+
incoming: readonly File[];
|
|
37
|
+
current: readonly File[];
|
|
38
|
+
multiple: boolean;
|
|
39
|
+
accept?: string;
|
|
40
|
+
maxSize?: number;
|
|
41
|
+
maxFiles?: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Which of the files just offered are taken, and which are refused and why. A file already chosen is skipped without a word. With one
|
|
45
|
+
* file allowed, the first acceptable one replaces what was chosen and the rest are refused as too many.
|
|
46
|
+
*/
|
|
47
|
+
export declare const sortFiles: ({ incoming, current, multiple, accept, maxSize, maxFiles, }: ISortFilesInput) => {
|
|
48
|
+
accepted: File[];
|
|
49
|
+
rejected: IFileRejection[];
|
|
50
|
+
};
|
|
51
|
+
export interface IFileInputProps extends Omit<ComponentPropsWithoutRef<'div'>, 'defaultValue' | 'onChange' | 'children' | 'id'> {
|
|
52
|
+
/** The chosen files. Leave it out and the field keeps them itself. */
|
|
53
|
+
value?: readonly File[];
|
|
54
|
+
defaultValue?: readonly File[];
|
|
55
|
+
onValueChange?: (files: File[]) => void;
|
|
56
|
+
/** What the picker offers, and what a drop is held to: extensions (`.pdf`), types (`application/pdf`) or families (`image/*`). */
|
|
57
|
+
accept?: string;
|
|
58
|
+
/** Several files, added to each other, instead of one that is replaced. */
|
|
59
|
+
multiple?: boolean;
|
|
60
|
+
/** The most a file may weigh, in bytes. */
|
|
61
|
+
maxSize?: number;
|
|
62
|
+
/** The most files that may be chosen. Several-file fields only. */
|
|
63
|
+
maxFiles?: number;
|
|
64
|
+
/** Called with the files that were refused, each with the reason. They are also listed under the field. */
|
|
65
|
+
onReject?: (rejections: IFileRejection[]) => void;
|
|
66
|
+
disabled?: boolean;
|
|
67
|
+
invalid?: boolean;
|
|
68
|
+
required?: boolean;
|
|
69
|
+
/** Submits the chosen files with a form, under this name. */
|
|
70
|
+
name?: string;
|
|
71
|
+
/** For a `<Label htmlFor>` to name the field. */
|
|
72
|
+
id?: string;
|
|
73
|
+
/** What the field accepts, in words ("PDF or PNG, up to 5 MB"), read with the field. */
|
|
74
|
+
hint?: ReactNode;
|
|
75
|
+
labels?: Partial<IFileInputLabels>;
|
|
76
|
+
'aria-label'?: string;
|
|
77
|
+
'aria-labelledby'?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Chooses files by picking them or by dropping them on the field, in the kit's look. It exists so an app does not fall back to
|
|
81
|
+
* `<input type="file">`, which cannot be styled and has no list of what was chosen.
|
|
82
|
+
*
|
|
83
|
+
* The control is a real file input laid over the whole drop area, so Tab, Enter and Space, the system's file dialog, a drop and a
|
|
84
|
+
* screen reader's name for it all come from the browser. What the browser lacks is added around it: the list of chosen files with a
|
|
85
|
+
* button to take each out, the checks against `accept`, `maxSize` and `maxFiles` (a drop skips the dialog's own filter), and a
|
|
86
|
+
* live region that says what was added, removed or refused.
|
|
87
|
+
*
|
|
88
|
+
* Name the field with `aria-label`, `aria-labelledby` or a `<Label htmlFor={id}>`; with none of those it is named "Choose files".
|
|
89
|
+
*/
|
|
90
|
+
export declare const FileInput: ({ value, defaultValue, onValueChange, accept, multiple, maxSize, maxFiles, onReject, disabled, invalid, required, name, id, hint, labels: labelOverrides, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, ...rest }: IFileInputProps) => import('react').JSX.Element;
|