sheerly 0.0.1 → 0.0.3

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 (90) hide show
  1. package/lib/accordion.d.ts +13 -4
  2. package/lib/alert.d.ts +22 -7
  3. package/lib/avatar.css +1 -1
  4. package/lib/avatar.d.ts +21 -8
  5. package/lib/badge.d.ts +14 -4
  6. package/lib/breadcrumb.d.ts +49 -8
  7. package/lib/button.css +1 -1
  8. package/lib/button.d.ts +13 -4
  9. package/lib/card.d.ts +32 -12
  10. package/lib/carousel.d.ts +13 -7
  11. package/lib/checkbox.d.ts +6 -0
  12. package/lib/dialog.d.ts +20 -8
  13. package/lib/dropdown-menu.d.ts +39 -17
  14. package/lib/hover-card.d.ts +15 -6
  15. package/lib/index.css +1 -1
  16. package/lib/index.d.ts +1 -1
  17. package/lib/index.js +308 -300
  18. package/lib/input.css +1 -1
  19. package/lib/input.d.ts +6 -0
  20. package/lib/kbd.d.ts +10 -3
  21. package/lib/label.css +1 -1
  22. package/lib/label.d.ts +6 -0
  23. package/lib/pagination.d.ts +52 -13
  24. package/lib/popover.d.ts +15 -6
  25. package/lib/progress.d.ts +6 -0
  26. package/lib/radio.d.ts +13 -3
  27. package/lib/scrollbar.css +1 -0
  28. package/lib/scrollbar.d.ts +17 -0
  29. package/lib/select.css +1 -1
  30. package/lib/select.d.ts +6 -0
  31. package/lib/separator.d.ts +14 -4
  32. package/lib/sheet.d.ts +19 -6
  33. package/lib/skeleton.d.ts +12 -3
  34. package/lib/slider.d.ts +6 -0
  35. package/lib/spinner.d.ts +10 -4
  36. package/lib/switch.d.ts +6 -0
  37. package/lib/table.css +1 -1
  38. package/lib/table.d.ts +14 -3
  39. package/lib/tabs.d.ts +37 -11
  40. package/lib/textarea.d.ts +6 -0
  41. package/lib/toggle.d.ts +7 -0
  42. package/lib/tooltip.d.ts +15 -6
  43. package/lib/typography.d.ts +12 -4
  44. package/lib/utils/polymorphic.d.ts +14 -0
  45. package/package.json +34 -33
  46. package/src/accordion.tsx +20 -6
  47. package/src/alert.tsx +52 -14
  48. package/src/avatar.css +0 -1
  49. package/src/avatar.tsx +44 -15
  50. package/src/badge.tsx +34 -16
  51. package/src/breadcrumb.tsx +97 -26
  52. package/src/button.css +1 -0
  53. package/src/button.tsx +44 -27
  54. package/src/card.tsx +82 -23
  55. package/src/carousel.tsx +28 -11
  56. package/src/checkbox.tsx +7 -1
  57. package/src/dialog.tsx +55 -16
  58. package/src/dropdown-menu.tsx +115 -33
  59. package/src/hover-card.tsx +28 -9
  60. package/src/index.css +1 -0
  61. package/src/index.ts +1 -1
  62. package/src/input.css +1 -0
  63. package/src/input.tsx +7 -1
  64. package/src/kbd.tsx +17 -5
  65. package/src/label.css +1 -0
  66. package/src/label.tsx +7 -1
  67. package/src/pagination.tsx +107 -35
  68. package/src/popover.tsx +28 -9
  69. package/src/progress.tsx +7 -1
  70. package/src/radio.tsx +20 -5
  71. package/src/scrollbar.css +56 -0
  72. package/src/scrollbar.tsx +28 -0
  73. package/src/select.css +24 -0
  74. package/src/select.tsx +7 -1
  75. package/src/separator.tsx +23 -7
  76. package/src/sheet.tsx +53 -13
  77. package/src/skeleton.tsx +19 -5
  78. package/src/slider.tsx +7 -1
  79. package/src/spinner.tsx +21 -8
  80. package/src/switch.tsx +7 -1
  81. package/src/table.css +0 -1
  82. package/src/table.tsx +21 -5
  83. package/src/tabs.tsx +65 -25
  84. package/src/textarea.tsx +7 -1
  85. package/src/toggle.tsx +8 -1
  86. package/src/tooltip.tsx +28 -9
  87. package/src/typography.tsx +19 -5
  88. package/src/utils/polymorphic.ts +19 -0
  89. /package/lib/{cn.d.ts → utils/cn.d.ts} +0 -0
  90. /package/src/{cn.ts → utils/cn.ts} +0 -0
package/lib/input.css CHANGED
@@ -1 +1 @@
1
- .sheerly-input{border-radius:var(--sheerly-radius-lg);border:1px solid var(--sheerly-input);width:100%;min-width:0;color:var(--sheerly-foreground);background-color:#0000;outline:none;height:32px;padding:0 10px;font-family:Geist Sans,system-ui,-apple-system,sans-serif;font-size:14px;font-weight:400;line-height:20px;transition:border-color .15s,box-shadow .15s}.sheerly-input::placeholder{color:var(--sheerly-muted-foreground)}.sheerly-input:focus-visible{border-color:var(--sheerly-ring);box-shadow:var(--sheerly-focus-ring)}.sheerly-input:disabled{pointer-events:none;cursor:not-allowed;opacity:.5;background-color:oklch(from var(--sheerly-input) l c h / 50%)}.sheerly-input[aria-invalid=true]{border-color:var(--sheerly-destructive);box-shadow:0 0 0 3px oklch(from var(--sheerly-destructive) l c h / 20%)}.sheerly-input::file-selector-button{height:24px;color:var(--sheerly-foreground);background-color:#0000;border:0;margin-right:8px;font-size:14px;font-weight:500;display:inline-flex}.sheerly-input[data-size=sm]{height:28px;font-size:13px}.sheerly-input[data-size=lg]{height:36px}
1
+ .sheerly-input{border-radius:var(--sheerly-radius-lg);border:1px solid var(--sheerly-input);box-sizing:border-box;width:100%;min-width:0;color:var(--sheerly-foreground);background-color:#0000;outline:none;height:32px;padding:0 10px;font-family:Geist Sans,system-ui,-apple-system,sans-serif;font-size:14px;font-weight:400;line-height:20px;transition:border-color .15s,box-shadow .15s}.sheerly-input::placeholder{color:var(--sheerly-muted-foreground)}.sheerly-input:focus-visible{border-color:var(--sheerly-ring);box-shadow:var(--sheerly-focus-ring)}.sheerly-input:disabled{pointer-events:none;cursor:not-allowed;opacity:.5;background-color:oklch(from var(--sheerly-input) l c h / 50%)}.sheerly-input[aria-invalid=true]{border-color:var(--sheerly-destructive);box-shadow:0 0 0 3px oklch(from var(--sheerly-destructive) l c h / 20%)}.sheerly-input::file-selector-button{height:24px;color:var(--sheerly-foreground);background-color:#0000;border:0;margin-right:8px;font-size:14px;font-weight:500;display:inline-flex}.sheerly-input[data-size=sm]{height:28px;font-size:13px}.sheerly-input[data-size=lg]{height:36px}
package/lib/input.d.ts CHANGED
@@ -2,4 +2,10 @@ import { InputHTMLAttributes } from 'react';
2
2
  export interface InputProps extends InputHTMLAttributes<HTMLInputElement> {
3
3
  'data-size'?: 'xs' | 'sm' | 'default' | 'lg';
4
4
  }
5
+ /**
6
+ * A text input. Set `aria-invalid` for the error ring; `data-size` for height.
7
+ *
8
+ * @example
9
+ * <Input type="email" placeholder="you@example.com" />
10
+ */
5
11
  export declare function Input({ className, ...props }: InputProps): import("react").JSX.Element;
package/lib/kbd.d.ts CHANGED
@@ -1,5 +1,12 @@
1
- import { HTMLAttributes } from 'react';
1
+ import { ElementType, HTMLAttributes } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
2
3
  export type KbdProps = HTMLAttributes<HTMLElement>;
4
+ /**
5
+ * A keyboard key hint. Wrap several in a <KbdGroup> for combos.
6
+ *
7
+ * @example
8
+ * <KbdGroup><Kbd>⌘</Kbd><Kbd>K</Kbd></KbdGroup>
9
+ */
3
10
  export declare function Kbd({ className, ...props }: KbdProps): import("react").JSX.Element;
4
- export type KbdGroupProps = HTMLAttributes<HTMLElement>;
5
- export declare function KbdGroup({ className, ...props }: KbdGroupProps): import("react").JSX.Element;
11
+ export type KbdGroupProps<T extends ElementType = 'span'> = PolymorphicProps<T>;
12
+ export declare function KbdGroup<T extends ElementType = 'span'>({ as, className, ...props }: KbdGroupProps<T>): import("react").JSX.Element;
package/lib/label.css CHANGED
@@ -1 +1 @@
1
- .sheerly-label{color:var(--sheerly-foreground);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-family:Geist Sans,system-ui,-apple-system,sans-serif;font-size:14px;font-weight:400;line-height:20px;display:flex}.sheerly-label[data-disabled=true]{color:var(--sheerly-muted-foreground);pointer-events:none}
1
+ .sheerly-label{color:var(--sheerly-foreground);-webkit-user-select:none;user-select:none;cursor:pointer;align-items:center;gap:8px;font-family:Geist Sans,system-ui,-apple-system,sans-serif;font-size:14px;font-weight:400;line-height:20px;display:flex}.sheerly-label[data-disabled=true]{color:var(--sheerly-muted-foreground);pointer-events:none}
package/lib/label.d.ts CHANGED
@@ -2,4 +2,10 @@ import { LabelHTMLAttributes } from 'react';
2
2
  export interface LabelProps extends LabelHTMLAttributes<HTMLLabelElement> {
3
3
  'data-disabled'?: 'true';
4
4
  }
5
+ /**
6
+ * A form label. Set `data-disabled="true"` to mute it.
7
+ *
8
+ * @example
9
+ * <Label htmlFor="email">Email</Label>
10
+ */
5
11
  export declare function Label({ className, ...props }: LabelProps): import("react").JSX.Element;
@@ -1,17 +1,56 @@
1
- import { AnchorHTMLAttributes, HTMLAttributes } from 'react';
2
- export declare function Pagination({ className, ...props }: HTMLAttributes<HTMLElement>): import("react").JSX.Element;
3
- export declare function PaginationContent({ className, ...props }: HTMLAttributes<HTMLUListElement>): import("react").JSX.Element;
4
- export declare function PaginationItem({ className, ...props }: HTMLAttributes<HTMLLIElement>): import("react").JSX.Element;
5
- export interface PaginationLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
1
+ import { ElementType } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
3
+ export type PaginationProps<T extends ElementType = 'nav'> = PolymorphicProps<T>;
4
+ /**
5
+ * Page navigation. Mark the current page's link with `isActive`.
6
+ *
7
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `nav`).
8
+ *
9
+ * @example
10
+ * <Pagination>
11
+ * <PaginationContent>
12
+ * <PaginationItem><PaginationPrevious href="#" /></PaginationItem>
13
+ * <PaginationItem><PaginationLink href="#" isActive>1</PaginationLink></PaginationItem>
14
+ * <PaginationItem><PaginationNext href="#" /></PaginationItem>
15
+ * </PaginationContent>
16
+ * </Pagination>
17
+ */
18
+ export declare function Pagination<T extends ElementType = 'nav'>({ as, className, ...props }: PaginationProps<T>): import("react").JSX.Element;
19
+ export type PaginationContentProps<T extends ElementType = 'ul'> = PolymorphicProps<T>;
20
+ /**
21
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `ul`).
22
+ */
23
+ export declare function PaginationContent<T extends ElementType = 'ul'>({ as, className, ...props }: PaginationContentProps<T>): import("react").JSX.Element;
24
+ export type PaginationItemProps<T extends ElementType = 'li'> = PolymorphicProps<T>;
25
+ /**
26
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `li`).
27
+ */
28
+ export declare function PaginationItem<T extends ElementType = 'li'>({ as, className, ...props }: PaginationItemProps<T>): import("react").JSX.Element;
29
+ export type PaginationLinkProps<T extends ElementType = 'a'> = PolymorphicProps<T, {
6
30
  /** Marks the current page (renders like the outline button). */
7
31
  isActive?: boolean;
8
32
  'data-role'?: 'previous' | 'next';
9
- }
10
- export declare function PaginationLink({ className, isActive, ...props }: PaginationLinkProps): import("react").JSX.Element;
11
- export declare function PaginationPrevious({ className, text, children, ...props }: PaginationLinkProps & {
33
+ }>;
34
+ /**
35
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `a`, e.g.
36
+ * `as={Link}` for a router link).
37
+ */
38
+ export declare function PaginationLink<T extends ElementType = 'a'>({ as, className, isActive, ...props }: PaginationLinkProps<T>): import("react").JSX.Element;
39
+ export type PaginationPreviousProps<T extends ElementType = 'a'> = PaginationLinkProps<T> & {
40
+ /** Visible label. Children override it. */
12
41
  text?: string;
13
- }): import("react").JSX.Element;
14
- export declare function PaginationNext({ className, text, children, ...props }: PaginationLinkProps & {
15
- text?: string;
16
- }): import("react").JSX.Element;
17
- export declare function PaginationEllipsis({ className, ...props }: HTMLAttributes<HTMLSpanElement>): import("react").JSX.Element;
42
+ };
43
+ /**
44
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `a`).
45
+ */
46
+ export declare function PaginationPrevious<T extends ElementType = 'a'>({ as, className, isActive, text, children, ...props }: PaginationPreviousProps<T>): import("react").JSX.Element;
47
+ export type PaginationNextProps<T extends ElementType = 'a'> = PaginationPreviousProps<T>;
48
+ /**
49
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `a`).
50
+ */
51
+ export declare function PaginationNext<T extends ElementType = 'a'>({ as, className, isActive, text, children, ...props }: PaginationNextProps<T>): import("react").JSX.Element;
52
+ export type PaginationEllipsisProps<T extends ElementType = 'span'> = PolymorphicProps<T>;
53
+ /**
54
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `span`).
55
+ */
56
+ export declare function PaginationEllipsis<T extends ElementType = 'span'>({ as, className, ...props }: PaginationEllipsisProps<T>): import("react").JSX.Element;
package/lib/popover.d.ts CHANGED
@@ -1,7 +1,16 @@
1
- import { HTMLAttributes } from 'react';
2
- export type PopoverProps = HTMLAttributes<HTMLSpanElement>;
3
- /** Wrapper carrying the anchor. Nest the trigger button + content inside. */
4
- export declare function Popover({ className, ...props }: PopoverProps): import("react").JSX.Element;
5
- export type PopoverContentProps = HTMLAttributes<HTMLDivElement>;
1
+ import { ElementType } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
3
+ export type PopoverProps<T extends ElementType = 'span'> = PolymorphicProps<T>;
4
+ /**
5
+ * Wrapper carrying the anchor. Nest the trigger button + content inside.
6
+ *
7
+ * @example
8
+ * <Popover>
9
+ * <Button commandfor="p" command="toggle-popover">Open</Button>
10
+ * <PopoverContent id="p" popover>Place content here.</PopoverContent>
11
+ * </Popover>
12
+ */
13
+ export declare function Popover<T extends ElementType = 'span'>({ as, className, ...props }: PopoverProps<T>): import("react").JSX.Element;
14
+ export type PopoverContentProps<T extends ElementType = 'div'> = PolymorphicProps<T>;
6
15
  /** The floating panel. Give it `popover` and an `id` matched by the trigger's `commandfor`. */
7
- export declare function PopoverContent({ className, ...props }: PopoverContentProps): import("react").JSX.Element;
16
+ export declare function PopoverContent<T extends ElementType = 'div'>({ as, className, ...props }: PopoverContentProps<T>): import("react").JSX.Element;
package/lib/progress.d.ts CHANGED
@@ -3,4 +3,10 @@ export interface ProgressProps extends ProgressHTMLAttributes<HTMLProgressElemen
3
3
  'data-variant'?: 'default' | 'blue' | 'green' | 'success' | 'red' | 'error' | 'amber' | 'warning';
4
4
  'data-size'?: 'sm' | 'default' | 'lg';
5
5
  }
