@godxjp/ui 11.0.0 → 11.0.2
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/dist/{chunk-7Q45MBFW.js → chunk-2HOTP7RL.js} +2 -0
- package/dist/{chunk-2HXZT2WJ.js → chunk-54R5TEXH.js} +1 -0
- package/dist/{chunk-GDDCSKCB.js → chunk-QR7MITE6.js} +3 -1
- package/dist/components/admin/index.d.ts +1 -1
- package/dist/components/admin/index.js +8 -8
- package/dist/components/data-display/card.d.ts +2 -2
- package/dist/components/data-display/index.d.ts +1 -1
- package/dist/components/data-display/index.js +2 -2
- package/dist/components/data-entry/date-picker.js +1 -1
- package/dist/components/data-entry/date-range-picker.js +1 -1
- package/dist/components/data-entry/index.d.ts +1 -1
- package/dist/components/data-entry/index.js +5 -5
- package/dist/components/data-entry/transfer.js +1 -1
- package/dist/components/layout/index.js +1 -1
- package/dist/components/navigation/index.js +3 -3
- package/dist/components/ui/index.js +9 -9
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -12
- package/dist/props/index.js +1 -1
- package/dist/{search-input-DpqDMXcn.d.ts → search-input-C_x-JFD3.d.ts} +3 -1
- package/dist/styles/control.css +11 -0
- package/dist/styles/data-display-layout.css +52 -2
- package/dist/styles/layout.css +20 -2
- package/package.json +1 -1
- package/scripts/ui-audit.mjs +79 -8
|
@@ -16,6 +16,7 @@ function SearchInput({
|
|
|
16
16
|
defaultValue = "",
|
|
17
17
|
placeholder,
|
|
18
18
|
debounce = 250,
|
|
19
|
+
onValueChange,
|
|
19
20
|
onSearch,
|
|
20
21
|
label,
|
|
21
22
|
ariaLabel,
|
|
@@ -42,6 +43,7 @@ function SearchInput({
|
|
|
42
43
|
}, [debounced]);
|
|
43
44
|
const setValue = (v) => {
|
|
44
45
|
if (!isControlled) setInternal(v);
|
|
46
|
+
onValueChange?.(v);
|
|
45
47
|
};
|
|
46
48
|
return /* @__PURE__ */ jsxs("div", { className: cn("ui-search-input", className), children: [
|
|
47
49
|
label !== void 0 ? /* @__PURE__ */ jsx(Label, { htmlFor: inputId, className: "ui-search-input-label", children: label }) : /* @__PURE__ */ jsx(Label, { htmlFor: inputId, className: "sr-only", children: resolvedAriaLabel }),
|
|
@@ -41,7 +41,9 @@ function DateRangePicker({
|
|
|
41
41
|
onValueChange?.(next);
|
|
42
42
|
};
|
|
43
43
|
const commitEdge = (edge, raw) => {
|
|
44
|
-
const
|
|
44
|
+
const trimmed = raw.trim();
|
|
45
|
+
if (trimmed !== "" && !/^\d{4}-\d{2}-\d{2}$/.test(trimmed)) return;
|
|
46
|
+
const parsed = trimmed === "" ? void 0 : parseDateInput(trimmed) ?? void 0;
|
|
45
47
|
const next = { from: value?.from, to: value?.to, [edge]: parsed };
|
|
46
48
|
emit(next.from || next.to ? next : void 0);
|
|
47
49
|
};
|
|
@@ -3,7 +3,7 @@ export { c as FlexProp, I as InlineProp, P as PageContainerProp, P as PageContai
|
|
|
3
3
|
export { F as Flex, P as PageContainer } from '../../flex-D_EXRFSW.js';
|
|
4
4
|
export { C as ColumnDef, D as DataTable, a as Density, b as Descriptions, E as EmptyState } from '../../data-table-B_q7j992.js';
|
|
5
5
|
export { Badge } from '../data-display/badge.js';
|
|
6
|
-
export { F as Field, a as FormField, S as SearchInput } from '../../search-input-
|
|
6
|
+
export { F as Field, a as FormField, S as SearchInput } from '../../search-input-C_x-JFD3.js';
|
|
7
7
|
export { a as SkeletonDetail, c as SkeletonRows, d as SkeletonStat, e as SkeletonTable } from '../../skeleton-cj9kh5wo.js';
|
|
8
8
|
export { Alert, AlertActions, AlertContent, AlertDescription, AlertQueryError, AlertTitle } from '../feedback/alert.js';
|
|
9
9
|
export { Upload, useUploadDraft } from '../data-entry/upload.js';
|
|
@@ -2,20 +2,20 @@ import '../../chunk-7CFO5FFE.js';
|
|
|
2
2
|
export { toast, useToast } from '../../chunk-B3WX53JQ.js';
|
|
3
3
|
export { SkeletonDetail, SkeletonRows, SkeletonStat, SkeletonTable } from '../../chunk-COD66MFF.js';
|
|
4
4
|
export { Toaster } from '../../chunk-TO7URV7U.js';
|
|
5
|
-
export { PageContainer } from '../../chunk-PUGEOUWZ.js';
|
|
6
|
-
import '../../chunk-XK3M3VRR.js';
|
|
7
|
-
import '../../chunk-32WO3YLB.js';
|
|
8
|
-
import '../../chunk-W4REF4TD.js';
|
|
9
5
|
export { Toolbar, ToolbarGroup } from '../../chunk-T2QO2S65.js';
|
|
10
|
-
export { Steps } from '../../chunk-SARQRCKO.js';
|
|
11
|
-
import '../../chunk-B73NA66T.js';
|
|
12
|
-
import '../../chunk-WGWI7EGL.js';
|
|
13
6
|
export { Pagination } from '../../chunk-PDXFQS7M.js';
|
|
7
|
+
export { Steps } from '../../chunk-SARQRCKO.js';
|
|
14
8
|
export { Tabs, TabsContent, TabsList, TabsTrigger } from '../../chunk-V3N266PT.js';
|
|
15
9
|
import '../../chunk-HL3G4SVG.js';
|
|
10
|
+
import '../../chunk-B73NA66T.js';
|
|
11
|
+
import '../../chunk-WGWI7EGL.js';
|
|
12
|
+
export { PageContainer } from '../../chunk-PUGEOUWZ.js';
|
|
13
|
+
import '../../chunk-XK3M3VRR.js';
|
|
14
|
+
import '../../chunk-32WO3YLB.js';
|
|
16
15
|
import '../../chunk-LMKUKCTN.js';
|
|
16
|
+
import '../../chunk-W4REF4TD.js';
|
|
17
17
|
export { Alert, AlertActions, AlertContent, AlertDescription, AlertQueryError, AlertTitle } from '../../chunk-QVLUCB47.js';
|
|
18
|
-
export { SearchInput, Transfer } from '../../chunk-
|
|
18
|
+
export { SearchInput, Transfer } from '../../chunk-2HOTP7RL.js';
|
|
19
19
|
export { TreeSelect } from '../../chunk-UNVRNJCB.js';
|
|
20
20
|
export { Upload, collectUploadCommitActions, createUploadItem, useUploadDraft } from '../../chunk-FAB3LMTK.js';
|
|
21
21
|
export { formatBytes, formatCurrency, formatDateLong, formatDateTime, formatRelative, humanError, shortId } from '../../chunk-X2VY4MOW.js';
|
|
@@ -11,7 +11,7 @@ type CardVariant = "default" | "muted" | "outline" | "featured";
|
|
|
11
11
|
/** Padding density — base 16px · tight 12px · cozy 20px. */
|
|
12
12
|
type CardDensity = "tight" | "cozy";
|
|
13
13
|
declare const cardVariants: (props?: ({
|
|
14
|
-
size?: "
|
|
14
|
+
size?: "md" | "compact" | null | undefined;
|
|
15
15
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
16
16
|
type CardProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof cardVariants> & {
|
|
17
17
|
size?: CardSize;
|
|
@@ -20,7 +20,7 @@ type CardProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof card
|
|
|
20
20
|
density?: CardDensity;
|
|
21
21
|
};
|
|
22
22
|
declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
|
|
23
|
-
size?: "
|
|
23
|
+
size?: "md" | "compact" | null | undefined;
|
|
24
24
|
} & class_variance_authority_types.ClassProp) | undefined) => string> & {
|
|
25
25
|
size?: CardSize;
|
|
26
26
|
accent?: CardAccent;
|
|
@@ -12,7 +12,7 @@ export { ScrollArea, ScrollBar } from './scroll-area.js';
|
|
|
12
12
|
import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
|
|
13
13
|
import * as AccordionPrimitive from '@radix-ui/react-accordion';
|
|
14
14
|
import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
|
|
15
|
-
export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from './carousel.js';
|
|
15
|
+
export { Carousel, CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, useCarousel } from './carousel.js';
|
|
16
16
|
import 'class-variance-authority/types';
|
|
17
17
|
import 'class-variance-authority';
|
|
18
18
|
import '@radix-ui/react-avatar';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { Avatar, AvatarFallback, AvatarImage } from '../../chunk-QTUJSRDH.js';
|
|
2
2
|
export { Card, CardAction, CardContent, CardCover, CardDescription, CardFooter, CardHeader, CardTitle, StatCard } from '../../chunk-P5KPCT6R.js';
|
|
3
|
-
export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from '../../chunk-JWGLJXQU.js';
|
|
3
|
+
export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, useCarousel } from '../../chunk-JWGLJXQU.js';
|
|
4
4
|
export { DataTable, Descriptions, EmptyState } from '../../chunk-USNR424B.js';
|
|
5
5
|
export { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../chunk-DV52WNXO.js';
|
|
6
6
|
import '../../chunk-INIIF7F7.js';
|
|
@@ -30,7 +30,7 @@ function Progress({ value, label, tone = "success" }) {
|
|
|
30
30
|
"div",
|
|
31
31
|
{
|
|
32
32
|
className: "ui-progress",
|
|
33
|
-
"data-
|
|
33
|
+
"data-tone": tone,
|
|
34
34
|
role: "progressbar",
|
|
35
35
|
"aria-valuenow": boundedValue,
|
|
36
36
|
"aria-valuemin": 0,
|
|
@@ -5,7 +5,7 @@ export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectProp
|
|
|
5
5
|
export { C as Checkbox, a as CheckboxGroup } from '../../checkbox-em-oFM5D.js';
|
|
6
6
|
export { Radio, RadioGroup, RadioGroupRoot, RadioItem } from './radio.js';
|
|
7
7
|
export { Textarea, TextareaProps } from './textarea.js';
|
|
8
|
-
export { F as Field, a as FormField, S as SearchInput } from '../../search-input-
|
|
8
|
+
export { F as Field, a as FormField, S as SearchInput } from '../../search-input-C_x-JFD3.js';
|
|
9
9
|
export { Switch } from './switch.js';
|
|
10
10
|
export { P as PasswordRule, a as PasswordStrength, b as PasswordStrengthLabels, c as PasswordStrengthProps, d as PasswordStrengthReturn, T as Toggle, e as ToggleGroup, f as ToggleGroupItem, g as ToggleProps, u as usePasswordStrength } from '../../password-strength-DVRvXEOK.js';
|
|
11
11
|
export { Slider } from './slider.js';
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, PasswordInput, Rating, TagInput } from '../../chunk-Z46J47FY.js';
|
|
2
2
|
export { PasswordStrength, Toggle, ToggleGroup, ToggleGroupItem, usePasswordStrength } from '../../chunk-VSUYVT2Q.js';
|
|
3
|
-
export { Textarea } from '../../chunk-EOTOCNT7.js';
|
|
4
|
-
export { TimeInput } from '../../chunk-3Q4A4U2P.js';
|
|
5
3
|
export { TimePicker } from '../../chunk-VSM44AYE.js';
|
|
6
|
-
export { DateRangePicker } from '../../chunk-GDDCSKCB.js';
|
|
7
4
|
export { Radio, RadioGroupOptions as RadioGroup, RadioGroupRoot, RadioItem } from '../../chunk-S2IJKT3D.js';
|
|
8
5
|
export { Switch } from '../../chunk-I7NQ2LIL.js';
|
|
6
|
+
export { Textarea } from '../../chunk-EOTOCNT7.js';
|
|
7
|
+
export { TimeInput } from '../../chunk-3Q4A4U2P.js';
|
|
9
8
|
export { ColorPicker } from '../../chunk-EE5DKOHX.js';
|
|
10
|
-
export { DatePicker } from '../../chunk-
|
|
9
|
+
export { DatePicker } from '../../chunk-54R5TEXH.js';
|
|
10
|
+
export { DateRangePicker } from '../../chunk-QR7MITE6.js';
|
|
11
11
|
export { Calendar } from '../../chunk-DNGJHWJZ.js';
|
|
12
|
-
export { SearchInput, Transfer } from '../../chunk-
|
|
12
|
+
export { SearchInput, Transfer } from '../../chunk-2HOTP7RL.js';
|
|
13
13
|
export { SHOW_ALL, SHOW_CHILD, SHOW_PARENT, TreeSelect } from '../../chunk-UNVRNJCB.js';
|
|
14
14
|
export { Upload, collectUploadCommitActions, createUploadItem, useUploadDraft } from '../../chunk-FAB3LMTK.js';
|
|
15
15
|
import '../../chunk-X2VY4MOW.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { AppShell, Breadcrumb, PageContainer, ResponsiveGrid, Sidebar, SidebarHeader, SidebarItem, SidebarSection, SplitPane, Topbar } from '../../chunk-PUGEOUWZ.js';
|
|
2
2
|
export { AspectRatio, Separator } from '../../chunk-XK3M3VRR.js';
|
|
3
3
|
import '../../chunk-32WO3YLB.js';
|
|
4
|
-
export { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '../../chunk-W4REF4TD.js';
|
|
5
4
|
import '../../chunk-LMKUKCTN.js';
|
|
5
|
+
export { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '../../chunk-W4REF4TD.js';
|
|
6
6
|
import '../../chunk-DV52WNXO.js';
|
|
7
7
|
export { Flex } from '../../chunk-INIIF7F7.js';
|
|
8
8
|
import '../../chunk-DY5C44UP.js';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export { AppSettingPicker, Toolbar, ToolbarGroup } from '../../chunk-T2QO2S65.js';
|
|
2
|
-
export { Steps } from '../../chunk-SARQRCKO.js';
|
|
3
|
-
export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger } from '../../chunk-B73NA66T.js';
|
|
4
|
-
export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport } from '../../chunk-WGWI7EGL.js';
|
|
5
2
|
export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from '../../chunk-PDXFQS7M.js';
|
|
3
|
+
export { Steps } from '../../chunk-SARQRCKO.js';
|
|
6
4
|
export { Tabs, TabsContent, TabsList, TabsTrigger } from '../../chunk-V3N266PT.js';
|
|
7
5
|
export { ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger } from '../../chunk-HL3G4SVG.js';
|
|
6
|
+
export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger } from '../../chunk-B73NA66T.js';
|
|
7
|
+
export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport } from '../../chunk-WGWI7EGL.js';
|
|
8
8
|
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from '../../chunk-LMKUKCTN.js';
|
|
9
9
|
import '../../chunk-NXVCI6YB.js';
|
|
10
10
|
import '../../chunk-HTEL5DQI.js';
|
|
@@ -3,26 +3,26 @@ export { Card, CardAction, CardContent, CardCover, CardDescription, CardFooter,
|
|
|
3
3
|
export { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, useCarousel } from '../../chunk-JWGLJXQU.js';
|
|
4
4
|
export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger } from '../../chunk-EZHHJQWQ.js';
|
|
5
5
|
export { PasswordStrength, Toggle, ToggleGroup, ToggleGroupItem, toggleVariants, usePasswordStrength } from '../../chunk-VSUYVT2Q.js';
|
|
6
|
-
export { Textarea } from '../../chunk-EOTOCNT7.js';
|
|
7
|
-
export { TimeInput } from '../../chunk-3Q4A4U2P.js';
|
|
8
6
|
export { TimePicker } from '../../chunk-VSM44AYE.js';
|
|
9
|
-
export { DateRangePicker } from '../../chunk-GDDCSKCB.js';
|
|
10
7
|
export { Radio, RadioGroupOptions as RadioGroup, RadioGroupRoot, RadioItem } from '../../chunk-S2IJKT3D.js';
|
|
11
8
|
export { Switch } from '../../chunk-I7NQ2LIL.js';
|
|
9
|
+
export { Textarea } from '../../chunk-EOTOCNT7.js';
|
|
10
|
+
export { TimeInput } from '../../chunk-3Q4A4U2P.js';
|
|
12
11
|
export { ColorPicker } from '../../chunk-EE5DKOHX.js';
|
|
13
|
-
export { DatePicker } from '../../chunk-
|
|
12
|
+
export { DatePicker } from '../../chunk-54R5TEXH.js';
|
|
13
|
+
export { DateRangePicker } from '../../chunk-QR7MITE6.js';
|
|
14
14
|
export { Calendar } from '../../chunk-DNGJHWJZ.js';
|
|
15
15
|
export { Skeleton } from '../../chunk-COD66MFF.js';
|
|
16
16
|
export { Toaster } from '../../chunk-TO7URV7U.js';
|
|
17
|
-
export { AspectRatio, Separator } from '../../chunk-XK3M3VRR.js';
|
|
18
|
-
export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../chunk-32WO3YLB.js';
|
|
19
|
-
export { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '../../chunk-W4REF4TD.js';
|
|
20
|
-
export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger } from '../../chunk-B73NA66T.js';
|
|
21
|
-
export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport } from '../../chunk-WGWI7EGL.js';
|
|
22
17
|
export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from '../../chunk-PDXFQS7M.js';
|
|
23
18
|
export { Tabs, TabsContent, TabsList, TabsTrigger } from '../../chunk-V3N266PT.js';
|
|
24
19
|
export { ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger } from '../../chunk-HL3G4SVG.js';
|
|
20
|
+
export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarItem, MenubarLabel, MenubarMenu, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger } from '../../chunk-B73NA66T.js';
|
|
21
|
+
export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport } from '../../chunk-WGWI7EGL.js';
|
|
22
|
+
export { AspectRatio, Separator } from '../../chunk-XK3M3VRR.js';
|
|
23
|
+
export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../chunk-32WO3YLB.js';
|
|
25
24
|
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from '../../chunk-LMKUKCTN.js';
|
|
25
|
+
export { ResizableHandle, ResizablePanel, ResizablePanelGroup } from '../../chunk-W4REF4TD.js';
|
|
26
26
|
export { Alert, AlertActions, AlertBase, AlertContent, AlertDescription, AlertQueryError, AlertTitle } from '../../chunk-QVLUCB47.js';
|
|
27
27
|
export { Upload, collectUploadCommitActions, createUploadItem, useUploadDraft } from '../../chunk-FAB3LMTK.js';
|
|
28
28
|
import '../../chunk-X2VY4MOW.js';
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { F as FlexAlignProp, a as FlexDirectionProp, b as FlexJustifyProp, c as
|
|
|
3
3
|
export { F as Flex, P as PageContainer } from './flex-D_EXRFSW.js';
|
|
4
4
|
export { C as ColumnDef, D as DataTable, a as Density, b as Descriptions, E as EmptyState } from './data-table-B_q7j992.js';
|
|
5
5
|
export { Badge } from './components/data-display/badge.js';
|
|
6
|
-
export { F as Field, a as FormField, S as SearchInput } from './search-input-
|
|
6
|
+
export { F as Field, a as FormField, S as SearchInput } from './search-input-C_x-JFD3.js';
|
|
7
7
|
export { a as SkeletonDetail, c as SkeletonRows, d as SkeletonStat, e as SkeletonTable } from './skeleton-cj9kh5wo.js';
|
|
8
8
|
export { Alert, AlertActions, AlertContent, AlertDescription, AlertQueryError, AlertTitle } from './components/feedback/alert.js';
|
|
9
9
|
export { Upload, useUploadDraft } from './components/data-entry/upload.js';
|
package/dist/index.js
CHANGED
|
@@ -2,33 +2,33 @@ import './chunk-WFUIE252.js';
|
|
|
2
2
|
import './chunk-EZHHJQWQ.js';
|
|
3
3
|
import './chunk-Z46J47FY.js';
|
|
4
4
|
import './chunk-VSUYVT2Q.js';
|
|
5
|
-
import './chunk-EOTOCNT7.js';
|
|
6
|
-
import './chunk-3Q4A4U2P.js';
|
|
7
5
|
import './chunk-VSM44AYE.js';
|
|
8
|
-
import './chunk-GDDCSKCB.js';
|
|
9
6
|
import './chunk-S2IJKT3D.js';
|
|
10
7
|
import './chunk-I7NQ2LIL.js';
|
|
8
|
+
import './chunk-EOTOCNT7.js';
|
|
9
|
+
import './chunk-3Q4A4U2P.js';
|
|
11
10
|
import './chunk-EE5DKOHX.js';
|
|
12
|
-
import './chunk-
|
|
11
|
+
import './chunk-54R5TEXH.js';
|
|
12
|
+
import './chunk-QR7MITE6.js';
|
|
13
13
|
import './chunk-DNGJHWJZ.js';
|
|
14
14
|
import './chunk-7CFO5FFE.js';
|
|
15
15
|
export { toast, useToast } from './chunk-B3WX53JQ.js';
|
|
16
16
|
export { SkeletonDetail, SkeletonRows, SkeletonStat, SkeletonTable } from './chunk-COD66MFF.js';
|
|
17
17
|
export { Toaster } from './chunk-TO7URV7U.js';
|
|
18
|
-
export { PageContainer } from './chunk-PUGEOUWZ.js';
|
|
19
|
-
import './chunk-XK3M3VRR.js';
|
|
20
|
-
import './chunk-32WO3YLB.js';
|
|
21
|
-
import './chunk-W4REF4TD.js';
|
|
22
18
|
export { Toolbar, ToolbarGroup } from './chunk-T2QO2S65.js';
|
|
23
|
-
export { Steps } from './chunk-SARQRCKO.js';
|
|
24
|
-
import './chunk-B73NA66T.js';
|
|
25
|
-
import './chunk-WGWI7EGL.js';
|
|
26
19
|
export { Pagination } from './chunk-PDXFQS7M.js';
|
|
20
|
+
export { Steps } from './chunk-SARQRCKO.js';
|
|
27
21
|
export { Tabs, TabsContent, TabsList, TabsTrigger } from './chunk-V3N266PT.js';
|
|
28
22
|
import './chunk-HL3G4SVG.js';
|
|
23
|
+
import './chunk-B73NA66T.js';
|
|
24
|
+
import './chunk-WGWI7EGL.js';
|
|
25
|
+
export { PageContainer } from './chunk-PUGEOUWZ.js';
|
|
26
|
+
import './chunk-XK3M3VRR.js';
|
|
27
|
+
import './chunk-32WO3YLB.js';
|
|
29
28
|
import './chunk-LMKUKCTN.js';
|
|
29
|
+
import './chunk-W4REF4TD.js';
|
|
30
30
|
export { Alert, AlertActions, AlertContent, AlertDescription, AlertQueryError, AlertTitle } from './chunk-QVLUCB47.js';
|
|
31
|
-
export { SearchInput, Transfer } from './chunk-
|
|
31
|
+
export { SearchInput, Transfer } from './chunk-2HOTP7RL.js';
|
|
32
32
|
export { TreeSelect } from './chunk-UNVRNJCB.js';
|
|
33
33
|
export { Upload, collectUploadCommitActions, createUploadItem, useUploadDraft } from './chunk-FAB3LMTK.js';
|
|
34
34
|
export { formatBytes, formatCurrency, formatDateLong, formatDateTime, formatRelative, humanError, shortId } from './chunk-X2VY4MOW.js';
|
package/dist/props/index.js
CHANGED
|
@@ -12,6 +12,8 @@ interface SearchInputProps {
|
|
|
12
12
|
defaultValue?: string;
|
|
13
13
|
placeholder?: string;
|
|
14
14
|
debounce?: number;
|
|
15
|
+
/** Fires on EVERY keystroke (immediate) — required to keep a controlled `value` responsive. */
|
|
16
|
+
onValueChange?: (q: string) => void;
|
|
15
17
|
onSearch: (q: string) => void;
|
|
16
18
|
label?: React.ReactNode;
|
|
17
19
|
ariaLabel?: string;
|
|
@@ -20,6 +22,6 @@ interface SearchInputProps {
|
|
|
20
22
|
id?: string;
|
|
21
23
|
disabled?: boolean;
|
|
22
24
|
}
|
|
23
|
-
declare function SearchInput({ value: controlledValue, defaultValue, placeholder, debounce, onSearch, label, ariaLabel, className, inputClassName, id, disabled, }: SearchInputProps): react_jsx_runtime.JSX.Element;
|
|
25
|
+
declare function SearchInput({ value: controlledValue, defaultValue, placeholder, debounce, onValueChange, onSearch, label, ariaLabel, className, inputClassName, id, disabled, }: SearchInputProps): react_jsx_runtime.JSX.Element;
|
|
24
26
|
|
|
25
27
|
export { Field as F, SearchInput as S, FormField as a };
|
package/dist/styles/control.css
CHANGED
|
@@ -639,6 +639,17 @@
|
|
|
639
639
|
z-index: 1;
|
|
640
640
|
box-shadow: 0 0 0 2px hsl(var(--ring));
|
|
641
641
|
}
|
|
642
|
+
.ui-otp-container:has(.ui-otp-input[aria-invalid="true"]) .ui-otp-slot {
|
|
643
|
+
border-color: hsl(var(--destructive));
|
|
644
|
+
}
|
|
645
|
+
.ui-otp-container:has(.ui-otp-input[aria-invalid="true"]) .ui-otp-slot[data-active="true"] {
|
|
646
|
+
box-shadow: 0 0 0 2px hsl(var(--destructive));
|
|
647
|
+
}
|
|
648
|
+
.ui-otp-container:has(.ui-otp-input:disabled) .ui-otp-slot {
|
|
649
|
+
cursor: not-allowed;
|
|
650
|
+
background: hsl(var(--muted));
|
|
651
|
+
color: hsl(var(--muted-foreground));
|
|
652
|
+
}
|
|
642
653
|
.ui-otp-caret-wrapper {
|
|
643
654
|
position: absolute;
|
|
644
655
|
inset: 0;
|
|
@@ -120,13 +120,22 @@
|
|
|
120
120
|
.ui-timeline {
|
|
121
121
|
display: flex;
|
|
122
122
|
flex-direction: column;
|
|
123
|
-
gap: var(--space-stack-md);
|
|
124
123
|
}
|
|
125
124
|
|
|
126
125
|
.ui-timeline-item {
|
|
127
126
|
display: grid;
|
|
128
127
|
grid-template-columns: 1.5rem minmax(0, 1fr);
|
|
129
|
-
gap: var(--space-stack-md);
|
|
128
|
+
column-gap: var(--space-stack-md);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* Spacing lives INSIDE the item (not a flex gap between items) so the rail line
|
|
132
|
+
spans the full item height and the connector stays continuous dot-to-dot. */
|
|
133
|
+
.ui-timeline-body {
|
|
134
|
+
padding-bottom: var(--space-stack-md);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.ui-timeline-item:last-child .ui-timeline-body {
|
|
138
|
+
padding-bottom: 0;
|
|
130
139
|
}
|
|
131
140
|
|
|
132
141
|
.ui-timeline-rail {
|
|
@@ -207,6 +216,17 @@
|
|
|
207
216
|
.ui-accordion-trigger:hover {
|
|
208
217
|
text-decoration: underline;
|
|
209
218
|
}
|
|
219
|
+
.ui-accordion-trigger:focus-visible {
|
|
220
|
+
outline: 2px solid hsl(var(--ring));
|
|
221
|
+
outline-offset: 2px;
|
|
222
|
+
border-radius: var(--radius-sm);
|
|
223
|
+
}
|
|
224
|
+
.ui-accordion-trigger:disabled,
|
|
225
|
+
.ui-accordion-trigger[data-disabled] {
|
|
226
|
+
cursor: not-allowed;
|
|
227
|
+
opacity: 0.5;
|
|
228
|
+
pointer-events: none;
|
|
229
|
+
}
|
|
210
230
|
.ui-accordion-chevron {
|
|
211
231
|
width: 1rem;
|
|
212
232
|
height: 1rem;
|
|
@@ -292,3 +312,33 @@
|
|
|
292
312
|
width: 1rem;
|
|
293
313
|
height: 1rem;
|
|
294
314
|
}
|
|
315
|
+
|
|
316
|
+
/* Vertical orientation (opts.axis === "y") — flips the track and the arrow positions. */
|
|
317
|
+
.ui-carousel[data-orientation="vertical"] .ui-carousel-content {
|
|
318
|
+
flex-direction: column;
|
|
319
|
+
margin-inline: 0;
|
|
320
|
+
margin-block: calc(var(--space-4) * -1);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.ui-carousel[data-orientation="vertical"] .ui-carousel-item {
|
|
324
|
+
min-width: 0;
|
|
325
|
+
min-height: 100%;
|
|
326
|
+
padding-inline: 0;
|
|
327
|
+
padding-block: var(--space-4);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.ui-carousel[data-orientation="vertical"] .ui-carousel-previous,
|
|
331
|
+
.ui-carousel[data-orientation="vertical"] .ui-carousel-next {
|
|
332
|
+
top: auto;
|
|
333
|
+
left: 50%;
|
|
334
|
+
right: auto;
|
|
335
|
+
transform: translateX(-50%);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
.ui-carousel[data-orientation="vertical"] .ui-carousel-previous {
|
|
339
|
+
top: var(--space-2);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.ui-carousel[data-orientation="vertical"] .ui-carousel-next {
|
|
343
|
+
bottom: var(--space-2);
|
|
344
|
+
}
|
package/dist/styles/layout.css
CHANGED
|
@@ -201,21 +201,39 @@
|
|
|
201
201
|
background: hsl(var(--border));
|
|
202
202
|
position: relative;
|
|
203
203
|
flex-shrink: 0;
|
|
204
|
+
display: flex;
|
|
205
|
+
align-items: center;
|
|
206
|
+
justify-content: center;
|
|
207
|
+
color: hsl(var(--muted-foreground));
|
|
204
208
|
}
|
|
205
209
|
|
|
210
|
+
/* Vertical orientation: the separator is a horizontal strip, so swap the
|
|
211
|
+
geometry — give it height instead of width. v4 sets aria-orientation. */
|
|
212
|
+
.ui-resizable-handle[aria-orientation="vertical"] {
|
|
213
|
+
width: auto;
|
|
214
|
+
height: var(--control-border-width);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/* v4 react-resizable-panels marks the active (dragging) and disabled state
|
|
218
|
+
via the data-separator attribute value, not data-state. */
|
|
206
219
|
.ui-resizable-handle:hover,
|
|
207
|
-
.ui-resizable-handle[data-
|
|
220
|
+
.ui-resizable-handle[data-separator="active"] {
|
|
208
221
|
background: hsl(var(--accent));
|
|
209
222
|
}
|
|
210
223
|
|
|
211
224
|
.ui-resizable-handle:hover::after,
|
|
212
|
-
.ui-resizable-handle[data-
|
|
225
|
+
.ui-resizable-handle[data-separator="active"]::after {
|
|
213
226
|
content: "";
|
|
214
227
|
position: absolute;
|
|
215
228
|
inset: 0;
|
|
216
229
|
background: hsl(var(--accent-foreground) / 0.2);
|
|
217
230
|
}
|
|
218
231
|
|
|
232
|
+
.ui-resizable-handle[data-separator="disabled"] {
|
|
233
|
+
cursor: not-allowed;
|
|
234
|
+
opacity: 0.5;
|
|
235
|
+
}
|
|
236
|
+
|
|
219
237
|
@media (min-width: 1080px) {
|
|
220
238
|
.ui-split-pane[data-aside-width="sm"] {
|
|
221
239
|
grid-template-columns: minmax(0, 1fr) 20rem;
|
package/package.json
CHANGED
package/scripts/ui-audit.mjs
CHANGED
|
@@ -51,9 +51,13 @@ const RULES = [
|
|
|
51
51
|
{
|
|
52
52
|
id: "status-tone-not-variant",
|
|
53
53
|
severity: "error",
|
|
54
|
-
|
|
54
|
+
// Only the tone-driven status components (Badge/Tag/StatCard) are wrong here — they expose a
|
|
55
|
+
// `tone` prop and reserve `variant` for STRUCTURE (default|secondary|outline). Button, Alert,
|
|
56
|
+
// DropdownMenuItem, ContextMenuItem, AlertDialog etc. legitimately use `variant` for emphasis,
|
|
57
|
+
// so they must NOT be flagged.
|
|
58
|
+
test: /<(?:Badge|Tag|StatCard)\b[^>]*\bvariant=["'](?:success|warning|destructive|info|neutral)["']/,
|
|
55
59
|
message:
|
|
56
|
-
"
|
|
60
|
+
"Badge/Tag/StatCard status uses tone, not variant (variant is structural: default|secondary|outline). Use tone='success|warning|destructive|info|neutral'.",
|
|
57
61
|
},
|
|
58
62
|
{
|
|
59
63
|
id: "no-domain-tracking-token",
|
|
@@ -175,6 +179,68 @@ const RULES = [
|
|
|
175
179
|
},
|
|
176
180
|
];
|
|
177
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Blank out `//` line comments and block comments (incl. JSDoc) — replacing them with spaces and
|
|
184
|
+
* preserving newlines so line numbers stay accurate — while KEEPING string/template literals (the
|
|
185
|
+
* className values we actually want to scan). Prevents false positives like a doc-comment that
|
|
186
|
+
* literally says "Never a raw <input>".
|
|
187
|
+
*/
|
|
188
|
+
function stripComments(src) {
|
|
189
|
+
let out = "";
|
|
190
|
+
let state = "code"; // code | line | block | string
|
|
191
|
+
let quote = "";
|
|
192
|
+
for (let i = 0; i < src.length; i++) {
|
|
193
|
+
const c = src[i];
|
|
194
|
+
const n = src[i + 1];
|
|
195
|
+
if (state === "code") {
|
|
196
|
+
if (c === "/" && n === "/") {
|
|
197
|
+
state = "line";
|
|
198
|
+
out += " ";
|
|
199
|
+
i++;
|
|
200
|
+
} else if (c === "/" && n === "*") {
|
|
201
|
+
state = "block";
|
|
202
|
+
out += " ";
|
|
203
|
+
i++;
|
|
204
|
+
} else if (c === '"' || c === "'" || c === "`") {
|
|
205
|
+
state = "string";
|
|
206
|
+
quote = c;
|
|
207
|
+
out += c;
|
|
208
|
+
} else {
|
|
209
|
+
out += c;
|
|
210
|
+
}
|
|
211
|
+
} else if (state === "line") {
|
|
212
|
+
if (c === "\n") {
|
|
213
|
+
state = "code";
|
|
214
|
+
out += c;
|
|
215
|
+
} else out += " ";
|
|
216
|
+
} else if (state === "block") {
|
|
217
|
+
if (c === "*" && n === "/") {
|
|
218
|
+
state = "code";
|
|
219
|
+
out += " ";
|
|
220
|
+
i++;
|
|
221
|
+
} else out += c === "\n" ? "\n" : " ";
|
|
222
|
+
} else {
|
|
223
|
+
// string
|
|
224
|
+
out += c;
|
|
225
|
+
if (c === "\\") {
|
|
226
|
+
out += src[i + 1] ?? "";
|
|
227
|
+
i++;
|
|
228
|
+
} else if (c === quote) state = "code";
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return out;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/** A finding is suppressed by `ui-audit-disable-line <rule>` on the same line, or
|
|
235
|
+
* `ui-audit-disable-next-line <rule>` on the line above (explicit rule id required). */
|
|
236
|
+
function isSuppressed(ruleId, sameLine, prevLine) {
|
|
237
|
+
const onSame = new RegExp(`ui-audit-disable-line\\b[^\\n]*\\b${ruleId}\\b`).test(sameLine ?? "");
|
|
238
|
+
const onPrev = new RegExp(`ui-audit-disable-next-line\\b[^\\n]*\\b${ruleId}\\b`).test(
|
|
239
|
+
prevLine ?? "",
|
|
240
|
+
);
|
|
241
|
+
return onSame || onPrev;
|
|
242
|
+
}
|
|
243
|
+
|
|
178
244
|
function walk(dir, acc = []) {
|
|
179
245
|
let entries;
|
|
180
246
|
try {
|
|
@@ -205,25 +271,30 @@ for (const dir of SCAN_DIRS) {
|
|
|
205
271
|
for (const file of walk(join(CWD, dir))) {
|
|
206
272
|
const rel = relative(CWD, file);
|
|
207
273
|
const content = readFileSync(file, "utf8");
|
|
208
|
-
const
|
|
209
|
-
|
|
274
|
+
const origLines = content.split("\n");
|
|
275
|
+
const scanContent = stripComments(content); // comments blanked; strings + line numbers kept
|
|
276
|
+
const scanLines = scanContent.split("\n");
|
|
277
|
+
scanLines.forEach((line, i) => {
|
|
210
278
|
for (const rule of RULES) {
|
|
211
|
-
if (rule.test.test(line)) {
|
|
279
|
+
if (rule.test.test(line) && !isSuppressed(rule.id, origLines[i], origLines[i - 1])) {
|
|
212
280
|
findings.push({
|
|
213
281
|
file: rel,
|
|
214
282
|
line: i + 1,
|
|
215
283
|
rule: rule.id,
|
|
216
284
|
severity: rule.severity,
|
|
217
285
|
message: rule.message,
|
|
218
|
-
snippet: line.trim().slice(0, 120),
|
|
286
|
+
snippet: (origLines[i] ?? line).trim().slice(0, 120),
|
|
219
287
|
});
|
|
220
288
|
}
|
|
221
289
|
}
|
|
222
290
|
});
|
|
223
|
-
for (const match of
|
|
291
|
+
for (const match of scanContent.matchAll(CARD_FLUSH)) {
|
|
292
|
+
const lineNo = scanContent.slice(0, match.index).split("\n").length;
|
|
293
|
+
if (isSuppressed("card-needs-content", origLines[lineNo - 1], origLines[lineNo - 2]))
|
|
294
|
+
continue;
|
|
224
295
|
findings.push({
|
|
225
296
|
file: rel,
|
|
226
|
-
line:
|
|
297
|
+
line: lineNo,
|
|
227
298
|
rule: "card-needs-content",
|
|
228
299
|
severity: "error",
|
|
229
300
|
message:
|