@cl-light-ds/ui 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -45
- package/package.json +1 -1
- package/src/components/accordion/Accordion.astro +248 -248
- package/src/components/accordion/AccordionContent.astro +26 -26
- package/src/components/accordion/AccordionItem.astro +36 -36
- package/src/components/accordion/AccordionTrigger.astro +118 -118
- package/src/components/accordion/CHANGELOG.md +41 -41
- package/src/components/accordion/index.ts +4 -4
- package/src/components/alert/Alert.astro +167 -167
- package/src/components/alert/AlertDescription.astro +24 -24
- package/src/components/alert/AlertTitle.astro +24 -24
- package/src/components/alert/CHANGELOG.md +5 -5
- package/src/components/alert/index.ts +4 -4
- package/src/components/avatar/Avatar.astro +197 -197
- package/src/components/avatar/AvatarBadge.astro +44 -44
- package/src/components/avatar/AvatarFallback.astro +26 -26
- package/src/components/avatar/AvatarGroup.astro +26 -26
- package/src/components/avatar/AvatarGroupCount.astro +30 -30
- package/src/components/avatar/AvatarImage.astro +46 -46
- package/src/components/avatar/CHANGELOG.md +44 -44
- package/src/components/avatar/index.ts +6 -6
- package/src/components/badge/Badge.astro +167 -167
- package/src/components/badge/CHANGELOG.md +49 -49
- package/src/components/badge/index.ts +2 -2
- package/src/components/breadcrumb/Breadcrumb.astro +76 -76
- package/src/components/breadcrumb/BreadcrumbItem.astro +32 -32
- package/src/components/breadcrumb/BreadcrumbList.astro +26 -26
- package/src/components/breadcrumb/BreadcrumbSeparator.astro +26 -26
- package/src/components/breadcrumb/CHANGELOG.md +24 -24
- package/src/components/breadcrumb/index.ts +5 -5
- package/src/components/button/Button.astro +233 -233
- package/src/components/button/CHANGELOG.md +41 -41
- package/src/components/button/index.ts +2 -2
- package/src/components/button-group/ButtonGroup.astro +130 -130
- package/src/components/button-group/ButtonGroupSeparator.astro +30 -30
- package/src/components/button-group/ButtonGroupText.astro +21 -21
- package/src/components/button-group/CHANGELOG.md +34 -34
- package/src/components/button-group/index.ts +3 -3
- package/src/components/card/CHANGELOG.md +162 -119
- package/src/components/card/Card.astro +197 -182
- package/src/components/card/CardAction.astro +26 -26
- package/src/components/card/CardContent.astro +28 -28
- package/src/components/card/CardDescription.astro +28 -28
- package/src/components/card/CardFooter.astro +24 -24
- package/src/components/card/CardHeader.astro +30 -30
- package/src/components/card/CardMedia.astro +27 -27
- package/src/components/card/CardMediaActions.astro +21 -0
- package/src/components/card/CardMediaSelect.astro +21 -0
- package/src/components/card/CardOverlay.astro +32 -32
- package/src/components/card/CardTitle.astro +21 -21
- package/src/components/card/index.ts +12 -10
- package/src/components/carousel/CHANGELOG.md +5 -5
- package/src/components/carousel/Carousel.astro +106 -106
- package/src/components/carousel/CarouselSlide.astro +22 -22
- package/src/components/carousel/index.ts +3 -3
- package/src/components/checkbox/CHANGELOG.md +58 -58
- package/src/components/checkbox/Checkbox.astro +159 -159
- package/src/components/checkbox/index.ts +1 -1
- package/src/components/collapsible/CHANGELOG.md +5 -5
- package/src/components/collapsible/Collapsible.astro +202 -202
- package/src/components/collapsible/CollapsibleContent.astro +36 -36
- package/src/components/collapsible/CollapsibleTrigger.astro +34 -34
- package/src/components/collapsible/index.ts +4 -4
- package/src/components/combobox/CHANGELOG.md +27 -27
- package/src/components/combobox/Combobox.astro +365 -365
- package/src/components/combobox/ComboboxContent.astro +37 -37
- package/src/components/combobox/ComboboxEmpty.astro +18 -18
- package/src/components/combobox/ComboboxGroup.astro +19 -19
- package/src/components/combobox/ComboboxInput.astro +74 -74
- package/src/components/combobox/ComboboxItem.astro +39 -39
- package/src/components/combobox/ComboboxLabel.astro +18 -18
- package/src/components/combobox/ComboboxList.astro +21 -21
- package/src/components/combobox/ComboboxSeparator.astro +17 -17
- package/src/components/combobox/ComboboxTrigger.astro +30 -30
- package/src/components/combobox/ComboboxValue.astro +22 -22
- package/src/components/combobox/index.ts +11 -11
- package/src/components/date/CHANGELOG.md +18 -18
- package/src/components/date/Date.astro +137 -137
- package/src/components/date/index.ts +2 -2
- package/src/components/dialog/CHANGELOG.md +39 -39
- package/src/components/dialog/Dialog.astro +196 -196
- package/src/components/dialog/DialogClose.astro +23 -23
- package/src/components/dialog/DialogContent.astro +42 -42
- package/src/components/dialog/DialogDescription.astro +18 -18
- package/src/components/dialog/DialogFooter.astro +18 -18
- package/src/components/dialog/DialogHeader.astro +18 -18
- package/src/components/dialog/DialogOverlay.astro +19 -19
- package/src/components/dialog/DialogTitle.astro +18 -18
- package/src/components/dialog/DialogTrigger.astro +37 -37
- package/src/components/dialog/index.ts +9 -9
- package/src/components/dropdown-menu/CHANGELOG.md +194 -194
- package/src/components/dropdown-menu/DropdownMenu.astro +226 -226
- package/src/components/dropdown-menu/DropdownMenuCheckboxItem.astro +114 -114
- package/src/components/dropdown-menu/DropdownMenuContent.astro +42 -42
- package/src/components/dropdown-menu/DropdownMenuGroup.astro +19 -19
- package/src/components/dropdown-menu/DropdownMenuItem.astro +220 -220
- package/src/components/dropdown-menu/DropdownMenuItemContent.astro +79 -79
- package/src/components/dropdown-menu/DropdownMenuLabel.astro +20 -20
- package/src/components/dropdown-menu/DropdownMenuPortal.astro +13 -13
- package/src/components/dropdown-menu/DropdownMenuRadioGroup.astro +13 -13
- package/src/components/dropdown-menu/DropdownMenuRadioItem.astro +101 -101
- package/src/components/dropdown-menu/DropdownMenuSeparator.astro +18 -18
- package/src/components/dropdown-menu/DropdownMenuShortcut.astro +18 -18
- package/src/components/dropdown-menu/DropdownMenuTrigger.astro +49 -49
- package/src/components/dropdown-menu/dropdown-menu-item-variants.ts +24 -24
- package/src/components/dropdown-menu/index.ts +12 -12
- package/src/components/field/CHANGELOG.md +33 -33
- package/src/components/field/Field.astro +664 -664
- package/src/components/field/FieldContent.astro +20 -20
- package/src/components/field/FieldDescription.astro +22 -22
- package/src/components/field/FieldError.astro +51 -51
- package/src/components/field/FieldGroup.astro +20 -20
- package/src/components/field/FieldLabel.astro +22 -22
- package/src/components/field/FieldLegend.astro +23 -23
- package/src/components/field/FieldSeparator.astro +30 -30
- package/src/components/field/FieldSet.astro +20 -20
- package/src/components/field/FieldTitle.astro +20 -20
- package/src/components/field/index.ts +10 -10
- package/src/components/hover-card/CHANGELOG.md +20 -20
- package/src/components/hover-card/HoverCard.astro +235 -235
- package/src/components/hover-card/HoverCardContent.astro +54 -54
- package/src/components/hover-card/HoverCardTrigger.astro +38 -38
- package/src/components/hover-card/index.ts +3 -3
- package/src/components/input/CHANGELOG.md +29 -29
- package/src/components/input/Input.astro +130 -130
- package/src/components/input/index.ts +2 -2
- package/src/components/input-group/CHANGELOG.md +49 -49
- package/src/components/input-group/InputGroup.astro +135 -135
- package/src/components/input-group/InputGroupAddon.astro +49 -49
- package/src/components/input-group/InputGroupButton.astro +58 -58
- package/src/components/input-group/InputGroupInput.astro +18 -18
- package/src/components/input-group/InputGroupText.astro +21 -21
- package/src/components/input-group/InputGroupTextarea.astro +17 -17
- package/src/components/input-group/controlClasses.ts +2 -2
- package/src/components/input-group/index.ts +6 -6
- package/src/components/item/CHANGELOG.md +27 -27
- package/src/components/item/Item.astro +122 -122
- package/src/components/item/ItemActions.astro +21 -21
- package/src/components/item/ItemContent.astro +25 -25
- package/src/components/item/ItemDescription.astro +25 -25
- package/src/components/item/ItemFooter.astro +24 -24
- package/src/components/item/ItemGroup.astro +24 -24
- package/src/components/item/ItemHeader.astro +24 -24
- package/src/components/item/ItemMedia.astro +47 -47
- package/src/components/item/ItemSeparator.astro +21 -21
- package/src/components/item/ItemTitle.astro +25 -25
- package/src/components/item/index.ts +10 -10
- package/src/components/kbd/CHANGELOG.md +5 -5
- package/src/components/kbd/Kbd.astro +145 -145
- package/src/components/kbd/KbdGroup.astro +55 -55
- package/src/components/kbd/index.ts +2 -2
- package/src/components/label/CHANGELOG.md +28 -28
- package/src/components/label/Label.astro +97 -97
- package/src/components/label/index.ts +2 -2
- package/src/components/link-group/CHANGELOG.md +75 -75
- package/src/components/link-group/LinkGroup.astro +67 -67
- package/src/components/link-group/LinkGroupItem.astro +32 -32
- package/src/components/link-group/LinkGroupList.astro +25 -25
- package/src/components/link-group/LinkGroupTitle.astro +22 -22
- package/src/components/link-group/index.ts +5 -5
- package/src/components/link-group/link-group-list-variants.ts +15 -15
- package/src/components/marquee/CHANGELOG.md +5 -5
- package/src/components/marquee/Marquee.astro +119 -119
- package/src/components/marquee/index.ts +2 -2
- package/src/components/native-select/CHANGELOG.md +5 -5
- package/src/components/native-select/NativeSelect.astro +125 -125
- package/src/components/native-select/NativeSelectOptGroup.astro +14 -14
- package/src/components/native-select/NativeSelectOption.astro +9 -9
- package/src/components/native-select/index.ts +3 -3
- package/src/components/navigation-menu/CHANGELOG.md +63 -63
- package/src/components/navigation-menu/NavigationMenu.astro +414 -414
- package/src/components/navigation-menu/NavigationMenuContent.astro +37 -37
- package/src/components/navigation-menu/NavigationMenuIndicator.astro +24 -24
- package/src/components/navigation-menu/NavigationMenuItem.astro +22 -22
- package/src/components/navigation-menu/NavigationMenuLink.astro +18 -18
- package/src/components/navigation-menu/NavigationMenuList.astro +21 -21
- package/src/components/navigation-menu/NavigationMenuPositioner.astro +44 -44
- package/src/components/navigation-menu/NavigationMenuTrigger.astro +30 -30
- package/src/components/navigation-menu/NavigationMenuViewport.astro +19 -19
- package/src/components/navigation-menu/index.ts +10 -10
- package/src/components/organisms/lightning-sidebar-nav/CHANGELOG.md +50 -0
- package/src/components/organisms/lightning-sidebar-nav/LightningSidebarNav.astro +176 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNav.astro +50 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavGroup.astro +74 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavItem.astro +94 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavProBadge.astro +26 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavSection.astro +71 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavSkeleton.astro +67 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavSubItem.astro +69 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavUsage.astro +78 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceAvatar.astro +46 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceSwitcher.astro +130 -0
- package/src/components/organisms/lightning-sidebar-nav/icons.ts +46 -0
- package/src/components/organisms/lightning-sidebar-nav/index.ts +18 -0
- package/src/components/organisms/lightning-sidebar-nav/types.ts +77 -0
- package/src/components/popover/CHANGELOG.md +20 -20
- package/src/components/popover/Popover.astro +211 -211
- package/src/components/popover/PopoverClose.astro +18 -18
- package/src/components/popover/PopoverContent.astro +50 -50
- package/src/components/popover/PopoverDescription.astro +18 -18
- package/src/components/popover/PopoverHeader.astro +18 -18
- package/src/components/popover/PopoverTitle.astro +18 -18
- package/src/components/popover/PopoverTrigger.astro +35 -35
- package/src/components/popover/index.ts +7 -7
- package/src/components/radio-group/CHANGELOG.md +31 -31
- package/src/components/radio-group/RadioGroup.astro +81 -81
- package/src/components/radio-group/RadioGroupItem.astro +51 -51
- package/src/components/radio-group/index.ts +3 -3
- package/src/components/select/CHANGELOG.md +39 -39
- package/src/components/select/Select.astro +373 -373
- package/src/components/select/SelectContent.astro +91 -91
- package/src/components/select/SelectGroup.astro +19 -19
- package/src/components/select/SelectItem.astro +48 -48
- package/src/components/select/SelectLabel.astro +18 -18
- package/src/components/select/SelectSeparator.astro +17 -17
- package/src/components/select/SelectTrigger.astro +34 -34
- package/src/components/select/SelectValue.astro +22 -22
- package/src/components/select/index.ts +8 -8
- package/src/components/separator/CHANGELOG.md +5 -5
- package/src/components/separator/Separator.astro +60 -60
- package/src/components/separator/index.ts +2 -2
- package/src/components/skeleton/CHANGELOG.md +5 -5
- package/src/components/skeleton/Skeleton.astro +121 -121
- package/src/components/skeleton/index.ts +1 -1
- package/src/components/slider/CHANGELOG.md +5 -5
- package/src/components/slider/Slider.astro +198 -198
- package/src/components/slider/index.ts +1 -1
- package/src/components/spinner/CHANGELOG.md +18 -18
- package/src/components/spinner/Spinner.astro +135 -135
- package/src/components/spinner/index.ts +1 -1
- package/src/components/sticky-surface/CHANGELOG.md +5 -5
- package/src/components/sticky-surface/StickySurface.astro +152 -152
- package/src/components/sticky-surface/index.ts +2 -2
- package/src/components/switch/CHANGELOG.md +29 -29
- package/src/components/switch/Switch.astro +106 -106
- package/src/components/switch/index.ts +1 -1
- package/src/components/table/CHANGELOG.md +24 -24
- package/src/components/table/Table.astro +358 -251
- package/src/components/table/TableBody.astro +17 -18
- package/src/components/table/TableBulkToolbar.astro +37 -0
- package/src/components/table/TableCaption.astro +17 -17
- package/src/components/table/TableCell.astro +45 -21
- package/src/components/table/TableCellText.astro +17 -0
- package/src/components/table/TableColumnMenu.astro +50 -0
- package/src/components/table/TableEditableCell.astro +287 -0
- package/src/components/table/TableEmpty.astro +17 -0
- package/src/components/table/TableFolderCell.astro +38 -0
- package/src/components/table/TableFooter.astro +21 -21
- package/src/components/table/TableHead.astro +90 -21
- package/src/components/table/TableHeader.astro +17 -17
- package/src/components/table/TablePagination.astro +57 -0
- package/src/components/table/TableRow.astro +52 -21
- package/src/components/table/TableSelectAllBanner.astro +34 -0
- package/src/components/table/TableSelectCell.astro +50 -0
- package/src/components/table/TableSkeletonRow.astro +21 -0
- package/src/components/table/index.ts +19 -9
- package/src/components/table/table-cell-variants.ts +29 -0
- package/src/components/tabs/CHANGELOG.md +5 -5
- package/src/components/tabs/Tabs.astro +306 -306
- package/src/components/tabs/TabsContent.astro +47 -47
- package/src/components/tabs/TabsList.astro +69 -69
- package/src/components/tabs/TabsTrigger.astro +40 -40
- package/src/components/tabs/index.ts +6 -6
- package/src/components/textarea/CHANGELOG.md +22 -22
- package/src/components/textarea/Textarea.astro +58 -58
- package/src/components/textarea/index.ts +2 -2
- package/src/components/toggle/CHANGELOG.md +23 -23
- package/src/components/toggle/Toggle.astro +150 -150
- package/src/components/toggle/index.ts +1 -1
- package/src/components/toggle-group/CHANGELOG.md +18 -18
- package/src/components/toggle-group/ToggleGroup.astro +236 -236
- package/src/components/toggle-group/ToggleGroupItem.astro +48 -48
- package/src/components/toggle-group/index.ts +2 -2
- package/src/components/tooltip/CHANGELOG.md +22 -22
- package/src/components/tooltip/Tooltip.astro +357 -357
- package/src/components/tooltip/TooltipContent.astro +85 -85
- package/src/components/tooltip/TooltipTrigger.astro +34 -34
- package/src/components/tooltip/index.ts +3 -3
- package/src/lib/table-controller.ts +1090 -0
- package/src/lib/toggle-group-controller.ts +113 -113
- package/src/lib/toggle-shared.ts +27 -27
- package/src/lib/utils.ts +6 -6
- package/src/styles/globals.css +197 -177
|
@@ -1,21 +1,90 @@
|
|
|
1
|
-
---
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
---
|
|
2
|
+
import { ArrowDown, ArrowUp, ArrowUpDown } from "@lucide/astro";
|
|
3
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
4
|
+
import type { HTMLAttributes } from "astro/types";
|
|
5
|
+
import { cellAlign, cellBase, type CellAlign } from "./table-cell-variants";
|
|
6
|
+
|
|
7
|
+
type SortDirection = "asc" | "desc" | "none";
|
|
8
|
+
|
|
9
|
+
interface Props extends HTMLAttributes<"th"> {
|
|
10
|
+
class?: string;
|
|
11
|
+
/** Column key. Used by sorting, resize/hide and pinned columns, and matched against `TableCell` `column`. */
|
|
12
|
+
column?: string;
|
|
13
|
+
/** Renders the header label as a sort button (cycles asc → desc → none). */
|
|
14
|
+
sortable?: boolean;
|
|
15
|
+
/** Initial sort direction for this column. */
|
|
16
|
+
sort?: SortDirection;
|
|
17
|
+
align?: CellAlign;
|
|
18
|
+
/** Shows a drag handle to resize the column. */
|
|
19
|
+
resizable?: boolean;
|
|
20
|
+
/** Initial column width, e.g. "240px". */
|
|
21
|
+
width?: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const {
|
|
25
|
+
class: className = "",
|
|
26
|
+
column,
|
|
27
|
+
sortable = false,
|
|
28
|
+
sort = "none",
|
|
29
|
+
align = "left",
|
|
30
|
+
resizable = false,
|
|
31
|
+
width,
|
|
32
|
+
...rest
|
|
33
|
+
} = Astro.props as Props;
|
|
34
|
+
|
|
35
|
+
const ariaSort =
|
|
36
|
+
sortable ? (sort === "asc" ? "ascending" : sort === "desc" ? "descending" : "none") : undefined;
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
<th
|
|
40
|
+
data-slot="table-head"
|
|
41
|
+
data-column={column}
|
|
42
|
+
data-sortable={sortable ? "" : undefined}
|
|
43
|
+
data-sort={sortable ? sort : undefined}
|
|
44
|
+
data-align={align}
|
|
45
|
+
aria-sort={ariaSort}
|
|
46
|
+
scope="col"
|
|
47
|
+
style={width ? `width: ${width}; min-width: ${width}` : undefined}
|
|
48
|
+
class={cn(
|
|
49
|
+
cellBase,
|
|
50
|
+
cellAlign({ align }),
|
|
51
|
+
"group/th h-11 bg-muted text-xs font-semibold text-foreground uppercase",
|
|
52
|
+
"group-data-[sticky-header]/table:sticky group-data-[sticky-header]/table:top-0 group-data-[sticky-header]/table:z-10 data-[pinned]:z-20 data-[pinned]:bg-muted",
|
|
53
|
+
"[&:has([type=checkbox])]:w-15 [&:has([type=checkbox])]:text-center",
|
|
54
|
+
className,
|
|
55
|
+
)}
|
|
56
|
+
{...rest}
|
|
57
|
+
>
|
|
58
|
+
{
|
|
59
|
+
sortable ? (
|
|
60
|
+
<button
|
|
61
|
+
type="button"
|
|
62
|
+
data-slot="table-sort-button"
|
|
63
|
+
class={cn(
|
|
64
|
+
"-mx-1.5 inline-flex w-[calc(100%+0.75rem)] items-center justify-between gap-2 rounded-md px-1.5 py-1 uppercase",
|
|
65
|
+
"cursor-pointer outline-none hover:bg-background-hover focus-visible:ring-2 focus-visible:ring-ring",
|
|
66
|
+
"disabled:cursor-default disabled:hover:bg-transparent",
|
|
67
|
+
align === "right" && "flex-row-reverse",
|
|
68
|
+
)}
|
|
69
|
+
>
|
|
70
|
+
<span class="truncate"><slot /></span>
|
|
71
|
+
<span class="shrink-0 [&_svg]:size-3.5 [button:disabled_&]:hidden" aria-hidden="true">
|
|
72
|
+
<ArrowUpDown class="text-muted-foreground group-data-[sort=asc]/th:hidden group-data-[sort=desc]/th:hidden group-has-[button:hover]/th:text-foreground" />
|
|
73
|
+
<ArrowUp class="hidden text-primary group-data-[sort=asc]/th:block" />
|
|
74
|
+
<ArrowDown class="hidden text-primary group-data-[sort=desc]/th:block" />
|
|
75
|
+
</span>
|
|
76
|
+
</button>
|
|
77
|
+
) : (
|
|
78
|
+
<slot />
|
|
79
|
+
)
|
|
80
|
+
}
|
|
81
|
+
{
|
|
82
|
+
resizable && (
|
|
83
|
+
<span
|
|
84
|
+
data-slot="table-resize-handle"
|
|
85
|
+
aria-hidden="true"
|
|
86
|
+
class="absolute top-0 right-0 z-[1] h-full w-1.5 cursor-col-resize touch-none select-none after:absolute after:inset-y-2 after:right-0.5 after:w-px after:bg-border hover:after:w-0.5 hover:after:bg-primary"
|
|
87
|
+
/>
|
|
88
|
+
)
|
|
89
|
+
}
|
|
90
|
+
</th>
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
---
|
|
2
|
-
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
3
|
-
import type { HTMLAttributes } from "astro/types";
|
|
4
|
-
|
|
5
|
-
interface Props extends HTMLAttributes<"thead"> {
|
|
6
|
-
class?: string;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
const {
|
|
10
|
-
class: className = "",
|
|
11
|
-
...rest
|
|
12
|
-
} = Astro.props as Props;
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
<thead data-slot="table-header" class={cn("
|
|
16
|
-
<slot />
|
|
17
|
-
</thead>
|
|
1
|
+
---
|
|
2
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
3
|
+
import type { HTMLAttributes } from "astro/types";
|
|
4
|
+
|
|
5
|
+
interface Props extends HTMLAttributes<"thead"> {
|
|
6
|
+
class?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const {
|
|
10
|
+
class: className = "",
|
|
11
|
+
...rest
|
|
12
|
+
} = Astro.props as Props;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<thead data-slot="table-header" class={cn("", className)} {...rest}>
|
|
16
|
+
<slot />
|
|
17
|
+
</thead>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight } from "@lucide/astro";
|
|
3
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
4
|
+
import type { HTMLAttributes } from "astro/types";
|
|
5
|
+
import { Button } from "../button";
|
|
6
|
+
import { ButtonGroup } from "../button-group";
|
|
7
|
+
import { NativeSelect, NativeSelectOption } from "../native-select";
|
|
8
|
+
|
|
9
|
+
interface Props extends HTMLAttributes<"nav"> {
|
|
10
|
+
class?: string;
|
|
11
|
+
/** Current page, 1-based. */
|
|
12
|
+
page?: number;
|
|
13
|
+
pageSize?: number;
|
|
14
|
+
totalCount: number;
|
|
15
|
+
pageSizes?: number[];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const {
|
|
19
|
+
class: className = "",
|
|
20
|
+
page = 1,
|
|
21
|
+
pageSize = 10,
|
|
22
|
+
totalCount,
|
|
23
|
+
pageSizes = [10, 25, 50],
|
|
24
|
+
...rest
|
|
25
|
+
} = Astro.props as Props;
|
|
26
|
+
|
|
27
|
+
const pageCount = Math.max(1, Math.ceil(totalCount / pageSize));
|
|
28
|
+
const from = totalCount === 0 ? 0 : (page - 1) * pageSize + 1;
|
|
29
|
+
const to = Math.min(page * pageSize, totalCount);
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
<nav
|
|
33
|
+
data-slot="table-pagination"
|
|
34
|
+
aria-label="Pagination"
|
|
35
|
+
data-page={page}
|
|
36
|
+
data-page-size={pageSize}
|
|
37
|
+
data-total-count={totalCount}
|
|
38
|
+
class={cn("flex flex-wrap items-center justify-between gap-4 px-6 py-3 text-sm text-muted-foreground", className)}
|
|
39
|
+
{...rest}
|
|
40
|
+
>
|
|
41
|
+
<p data-slot="table-pagination-summary">Showing {from}–{to} of {totalCount}</p>
|
|
42
|
+
<div class="flex flex-wrap items-center gap-4">
|
|
43
|
+
<label class="flex items-center gap-2">
|
|
44
|
+
<span>Rows per page</span>
|
|
45
|
+
<NativeSelect size="sm" data-table-page-size aria-label="Rows per page">
|
|
46
|
+
{pageSizes.map((s) => <NativeSelectOption value={String(s)} selected={s === pageSize}>{s}</NativeSelectOption>)}
|
|
47
|
+
</NativeSelect>
|
|
48
|
+
</label>
|
|
49
|
+
<span data-slot="table-pagination-status" class="text-foreground">Page {page} of {pageCount}</span>
|
|
50
|
+
<ButtonGroup>
|
|
51
|
+
<Button variant="outline" size="icon-sm" data-table-page="first" aria-label="First page" disabled={page <= 1}><ChevronsLeft /></Button>
|
|
52
|
+
<Button variant="outline" size="icon-sm" data-table-page="prev" aria-label="Previous page" disabled={page <= 1}><ChevronLeft /></Button>
|
|
53
|
+
<Button variant="outline" size="icon-sm" data-table-page="next" aria-label="Next page" disabled={page >= pageCount}><ChevronRight /></Button>
|
|
54
|
+
<Button variant="outline" size="icon-sm" data-table-page="last" aria-label="Last page" disabled={page >= pageCount}><ChevronsRight /></Button>
|
|
55
|
+
</ButtonGroup>
|
|
56
|
+
</div>
|
|
57
|
+
</nav>
|
|
@@ -1,21 +1,52 @@
|
|
|
1
|
-
---
|
|
2
|
-
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
3
|
-
import type { HTMLAttributes } from "astro/types";
|
|
4
|
-
|
|
5
|
-
interface Props extends HTMLAttributes<"tr"> {
|
|
6
|
-
class?: string;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
1
|
+
---
|
|
2
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
3
|
+
import type { HTMLAttributes } from "astro/types";
|
|
4
|
+
|
|
5
|
+
interface Props extends HTMLAttributes<"tr"> {
|
|
6
|
+
class?: string;
|
|
7
|
+
/** Stable id reported in `table:selection`, `table:edit` and `table:toggle-row` events. */
|
|
8
|
+
rowId?: string;
|
|
9
|
+
/** Row id of the parent folder row. Rows under a collapsed parent are hidden. */
|
|
10
|
+
parentId?: string;
|
|
11
|
+
/** Nesting level (1–3) for tree tables. */
|
|
12
|
+
level?: 1 | 2 | 3;
|
|
13
|
+
/** Marks a folder row that can expand/collapse its children. */
|
|
14
|
+
folder?: boolean;
|
|
15
|
+
/** Initial expanded state of a folder row. */
|
|
16
|
+
expanded?: boolean;
|
|
17
|
+
/** Initial selected state. Pair with a checked `TableSelectCell`. */
|
|
18
|
+
selected?: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const {
|
|
22
|
+
class: className = "",
|
|
23
|
+
rowId,
|
|
24
|
+
parentId,
|
|
25
|
+
level,
|
|
26
|
+
folder = false,
|
|
27
|
+
expanded = false,
|
|
28
|
+
selected = false,
|
|
29
|
+
...rest
|
|
30
|
+
} = Astro.props as Props;
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
<tr
|
|
34
|
+
data-slot="table-row"
|
|
35
|
+
data-row-id={rowId}
|
|
36
|
+
data-parent-id={parentId}
|
|
37
|
+
data-level={level}
|
|
38
|
+
data-folder={folder ? "" : undefined}
|
|
39
|
+
data-expanded={folder && expanded ? "" : undefined}
|
|
40
|
+
data-state={selected ? "selected" : undefined}
|
|
41
|
+
aria-level={level}
|
|
42
|
+
aria-expanded={folder ? String(expanded) : undefined}
|
|
43
|
+
aria-selected={selected ? "true" : undefined}
|
|
44
|
+
class={cn(
|
|
45
|
+
"group/row bg-background transition-colors",
|
|
46
|
+
"[tbody_&]:hover:bg-table-row-hover data-[state=selected]:bg-table-row-selected [tbody_&]:data-[state=selected]:hover:bg-table-row-selected",
|
|
47
|
+
className,
|
|
48
|
+
)}
|
|
49
|
+
{...rest}
|
|
50
|
+
>
|
|
51
|
+
<slot />
|
|
52
|
+
</tr>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
3
|
+
import type { HTMLAttributes } from "astro/types";
|
|
4
|
+
|
|
5
|
+
interface Props extends HTMLAttributes<"div"> {
|
|
6
|
+
class?: string;
|
|
7
|
+
/** Plural noun for the rows, e.g. "invoices". */
|
|
8
|
+
noun?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const { class: className = "", noun = "results", ...rest } = Astro.props as Props;
|
|
12
|
+
const linkClass =
|
|
13
|
+
"cursor-pointer rounded-sm font-semibold text-primary outline-none hover:underline focus-visible:ring-2 focus-visible:ring-ring";
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
<div
|
|
17
|
+
data-slot="table-select-all-banner"
|
|
18
|
+
hidden
|
|
19
|
+
class={cn("items-center justify-center gap-2 border-b border-border bg-muted/60 px-4 py-2 text-sm [&:not([hidden])]:flex", className)}
|
|
20
|
+
{...rest}
|
|
21
|
+
>
|
|
22
|
+
<span data-banner-page>
|
|
23
|
+
All <span data-slot="table-page-count">0</span> rows on this page are selected.
|
|
24
|
+
</span>
|
|
25
|
+
<button type="button" data-banner-page data-table-action="select-all-results" class={linkClass}>
|
|
26
|
+
Select all <span data-slot="table-total-count">0</span> {noun}
|
|
27
|
+
</button>
|
|
28
|
+
<span data-banner-all hidden>
|
|
29
|
+
All <span data-slot="table-total-count">0</span> {noun} are selected.
|
|
30
|
+
</span>
|
|
31
|
+
<button type="button" data-banner-all hidden data-table-action="clear-selection" class={linkClass}>
|
|
32
|
+
Clear selection
|
|
33
|
+
</button>
|
|
34
|
+
</div>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
3
|
+
import type { HTMLAttributes } from "astro/types";
|
|
4
|
+
import { Checkbox } from "../checkbox";
|
|
5
|
+
import { cellBase } from "./table-cell-variants";
|
|
6
|
+
|
|
7
|
+
interface Props extends HTMLAttributes<"td"> {
|
|
8
|
+
class?: string;
|
|
9
|
+
/** Renders the header "select all on this page" checkbox in a `<th>`. */
|
|
10
|
+
header?: boolean;
|
|
11
|
+
checked?: boolean;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
/** Accessible label. Defaults to "Select all rows" / "Select row". */
|
|
14
|
+
label?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const {
|
|
18
|
+
class: className = "",
|
|
19
|
+
header = false,
|
|
20
|
+
checked = false,
|
|
21
|
+
disabled = false,
|
|
22
|
+
label = header ? "Select all rows" : "Select row",
|
|
23
|
+
...rest
|
|
24
|
+
} = Astro.props as Props;
|
|
25
|
+
|
|
26
|
+
const Tag = header ? "th" : "td";
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
<Tag
|
|
30
|
+
data-slot={header ? "table-head" : "table-cell"}
|
|
31
|
+
data-select-cell
|
|
32
|
+
scope={header ? "col" : undefined}
|
|
33
|
+
class={cn(
|
|
34
|
+
cellBase,
|
|
35
|
+
"w-15 text-center",
|
|
36
|
+
header
|
|
37
|
+
? "h-11 bg-muted group-data-[sticky-header]/table:sticky group-data-[sticky-header]/table:top-0 group-data-[sticky-header]/table:z-10 data-[pinned]:z-20 data-[pinned]:bg-muted"
|
|
38
|
+
: "h-12 py-2",
|
|
39
|
+
className,
|
|
40
|
+
)}
|
|
41
|
+
{...rest}
|
|
42
|
+
>
|
|
43
|
+
<Checkbox
|
|
44
|
+
data-table-select={header ? "all" : "row"}
|
|
45
|
+
aria-label={label}
|
|
46
|
+
checked={checked}
|
|
47
|
+
disabled={disabled}
|
|
48
|
+
class="align-middle"
|
|
49
|
+
/>
|
|
50
|
+
</Tag>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
3
|
+
import { Skeleton } from "../skeleton";
|
|
4
|
+
import { cellBase } from "./table-cell-variants";
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
/** Number of cells to render. */
|
|
8
|
+
columns: number;
|
|
9
|
+
class?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const { columns, class: className = "" } = Astro.props as Props;
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<tr data-slot="table-skeleton-row" aria-hidden="true" class={cn("bg-background", className)}>
|
|
16
|
+
{Array.from({ length: columns }, (_, i) => (
|
|
17
|
+
<td class={cn(cellBase, "h-12 py-2")}>
|
|
18
|
+
<Skeleton class={i === 0 ? "mx-auto size-4 rounded-sm" : "h-4 w-full max-w-32"} />
|
|
19
|
+
</td>
|
|
20
|
+
))}
|
|
21
|
+
</tr>
|
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
export { default as Table } from "./Table.astro";
|
|
2
|
-
export { default as TableHeader } from "./TableHeader.astro";
|
|
3
|
-
export { default as TableBody } from "./TableBody.astro";
|
|
4
|
-
export { default as TableFooter } from "./TableFooter.astro";
|
|
5
|
-
export { default as TableHead } from "./TableHead.astro";
|
|
6
|
-
export { default as TableRow } from "./TableRow.astro";
|
|
7
|
-
export { default as TableCell } from "./TableCell.astro";
|
|
8
|
-
export { default as TableCaption } from "./TableCaption.astro";
|
|
9
|
-
|
|
1
|
+
export { default as Table } from "./Table.astro";
|
|
2
|
+
export { default as TableHeader } from "./TableHeader.astro";
|
|
3
|
+
export { default as TableBody } from "./TableBody.astro";
|
|
4
|
+
export { default as TableFooter } from "./TableFooter.astro";
|
|
5
|
+
export { default as TableHead } from "./TableHead.astro";
|
|
6
|
+
export { default as TableRow } from "./TableRow.astro";
|
|
7
|
+
export { default as TableCell } from "./TableCell.astro";
|
|
8
|
+
export { default as TableCaption } from "./TableCaption.astro";
|
|
9
|
+
export { default as TableCellText } from "./TableCellText.astro";
|
|
10
|
+
export { default as TableEditableCell } from "./TableEditableCell.astro";
|
|
11
|
+
export { default as TableFolderCell } from "./TableFolderCell.astro";
|
|
12
|
+
export { default as TableSelectCell } from "./TableSelectCell.astro";
|
|
13
|
+
export { default as TableBulkToolbar } from "./TableBulkToolbar.astro";
|
|
14
|
+
export { default as TableSelectAllBanner } from "./TableSelectAllBanner.astro";
|
|
15
|
+
export { default as TablePagination } from "./TablePagination.astro";
|
|
16
|
+
export { default as TableColumnMenu } from "./TableColumnMenu.astro";
|
|
17
|
+
export { default as TableSkeletonRow } from "./TableSkeletonRow.astro";
|
|
18
|
+
export { default as TableEmpty } from "./TableEmpty.astro";
|
|
19
|
+
export type { TableCellOption } from "./TableEditableCell.astro";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { cva } from "class-variance-authority";
|
|
2
|
+
|
|
3
|
+
/** Shared padding, borders and pinning for header and data cells. */
|
|
4
|
+
export const cellBase = [
|
|
5
|
+
"relative border-b border-border px-4 align-middle whitespace-nowrap first:pl-6 last:pr-6",
|
|
6
|
+
"outline-none focus-visible:z-[2] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
|
|
7
|
+
"data-[pinned]:sticky data-[pinned]:z-[1] data-[pinned]:bg-inherit data-[pinned-last]:shadow-[inset_-1px_0_0_var(--border)]",
|
|
8
|
+
];
|
|
9
|
+
|
|
10
|
+
export const cellAlign = cva("", {
|
|
11
|
+
variants: {
|
|
12
|
+
align: {
|
|
13
|
+
left: "text-left",
|
|
14
|
+
center: "text-center",
|
|
15
|
+
right: "text-right",
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
align: "left",
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export type CellAlign = "left" | "center" | "right";
|
|
24
|
+
|
|
25
|
+
/** Indent for nested rows: 20px per level, matching the Figma folder tree. */
|
|
26
|
+
export function levelIndentStyle(level: number | undefined): string | undefined {
|
|
27
|
+
if (!level || level <= 1) return undefined;
|
|
28
|
+
return `padding-inline-start: calc(1rem + ${(level - 1) * 1.25}rem)`;
|
|
29
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to the `Tabs` component will be documented in this file.
|
|
4
|
-
|
|
5
|
-
## Unreleased
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the `Tabs` component will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## Unreleased
|