@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.
@@ -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 }),
@@ -44,6 +44,7 @@ function DatePicker({
44
44
  emit(void 0);
45
45
  return;
46
46
  }
47
+ if (!/^\d{4}-\d{2}-\d{2}$/.test(trimmed)) return;
47
48
  const parsed = parseDateInput(trimmed);
48
49
  if (parsed) {
49
50
  emit(parsed);
@@ -41,7 +41,9 @@ function DateRangePicker({
41
41
  onValueChange?.(next);
42
42
  };
43
43
  const commitEdge = (edge, raw) => {
44
- const parsed = raw.trim() === "" ? void 0 : parseDateInput(raw.trim()) ?? void 0;
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-DpqDMXcn.js';
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-7Q45MBFW.js';
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?: "compact" | "md" | null | undefined;
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?: "compact" | "md" | null | undefined;
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-variant": tone,
33
+ "data-tone": tone,
34
34
  role: "progressbar",
35
35
  "aria-valuenow": boundedValue,
36
36
  "aria-valuemin": 0,
@@ -1,4 +1,4 @@
1
- export { DatePicker } from '../../chunk-2HXZT2WJ.js';
1
+ export { DatePicker } from '../../chunk-54R5TEXH.js';
2
2
  import '../../chunk-DNGJHWJZ.js';
3
3
  import '../../chunk-VOHTRR5X.js';
4
4
  import '../../chunk-M4PZNAMV.js';
@@ -1,4 +1,4 @@
1
- export { DateRangePicker } from '../../chunk-GDDCSKCB.js';
1
+ export { DateRangePicker } from '../../chunk-QR7MITE6.js';
2
2
  import '../../chunk-DNGJHWJZ.js';
3
3
  import '../../chunk-VOHTRR5X.js';
4
4
  import '../../chunk-M4PZNAMV.js';
@@ -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-DpqDMXcn.js';
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-2HXZT2WJ.js';
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-7Q45MBFW.js';
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,4 +1,4 @@
1
- export { Transfer } from '../../chunk-7Q45MBFW.js';
1
+ export { Transfer } from '../../chunk-2HOTP7RL.js';
2
2
  import '../../chunk-SMLKNECP.js';
3
3
  import '../../chunk-VOHTRR5X.js';
4
4
  import '../../chunk-BE6GJGKJ.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-2HXZT2WJ.js';
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-DpqDMXcn.js';
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-2HXZT2WJ.js';
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-7Q45MBFW.js';
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';
@@ -1,3 +1,3 @@
1
- import '../chunk-B775Y6BE.js';
2
1
  import '../chunk-ZT5UEUBO.js';
2
+ import '../chunk-B775Y6BE.js';
3
3
  export { COMPONENT_PROP_REGISTRY, PROP_ALIASES_FORBIDDEN, VOCABULARY_REGISTRY } from '../chunk-IHRMOJXD.js';
@@ -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 };
@@ -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
+ }
@@ -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-state="drag"] {
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-state="drag"]::after {
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@godxjp/ui",
3
- "version": "11.0.0",
3
+ "version": "11.0.2",
4
4
  "type": "module",
5
5
  "packageManager": "pnpm@10.29.1",
6
6
  "sideEffects": false,
@@ -51,9 +51,13 @@ const RULES = [
51
51
  {
52
52
  id: "status-tone-not-variant",
53
53
  severity: "error",
54
- test: /\bvariant=["'](?:success|warning|destructive|info|neutral)["']/,
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
- "Status/color intent uses tone, not variant. Use tone='success|warning|destructive|info|neutral'.",
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 lines = content.split("\n");
209
- lines.forEach((line, i) => {
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 content.matchAll(CARD_FLUSH)) {
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: content.slice(0, match.index).split("\n").length,
297
+ line: lineNo,
227
298
  rule: "card-needs-content",
228
299
  severity: "error",
229
300
  message: