@shadow-js/ui 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/LICENSE +21 -0
- package/README.md +598 -2
- package/dist/cli.mjs +2293 -0
- package/dist/dev/cli/schema.d.ts +73 -0
- package/dist/dev/index.d.ts +6 -0
- package/dist/dev/index.js +5 -0
- package/dist/dev/locales/ar.d.ts +141 -0
- package/dist/dev/locales/ar.js +128 -0
- package/dist/dev/locales/ar.js.map +1 -0
- package/dist/dev/locales/en.d.ts +141 -0
- package/dist/dev/locales/en.js +128 -0
- package/dist/dev/locales/en.js.map +1 -0
- package/dist/dev/registry/utils/utils.d.ts +29 -0
- package/dist/dev/registry/utils/utils.js +27 -0
- package/dist/dev/registry/utils/utils.js.map +1 -0
- package/dist/dev/theme/theme-logic.d.ts +187 -0
- package/dist/dev/theme/theme-logic.js +184 -0
- package/dist/dev/theme/theme-logic.js.map +1 -0
- package/dist/dev/theme/theme-provider.d.ts +90 -0
- package/dist/dev/theme/theme-provider.js +150 -0
- package/dist/dev/theme/theme-provider.js.map +1 -0
- package/dist/prod/index.js +1 -0
- package/dist/prod/locales/ar.js +2 -0
- package/dist/prod/locales/ar.js.map +1 -0
- package/dist/prod/locales/en.js +2 -0
- package/dist/prod/locales/en.js.map +1 -0
- package/dist/prod/registry/utils/utils.js +2 -0
- package/dist/prod/registry/utils/utils.js.map +1 -0
- package/dist/prod/theme/theme-logic.js +2 -0
- package/dist/prod/theme/theme-logic.js.map +1 -0
- package/dist/prod/theme/theme-provider.js +2 -0
- package/dist/prod/theme/theme-provider.js.map +1 -0
- package/package.json +102 -4
- package/registry/accordion/accordion.tsx +210 -0
- package/registry/accordion/item.json +4 -0
- package/registry/alert/alert.tsx +200 -0
- package/registry/alert/item.json +4 -0
- package/registry/alert-dialog/alert-dialog.tsx +530 -0
- package/registry/alert-dialog/item.json +4 -0
- package/registry/aspect-ratio/aspect-ratio.tsx +71 -0
- package/registry/aspect-ratio/item.json +4 -0
- package/registry/attachment/attachment.tsx +459 -0
- package/registry/attachment/item.json +4 -0
- package/registry/avatar/avatar.tsx +385 -0
- package/registry/avatar/item.json +4 -0
- package/registry/badge/badge.tsx +108 -0
- package/registry/badge/item.json +4 -0
- package/registry/breadcrumb/breadcrumb.tsx +354 -0
- package/registry/breadcrumb/item.json +4 -0
- package/registry/bubble/bubble.tsx +260 -0
- package/registry/bubble/item.json +4 -0
- package/registry/button/button.tsx +125 -0
- package/registry/button/item.json +4 -0
- package/registry/button-group/button-group.tsx +189 -0
- package/registry/button-group/item.json +4 -0
- package/registry/calendar/calendar.tsx +348 -0
- package/registry/calendar/item.json +4 -0
- package/registry/card/card.tsx +311 -0
- package/registry/card/item.json +4 -0
- package/registry/carousel/carousel.tsx +851 -0
- package/registry/carousel/item.json +4 -0
- package/registry/chart/chart.tsx +1956 -0
- package/registry/chart/item.json +4 -0
- package/registry/chart-scale/chart-scale.ts +670 -0
- package/registry/chart-scale/item.json +5 -0
- package/registry/checkbox/checkbox.tsx +79 -0
- package/registry/checkbox/item.json +4 -0
- package/registry/code-block/code-block.tsx +470 -0
- package/registry/code-block/item.json +4 -0
- package/registry/collapsible/collapsible.tsx +117 -0
- package/registry/collapsible/item.json +4 -0
- package/registry/combobox/combobox.tsx +977 -0
- package/registry/combobox/item.json +4 -0
- package/registry/command/command.tsx +757 -0
- package/registry/command/item.json +4 -0
- package/registry/context-menu/context-menu.tsx +697 -0
- package/registry/context-menu/item.json +4 -0
- package/registry/data-table/data-table.tsx +437 -0
- package/registry/data-table/item.json +4 -0
- package/registry/date-picker/date-picker.tsx +349 -0
- package/registry/date-picker/item.json +4 -0
- package/registry/dialog/dialog.tsx +412 -0
- package/registry/dialog/item.json +4 -0
- package/registry/direction/direction.tsx +88 -0
- package/registry/direction/item.json +4 -0
- package/registry/drawer/drawer.tsx +787 -0
- package/registry/drawer/item.json +4 -0
- package/registry/dropdown-menu/dropdown-menu.tsx +692 -0
- package/registry/dropdown-menu/item.json +4 -0
- package/registry/empty/empty.tsx +240 -0
- package/registry/empty/item.json +4 -0
- package/registry/field/field.tsx +624 -0
- package/registry/field/item.json +4 -0
- package/registry/form/form.tsx +1112 -0
- package/registry/form/item.json +4 -0
- package/registry/hover-card/hover-card.tsx +144 -0
- package/registry/hover-card/item.json +4 -0
- package/registry/icons/icons.tsx +1691 -0
- package/registry/icons/item.json +4 -0
- package/registry/input/input.tsx +43 -0
- package/registry/input/item.json +4 -0
- package/registry/input-group/input-group.tsx +315 -0
- package/registry/input-group/item.json +4 -0
- package/registry/input-otp/input-otp.tsx +329 -0
- package/registry/input-otp/item.json +4 -0
- package/registry/item/item.json +4 -0
- package/registry/item/item.tsx +439 -0
- package/registry/kbd/item.json +4 -0
- package/registry/kbd/kbd.tsx +65 -0
- package/registry/label/item.json +4 -0
- package/registry/label/label.tsx +60 -0
- package/registry/marker/item.json +4 -0
- package/registry/marker/marker.tsx +175 -0
- package/registry/menubar/item.json +4 -0
- package/registry/menubar/menubar.tsx +694 -0
- package/registry/message/item.json +4 -0
- package/registry/message/message.tsx +280 -0
- package/registry/message-scroller/item.json +4 -0
- package/registry/message-scroller/message-scroller.tsx +262 -0
- package/registry/native-select/item.json +4 -0
- package/registry/native-select/native-select.tsx +113 -0
- package/registry/navigation-menu/item.json +4 -0
- package/registry/navigation-menu/navigation-menu.tsx +362 -0
- package/registry/pagination/item.json +4 -0
- package/registry/pagination/pagination.tsx +460 -0
- package/registry/password-input/item.json +5 -0
- package/registry/password-input/password-input.tsx +494 -0
- package/registry/popover/item.json +4 -0
- package/registry/popover/popover.tsx +284 -0
- package/registry/progress/item.json +4 -0
- package/registry/progress/progress.tsx +190 -0
- package/registry/questionnaire/item.json +4 -0
- package/registry/questionnaire/questionnaire.tsx +569 -0
- package/registry/radio-group/item.json +4 -0
- package/registry/radio-group/radio-group.tsx +101 -0
- package/registry/resizable/item.json +4 -0
- package/registry/resizable/resizable.tsx +455 -0
- package/registry/scroll-area/item.json +4 -0
- package/registry/scroll-area/scroll-area.tsx +149 -0
- package/registry/select/item.json +4 -0
- package/registry/select/select.tsx +571 -0
- package/registry/separator/item.json +4 -0
- package/registry/separator/separator.tsx +52 -0
- package/registry/sheet/item.json +4 -0
- package/registry/sheet/sheet.tsx +476 -0
- package/registry/sidebar/item.json +4 -0
- package/registry/sidebar/sidebar.tsx +1870 -0
- package/registry/skeleton/item.json +4 -0
- package/registry/skeleton/skeleton.tsx +47 -0
- package/registry/slider/item.json +4 -0
- package/registry/slider/slider.tsx +149 -0
- package/registry/spinner/item.json +4 -0
- package/registry/spinner/spinner.tsx +51 -0
- package/registry/switch/item.json +4 -0
- package/registry/switch/switch.tsx +93 -0
- package/registry/table/item.json +4 -0
- package/registry/table/table.tsx +373 -0
- package/registry/tabs/item.json +4 -0
- package/registry/tabs/tabs.tsx +209 -0
- package/registry/textarea/item.json +4 -0
- package/registry/textarea/textarea.tsx +51 -0
- package/registry/toast/item.json +4 -0
- package/registry/toast/toast.tsx +949 -0
- package/registry/toggle/item.json +4 -0
- package/registry/toggle/toggle.tsx +110 -0
- package/registry/toggle-group/item.json +4 -0
- package/registry/toggle-group/toggle-group.tsx +189 -0
- package/registry/tooltip/item.json +4 -0
- package/registry/tooltip/tooltip.tsx +169 -0
- package/registry/trace/item.json +4 -0
- package/registry/trace/trace.tsx +356 -0
- package/registry/ui-strings/item.json +5 -0
- package/registry/ui-strings/ui-strings.tsx +454 -0
- package/registry/use-highlighted-code/item.json +5 -0
- package/registry/use-highlighted-code/use-highlighted-code.tsx +145 -0
- package/registry/use-mobile/item.json +5 -0
- package/registry/use-mobile/use-mobile.ts +46 -0
- package/registry/utils/item.json +5 -0
- package/registry/utils/utils.ts +38 -0
- package/registry.json +3274 -0
- package/styles/animations.css +321 -0
- package/styles/theme-core.css +55 -0
- package/styles/theme.css +12 -0
- package/styles/themes/gray.css +69 -0
- package/styles/themes/neutral.css +69 -0
- package/styles/themes/slate.css +69 -0
- package/styles/themes/stone.css +69 -0
- package/styles/themes/zinc.css +69 -0
- package/styles/typeset.css +251 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { splitProps } from "@shadow-js/core";
|
|
2
|
+
import {
|
|
3
|
+
type HoverCardContentProps,
|
|
4
|
+
HoverCard as HoverCardPrimitive,
|
|
5
|
+
type HoverCardProps as HoverCardRootProps,
|
|
6
|
+
type HoverCardTriggerProps,
|
|
7
|
+
type PolymorphicTarget,
|
|
8
|
+
} from "@shadow-js/primitives";
|
|
9
|
+
import type { JSX } from "@shadow-js/web";
|
|
10
|
+
import { cn } from "@/lib/utils";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Props of {@link HoverCard}: the primitive's root props, and `delay`, the shadcn name for `openDelay`.
|
|
14
|
+
* @see {@link HoverCard}
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
export type HoverCardProps = HoverCardRootProps & {
|
|
18
|
+
/**
|
|
19
|
+
* The shadcn name for `openDelay`: how long the pointer (or focus) rests on the trigger before the card
|
|
20
|
+
* opens, in ms. The delays live on the root, so `delay` is a root prop, not a trigger prop. When both are
|
|
21
|
+
* given, `openDelay` wins.
|
|
22
|
+
* @default 700
|
|
23
|
+
* @see {@link HoverCardProps}
|
|
24
|
+
*/
|
|
25
|
+
readonly delay?: number | undefined;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* A preview card that opens when the pointer rests on a link, or when keyboard focus reaches it. Use it
|
|
30
|
+
* for supplementary detail about a link, such as a profile preview. The card is for sighted pointer users
|
|
31
|
+
* and is not an interactive dialog: it is not announced, it never traps focus, and touch devices never
|
|
32
|
+
* open it. Whatever it shows must also be reachable by following the link.
|
|
33
|
+
*
|
|
34
|
+
* The pointer opens the card after `openDelay` (700 ms by default, `delay` is its shadcn name) and closes it
|
|
35
|
+
* after `closeDelay` (300 ms by default), so the pointer can cross the gap into the card. It is controlled with `open` and
|
|
36
|
+
* `onOpenChange`, or uncontrolled with `defaultOpen`.
|
|
37
|
+
*
|
|
38
|
+
* Keyboard and ARIA: focus on the trigger opens the card and leaving the trigger closes it, after the
|
|
39
|
+
* delays. Tab from an open trigger enters the card, Shift+Tab from its first control returns to the
|
|
40
|
+
* trigger, and Escape closes the card and returns focus to the trigger. No ARIA role is set, and the
|
|
41
|
+
* trigger is a link in the tab order. Name the link by its text.
|
|
42
|
+
*
|
|
43
|
+
* shadcn/ui differences: `as` replaces `asChild` on {@link HoverCardTrigger}, and the prop is `class`,
|
|
44
|
+
* not `className`. Every part has a `data-slot`.
|
|
45
|
+
*
|
|
46
|
+
* @param props The card props: see {@link HoverCardProps}.
|
|
47
|
+
* @returns The card. It renders no element of its own.
|
|
48
|
+
* @example
|
|
49
|
+
* import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card";
|
|
50
|
+
*
|
|
51
|
+
* export function AuthorPreview() {
|
|
52
|
+
* return (
|
|
53
|
+
* <HoverCard>
|
|
54
|
+
* <HoverCardTrigger href="https://shadow-js.dev">@shadow-js</HoverCardTrigger>
|
|
55
|
+
* <HoverCardContent>The fine-grained UI framework.</HoverCardContent>
|
|
56
|
+
* </HoverCard>
|
|
57
|
+
* );
|
|
58
|
+
* }
|
|
59
|
+
* @see {@link HoverCardTrigger}
|
|
60
|
+
* @see {@link HoverCardContent}
|
|
61
|
+
* @since 1.0.0
|
|
62
|
+
*/
|
|
63
|
+
function HoverCard(props: HoverCardProps): JSX.Element {
|
|
64
|
+
const [local, rest] = splitProps(props, ["delay"]);
|
|
65
|
+
return <HoverCardPrimitive {...rest} openDelay={rest.openDelay ?? local.delay} />;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* The link the card previews. It renders an `a`, so give it an `href`; `as` renders another element. The
|
|
70
|
+
* mouse or a pen opens the card after the open delay, and keyboard focus does the same. Touch never opens
|
|
71
|
+
* it, not even through the focus a tap can cause.
|
|
72
|
+
*
|
|
73
|
+
* @param props The trigger props: the attributes of the rendered element, and `as`.
|
|
74
|
+
* @returns The trigger link.
|
|
75
|
+
* @throws Error when rendered outside a {@link HoverCard}.
|
|
76
|
+
* @example
|
|
77
|
+
* import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card";
|
|
78
|
+
*
|
|
79
|
+
* export function AdaLink() {
|
|
80
|
+
* return (
|
|
81
|
+
* <HoverCard>
|
|
82
|
+
* <HoverCardTrigger href="/ada" class="underline">
|
|
83
|
+
* Ada Lovelace
|
|
84
|
+
* </HoverCardTrigger>
|
|
85
|
+
* <HoverCardContent>Ada Lovelace wrote the first program.</HoverCardContent>
|
|
86
|
+
* </HoverCard>
|
|
87
|
+
* );
|
|
88
|
+
* }
|
|
89
|
+
* @see {@link HoverCard}
|
|
90
|
+
* @since 1.0.0
|
|
91
|
+
*/
|
|
92
|
+
function HoverCardTrigger<T extends PolymorphicTarget = "a">(
|
|
93
|
+
props: HoverCardTriggerProps<T>,
|
|
94
|
+
): JSX.Element {
|
|
95
|
+
return <HoverCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} />;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The card. It is rendered in `document.body` and placed against the trigger, centered below it by
|
|
100
|
+
* default with a 4 px gap (`side="bottom"`, `align="center"` and `sideOffset={4}`, all of which you can
|
|
101
|
+
* change). Keyboard and ARIA: see {@link HoverCard}; the card has no keys or role of its own. The
|
|
102
|
+
* pointer can move from the trigger onto the card without closing it. Escape and a press outside close
|
|
103
|
+
* it. The card does not take focus, and focus leaving the card closes it.
|
|
104
|
+
*
|
|
105
|
+
* @param props The card props: `side` (`"bottom"` by default, or `"top"`, `"left"` or `"right"`), `align`,
|
|
106
|
+
* `sideOffset`, `class`, and the attributes of the rendered `div`.
|
|
107
|
+
* @returns The card, rendered in a portal while it is open.
|
|
108
|
+
* @throws Error when rendered outside a {@link HoverCard}.
|
|
109
|
+
* @example
|
|
110
|
+
* import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card";
|
|
111
|
+
*
|
|
112
|
+
* export function Profile() {
|
|
113
|
+
* return (
|
|
114
|
+
* <HoverCard>
|
|
115
|
+
* <HoverCardTrigger href="/ada">@ada</HoverCardTrigger>
|
|
116
|
+
* <HoverCardContent class="w-80">
|
|
117
|
+
* <p>Ada Lovelace, 1815 to 1852.</p>
|
|
118
|
+
* </HoverCardContent>
|
|
119
|
+
* </HoverCard>
|
|
120
|
+
* );
|
|
121
|
+
* }
|
|
122
|
+
* @see {@link HoverCardTrigger}
|
|
123
|
+
* @since 1.0.0
|
|
124
|
+
*/
|
|
125
|
+
function HoverCardContent(props: HoverCardContentProps): JSX.Element {
|
|
126
|
+
const [local, rest] = splitProps(props, ["class", "side", "align", "sideOffset"]);
|
|
127
|
+
return (
|
|
128
|
+
<HoverCardPrimitive.Portal>
|
|
129
|
+
<HoverCardPrimitive.Content
|
|
130
|
+
data-slot="hover-card-content"
|
|
131
|
+
side={local.side ?? "bottom"}
|
|
132
|
+
align={local.align ?? "center"}
|
|
133
|
+
sideOffset={local.sideOffset ?? 4}
|
|
134
|
+
class={cn(
|
|
135
|
+
"z-50 w-64 origin-(--primitives-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
|
|
136
|
+
local.class,
|
|
137
|
+
)}
|
|
138
|
+
{...rest}
|
|
139
|
+
/>
|
|
140
|
+
</HoverCardPrimitive.Portal>
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export { HoverCard, HoverCardContent, HoverCardTrigger };
|