6
+ /**
7
+ * A determinate progress bar. Set `value` (and `max`, default 1).
8
+ *
9
+ * @example
10
+ * <Progress value={60} max={100} data-variant="success" />
11
+ */
6
12
  export declare function Progress({ className, ...props }: ProgressProps): import("react").JSX.Element;
package/lib/radio.d.ts CHANGED
@@ -1,5 +1,15 @@
1
- import { HTMLAttributes, InputHTMLAttributes } from 'react';
2
- export type RadioGroupProps = HTMLAttributes<HTMLDivElement>;
3
- export declare function RadioGroup({ className, ...props }: RadioGroupProps): import("react").JSX.Element;
1
+ import { ElementType, InputHTMLAttributes } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
3
+ export type RadioGroupProps<T extends ElementType = 'div'> = PolymorphicProps<T>;
4
+ export declare function RadioGroup<T extends ElementType = 'div'>({ as, className, ...props }: RadioGroupProps<T>): import("react").JSX.Element;
4
5
  export type RadioProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'>;
6
+ /**
7
+ * A radio `<input>`. Share a `name` and wrap options in a <RadioGroup>.
8
+ *
9
+ * @example
10
+ * <RadioGroup>
11
+ * <Label><Radio name="plan" value="free" defaultChecked /> Free</Label>
12
+ * <Label><Radio name="plan" value="pro" /> Pro</Label>
13
+ * </RadioGroup>
14
+ */
5
15
  export declare function Radio({ className, ...props }: RadioProps): import("react").JSX.Element;
