@stll/ui 0.0.1-placeholder.0 → 0.2.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.
Files changed (133) hide show
  1. package/README.md +84 -0
  2. package/dist/components/accordion.d.ts +8 -0
  3. package/dist/components/accordion.js +38 -0
  4. package/dist/components/alert-dialog.d.ts +32 -0
  5. package/dist/components/alert-dialog.js +75 -0
  6. package/dist/components/avatar.d.ts +7 -0
  7. package/dist/components/avatar.js +22 -0
  8. package/dist/components/bidi-text.d.ts +24 -0
  9. package/dist/components/bidi-text.js +38 -0
  10. package/dist/components/brand-icons.d.ts +7 -0
  11. package/dist/components/brand-icons.js +18 -0
  12. package/dist/components/breadcrumb.d.ts +12 -0
  13. package/dist/components/breadcrumb.js +61 -0
  14. package/dist/components/button-variants.d.ts +17 -0
  15. package/dist/components/button-variants.js +43 -0
  16. package/dist/components/button.d.ts +20 -0
  17. package/dist/components/button.js +53 -0
  18. package/dist/components/checkbox.d.ts +5 -0
  19. package/dist/components/checkbox.js +44 -0
  20. package/dist/components/color-picker.d.ts +47 -0
  21. package/dist/components/color-picker.js +249 -0
  22. package/dist/components/combobox.d.ts +40 -0
  23. package/dist/components/combobox.js +208 -0
  24. package/dist/components/command.d.ts +34 -0
  25. package/dist/components/command.js +100 -0
  26. package/dist/components/date-picker-popover.d.ts +29 -0
  27. package/dist/components/date-picker-popover.js +548 -0
  28. package/dist/components/date-picker-popover.logic.d.ts +14 -0
  29. package/dist/components/date-picker-popover.logic.js +26 -0
  30. package/dist/components/destructive-action-confirmation.d.ts +21 -0
  31. package/dist/components/destructive-action-confirmation.js +60 -0
  32. package/dist/components/destructive-confirm-dialog.d.ts +17 -0
  33. package/dist/components/destructive-confirm-dialog.js +49 -0
  34. package/dist/components/dialog.d.ts +37 -0
  35. package/dist/components/dialog.js +92 -0
  36. package/dist/components/directional-icon.d.ts +30 -0
  37. package/dist/components/directional-icon.js +12 -0
  38. package/dist/components/field.d.ts +11 -0
  39. package/dist/components/field.js +34 -0
  40. package/dist/components/form.d.ts +5 -0
  41. package/dist/components/form.js +12 -0
  42. package/dist/components/frame.d.ts +10 -0
  43. package/dist/components/frame.js +35 -0
  44. package/dist/components/hex-color-picker.d.ts +11 -0
  45. package/dist/components/hex-color-picker.js +366 -0
  46. package/dist/components/input-group.d.ts +15 -0
  47. package/dist/components/input-group.js +53 -0
  48. package/dist/components/input-otp.d.ts +13 -0
  49. package/dist/components/input-otp.js +39 -0
  50. package/dist/components/input.d.ts +12 -0
  51. package/dist/components/input.js +46 -0
  52. package/dist/components/label.d.ts +5 -0
  53. package/dist/components/label.js +18 -0
  54. package/dist/components/menu.d.ts +44 -0
  55. package/dist/components/menu.js +152 -0
  56. package/dist/components/outline-rail.d.ts +39 -0
  57. package/dist/components/outline-rail.js +405 -0
  58. package/dist/components/pagination.d.ts +17 -0
  59. package/dist/components/pagination.js +78 -0
  60. package/dist/components/popover.d.ts +34 -0
  61. package/dist/components/popover.js +67 -0
  62. package/dist/components/preview-card.d.ts +12 -0
  63. package/dist/components/preview-card.js +25 -0
  64. package/dist/components/preview-pane.d.ts +23 -0
  65. package/dist/components/preview-pane.js +33 -0
  66. package/dist/components/scroll-area.d.ts +19 -0
  67. package/dist/components/scroll-area.js +38 -0
  68. package/dist/components/scroll-to-top.d.ts +12 -0
  69. package/dist/components/scroll-to-top.js +43 -0
  70. package/dist/components/secret-input.d.ts +9 -0
  71. package/dist/components/secret-input.js +38 -0
  72. package/dist/components/segmented-icon-toggle.d.ts +22 -0
  73. package/dist/components/segmented-icon-toggle.js +30 -0
  74. package/dist/components/select.d.ts +25 -0
  75. package/dist/components/select.js +196 -0
  76. package/dist/components/separator.d.ts +16 -0
  77. package/dist/components/separator.js +26 -0
  78. package/dist/components/sheet.d.ts +29 -0
  79. package/dist/components/sheet.js +87 -0
  80. package/dist/components/skeleton.d.ts +4 -0
  81. package/dist/components/skeleton.js +10 -0
  82. package/dist/components/stella-mark.d.ts +5 -0
  83. package/dist/components/stella-mark.js +12 -0
  84. package/dist/components/stella-wordmark.d.ts +5 -0
  85. package/dist/components/stella-wordmark.js +21 -0
  86. package/dist/components/table.d.ts +20 -0
  87. package/dist/components/table.js +80 -0
  88. package/dist/components/tabs.d.ts +11 -0
  89. package/dist/components/tabs.js +46 -0
  90. package/dist/components/textarea.d.ts +9 -0
  91. package/dist/components/textarea.js +31 -0
  92. package/dist/components/toast.d.ts +60 -0
  93. package/dist/components/toast.js +261 -0
  94. package/dist/components/tooltip-trigger-helper.d.ts +11 -0
  95. package/dist/components/tooltip-trigger-helper.js +14 -0
  96. package/dist/components/tooltip.d.ts +15 -0
  97. package/dist/components/tooltip.js +32 -0
  98. package/dist/hooks/use-contained-handler.d.ts +55 -0
  99. package/dist/hooks/use-contained-handler.js +54 -0
  100. package/dist/hooks/use-content-dir.d.ts +48 -0
  101. package/dist/hooks/use-content-dir.js +45 -0
  102. package/dist/hooks/use-mobile.d.ts +4 -0
  103. package/dist/hooks/use-mobile.js +16 -0
  104. package/dist/hooks/use-viewport-width.d.ts +5 -0
  105. package/dist/hooks/use-viewport-width.js +14 -0
  106. package/dist/index.d.ts +60 -0
  107. package/dist/index.js +59 -0
  108. package/dist/inspector/chrome.d.ts +72 -0
  109. package/dist/inspector/chrome.js +153 -0
  110. package/dist/inspector/dock.d.ts +48 -0
  111. package/dist/inspector/dock.js +36 -0
  112. package/dist/inspector/index.d.ts +6 -0
  113. package/dist/inspector/index.js +6 -0
  114. package/dist/inspector/layout-tokens.d.ts +28 -0
  115. package/dist/inspector/layout-tokens.js +28 -0
  116. package/dist/inspector/pane-width.d.ts +64 -0
  117. package/dist/inspector/pane-width.js +53 -0
  118. package/dist/inspector/use-pane-width.d.ts +99 -0
  119. package/dist/inspector/use-pane-width.js +149 -0
  120. package/dist/lib/button-disposition.d.ts +63 -0
  121. package/dist/lib/button-disposition.js +52 -0
  122. package/dist/lib/overlay-layer.d.ts +22 -0
  123. package/dist/lib/overlay-layer.js +21 -0
  124. package/dist/lib/tab-order.d.ts +15 -0
  125. package/dist/lib/tab-order.js +15 -0
  126. package/dist/lib/tooltip-content.d.ts +13 -0
  127. package/dist/lib/tooltip-content.js +12 -0
  128. package/dist/lib/utils.d.ts +20 -0
  129. package/dist/lib/utils.js +41 -0
  130. package/dist/lib/week.d.ts +25 -0
  131. package/dist/lib/week.js +40 -0
  132. package/dist/styles/theme.css +1209 -0
  133. package/package.json +506 -2
@@ -0,0 +1,16 @@
1
+ import * as React$1 from "react";
2
+ //#region src/hooks/use-mobile.ts
3
+ const MOBILE_BREAKPOINT = 768;
4
+ const MOBILE_QUERY = `(max-width: 767px)`;
5
+ const subscribe = (onChange) => {
6
+ const mql = window.matchMedia(MOBILE_QUERY);
7
+ mql.addEventListener("change", onChange);
8
+ return () => mql.removeEventListener("change", onChange);
9
+ };
10
+ const getSnapshot = () => window.innerWidth < MOBILE_BREAKPOINT;
11
+ const getServerSnapshot = () => false;
12
+ function useIsMobile() {
13
+ return React$1.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
14
+ }
15
+ //#endregion
16
+ export { useIsMobile };
@@ -0,0 +1,5 @@
1
+ //#region src/hooks/use-viewport-width.d.ts
2
+ /** Viewport width in CSS pixels, tracked across resizes. */
3
+ declare function useViewportWidth(): number;
4
+ //#endregion
5
+ export { useViewportWidth };
@@ -0,0 +1,14 @@
1
+ import * as React$1 from "react";
2
+ //#region src/hooks/use-viewport-width.ts
3
+ const subscribe = (onChange) => {
4
+ window.addEventListener("resize", onChange);
5
+ return () => window.removeEventListener("resize", onChange);
6
+ };
7
+ const getSnapshot = () => window.innerWidth;
8
+ const getServerSnapshot = () => 0;
9
+ /** Viewport width in CSS pixels, tracked across resizes. */
10
+ function useViewportWidth() {
11
+ return React$1.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
12
+ }
13
+ //#endregion
14
+ export { useViewportWidth };
@@ -0,0 +1,60 @@
1
+ import { Accordion, AccordionContent as AccordionPanel, AccordionItem, AccordionTrigger } from "./components/accordion.js";
2
+ import { OVERLAY_LAYER_CLASS_NAMES, OverlayLayer } from "./lib/overlay-layer.js";
3
+ import { AlertDialog, AlertDialogBackdrop, AlertDialogClose, AlertDialogContent as AlertDialogPopup, AlertDialogCreateHandle, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogPanel, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport } from "./components/alert-dialog.js";
4
+ import { Avatar, AvatarFallback, AvatarImage } from "./components/avatar.js";
5
+ import { BidiDirection, BidiText, BidiTextProps, UserText } from "./components/bidi-text.js";
6
+ import { DiscordLogoIcon, GitHubLogoIcon } from "./components/brand-icons.js";
7
+ import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "./components/breadcrumb.js";
8
+ import { buttonAccessibleDisabledClass, buttonVariants } from "./components/button-variants.js";
9
+ import { Button } from "./components/button.js";
10
+ import { Checkbox } from "./components/checkbox.js";
11
+ import { ColorPicker, ColorPickerContent, ColorPickerContentProps, ColorPickerProps, ColorPreset, DEFAULT_PRESETS } from "./components/color-picker.js";
12
+ import { Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxList, ComboboxPopup, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, useComboboxFilter } from "./components/combobox.js";
13
+ import { Dialog, DialogBackdrop, DialogClose, DialogContent as DialogPopup, DialogCreateHandle, DialogDescription, DialogFooter, DialogHeader, DialogPanel, DialogPortal, DialogTitle, DialogTrigger, DialogViewport } from "./components/dialog.js";
14
+ import { Command, CommandCollection, CommandDialog, CommandDialogPopup, CommandDialogTrigger, CommandEmpty, CommandFooter, CommandGroup, CommandGroupLabel, CommandInput, CommandItem, CommandList, CommandPanel, CommandSeparator, CommandShortcut } from "./components/command.js";
15
+ import { DatePickerPopover, DatePickerPopoverProps } from "./components/date-picker-popover.js";
16
+ import { Input, InputProps } from "./components/input.js";
17
+ import { DestructiveActionConfirmation, useDestructiveActionConfirmation } from "./components/destructive-action-confirmation.js";
18
+ import { DestructiveConfirmDialog, DestructiveConfirmDialogProps } from "./components/destructive-confirm-dialog.js";
19
+ import { DirectionalIcon } from "./components/directional-icon.js";
20
+ import { Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity } from "./components/field.js";
21
+ import { Form } from "./components/form.js";
22
+ import { Frame, FrameDescription, FrameFooter, FrameHeader, FramePanel, FrameTitle } from "./components/frame.js";
23
+ import { HexColorPicker, HexColorPickerProps } from "./components/hex-color-picker.js";
24
+ import { Textarea, TextareaProps } from "./components/textarea.js";
25
+ import { InputGroup, InputGroupAddon, InputGroupInput, InputGroupText, InputGroupTextarea } from "./components/input-group.js";
26
+ import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from "./components/input-otp.js";
27
+ import { Label } from "./components/label.js";
28
+ import { DropdownMenu as Menu, DropdownMenuCheckboxItem as MenuCheckboxItem, DropdownMenuContent as MenuPopup, DropdownMenuCreateHandle as MenuCreateHandle, DropdownMenuGroup as MenuGroup, DropdownMenuItem as MenuItem, DropdownMenuLabel as MenuGroupLabel, DropdownMenuPortal as MenuPortal, DropdownMenuRadioGroup as MenuRadioGroup, DropdownMenuRadioItem as MenuRadioItem, DropdownMenuSeparator as MenuSeparator, DropdownMenuShortcut as MenuShortcut, DropdownMenuSub as MenuSub, DropdownMenuSubContent as MenuSubPopup, DropdownMenuSubTrigger as MenuSubTrigger, DropdownMenuTrigger as MenuTrigger } from "./components/menu.js";
29
+ import { OutlineItem, OutlineRail, OutlineRailProps } from "./components/outline-rail.js";
30
+ import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from "./components/pagination.js";
31
+ import { Popover, PopoverClose, PopoverContent as PopoverPopup, PopoverCreateHandle, PopoverDescription, PopoverPanel, PopoverTitle, PopoverTrigger } from "./components/popover.js";
32
+ import { HoverCard as PreviewCard, HoverCardContent as PreviewCardPopup, HoverCardTrigger as PreviewCardTrigger, PreviewCardPrimitive } from "./components/preview-card.js";
33
+ import { MenuPreviewLayout, PreviewPane } from "./components/preview-pane.js";
34
+ import { ScrollArea, ScrollBar } from "./components/scroll-area.js";
35
+ import { ScrollToTop, ScrollToTopProps } from "./components/scroll-to-top.js";
36
+ import { SecretInput, SecretInputProps } from "./components/secret-input.js";
37
+ import { SegmentedIconToggle } from "./components/segmented-icon-toggle.js";
38
+ import { Select, SelectContent as SelectPopup, SelectGroup, SelectGroupLabel, SelectItem, SelectSeparator, SelectTrigger, SelectValue } from "./components/select.js";
39
+ import { Separator, TextSeparator } from "./components/separator.js";
40
+ import { Sheet, SheetBackdrop, SheetClose, SheetContent as SheetPopup, SheetDescription, SheetFooter, SheetHeader, SheetPanel, SheetPortal, SheetSide, SheetTitle, SheetTrigger } from "./components/sheet.js";
41
+ import { Skeleton } from "./components/skeleton.js";
42
+ import { StellaMark } from "./components/stella-mark.js";
43
+ import { StellaWordmarkLatin } from "./components/stella-wordmark.js";
44
+ import { SortDirection, SortableHead, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "./components/table.js";
45
+ import { Tabs, TabsContent as TabsPanel, TabsList, TabsTab } from "./components/tabs.js";
46
+ import { AnchoredToastProvider, TOAST_RIGHT_OFFSET_VAR, ToastPosition, ToastProvider, stellaToast } from "./components/toast.js";
47
+ import { Tooltip, TooltipContent as TooltipPopup, TooltipCreateHandle, TooltipProvider, TooltipTrigger } from "./components/tooltip.js";
48
+ import { containedEventHandler, containedHandler } from "./hooks/use-contained-handler.js";
49
+ import { contentDir, isStructuredInputType, useContentDir } from "./hooks/use-content-dir.js";
50
+ import { useIsMobile } from "./hooks/use-mobile.js";
51
+ import { useViewportWidth } from "./hooks/use-viewport-width.js";
52
+ import { Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorEmptyRow, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle } from "./inspector/chrome.js";
53
+ import { InspectorDock } from "./inspector/dock.js";
54
+ import { PROPERTY_ROW_GRID, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX } from "./inspector/layout-tokens.js";
55
+ import { INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, shouldForceSidebarCollapsed } from "./inspector/pane-width.js";
56
+ import { INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, parsePersistedPaneWidth, resolveDragWidth, resolveKeyboardWidth, useInspectorPaneWidth } from "./inspector/use-pane-width.js";
57
+ import "./inspector/index.js";
58
+ import { cn, composeRefs } from "./lib/utils.js";
59
+ import { getFirstWeekday, getLocaleWeekInfo, getWeekendDays } from "./lib/week.js";
60
+ export { Accordion, AccordionPanel as AccordionContent, AccordionPanel, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogBackdrop, AlertDialogBackdrop as AlertDialogOverlay, AlertDialogClose, AlertDialogPopup as AlertDialogContent, AlertDialogPopup, AlertDialogCreateHandle, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogPanel, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport, AnchoredToastProvider, Avatar, AvatarFallback, AvatarImage, type BidiDirection, BidiText, type BidiTextProps, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Checkbox, ColorPicker, ColorPickerContent, type ColorPickerContentProps, type ColorPickerProps, type ColorPreset, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxList, ComboboxPopup, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, Command, CommandCollection, CommandDialog, CommandDialogPopup, CommandDialogTrigger, CommandEmpty, CommandFooter, CommandGroup, CommandGroupLabel, CommandInput, CommandItem, CommandList, CommandPanel, CommandSeparator, CommandShortcut, DEFAULT_PRESETS, DatePickerPopover, type DatePickerPopoverProps, DestructiveActionConfirmation, DestructiveConfirmDialog, type DestructiveConfirmDialogProps, Dialog, DialogBackdrop, DialogBackdrop as DialogOverlay, DialogClose, DialogPopup as DialogContent, DialogPopup, DialogCreateHandle, DialogDescription, DialogFooter, DialogHeader, DialogPanel, DialogPortal, DialogTitle, DialogTrigger, DialogViewport, DirectionalIcon, DiscordLogoIcon, Menu as DropdownMenu, Menu, MenuCheckboxItem as DropdownMenuCheckboxItem, MenuCheckboxItem, MenuPopup as DropdownMenuContent, MenuPopup, MenuCreateHandle as DropdownMenuCreateHandle, MenuCreateHandle, MenuGroup as DropdownMenuGroup, MenuGroup, MenuItem as DropdownMenuItem, MenuItem, MenuGroupLabel as DropdownMenuLabel, MenuGroupLabel, MenuPortal as DropdownMenuPortal, MenuPortal, MenuRadioGroup as DropdownMenuRadioGroup, MenuRadioGroup, MenuRadioItem as DropdownMenuRadioItem, MenuRadioItem, MenuSeparator as DropdownMenuSeparator, MenuSeparator, MenuShortcut as DropdownMenuShortcut, MenuShortcut, MenuSub as DropdownMenuSub, MenuSub, MenuSubPopup as DropdownMenuSubContent, MenuSubPopup, MenuSubTrigger as DropdownMenuSubTrigger, MenuSubTrigger, MenuTrigger as DropdownMenuTrigger, MenuTrigger, Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity, Form, Frame, FrameDescription, FrameFooter, FrameHeader, FramePanel, FrameTitle, GitHubLogoIcon, HexColorPicker, type HexColorPickerProps, PreviewCard as HoverCard, PreviewCard, PreviewCardPopup as HoverCardContent, PreviewCardPopup, PreviewCardTrigger as HoverCardTrigger, PreviewCardTrigger, INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, type InputProps, Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorDock, InspectorEmptyRow, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle, Label, MenuPreviewLayout, OVERLAY_LAYER_CLASS_NAMES, OutlineItem, OutlineRail, OutlineRailProps, OverlayLayer, PROPERTY_ROW_GRID, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverClose, PopoverPopup as PopoverContent, PopoverPopup, PopoverCreateHandle, PopoverDescription, PopoverPanel, PopoverTitle, PopoverTrigger, PreviewCardPrimitive, PreviewPane, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, ScrollArea, ScrollBar, ScrollToTop, ScrollToTopProps, SecretInput, type SecretInputProps, SegmentedIconToggle, Select, SelectPopup as SelectContent, SelectPopup, SelectGroup, SelectGroupLabel, SelectItem, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBackdrop, SheetBackdrop as SheetOverlay, SheetClose, SheetPopup as SheetContent, SheetPopup, SheetDescription, SheetFooter, SheetHeader, SheetPanel, SheetPortal, type SheetSide, SheetTitle, SheetTrigger, Skeleton, type SortDirection, SortableHead, StellaMark, StellaWordmarkLatin, TOAST_RIGHT_OFFSET_VAR, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsPanel as TabsContent, TabsPanel, TabsList, TabsTab, TabsTab as TabsTrigger, TextSeparator, Textarea, type TextareaProps, type ToastPosition, ToastProvider, Tooltip, TooltipPopup as TooltipContent, TooltipPopup, TooltipCreateHandle, TooltipProvider, TooltipTrigger, UserText, buttonAccessibleDisabledClass, buttonVariants, cn, composeRefs, containedEventHandler, containedHandler, contentDir, getFirstWeekday, getLocaleWeekInfo, getWeekendDays, isStructuredInputType, parsePersistedPaneWidth, resolveDragWidth, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, resolveKeyboardWidth, shouldForceSidebarCollapsed, stellaToast, useComboboxFilter, useContentDir, useDestructiveActionConfirmation, useInspectorPaneWidth, useIsMobile, useViewportWidth };
package/dist/index.js ADDED
@@ -0,0 +1,59 @@
1
+ import { cn, composeRefs } from "./lib/utils.js";
2
+ import { Accordion, AccordionContent as AccordionPanel, AccordionItem, AccordionTrigger } from "./components/accordion.js";
3
+ import { OVERLAY_LAYER_CLASS_NAMES } from "./lib/overlay-layer.js";
4
+ import { Tooltip, TooltipContent as TooltipPopup, TooltipCreateHandle, TooltipProvider, TooltipTrigger } from "./components/tooltip.js";
5
+ import { AlertDialog, AlertDialogBackdrop, AlertDialogClose, AlertDialogContent as AlertDialogPopup, AlertDialogCreateHandle, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogPanel, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport } from "./components/alert-dialog.js";
6
+ import { Avatar, AvatarFallback, AvatarImage } from "./components/avatar.js";
7
+ import { BidiText, UserText } from "./components/bidi-text.js";
8
+ import { DiscordLogoIcon, GitHubLogoIcon } from "./components/brand-icons.js";
9
+ import { DirectionalIcon } from "./components/directional-icon.js";
10
+ import { Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator } from "./components/breadcrumb.js";
11
+ import { buttonAccessibleDisabledClass, buttonVariants } from "./components/button-variants.js";
12
+ import { Button } from "./components/button.js";
13
+ import { Checkbox } from "./components/checkbox.js";
14
+ import { ColorPicker, ColorPickerContent, DEFAULT_PRESETS } from "./components/color-picker.js";
15
+ import { containedEventHandler, containedHandler } from "./hooks/use-contained-handler.js";
16
+ import { contentDir, isStructuredInputType, useContentDir } from "./hooks/use-content-dir.js";
17
+ import { Input } from "./components/input.js";
18
+ import { ScrollArea, ScrollBar } from "./components/scroll-area.js";
19
+ import { Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxList, ComboboxPopup, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, useComboboxFilter } from "./components/combobox.js";
20
+ import { Dialog, DialogBackdrop, DialogClose, DialogContent as DialogPopup, DialogCreateHandle, DialogDescription, DialogFooter, DialogHeader, DialogPanel, DialogPortal, DialogTitle, DialogTrigger, DialogViewport } from "./components/dialog.js";
21
+ import { Command, CommandCollection, CommandDialog, CommandDialogPopup, CommandDialogTrigger, CommandEmpty, CommandFooter, CommandGroup, CommandGroupLabel, CommandInput, CommandItem, CommandList, CommandPanel, CommandSeparator, CommandShortcut } from "./components/command.js";
22
+ import { getFirstWeekday, getLocaleWeekInfo, getWeekendDays } from "./lib/week.js";
23
+ import { Popover, PopoverClose, PopoverContent as PopoverPopup, PopoverCreateHandle, PopoverDescription, PopoverPanel, PopoverTitle, PopoverTrigger } from "./components/popover.js";
24
+ import { DatePickerPopover } from "./components/date-picker-popover.js";
25
+ import { Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity } from "./components/field.js";
26
+ import { DestructiveActionConfirmation, useDestructiveActionConfirmation } from "./components/destructive-action-confirmation.js";
27
+ import { DestructiveConfirmDialog } from "./components/destructive-confirm-dialog.js";
28
+ import { Form } from "./components/form.js";
29
+ import { Frame, FrameDescription, FrameFooter, FrameHeader, FramePanel, FrameTitle } from "./components/frame.js";
30
+ import { HexColorPicker } from "./components/hex-color-picker.js";
31
+ import { Textarea } from "./components/textarea.js";
32
+ import { InputGroup, InputGroupAddon, InputGroupInput, InputGroupText, InputGroupTextarea } from "./components/input-group.js";
33
+ import { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from "./components/input-otp.js";
34
+ import { Label } from "./components/label.js";
35
+ import { DropdownMenu as Menu, DropdownMenuCheckboxItem as MenuCheckboxItem, DropdownMenuContent as MenuPopup, DropdownMenuCreateHandle as MenuCreateHandle, DropdownMenuGroup as MenuGroup, DropdownMenuItem as MenuItem, DropdownMenuLabel as MenuGroupLabel, DropdownMenuPortal as MenuPortal, DropdownMenuRadioGroup as MenuRadioGroup, DropdownMenuRadioItem as MenuRadioItem, DropdownMenuSeparator as MenuSeparator, DropdownMenuShortcut as MenuShortcut, DropdownMenuSub as MenuSub, DropdownMenuSubContent as MenuSubPopup, DropdownMenuSubTrigger as MenuSubTrigger, DropdownMenuTrigger as MenuTrigger } from "./components/menu.js";
36
+ import { OutlineRail } from "./components/outline-rail.js";
37
+ import { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious } from "./components/pagination.js";
38
+ import { HoverCard as PreviewCard, HoverCardContent as PreviewCardPopup, HoverCardTrigger as PreviewCardTrigger, PreviewCardPrimitive } from "./components/preview-card.js";
39
+ import { MenuPreviewLayout, PreviewPane } from "./components/preview-pane.js";
40
+ import { ScrollToTop } from "./components/scroll-to-top.js";
41
+ import { SecretInput } from "./components/secret-input.js";
42
+ import { SegmentedIconToggle } from "./components/segmented-icon-toggle.js";
43
+ import { Select, SelectContent as SelectPopup, SelectGroup, SelectGroupLabel, SelectItem, SelectSeparator, SelectTrigger, SelectValue } from "./components/select.js";
44
+ import { Separator, TextSeparator } from "./components/separator.js";
45
+ import { Sheet, SheetBackdrop, SheetClose, SheetContent as SheetPopup, SheetDescription, SheetFooter, SheetHeader, SheetPanel, SheetPortal, SheetTitle, SheetTrigger } from "./components/sheet.js";
46
+ import { Skeleton } from "./components/skeleton.js";
47
+ import { StellaMark } from "./components/stella-mark.js";
48
+ import { StellaWordmarkLatin } from "./components/stella-wordmark.js";
49
+ import { SortableHead, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "./components/table.js";
50
+ import { Tabs, TabsContent as TabsPanel, TabsList, TabsTab } from "./components/tabs.js";
51
+ import { AnchoredToastProvider, TOAST_RIGHT_OFFSET_VAR, ToastProvider, stellaToast } from "./components/toast.js";
52
+ import { useIsMobile } from "./hooks/use-mobile.js";
53
+ import { useViewportWidth } from "./hooks/use-viewport-width.js";
54
+ import { PROPERTY_ROW_GRID, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX } from "./inspector/layout-tokens.js";
55
+ import { Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorEmptyRow, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle } from "./inspector/chrome.js";
56
+ import { InspectorDock } from "./inspector/dock.js";
57
+ import { INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, shouldForceSidebarCollapsed } from "./inspector/pane-width.js";
58
+ import { INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, parsePersistedPaneWidth, resolveDragWidth, resolveKeyboardWidth, useInspectorPaneWidth } from "./inspector/use-pane-width.js";
59
+ export { Accordion, AccordionPanel as AccordionContent, AccordionPanel, AccordionItem, AccordionTrigger, AlertDialog, AlertDialogBackdrop, AlertDialogBackdrop as AlertDialogOverlay, AlertDialogClose, AlertDialogPopup as AlertDialogContent, AlertDialogPopup, AlertDialogCreateHandle, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogPanel, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertDialogViewport, AnchoredToastProvider, Avatar, AvatarFallback, AvatarImage, BidiText, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, Checkbox, ColorPicker, ColorPickerContent, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxClear, ComboboxCollection, ComboboxEmpty, ComboboxGroup, ComboboxGroupLabel, ComboboxInput, ComboboxItem, ComboboxList, ComboboxPopup, ComboboxRow, ComboboxSeparator, ComboboxStatus, ComboboxTrigger, ComboboxValue, Command, CommandCollection, CommandDialog, CommandDialogPopup, CommandDialogTrigger, CommandEmpty, CommandFooter, CommandGroup, CommandGroupLabel, CommandInput, CommandItem, CommandList, CommandPanel, CommandSeparator, CommandShortcut, DEFAULT_PRESETS, DatePickerPopover, DestructiveActionConfirmation, DestructiveConfirmDialog, Dialog, DialogBackdrop, DialogBackdrop as DialogOverlay, DialogClose, DialogPopup as DialogContent, DialogPopup, DialogCreateHandle, DialogDescription, DialogFooter, DialogHeader, DialogPanel, DialogPortal, DialogTitle, DialogTrigger, DialogViewport, DirectionalIcon, DiscordLogoIcon, Menu as DropdownMenu, Menu, MenuCheckboxItem as DropdownMenuCheckboxItem, MenuCheckboxItem, MenuPopup as DropdownMenuContent, MenuPopup, MenuCreateHandle as DropdownMenuCreateHandle, MenuCreateHandle, MenuGroup as DropdownMenuGroup, MenuGroup, MenuItem as DropdownMenuItem, MenuItem, MenuGroupLabel as DropdownMenuLabel, MenuGroupLabel, MenuPortal as DropdownMenuPortal, MenuPortal, MenuRadioGroup as DropdownMenuRadioGroup, MenuRadioGroup, MenuRadioItem as DropdownMenuRadioItem, MenuRadioItem, MenuSeparator as DropdownMenuSeparator, MenuSeparator, MenuShortcut as DropdownMenuShortcut, MenuShortcut, MenuSub as DropdownMenuSub, MenuSub, MenuSubPopup as DropdownMenuSubContent, MenuSubPopup, MenuSubTrigger as DropdownMenuSubTrigger, MenuSubTrigger, MenuTrigger as DropdownMenuTrigger, MenuTrigger, Field, FieldControl, FieldDescription, FieldError, FieldItem, FieldLabel, FieldValidity, Form, Frame, FrameDescription, FrameFooter, FrameHeader, FramePanel, FrameTitle, GitHubLogoIcon, HexColorPicker, PreviewCard as HoverCard, PreviewCard, PreviewCardPopup as HoverCardContent, PreviewCardPopup, PreviewCardTrigger as HoverCardTrigger, PreviewCardTrigger, INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, Input, InputGroup, InputGroupAddon, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorDock, InspectorEmptyRow, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle, Label, MenuPreviewLayout, OVERLAY_LAYER_CLASS_NAMES, OutlineRail, PROPERTY_ROW_GRID, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverClose, PopoverPopup as PopoverContent, PopoverPopup, PopoverCreateHandle, PopoverDescription, PopoverPanel, PopoverTitle, PopoverTrigger, PreviewCardPrimitive, PreviewPane, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, ScrollArea, ScrollBar, ScrollToTop, SecretInput, SegmentedIconToggle, Select, SelectPopup as SelectContent, SelectPopup, SelectGroup, SelectGroupLabel, SelectItem, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBackdrop, SheetBackdrop as SheetOverlay, SheetClose, SheetPopup as SheetContent, SheetPopup, SheetDescription, SheetFooter, SheetHeader, SheetPanel, SheetPortal, SheetTitle, SheetTrigger, Skeleton, SortableHead, StellaMark, StellaWordmarkLatin, TOAST_RIGHT_OFFSET_VAR, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsPanel as TabsContent, TabsPanel, TabsList, TabsTab, TabsTab as TabsTrigger, TextSeparator, Textarea, ToastProvider, Tooltip, TooltipPopup as TooltipContent, TooltipPopup, TooltipCreateHandle, TooltipProvider, TooltipTrigger, UserText, buttonAccessibleDisabledClass, buttonVariants, cn, composeRefs, containedEventHandler, containedHandler, contentDir, getFirstWeekday, getLocaleWeekInfo, getWeekendDays, isStructuredInputType, parsePersistedPaneWidth, resolveDragWidth, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, resolveKeyboardWidth, shouldForceSidebarCollapsed, stellaToast, useComboboxFilter, useContentDir, useDestructiveActionConfirmation, useInspectorPaneWidth, useIsMobile, useViewportWidth };
@@ -0,0 +1,72 @@
1
+ import * as React$1 from "react";
2
+ //#region src/inspector/chrome.d.ts
3
+ /**
4
+ * Inspector chrome: the shell, the icon rail, the header strip, and the
5
+ * fixed-height key/value rows.
6
+ *
7
+ * The class strings are the workspace inspector's own, so an application
8
+ * built on this package renders that component family rather than something
9
+ * merely similar.
10
+ *
11
+ * Deliberately headless where a component library would otherwise leak: the
12
+ * rail and the tab strip take rendered children, so the host picks its own
13
+ * tabs primitive instead of inheriting one.
14
+ *
15
+ * Record-data slots (title, description, property value) hold caller-supplied
16
+ * values such as case numbers, ECLI identifiers, and filenames. They isolate
17
+ * their own bidi context so a Latin value inside an RTL inspector keeps its
18
+ * character order and truncates from the correct end; chrome slots stay in
19
+ * the surrounding direction. `dir` precedes the prop spread so callers can
20
+ * force a direction. `chrome.test.tsx` pins which slots belong to each group.
21
+ */
22
+ /** Outermost inspector surface. Fills the dock; owns no scrolling. */
23
+ declare const Inspector: ({ className, ...props }: React$1.ComponentProps<"aside">) => React$1.JSX.Element;
24
+ /**
25
+ * Vertical 48px icon rail. Hidden below the desktop breakpoint, where the
26
+ * pane becomes a full-screen sheet and the rail's affordances move into
27
+ * the header.
28
+ */
29
+ declare const InspectorRail: ({ className, ...props }: React$1.ComponentProps<"nav">) => React$1.JSX.Element;
30
+ /** A rail cell: same height as every header strip and property row. */
31
+ declare const InspectorRailCell: ({ className, ...props }: React$1.ComponentProps<"div">) => React$1.JSX.Element;
32
+ declare const InspectorRailIconButton: ({ className, ...props }: React$1.ComponentProps<"button">) => React$1.JSX.Element;
33
+ /**
34
+ * A rail tab. The active tab carries a 2px spine on the rail's inline-start
35
+ * edge — the same affordance the workspace rail uses to say "this pane is
36
+ * showing that tab".
37
+ */
38
+ declare const InspectorRailTab: ({ active, className, ...props }: React$1.ComponentProps<"button"> & {
39
+ active?: boolean;
40
+ }) => React$1.JSX.Element;
41
+ /** Header strip. One row tall, bordered below, never scrolls. */
42
+ declare const InspectorHeader: ({ className, ...props }: React$1.ComponentProps<"header">) => React$1.JSX.Element;
43
+ declare const InspectorHeaderText: ({ className, ...props }: React$1.ComponentProps<"div">) => React$1.JSX.Element;
44
+ declare const InspectorTitle: ({ children, className, ...props }: React$1.ComponentProps<"h2">) => React$1.JSX.Element;
45
+ declare const InspectorDescription: ({ className, ...props }: React$1.ComponentProps<"p">) => React$1.JSX.Element;
46
+ declare const InspectorActions: ({ className, ...props }: React$1.ComponentProps<"div">) => React$1.JSX.Element;
47
+ /**
48
+ * Scroll owner for the active tab. Exactly one of these is mounted at a
49
+ * time: two nested scrollers inside a 512px pane is how a side panel stops
50
+ * being navigable.
51
+ */
52
+ declare const InspectorContent: ({ className, ...props }: React$1.ComponentProps<"div">) => React$1.JSX.Element;
53
+ declare const InspectorSection: ({ className, ...props }: React$1.ComponentProps<"section">) => React$1.JSX.Element;
54
+ /** Section header. Same row height as the properties beneath it. */
55
+ declare const InspectorSectionTitle: ({ children, className, ...props }: React$1.ComponentProps<"h3">) => React$1.JSX.Element;
56
+ declare const InspectorPropertyList: ({ className, ...props }: React$1.ComponentProps<"dl">) => React$1.JSX.Element;
57
+ /**
58
+ * A key/value row.
59
+ *
60
+ * The height is fixed, not a minimum. A row that grows to fit its value
61
+ * breaks the rhythm the rail's cells set, and a column of rows at differing
62
+ * heights stops reading as a scannable list — which is the whole point of
63
+ * the layout. Long values truncate; the full text belongs in a tooltip or
64
+ * an expanded view, not in a taller row.
65
+ */
66
+ declare const InspectorProperty: ({ className, ...props }: React$1.ComponentProps<"div">) => React$1.JSX.Element;
67
+ declare const InspectorPropertyLabel: ({ className, ...props }: React$1.ComponentProps<"dt">) => React$1.JSX.Element;
68
+ declare const InspectorPropertyValue: ({ className, ...props }: React$1.ComponentProps<"dd">) => React$1.JSX.Element;
69
+ /** Row-height empty state, so an empty list keeps the list's rhythm. */
70
+ declare const InspectorEmptyRow: ({ className, ...props }: React$1.ComponentProps<"p">) => React$1.JSX.Element;
71
+ //#endregion
72
+ export { Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorEmptyRow, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle };
@@ -0,0 +1,153 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { PROPERTY_ROW_GRID, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, TOOLBAR_ROW_HEIGHT } from "./layout-tokens.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ //#region src/inspector/chrome.tsx
5
+ /**
6
+ * Inspector chrome: the shell, the icon rail, the header strip, and the
7
+ * fixed-height key/value rows.
8
+ *
9
+ * The class strings are the workspace inspector's own, so an application
10
+ * built on this package renders that component family rather than something
11
+ * merely similar.
12
+ *
13
+ * Deliberately headless where a component library would otherwise leak: the
14
+ * rail and the tab strip take rendered children, so the host picks its own
15
+ * tabs primitive instead of inheriting one.
16
+ *
17
+ * Record-data slots (title, description, property value) hold caller-supplied
18
+ * values such as case numbers, ECLI identifiers, and filenames. They isolate
19
+ * their own bidi context so a Latin value inside an RTL inspector keeps its
20
+ * character order and truncates from the correct end; chrome slots stay in
21
+ * the surrounding direction. `dir` precedes the prop spread so callers can
22
+ * force a direction. `chrome.test.tsx` pins which slots belong to each group.
23
+ */
24
+ /** Outermost inspector surface. Fills the dock; owns no scrolling. */
25
+ const Inspector = ({ className, ...props }) => /* @__PURE__ */ jsx("aside", {
26
+ className: cn("bg-background text-foreground flex h-full min-h-0 w-full overflow-hidden shadow-lg", className),
27
+ "data-slot": "inspector",
28
+ ...props
29
+ });
30
+ /**
31
+ * Vertical 48px icon rail. Hidden below the desktop breakpoint, where the
32
+ * pane becomes a full-screen sheet and the rail's affordances move into
33
+ * the header.
34
+ */
35
+ const InspectorRail = ({ className, ...props }) => /* @__PURE__ */ jsx("nav", {
36
+ className: cn(SIDE_RAIL_CONTAINER_CLASS, "hidden md:flex", className),
37
+ "data-slot": "inspector-rail",
38
+ ...props
39
+ });
40
+ /** A rail cell: same height as every header strip and property row. */
41
+ const InspectorRailCell = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
42
+ className: cn("flex w-full shrink-0 items-center justify-center border-b", TOOLBAR_ROW_HEIGHT, className),
43
+ "data-slot": "inspector-rail-cell",
44
+ ...props
45
+ });
46
+ const InspectorRailIconButton = ({ className, ...props }) => /* @__PURE__ */ jsx("button", {
47
+ className: cn("text-muted-foreground hover:bg-accent hover:text-foreground flex items-center justify-center rounded-md transition-colors", SIDE_RAIL_ICON_BUTTON_SIZE, className),
48
+ "data-slot": "inspector-rail-icon-button",
49
+ type: "button",
50
+ ...props
51
+ });
52
+ /**
53
+ * A rail tab. The active tab carries a 2px spine on the rail's inline-start
54
+ * edge — the same affordance the workspace rail uses to say "this pane is
55
+ * showing that tab".
56
+ */
57
+ const InspectorRailTab = ({ active = false, className, ...props }) => /* @__PURE__ */ jsx("button", {
58
+ "aria-current": active ? "true" : void 0,
59
+ className: cn("group/tab relative flex min-h-8 w-full items-center justify-center border-b transition-colors", TOOLBAR_ROW_HEIGHT, active ? "bg-background text-foreground before:bg-primary before:absolute before:inset-y-0 before:inset-s-0 before:w-0.5" : "text-muted-foreground hover:bg-accent hover:text-foreground", className),
60
+ "data-active": active ? "" : void 0,
61
+ "data-slot": "inspector-rail-tab",
62
+ type: "button",
63
+ ...props
64
+ });
65
+ /** Header strip. One row tall, bordered below, never scrolls. */
66
+ const InspectorHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("header", {
67
+ className: cn("flex shrink-0 items-center justify-between border-b px-3", TOOLBAR_ROW_HEIGHT, className),
68
+ "data-slot": "inspector-header",
69
+ ...props
70
+ });
71
+ const InspectorHeaderText = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
72
+ className: cn("flex min-w-0 items-center gap-2 overflow-hidden", className),
73
+ "data-slot": "inspector-header-text",
74
+ ...props
75
+ });
76
+ const InspectorTitle = ({ children, className, ...props }) => /* @__PURE__ */ jsx("h2", {
77
+ className: cn("truncate text-xs font-medium [unicode-bidi:isolate]", className),
78
+ "data-slot": "inspector-title",
79
+ dir: "auto",
80
+ ...props,
81
+ children
82
+ });
83
+ const InspectorDescription = ({ className, ...props }) => /* @__PURE__ */ jsx("p", {
84
+ className: cn("text-muted-foreground truncate text-[11px] [unicode-bidi:isolate]", className),
85
+ "data-slot": "inspector-description",
86
+ dir: "auto",
87
+ ...props
88
+ });
89
+ const InspectorActions = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
90
+ className: cn("flex shrink-0 items-center gap-1 ps-4", className),
91
+ "data-slot": "inspector-actions",
92
+ ...props
93
+ });
94
+ /**
95
+ * Scroll owner for the active tab. Exactly one of these is mounted at a
96
+ * time: two nested scrollers inside a 512px pane is how a side panel stops
97
+ * being navigable.
98
+ */
99
+ const InspectorContent = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
100
+ className: cn("flex min-h-0 flex-1 flex-col overflow-x-hidden overflow-y-auto overscroll-contain", className),
101
+ "data-slot": "inspector-content",
102
+ ...props
103
+ });
104
+ const InspectorSection = ({ className, ...props }) => /* @__PURE__ */ jsx("section", {
105
+ className: cn("shrink-0", className),
106
+ "data-slot": "inspector-section",
107
+ ...props
108
+ });
109
+ /** Section header. Same row height as the properties beneath it. */
110
+ const InspectorSectionTitle = ({ children, className, ...props }) => /* @__PURE__ */ jsx("h3", {
111
+ className: cn("text-muted-foreground flex shrink-0 items-center border-b px-3 text-sm font-medium", TOOLBAR_ROW_HEIGHT, className),
112
+ "data-slot": "inspector-section-title",
113
+ ...props,
114
+ children
115
+ });
116
+ const InspectorPropertyList = ({ className, ...props }) => /* @__PURE__ */ jsx("dl", {
117
+ className: cn("min-w-0", className),
118
+ "data-slot": "inspector-property-list",
119
+ ...props
120
+ });
121
+ /**
122
+ * A key/value row.
123
+ *
124
+ * The height is fixed, not a minimum. A row that grows to fit its value
125
+ * breaks the rhythm the rail's cells set, and a column of rows at differing
126
+ * heights stops reading as a scannable list — which is the whole point of
127
+ * the layout. Long values truncate; the full text belongs in a tooltip or
128
+ * an expanded view, not in a taller row.
129
+ */
130
+ const InspectorProperty = ({ className, ...props }) => /* @__PURE__ */ jsx("div", {
131
+ className: cn("grid shrink-0 items-center gap-3 border-b px-3", PROPERTY_ROW_GRID, TOOLBAR_ROW_HEIGHT, className),
132
+ "data-slot": "inspector-property",
133
+ ...props
134
+ });
135
+ const InspectorPropertyLabel = ({ className, ...props }) => /* @__PURE__ */ jsx("dt", {
136
+ className: cn("text-muted-foreground min-w-0 truncate text-sm font-medium", className),
137
+ "data-slot": "inspector-property-label",
138
+ ...props
139
+ });
140
+ const InspectorPropertyValue = ({ className, ...props }) => /* @__PURE__ */ jsx("dd", {
141
+ className: cn("min-w-0 truncate text-sm [unicode-bidi:isolate]", className),
142
+ "data-slot": "inspector-property-value",
143
+ dir: "auto",
144
+ ...props
145
+ });
146
+ /** Row-height empty state, so an empty list keeps the list's rhythm. */
147
+ const InspectorEmptyRow = ({ className, ...props }) => /* @__PURE__ */ jsx("p", {
148
+ className: cn("text-muted-foreground flex shrink-0 items-center border-b px-3 text-sm italic", TOOLBAR_ROW_HEIGHT, className),
149
+ "data-slot": "inspector-empty-row",
150
+ ...props
151
+ });
152
+ //#endregion
153
+ export { Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorEmptyRow, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle };
@@ -0,0 +1,48 @@
1
+ import { ReactNode } from "react";
2
+ //#region src/inspector/dock.d.ts
3
+ /**
4
+ * Docked inspector pane: an in-flow spacer plus a fixed overlay.
5
+ *
6
+ * The spacer is what makes the content column reflow: the pane itself is
7
+ * `position: fixed`, so without a same-width sibling in the flow it would
8
+ * cover the content instead of displacing it. Keeping the pane fixed
9
+ * (rather than in the flow) is what lets it span the full viewport height
10
+ * regardless of the topbar above the content.
11
+ *
12
+ * The root carries the reserved inline size itself rather than leaving it to
13
+ * the spacer alone: a block-level root in a plain block host would otherwise
14
+ * take the full containing width and push the content column off-screen,
15
+ * which is exactly the failure the spacer exists to prevent. With the width
16
+ * on the root, the dock reserves the same footprint in a flex row, a grid
17
+ * track, or a plain block.
18
+ */
19
+ type InspectorResizeHandleProps = {
20
+ "aria-orientation": "vertical";
21
+ "aria-valuemax": number;
22
+ "aria-valuemin": number;
23
+ "aria-valuenow": number;
24
+ onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;
25
+ onLostPointerCapture: (event: React.PointerEvent<HTMLElement>) => void;
26
+ onPointerCancel: (event: React.PointerEvent<HTMLElement>) => void;
27
+ onPointerDown: (event: React.PointerEvent<HTMLElement>) => void;
28
+ onPointerMove: (event: React.PointerEvent<HTMLElement>) => void;
29
+ onPointerUp: (event: React.PointerEvent<HTMLElement>) => void;
30
+ tabIndex: number;
31
+ };
32
+ type InspectorDockProps = {
33
+ children: ReactNode;
34
+ className?: string | undefined;
35
+ /** Accessible name for the drag handle. */
36
+ resizeHandleLabel: string;
37
+ /** Handlers and ARIA state from `useInspectorPaneWidth`. */
38
+ resizeHandleProps: InspectorResizeHandleProps;
39
+ /** Double-click affordance restoring the default width. */
40
+ onResetWidth?: (() => void) | undefined;
41
+ /** Whether the full pane is shown, as opposed to the bare rail. */
42
+ showPaneContent: boolean;
43
+ /** Inline size the dock reserves, in CSS pixels. */
44
+ width: number;
45
+ };
46
+ declare const InspectorDock: ({ children, className, onResetWidth, resizeHandleLabel, resizeHandleProps, showPaneContent, width }: InspectorDockProps) => import("react").JSX.Element;
47
+ //#endregion
48
+ export { InspectorDock };
@@ -0,0 +1,36 @@
1
+ import { cn } from "../lib/utils.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ //#region src/inspector/dock.tsx
4
+ const InspectorDock = ({ children, className, onResetWidth, resizeHandleLabel, resizeHandleProps, showPaneContent, width }) => {
5
+ const widthPx = `${width}px`;
6
+ return /* @__PURE__ */ jsxs("div", {
7
+ className: cn("text-sidebar-foreground hidden shrink-0 md:block", className),
8
+ "data-side": "inline-end",
9
+ "data-slot": "inspector-dock",
10
+ "data-state": showPaneContent ? "expanded" : "collapsed",
11
+ style: { width: widthPx },
12
+ children: [/* @__PURE__ */ jsx("div", {
13
+ "aria-hidden": "true",
14
+ className: "bg-sidebar relative w-full",
15
+ "data-slot": "inspector-dock-spacer"
16
+ }), /* @__PURE__ */ jsxs("div", {
17
+ className: "fixed inset-y-0 end-0 z-10 hidden h-svh md:flex",
18
+ "data-slot": "inspector-dock-pane",
19
+ style: { width: widthPx },
20
+ children: [showPaneContent && /* @__PURE__ */ jsx("div", {
21
+ "aria-label": resizeHandleLabel,
22
+ className: "hover:bg-border active:bg-border focus-visible:bg-primary focus-visible:outline-primary absolute inset-y-0 -start-px z-20 flex w-1 cursor-col-resize items-center justify-center border-s focus-visible:outline-2",
23
+ "data-slot": "inspector-resize-handle",
24
+ role: "separator",
25
+ ...resizeHandleProps,
26
+ tabIndex: 0,
27
+ onDoubleClick: onResetWidth
28
+ }), /* @__PURE__ */ jsx("div", {
29
+ className: "bg-sidebar flex h-full w-full flex-col",
30
+ children
31
+ })]
32
+ })]
33
+ });
34
+ };
35
+ //#endregion
36
+ export { InspectorDock };
@@ -0,0 +1,6 @@
1
+ import { Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorEmptyRow, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle } from "./chrome.js";
2
+ import { InspectorDock } from "./dock.js";
3
+ import { PROPERTY_ROW_GRID, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX } from "./layout-tokens.js";
4
+ import { INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, shouldForceSidebarCollapsed } from "./pane-width.js";
5
+ import { INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, parsePersistedPaneWidth, resolveDragWidth, resolveKeyboardWidth, useInspectorPaneWidth } from "./use-pane-width.js";
6
+ export { INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorDock, InspectorEmptyRow, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle, PROPERTY_ROW_GRID, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX, parsePersistedPaneWidth, resolveDragWidth, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, resolveKeyboardWidth, shouldForceSidebarCollapsed, useInspectorPaneWidth };
@@ -0,0 +1,6 @@
1
+ import { PROPERTY_ROW_GRID, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX } from "./layout-tokens.js";
2
+ import { Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorEmptyRow, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle } from "./chrome.js";
3
+ import { InspectorDock } from "./dock.js";
4
+ import { INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, shouldForceSidebarCollapsed } from "./pane-width.js";
5
+ import { INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, parsePersistedPaneWidth, resolveDragWidth, resolveKeyboardWidth, useInspectorPaneWidth } from "./use-pane-width.js";
6
+ export { INSPECTOR_CONTENT_MIN_WIDTH, INSPECTOR_PANE_DEFAULT_WIDTH, INSPECTOR_PANE_KEYBOARD_PAGE_STEP, INSPECTOR_PANE_KEYBOARD_STEP, INSPECTOR_PANE_MAX_WIDTH, INSPECTOR_PANE_MIN_WIDTH, INSPECTOR_RAIL_WIDTH, Inspector, InspectorActions, InspectorContent, InspectorDescription, InspectorDock, InspectorEmptyRow, InspectorHeader, InspectorHeaderText, InspectorProperty, InspectorPropertyLabel, InspectorPropertyList, InspectorPropertyValue, InspectorRail, InspectorRailCell, InspectorRailIconButton, InspectorRailTab, InspectorSection, InspectorSectionTitle, InspectorTitle, PROPERTY_ROW_GRID, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX, parsePersistedPaneWidth, resolveDragWidth, resolveInspectorDockWidth, resolveInspectorPaneMaxWidth, resolveInspectorPaneWidth, resolveKeyboardWidth, shouldForceSidebarCollapsed, useInspectorPaneWidth };
@@ -0,0 +1,28 @@
1
+ //#region src/inspector/layout-tokens.d.ts
2
+ /**
3
+ * Layout constants the inspector chrome is built from.
4
+ *
5
+ * The rail's cells, the header strip, and the property rows all share one
6
+ * height, so a pane assembled from these parts keeps a single vertical
7
+ * rhythm no matter which of them a section happens to use.
8
+ */
9
+ /**
10
+ * Every inspector row, header strip, and rail cell is exactly this tall.
11
+ * A *fixed* height, not a minimum: rows that grow with their content break
12
+ * the vertical rhythm the rail's 48px cells establish, and a list of
13
+ * key/value rows stops scanning as a list once the rows differ in height.
14
+ */
15
+ declare const TOOLBAR_ROW_HEIGHT: "h-12";
16
+ declare const TOOLBAR_ROW_HEIGHT_PX: 48;
17
+ declare const SIDE_RAIL_WIDTH: "w-12";
18
+ /**
19
+ * Borders sit on both inline edges of the rail box so the total footprint
20
+ * stays exactly 48px under `border-box`.
21
+ */
22
+ declare const SIDE_RAIL_CONTAINER_CLASS: "bg-sidebar flex shrink-0 flex-col border-s border-e w-12";
23
+ declare const SIDE_RAIL_ICON_BUTTON_SIZE: "size-8";
24
+ declare const SIDE_RAIL_TAB_ICON_SIZE: "size-3.5";
25
+ /** Two-column grid the key/value rows share. */
26
+ declare const PROPERTY_ROW_GRID: "grid-cols-[8rem_minmax(0,1fr)]";
27
+ //#endregion
28
+ export { PROPERTY_ROW_GRID, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX };
@@ -0,0 +1,28 @@
1
+ //#region src/inspector/layout-tokens.ts
2
+ /**
3
+ * Layout constants the inspector chrome is built from.
4
+ *
5
+ * The rail's cells, the header strip, and the property rows all share one
6
+ * height, so a pane assembled from these parts keeps a single vertical
7
+ * rhythm no matter which of them a section happens to use.
8
+ */
9
+ /**
10
+ * Every inspector row, header strip, and rail cell is exactly this tall.
11
+ * A *fixed* height, not a minimum: rows that grow with their content break
12
+ * the vertical rhythm the rail's 48px cells establish, and a list of
13
+ * key/value rows stops scanning as a list once the rows differ in height.
14
+ */
15
+ const TOOLBAR_ROW_HEIGHT = "h-12";
16
+ const TOOLBAR_ROW_HEIGHT_PX = 48;
17
+ const SIDE_RAIL_WIDTH = "w-12";
18
+ /**
19
+ * Borders sit on both inline edges of the rail box so the total footprint
20
+ * stays exactly 48px under `border-box`.
21
+ */
22
+ const SIDE_RAIL_CONTAINER_CLASS = `bg-sidebar flex shrink-0 flex-col border-s border-e ${SIDE_RAIL_WIDTH}`;
23
+ const SIDE_RAIL_ICON_BUTTON_SIZE = "size-8";
24
+ const SIDE_RAIL_TAB_ICON_SIZE = "size-3.5";
25
+ /** Two-column grid the key/value rows share. */
26
+ const PROPERTY_ROW_GRID = "grid-cols-[8rem_minmax(0,1fr)]";
27
+ //#endregion
28
+ export { PROPERTY_ROW_GRID, SIDE_RAIL_CONTAINER_CLASS, SIDE_RAIL_ICON_BUTTON_SIZE, SIDE_RAIL_TAB_ICON_SIZE, SIDE_RAIL_WIDTH, TOOLBAR_ROW_HEIGHT, TOOLBAR_ROW_HEIGHT_PX };