@@ -0,0 +1 @@
1
+ .sheerly-scrollbar{scrollbar-width:thin;scrollbar-color:oklch(from var(--sheerly-foreground) l c h / 20%) transparent}.sheerly-scrollbar::-webkit-scrollbar{width:8px;height:8px}.sheerly-scrollbar::-webkit-scrollbar-track{background:0 0}.sheerly-scrollbar::-webkit-scrollbar-thumb{border-radius:var(--sheerly-radius-full);background-clip:padding-box;background-color:oklch(from var(--sheerly-foreground) l c h / 20%);border:2px solid #0000}.sheerly-scrollbar::-webkit-scrollbar-thumb:hover{background-color:oklch(from var(--sheerly-foreground) l c h / 35%)}.sheerly-scrollbar::-webkit-scrollbar-corner{background:0 0}.sheerly-scrollbar[data-orientation=vertical]{overflow:hidden auto}.sheerly-scrollbar[data-orientation=horizontal]{overflow:auto hidden}
@@ -0,0 +1,17 @@
1
+ import { ElementType } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
3
+ export type ScrollbarProps<T extends ElementType = 'div'> = PolymorphicProps<T, {
4
+ 'data-orientation'?: 'vertical' | 'horizontal';
5
+ }>;
6
+ /**
7
+ * A scroll container with a thin, theme-tinted scrollbar (matching the select
8
+ * picker). Set the element's own size + overflow inline, or use
9
+ * `data-orientation` to have the matching overflow applied for you.
10
+ *
11
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `div`).
12
+ *
13
+ * @example
14
+ * <Scrollbar data-orientation="vertical" style={{ maxHeight: 200 }}>…</Scrollbar>
15
+ * <Scrollbar style={{ maxHeight: 200, overflowY: 'auto' }}>…</Scrollbar>
16
+ */
17
+ export declare function Scrollbar<T extends ElementType = 'div'>({ as, className, ...props }: ScrollbarProps<T>): import("react").JSX.Element;
package/lib/select.css CHANGED
@@ -1 +1 @@
1
- .sheerly-select{appearance:base-select}.sheerly-select::picker(select){appearance:base-select}.sheerly-select{border-radius:var(--sheerly-radius-lg);border:1px solid var(--sheerly-input);white-space:nowrap;width:fit-content;color:var(--sheerly-foreground);cursor:pointer;background-color:#0000;outline:none;align-items:center;gap:8px;height:32px;padding:0 12px;font-family:Geist Sans,system-ui,-apple-system,sans-serif;font-size:14px;font-weight:400;line-height:20px;transition:border-color .15s,box-shadow .15s;display:inline-flex}.sheerly-select:focus-visible{border-color:var(--sheerly-ring);box-shadow:var(--sheerly-focus-ring)}.sheerly-select:disabled{pointer-events:none;opacity:.5}.sheerly-select[aria-invalid=true]{border-color:var(--sheerly-destructive);box-shadow:0 0 0 3px oklch(from var(--sheerly-destructive) l c h / 20%)}.sheerly-select:invalid,.sheerly-select[data-placeholder]{color:var(--sheerly-muted-foreground)}.sheerly-select[data-size=sm]{height:32px}.sheerly-select[data-size=lg]{height:40px;font-size:16px}.sheerly-select::picker-icon{width:16px;height:16px;color:var(--sheerly-muted-foreground);content:"";background-color:currentColor;transition:rotate .2s;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") 50%/contain no-repeat}.sheerly-select:open::picker-icon{rotate:180deg}.sheerly-select selectedcontent{align-items:center;gap:8px;display:flex}.sheerly-select option[value=""]{color:var(--sheerly-muted-foreground)}.sheerly-select::picker(select){border:1px solid var(--sheerly-border);border-radius:var(--sheerly-radius-xl);background-color:var(--sheerly-popover);color:var(--sheerly-popover-foreground);opacity:0;max-height:256px;transition:all .2s allow-discrete;padding:4px;overflow-y:auto;box-shadow:0 4px 16px -4px oklch(0% 0 0/.08),0 1px 2px oklch(0% 0 0/.04)}.sheerly-select:open::picker(select){opacity:1}@starting-style{.sheerly-select:open::picker(select){opacity:0}}.sheerly-select option{border-radius:var(--sheerly-radius-md);cursor:default;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:6px 8px;font-size:14px;line-height:20px;transition:background-color .1s;display:flex}.sheerly-select option:hover,.sheerly-select option:focus{background-color:var(--sheerly-accent)}.sheerly-select option:checked{font-weight:500}.sheerly-select option:disabled{color:var(--sheerly-muted-foreground);pointer-events:none}.sheerly-select option::checkmark{color:var(--sheerly-foreground);order:1;margin-left:auto}.sheerly-select optgroup{padding:4px 0}.sheerly-select optgroup legend{color:var(--sheerly-muted-foreground);padding:4px 8px;font-size:12px;font-weight:500;line-height:16px}.sheerly-select optgroup+optgroup{border-top:1px solid var(--sheerly-border);margin-top:4px;padding-top:4px}
1
+ .sheerly-select{appearance:base-select}.sheerly-select::picker(select){appearance:base-select}.sheerly-select{border-radius:var(--sheerly-radius-lg);border:1px solid var(--sheerly-input);box-sizing:border-box;white-space:nowrap;width:fit-content;color:var(--sheerly-foreground);cursor:pointer;background-color:#0000;outline:none;align-items:center;gap:8px;height:32px;padding:0 12px;font-family:Geist Sans,system-ui,-apple-system,sans-serif;font-size:14px;font-weight:400;line-height:20px;transition:border-color .15s,box-shadow .15s;display:inline-flex}.sheerly-select:focus-visible{border-color:var(--sheerly-ring);box-shadow:var(--sheerly-focus-ring)}.sheerly-select:disabled{pointer-events:none;opacity:.5}.sheerly-select[aria-invalid=true]{border-color:var(--sheerly-destructive);box-shadow:0 0 0 3px oklch(from var(--sheerly-destructive) l c h / 20%)}.sheerly-select:invalid,.sheerly-select[data-placeholder]{color:var(--sheerly-muted-foreground)}.sheerly-select[data-size=sm]{height:32px}.sheerly-select[data-size=lg]{height:40px;font-size:16px}.sheerly-select::picker-icon{width:16px;height:16px;color:var(--sheerly-muted-foreground);content:"";background-color:currentColor;transition:rotate .2s;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") 50%/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") 50%/contain no-repeat}.sheerly-select:open::picker-icon{rotate:180deg}.sheerly-select selectedcontent{align-items:center;gap:8px;display:flex}.sheerly-select option[value=""]{color:var(--sheerly-muted-foreground)}.sheerly-select::picker(select){border:1px solid var(--sheerly-border);border-radius:var(--sheerly-radius-xl);background-color:var(--sheerly-popover);color:var(--sheerly-popover-foreground);opacity:0;max-height:256px;transition:all .2s allow-discrete;scrollbar-width:thin;scrollbar-color:oklch(from var(--sheerly-foreground) l c h / 20%) transparent;padding:4px;overflow-y:auto;box-shadow:0 4px 16px -4px oklch(0% 0 0/.08),0 1px 2px oklch(0% 0 0/.04)}.sheerly-select::picker(select)::-webkit-scrollbar{width:8px}.sheerly-select::picker(select)::-webkit-scrollbar-track{background:0 0}.sheerly-select::picker(select)::-webkit-scrollbar-thumb{border-radius:var(--sheerly-radius-full);background-clip:padding-box;background-color:oklch(from var(--sheerly-foreground) l c h / 20%);border:2px solid #0000}.sheerly-select::picker(select)::-webkit-scrollbar-thumb:hover{background-color:oklch(from var(--sheerly-foreground) l c h / 35%)}.sheerly-select:open::picker(select){opacity:1}@starting-style{.sheerly-select:open::picker(select){opacity:0}}.sheerly-select option{border-radius:var(--sheerly-radius-md);cursor:default;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:6px 8px;font-size:14px;line-height:20px;transition:background-color .1s;display:flex}.sheerly-select option:hover,.sheerly-select option:focus{background-color:var(--sheerly-accent)}.sheerly-select option:checked{font-weight:500}.sheerly-select option:disabled{color:var(--sheerly-muted-foreground);pointer-events:none}.sheerly-select option::checkmark{color:var(--sheerly-foreground);order:1;margin-left:auto}.sheerly-select optgroup{padding:4px 0}.sheerly-select optgroup legend{color:var(--sheerly-muted-foreground);padding:4px 8px;font-size:12px;font-weight:500;line-height:16px}.sheerly-select optgroup+optgroup{border-top:1px solid var(--sheerly-border);margin-top:4px;padding-top:4px}
package/lib/select.d.ts CHANGED
@@ -6,5 +6,11 @@ export interface SelectProps extends SelectHTMLAttributes<HTMLSelectElement> {
6
6
  * Uses the customizable-select API. Requires
7
7
  * `<button><selectedcontent></selectedcontent></button>` as the first child,
8
8
  * which this wrapper injects before the consumer's <option>s.
9
+ *
10
+ * @example
11
+ * <Select defaultValue="apple">
12
+ * <option value="apple">Apple</option>
13
+ * <option value="banana">Banana</option>
14
+ * </Select>
9
15
  */
10
16
  export declare function Select({ className, children, ...props }: SelectProps): import("react").JSX.Element;
@@ -1,5 +1,15 @@
1
- import { HTMLAttributes } from 'react';
2
- export interface SeparatorProps extends HTMLAttributes<HTMLDivElement> {
1
+ import { ElementType } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
3
+ export type SeparatorProps<T extends ElementType = 'div'> = PolymorphicProps<T, {
3
4
  'data-orientation'?: 'horizontal' | 'vertical';
4
- }
5
- export declare function Separator({ className, ...props }: SeparatorProps): import("react").JSX.Element;
5
+ }>;
6
+ /**
7
+ * A divider line. Set `data-orientation="vertical"` for a vertical rule.
8
+ *
9
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `div`, e.g.
10
+ * `as="hr"`).
11
+ *
12
+ * @example
13
+ * <Separator />
14
+ */
15
+ export declare function Separator<T extends ElementType = 'div'>({ as, className, ...props }: SeparatorProps<T>): import("react").JSX.Element;
package/lib/sheet.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { ButtonHTMLAttributes, DialogHTMLAttributes, HTMLAttributes } from 'react';
1
+ import { ButtonHTMLAttributes, DialogHTMLAttributes, ElementType } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
2
3
  export interface SheetProps extends DialogHTMLAttributes<HTMLDialogElement> {
3
4
  'data-side'?: 'right' | 'left' | 'top' | 'bottom';
4
5
  }
@@ -6,11 +7,23 @@ export interface SheetProps extends DialogHTMLAttributes<HTMLDialogElement> {
6
7
  * Native <dialog> that slides in from an edge. Open via invoker command
7
8
  * (`command="show-modal"`) or `.showModal()`. Add `closedby="any"` for
8
9
  * light-dismiss.
10
+ *
11
+ * @example
12
+ * <button commandfor="s" command="show-modal">Open</button>
13
+ * <Sheet id="s" data-side="right" closedby="any">
14
+ * <SheetHeader><SheetTitle>Filters</SheetTitle></SheetHeader>
15
+ * <SheetBody>…</SheetBody>
16
+ * </Sheet>
9
17
  */
10
18
  export declare function Sheet({ className, ...props }: SheetProps): import("react").JSX.Element;
11
- export declare function SheetHeader({ className, ...props }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
12
- export declare function SheetTitle({ className, ...props }: HTMLAttributes<HTMLHeadingElement>): import("react").JSX.Element;
13
- export declare function SheetDescription({ className, ...props }: HTMLAttributes<HTMLParagraphElement>): import("react").JSX.Element;
14
- export declare function SheetBody({ className, ...props }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
15
- export declare function SheetFooter({ className, ...props }: HTMLAttributes<HTMLDivElement>): import("react").JSX.Element;
19
+ export type SheetHeaderProps<T extends ElementType = 'div'> = PolymorphicProps<T>;
20
+ export declare function SheetHeader<T extends ElementType = 'div'>({ as, className, ...props }: SheetHeaderProps<T>): import("react").JSX.Element;
21
+ export type SheetTitleProps<T extends ElementType = 'h3'> = PolymorphicProps<T>;
22
+ export declare function SheetTitle<T extends ElementType = 'h3'>({ as, className, ...props }: SheetTitleProps<T>): import("react").JSX.Element;
23
+ export type SheetDescriptionProps<T extends ElementType = 'p'> = PolymorphicProps<T>;
24
+ export declare function SheetDescription<T extends ElementType = 'p'>({ as, className, ...props }: SheetDescriptionProps<T>): import("react").JSX.Element;
25
+ export type SheetBodyProps<T extends ElementType = 'div'> = PolymorphicProps<T>;
26
+ export declare function SheetBody<T extends ElementType = 'div'>({ as, className, ...props }: SheetBodyProps<T>): import("react").JSX.Element;
27
+ export type SheetFooterProps<T extends ElementType = 'div'> = PolymorphicProps<T>;
28
+ export declare function SheetFooter<T extends ElementType = 'div'>({ as, className, ...props }: SheetFooterProps<T>): import("react").JSX.Element;
16
29
  export declare function SheetClose({ className, type, ...props }: ButtonHTMLAttributes<HTMLButtonElement>): import("react").JSX.Element;
package/lib/skeleton.d.ts CHANGED
@@ -1,3 +1,12 @@
1
- import { HTMLAttributes } from 'react';
2
- export type SkeletonProps = HTMLAttributes<HTMLDivElement>;
3
- export declare function Skeleton({ className, ...props }: SkeletonProps): import("react").JSX.Element;
1
+ import { ElementType } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
3
+ export type SkeletonProps<T extends ElementType = 'div'> = PolymorphicProps<T>;
4
+ /**
5
+ * A pulsing placeholder. Set width/height/border-radius inline.
6
+ *
7
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `div`).
8
+ *
9
+ * @example
10
+ * <Skeleton style={{ width: 200, height: 20, borderRadius: 6 }} />
11
+ */
12
+ export declare function Skeleton<T extends ElementType = 'div'>({ as, className, ...props }: SkeletonProps<T>): import("react").JSX.Element;
package/lib/slider.d.ts CHANGED
@@ -1,3 +1,9 @@
1
1
  import { InputHTMLAttributes } from 'react';
2
2
  export type SliderProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type'>;
3
+ /**
4
+ * A range `<input>`. Set `min` / `max` / `step` / `value`.
5
+ *
6
+ * @example
7
+ * <Slider min={0} max={100} defaultValue={50} />
8
+ */
3
9
  export declare function Slider({ className, ...props }: SliderProps): import("react").JSX.Element;
package/lib/spinner.d.ts CHANGED
@@ -1,10 +1,16 @@
1
- import { HTMLAttributes } from 'react';
2
- export interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {
1
+ import { ElementType } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
3
+ export type SpinnerProps<T extends ElementType = 'span'> = PolymorphicProps<T, {
3
4
  'data-size'?: 'sm' | 'default' | 'md' | 'lg';
4
- }
5
+ }>;
5
6
  /**
6
7
  * Loading spinner. The glyph is embedded in CSS (masked ::before), so no SVG
7
8
  * child is needed — this renders a bare <span>. It inherits the current text
8
9
  * color. Pass an <svg> child if you prefer to ship your own icon.
10
+ *
11
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `span`).
12
+ *
13
+ * @example
14
+ * <Spinner data-size="lg" />
9
15
  */
10
- export declare function Spinner({ className, children, ...props }: SpinnerProps): import("react").JSX.Element;
16
+ export declare function Spinner<T extends ElementType = 'span'>({ as, className, children, ...props }: SpinnerProps<T>): import("react").JSX.Element;
package/lib/switch.d.ts CHANGED
@@ -2,4 +2,10 @@ import { InputHTMLAttributes } from 'react';
2
2
  export interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'role'> {
3
3
  'data-size'?: 'default' | 'sm';
4
4
  }
5
+ /**
6
+ * A toggle switch (checkbox with `role="switch"`).
7
+ *
8
+ * @example
9
+ * <Switch defaultChecked />
10
+ */
5
11
  export declare function Switch({ className, ...props }: SwitchProps): import("react").JSX.Element;
package/lib/table.css CHANGED
@@ -1 +1 @@
1
- .sheerly-table-container{width:100%;position:relative;overflow-x:auto}.sheerly-table{caption-side:bottom;border-collapse:collapse;width:100%;color:var(--sheerly-foreground);font-family:Geist Sans,system-ui,-apple-system,sans-serif;font-size:14px;line-height:20px}.sheerly-table caption{color:var(--sheerly-muted-foreground);margin-top:16px;font-size:14px;line-height:20px}.sheerly-table thead tr{border-bottom:1px solid var(--sheerly-border)}.sheerly-table th{text-align:left;vertical-align:middle;white-space:nowrap;height:40px;color:var(--sheerly-foreground);padding:0 8px;font-weight:500}.sheerly-table tbody tr{border-bottom:1px solid var(--sheerly-border);transition:background-color .1s}.sheerly-table tbody tr:last-child{border-bottom:none}.sheerly-table tbody tr:hover{background-color:var(--sheerly-accent)}.sheerly-table tbody tr[data-state=selected]{background-color:var(--sheerly-muted)}.sheerly-table td{vertical-align:middle;white-space:nowrap;padding:8px}.sheerly-table tfoot{border-top:1px solid var(--sheerly-border);background-color:var(--sheerly-accent);font-weight:500}.sheerly-table tfoot tr:last-child{border-bottom:none}.sheerly-table tfoot td,.sheerly-table tfoot th{vertical-align:middle;padding:8px}
1
+ .sheerly-table-container{width:100%;overflow-x:auto}.sheerly-table{caption-side:bottom;border-collapse:collapse;width:100%;color:var(--sheerly-foreground);font-family:Geist Sans,system-ui,-apple-system,sans-serif;font-size:14px;line-height:20px}.sheerly-table caption{color:var(--sheerly-muted-foreground);margin-top:16px;font-size:14px;line-height:20px}.sheerly-table thead tr{border-bottom:1px solid var(--sheerly-border)}.sheerly-table th{text-align:left;vertical-align:middle;white-space:nowrap;height:40px;color:var(--sheerly-foreground);padding:0 8px;font-weight:500}.sheerly-table tbody tr{border-bottom:1px solid var(--sheerly-border);transition:background-color .1s}.sheerly-table tbody tr:last-child{border-bottom:none}.sheerly-table tbody tr:hover{background-color:var(--sheerly-accent)}.sheerly-table tbody tr[data-state=selected]{background-color:var(--sheerly-muted)}.sheerly-table td{vertical-align:middle;white-space:nowrap;padding:8px}.sheerly-table tfoot{border-top:1px solid var(--sheerly-border);background-color:var(--sheerly-accent);font-weight:500}.sheerly-table tfoot tr:last-child{border-bottom:none}.sheerly-table tfoot td,.sheerly-table tfoot th{vertical-align:middle;padding:8px}
package/lib/table.d.ts CHANGED
@@ -1,5 +1,16 @@
1
- import { HTMLAttributes, TableHTMLAttributes } from 'react';
2
- export type TableContainerProps = HTMLAttributes<HTMLDivElement>;
3
- export declare function TableContainer({ className, ...props }: TableContainerProps): import("react").JSX.Element;
1
+ import { ElementType, TableHTMLAttributes } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
3
+ export type TableContainerProps<T extends ElementType = 'div'> = PolymorphicProps<T>;
4
+ export declare function TableContainer<T extends ElementType = 'div'>({ as, className, ...props }: TableContainerProps<T>): import("react").JSX.Element;
4
5
  export type TableProps = TableHTMLAttributes<HTMLTableElement>;
6
+ /**
7
+ * A data table. Use semantic HTML inside (no classes on inner elements); wrap
8
+ * in a <TableContainer> for horizontal overflow scroll.
9
+ *
10
+ * @example
11
+ * <Table>
12
+ * <thead><tr><th>Name</th></tr></thead>
13
+ * <tbody><tr><td>Ada</td></tr></tbody>
14
+ * </Table>
15
+ */
5
16
  export declare function Table({ className, ...props }: TableProps): import("react").JSX.Element;
package/lib/tabs.d.ts CHANGED
@@ -1,13 +1,39 @@
1
- import { ButtonHTMLAttributes, HTMLAttributes } from 'react';
2
- export type TabsProps = HTMLAttributes<HTMLDivElement>;
3
- export declare function Tabs({ className, ...props }: TabsProps): import("react").JSX.Element;
4
- export interface TabsListProps extends HTMLAttributes<HTMLDivElement> {
1
+ import { ElementType } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
3
+ export type TabsProps<T extends ElementType = 'div'> = PolymorphicProps<T>;
4
+ /**
5
+ * A tabbed interface. Compose a <TabsList> of <TabsTrigger>s with matching
6
+ * <TabsContent> panels (hide inactive panels with `hidden`).
7
+ *
8
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `div`).
9
+ *
10
+ * @example
11
+ * <Tabs>
12
+ * <TabsList>
13
+ * <TabsTrigger aria-selected>Account</TabsTrigger>
14
+ * <TabsTrigger>Password</TabsTrigger>
15
+ * </TabsList>
16
+ * <TabsContent>…</TabsContent>
17
+ * <TabsContent hidden>…</TabsContent>
18
+ * </Tabs>
19
+ */
20
+ export declare function Tabs<T extends ElementType = 'div'>({ as, className, ...props }: TabsProps<T>): import("react").JSX.Element;
21
+ export type TabsListProps<T extends ElementType = 'div'> = PolymorphicProps<T, {
5
22
  'data-variant'?: 'line';
6
- }
7
- export declare function TabsList({ className, role, ...props }: TabsListProps): import("react").JSX.Element;
8
- export interface TabsTriggerProps extends ButtonHTMLAttributes<HTMLButtonElement> {
23
+ }>;
24
+ /**
25
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `div`).
26
+ */
27
+ export declare function TabsList<T extends ElementType = 'div'>({ as, className, ...props }: TabsListProps<T>): import("react").JSX.Element;
28
+ export type TabsTriggerProps<T extends ElementType = 'button'> = PolymorphicProps<T, {
9
29
  'data-state'?: 'active';
10
- }
11
- export declare function TabsTrigger({ className, role, ...props }: TabsTriggerProps): import("react").JSX.Element;
12
- export type TabsContentProps = HTMLAttributes<HTMLDivElement>;
13
- export declare function TabsContent({ className, role, ...props }: TabsContentProps): import("react").JSX.Element;
30
+ }>;
31
+ /**
32
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `button`).
33
+ */
34
+ export declare function TabsTrigger<T extends ElementType = 'button'>({ as, className, ...props }: TabsTriggerProps<T>): import("react").JSX.Element;
35
+ export type TabsContentProps<T extends ElementType = 'div'> = PolymorphicProps<T>;
36
+ /**
37
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `div`).
38
+ */
39
+ export declare function TabsContent<T extends ElementType = 'div'>({ as, className, ...props }: TabsContentProps<T>): import("react").JSX.Element;
package/lib/textarea.d.ts CHANGED
@@ -1,3 +1,9 @@
1
1
  import { TextareaHTMLAttributes } from 'react';
2
2
  export type TextareaProps = TextareaHTMLAttributes<HTMLTextAreaElement>;
3
+ /**
4
+ * A multiline text field. Auto-grows with content (`field-sizing: content`).
5
+ *
6
+ * @example
7
+ * <Textarea placeholder="Type your message…" />
8
+ */
3
9
  export declare function Textarea({ className, ...props }: TextareaProps): import("react").JSX.Element;
package/lib/toggle.d.ts CHANGED
@@ -13,4 +13,11 @@ export interface ToggleProps extends Omit<LabelHTMLAttributes<HTMLLabelElement>,
13
13
  value?: string;
14
14
  children?: ReactNode;
15
15
  }
16
+ /**
17
+ * A two-state toggle button. Works uncontrolled (no JS) or controlled via
18
+ * `pressed` / `onPressedChange`.
19
+ *
20
+ * @example
21
+ * <Toggle defaultPressed data-variant="outline">Bold</Toggle>
22
+ */
16
23
  export declare function Toggle({ className, pressed, defaultPressed, onPressedChange, disabled, name, value, children, ...props }: ToggleProps): import("react").JSX.Element;
package/lib/tooltip.d.ts CHANGED
@@ -1,7 +1,16 @@
1
- import { HTMLAttributes } from 'react';
2
- export type TooltipProps = HTMLAttributes<HTMLSpanElement>;
3
- /** Wrapper carrying the anchor. Nest the trigger + content inside. */
4
- export declare function Tooltip({ className, ...props }: TooltipProps): import("react").JSX.Element;
5
- export type TooltipContentProps = HTMLAttributes<HTMLSpanElement>;
1
+ import { ElementType } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
3
+ export type TooltipProps<T extends ElementType = 'span'> = PolymorphicProps<T>;
4
+ /**
5
+ * Wrapper carrying the anchor. Nest the trigger + content inside.
6
+ *
7
+ * @example
8
+ * <Tooltip>
9
+ * <Button interestfor="tt">Hover me</Button>
10
+ * <TooltipContent id="tt" popover="hint">More info</TooltipContent>
11
+ * </Tooltip>
12
+ */
13
+ export declare function Tooltip<T extends ElementType = 'span'>({ as, className, ...props }: TooltipProps<T>): import("react").JSX.Element;
14
+ export type TooltipContentProps<T extends ElementType = 'span'> = PolymorphicProps<T>;
6
15
  /** The floating label. Give it `popover="hint"` and an `id` matched by the trigger's `interestfor`. */
7
- export declare function TooltipContent({ className, ...props }: TooltipContentProps): import("react").JSX.Element;
16
+ export declare function TooltipContent<T extends ElementType = 'span'>({ as, className, ...props }: TooltipContentProps<T>): import("react").JSX.Element;
@@ -1,9 +1,17 @@
1
- import { HTMLAttributes } from 'react';
2
- export interface TypographyProps extends HTMLAttributes<HTMLDivElement> {
3
- }
1
+ import { ElementType } from 'react';
2
+ import { PolymorphicProps } from './utils/polymorphic';
3
+ export type TypographyProps<T extends ElementType = 'div'> = PolymorphicProps<T>;
4
4
  /**
5
5
  * A prose wrapper. Unlike shadcn (per-element utility classes), Sheerly styles
6
6
  * every child element (h1–h4, p, a, blockquote, ul/ol, li, code, table, …) via
7
7
  * one `.sheerly-typography` class — just render semantic HTML inside it.
8
+ *
9
+ * Polymorphic: pass `as` to change the rendered tag (defaults to `div`).
10
+ *
11
+ * @example
12
+ * <Typography as="article">
13
+ * <h1>Title</h1>
14
+ * <p>Some <a href="#">prose</a> with a <code>token</code>.</p>
15
+ * </Typography>
8
16
  */
9
- export declare function Typography({ className, ...props }: TypographyProps): import("react").JSX.Element;
17
+ export declare function Typography<T extends ElementType = 'div'>({ as, className, ...props }: TypographyProps<T>): import("react").JSX.Element;
@@ -0,0 +1,14 @@
1
+ import { ComponentPropsWithoutRef, ElementType } from 'react';
2
+ /**
3
+ * Props for a polymorphic component: an optional `as` that swaps the rendered
4
+ * element, with the remaining props inferred from that element (so `href` is
5
+ * valid & checked when `as="a"`, etc.).
6
+ *
7
+ * `Extra` merges component-specific props (e.g. typed `data-*` unions) on top.
8
+ *
9
+ * No hooks, no `forwardRef` — matches Sheerly's thin, hookless wrapper style.
10
+ */
11
+ export type PolymorphicProps<T extends ElementType, Extra = object> = {
12
+ /** The element or component to render. */
13
+ as?: T;
14
+ } & Extra & Omit<ComponentPropsWithoutRef<T>, 'as' | keyof Extra>;
package/package.json CHANGED
@@ -1,33 +1,34 @@
1
- {
2
- "name": "sheerly",
3
- "version": "0.0.1",
4
- "type": "module",
5
- "scripts": {
6
- "dev": "vite",
7
- "build": "tsc -b && vite build",
8
- "build:lib": "tsc -b && vite build --config vite.lib.config.ts",
9
- "lint": "oxlint",
10
- "preview": "vite preview"
11
- },
12
- "main": "lib/index.js",
13
- "types": "lib/index.d.ts",
14
- "files": [
15
- "src",
16
- "lib"
17
- ],
18
- "devDependencies": {
19
- "@tailwindcss/vite": "^4.3.2",
20
- "@types/node": "^26.1.1",
21
- "@types/react": "^19.2.17",
22
- "@types/react-dom": "^19.2.3",
23
- "@vitejs/plugin-react": "^6.0.3",
24
- "nuqs": "^2.9.0",
25
- "oxlint": "^1.73.0",
26
- "react": "^19.2.7",
27
- "react-dom": "^19.2.7",
28
- "tailwindcss": "^4.3.2",
29
- "typescript": "^6.0.3",
30
- "unplugin-dts": "^1.0.3",
31
- "vite": "^8.1.4"
32
- }
33
- }
1
+ {
2
+ "name": "sheerly",
3
+ "version": "0.0.3",
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "vite --config vite.config.doc.ts",
7
+ "build": "node --run build:lib && node --run build:doc",
8
+ "build:lib": "tsc -b && vite build --config vite.config.lib.ts",
9
+ "build:doc": "tsc -b && vite build --config vite.config.doc.ts",
10
+ "lint": "oxlint",
11
+ "preview": "vite preview"
12
+ },
13
+ "main": "lib/index.js",
14
+ "types": "lib/index.d.ts",
15
+ "files": [
16
+ "src",
17
+ "lib"
18
+ ],
19
+ "devDependencies": {
20
+ "@tailwindcss/vite": "^4.3.3",
21
+ "@types/node": "^26.2.0",
22
+ "@types/react": "^19.2.18",
23
+ "@types/react-dom": "^19.2.4",
24
+ "@vitejs/plugin-react": "^6.0.5",
25
+ "nuqs": "^2.9.6",
26
+ "oxlint": "^1.78.0",
27
+ "react": "^19.2.8",
28
+ "react-dom": "^19.2.8",
29
+ "tailwindcss": "^4.3.3",
30
+ "typescript": "^6.0.3",
31
+ "unplugin-dts": "^1.0.3",
32
+ "vite": "^8.2.1"
33
+ }
34
+ }