@a4ui/core 0.4.3 → 0.5.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/README.md +1 -1
- package/dist/index.d.ts +32 -2
- package/dist/index.js +2609 -1122
- package/dist/layout/ChristmasBackground.d.ts +8 -0
- package/dist/layout/SnowScenery.d.ts +7 -0
- package/dist/styles.css +99 -0
- package/dist/themes/index.d.ts +1 -1
- package/dist/themes/palettes.d.ts +2 -0
- package/dist/ui/Affix.d.ts +21 -0
- package/dist/ui/Anchor.d.ts +28 -0
- package/dist/ui/AvatarGroup.d.ts +29 -0
- package/dist/ui/BackToTop.d.ts +17 -0
- package/dist/ui/BottomNavigation.d.ts +33 -0
- package/dist/ui/Calendar.d.ts +21 -0
- package/dist/ui/Carousel.d.ts +23 -0
- package/dist/ui/Collapse.d.ts +24 -0
- package/dist/ui/Command.d.ts +40 -0
- package/dist/ui/Countdown.d.ts +19 -0
- package/dist/ui/Descriptions.d.ts +28 -0
- package/dist/ui/Empty.d.ts +27 -0
- package/dist/ui/FloatingActionButton.d.ts +22 -0
- package/dist/ui/Highlight.d.ts +18 -0
- package/dist/ui/Image.d.ts +20 -0
- package/dist/ui/Kbd.d.ts +14 -0
- package/dist/ui/List.d.ts +36 -0
- package/dist/ui/Marquee.d.ts +26 -0
- package/dist/ui/Rating.d.ts +23 -0
- package/dist/ui/Result.d.ts +31 -0
- package/dist/ui/RingProgress.d.ts +23 -0
- package/dist/ui/SpeedDial.d.ts +29 -0
- package/dist/ui/Splitter.d.ts +32 -0
- package/dist/ui/Stepper.d.ts +38 -0
- package/dist/ui/TagInput.d.ts +22 -0
- package/dist/ui/Timeline.d.ts +36 -0
- package/dist/ui/Transfer.d.ts +35 -0
- package/dist/ui/Tree.d.ts +41 -0
- package/package.json +14 -2
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
/**
|
|
3
|
+
* Festive backdrop for the `christmas` theme: night sky, falling snow, a
|
|
4
|
+
* twinkling light garland, a pine tree, and Santa's sleigh flying across (ambient
|
|
5
|
+
* + on background click). Mount as {@link AppShell}'s `background`. Motion is
|
|
6
|
+
* skipped under `motionReduced()`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function ChristmasBackground(): JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
/**
|
|
3
|
+
* Falling-snow backdrop for the `snow` theme: snowflakes drift down, a snow bank
|
|
4
|
+
* gathers at the bottom, and cards get a frosted cap. Mount as {@link AppShell}'s
|
|
5
|
+
* `background`. Motion is skipped under `motionReduced()`.
|
|
6
|
+
*/
|
|
7
|
+
export declare function SnowScenery(): JSX.Element;
|
package/dist/styles.css
CHANGED
|
@@ -623,3 +623,102 @@ body {
|
|
|
623
623
|
animation: none !important;
|
|
624
624
|
}
|
|
625
625
|
}
|
|
626
|
+
|
|
627
|
+
/* ---- Snow scenery (the "snow" theme) ------------------------------------ */
|
|
628
|
+
#snow,
|
|
629
|
+
#xmas {
|
|
630
|
+
position: fixed;
|
|
631
|
+
inset: 0;
|
|
632
|
+
z-index: 0;
|
|
633
|
+
pointer-events: none;
|
|
634
|
+
overflow: hidden;
|
|
635
|
+
}
|
|
636
|
+
#snow .snow-sky {
|
|
637
|
+
position: absolute;
|
|
638
|
+
inset: 0;
|
|
639
|
+
background:
|
|
640
|
+
radial-gradient(1200px 800px at 50% -12%, hsl(var(--primary) / 0.18), transparent 60%),
|
|
641
|
+
radial-gradient(900px 700px at 82% 8%, hsl(var(--accent) / 0.14), transparent 60%), hsl(var(--background));
|
|
642
|
+
}
|
|
643
|
+
/* Snowflakes (shared by snow + christmas). Each drifts down with a sideways sway. */
|
|
644
|
+
#snow .flake,
|
|
645
|
+
#xmas .flake {
|
|
646
|
+
position: absolute;
|
|
647
|
+
top: -12px;
|
|
648
|
+
border-radius: 50%;
|
|
649
|
+
background: #fff;
|
|
650
|
+
box-shadow: 0 0 4px rgba(255, 255, 255, 0.6);
|
|
651
|
+
will-change: transform;
|
|
652
|
+
}
|
|
653
|
+
[data-theme='light'] #snow .flake,
|
|
654
|
+
[data-theme='light'] #xmas .flake {
|
|
655
|
+
background: hsl(205 45% 82%);
|
|
656
|
+
box-shadow: 0 0 3px hsl(205 45% 72% / 0.6);
|
|
657
|
+
}
|
|
658
|
+
@keyframes snowFall {
|
|
659
|
+
0% {
|
|
660
|
+
transform: translate(0, -12px);
|
|
661
|
+
}
|
|
662
|
+
100% {
|
|
663
|
+
transform: translate(var(--sway, 12px), 112vh);
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
/* Snow settling at the bottom + a frosted cap on cards (snow theme only). */
|
|
667
|
+
#snow .snow-bank {
|
|
668
|
+
position: absolute;
|
|
669
|
+
inset: auto 0 0 0;
|
|
670
|
+
height: 9vh;
|
|
671
|
+
background: linear-gradient(to top, hsl(0 0% 100% / 0.5), transparent);
|
|
672
|
+
filter: blur(2px);
|
|
673
|
+
}
|
|
674
|
+
[data-theme='light'] #snow .snow-bank {
|
|
675
|
+
background: linear-gradient(to top, hsl(0 0% 100% / 0.95), transparent);
|
|
676
|
+
}
|
|
677
|
+
[data-scene='snow'] .card::after {
|
|
678
|
+
content: '';
|
|
679
|
+
position: absolute;
|
|
680
|
+
top: -3px;
|
|
681
|
+
left: 10px;
|
|
682
|
+
right: 10px;
|
|
683
|
+
height: 5px;
|
|
684
|
+
border-radius: 9999px;
|
|
685
|
+
background: hsl(0 0% 100% / 0.8);
|
|
686
|
+
filter: blur(1.5px);
|
|
687
|
+
pointer-events: none;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
/* ---- Christmas scenery (the "christmas" theme) -------------------------- */
|
|
691
|
+
#xmas .xmas-sky {
|
|
692
|
+
position: absolute;
|
|
693
|
+
inset: 0;
|
|
694
|
+
background:
|
|
695
|
+
radial-gradient(1000px 700px at 50% -12%, hsl(var(--primary) / 0.14), transparent 55%),
|
|
696
|
+
radial-gradient(900px 600px at 15% 16%, hsl(var(--accent) / 0.16), transparent 60%),
|
|
697
|
+
hsl(var(--background));
|
|
698
|
+
}
|
|
699
|
+
#xmas .light {
|
|
700
|
+
position: absolute;
|
|
701
|
+
top: 10px;
|
|
702
|
+
width: 9px;
|
|
703
|
+
height: 9px;
|
|
704
|
+
border-radius: 50%;
|
|
705
|
+
animation: twinkleLight 2.2s ease-in-out infinite;
|
|
706
|
+
}
|
|
707
|
+
@keyframes twinkleLight {
|
|
708
|
+
0%,
|
|
709
|
+
100% {
|
|
710
|
+
opacity: 1;
|
|
711
|
+
box-shadow: 0 0 9px currentColor;
|
|
712
|
+
}
|
|
713
|
+
50% {
|
|
714
|
+
opacity: 0.35;
|
|
715
|
+
box-shadow: 0 0 3px currentColor;
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
@media (prefers-reduced-motion: reduce) {
|
|
719
|
+
html:not(.force-motion) #snow .flake,
|
|
720
|
+
html:not(.force-motion) #xmas .flake,
|
|
721
|
+
html:not(.force-motion) #xmas .light {
|
|
722
|
+
animation: none !important;
|
|
723
|
+
}
|
|
724
|
+
}
|
package/dist/themes/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Palette, ThemeDefinition } from './palettes';
|
|
2
2
|
export type { Palette, ThemeDefinition } from './palettes';
|
|
3
|
-
export { themes, space, dino, doctor, scientist, soccer, TOKEN_ORDER } from './palettes';
|
|
3
|
+
export { themes, space, dino, doctor, scientist, soccer, snow, christmas, TOKEN_ORDER } from './palettes';
|
|
4
4
|
/**
|
|
5
5
|
* Render a theme to the CSS you'd paste into your own stylesheet: a `:root`
|
|
6
6
|
* block (dark) plus a `:root[data-theme='light']` block. Same output the docs
|
|
@@ -38,5 +38,7 @@ export declare const dino: ThemeDefinition;
|
|
|
38
38
|
export declare const doctor: ThemeDefinition;
|
|
39
39
|
export declare const scientist: ThemeDefinition;
|
|
40
40
|
export declare const soccer: ThemeDefinition;
|
|
41
|
+
export declare const snow: ThemeDefinition;
|
|
42
|
+
export declare const christmas: ThemeDefinition;
|
|
41
43
|
/** All built-in themes, in picker order. Space is the default. */
|
|
42
44
|
export declare const themes: ThemeDefinition[];
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { JSX, ParentProps } from 'solid-js';
|
|
2
|
+
interface AffixProps extends ParentProps {
|
|
3
|
+
/** Distance in pixels from the top of the viewport to pin at once affixed. Defaults to `0`. */
|
|
4
|
+
offsetTop?: number;
|
|
5
|
+
class?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Sticks its children to the top of the viewport once the user scrolls past the
|
|
9
|
+
* element's original position. While affixed, the children are rendered in a
|
|
10
|
+
* `position: fixed` container and a same-size spacer preserves the document flow
|
|
11
|
+
* so surrounding layout doesn't jump.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* <Affix offsetTop={16}>
|
|
16
|
+
* <nav class="rounded-md bg-card px-4 py-2 text-foreground">Sticky toolbar</nav>
|
|
17
|
+
* </Affix>
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function Affix(props: AffixProps): JSX.Element;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface AnchorItem {
|
|
3
|
+
/** The `id` of the section element this link points to. */
|
|
4
|
+
id: string;
|
|
5
|
+
/** Text shown for the link. */
|
|
6
|
+
label: string;
|
|
7
|
+
}
|
|
8
|
+
export interface AnchorProps {
|
|
9
|
+
/** Ordered list of sections to build the table of contents from. */
|
|
10
|
+
items: AnchorItem[];
|
|
11
|
+
class?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A vertical table-of-contents nav with scroll-spy. Each item links to a page
|
|
15
|
+
* section by `id`; the link whose section is topmost in the viewport is marked
|
|
16
|
+
* active. Clicking a link smooth-scrolls to its section.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <Anchor
|
|
21
|
+
* items={[
|
|
22
|
+
* { id: 'intro', label: 'Introduction' },
|
|
23
|
+
* { id: 'usage', label: 'Usage' },
|
|
24
|
+
* ]}
|
|
25
|
+
* />
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function Anchor(props: AnchorProps): JSX.Element;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface AvatarGroupProps {
|
|
3
|
+
avatars: {
|
|
4
|
+
src?: string;
|
|
5
|
+
fallback: string;
|
|
6
|
+
alt?: string;
|
|
7
|
+
}[];
|
|
8
|
+
/** Maximum number of avatars to render before collapsing the rest into `+N`. */
|
|
9
|
+
max?: number;
|
|
10
|
+
class?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Renders a row of overlapping {@link Avatar}s. When there are more avatars than
|
|
14
|
+
* `max` (default 4), the remainder collapse into a trailing `+N` counter.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* <AvatarGroup
|
|
19
|
+
* max={3}
|
|
20
|
+
* avatars={[
|
|
21
|
+
* { src: a.avatarUrl, alt: a.name, fallback: 'AA' },
|
|
22
|
+
* { src: b.avatarUrl, alt: b.name, fallback: 'BB' },
|
|
23
|
+
* { fallback: 'CC' },
|
|
24
|
+
* { fallback: 'DD' },
|
|
25
|
+
* ]}
|
|
26
|
+
* />
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function AvatarGroup(props: AvatarGroupProps): JSX.Element;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface BackToTopProps {
|
|
3
|
+
/** Scroll distance (px) after which the button appears. Defaults to `300`. */
|
|
4
|
+
threshold?: number;
|
|
5
|
+
class?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A floating "scroll to top" button, fixed to the bottom-right of the viewport.
|
|
9
|
+
* It fades in once the user scrolls past `threshold` and smooth-scrolls back up
|
|
10
|
+
* on click.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <BackToTop threshold={500} />
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare function BackToTop(props: BackToTopProps): JSX.Element;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
/** A single destination within a {@link BottomNavigation}. */
|
|
3
|
+
export interface BottomNavItem {
|
|
4
|
+
value: string;
|
|
5
|
+
label: string;
|
|
6
|
+
icon: JSX.Element;
|
|
7
|
+
}
|
|
8
|
+
export interface BottomNavigationProps {
|
|
9
|
+
items: BottomNavItem[];
|
|
10
|
+
value: string;
|
|
11
|
+
onChange: (value: string) => void;
|
|
12
|
+
class?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Horizontal bar of equal-width navigation items, each stacking an icon above
|
|
16
|
+
* a short label. The active item (matching `value`) is highlighted and marked
|
|
17
|
+
* with `aria-current="page"`. Renders inline where placed — the consumer is
|
|
18
|
+
* responsible for positioning (e.g. `fixed inset-x-0 bottom-0`).
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* <BottomNavigation
|
|
23
|
+
* value={tab()}
|
|
24
|
+
* onChange={setTab}
|
|
25
|
+
* items={[
|
|
26
|
+
* { value: 'home', label: 'Home', icon: <HomeIcon /> },
|
|
27
|
+
* { value: 'search', label: 'Search', icon: <SearchIcon /> },
|
|
28
|
+
* { value: 'profile', label: 'Profile', icon: <UserIcon /> },
|
|
29
|
+
* ]}
|
|
30
|
+
* />
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function BottomNavigation(props: BottomNavigationProps): JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface CalendarProps {
|
|
3
|
+
/** Currently selected day. */
|
|
4
|
+
value?: Date;
|
|
5
|
+
/** Called with the newly picked day. */
|
|
6
|
+
onChange?: (date: Date) => void;
|
|
7
|
+
class?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Full-month calendar: a header with the month/year and prev/next navigation, a
|
|
11
|
+
* row of weekday labels, and a 6×7 grid of day buttons. Days outside the shown
|
|
12
|
+
* month are muted; the selected day is filled and "today" gets a ring. Clicking a
|
|
13
|
+
* day calls `onChange`. Theme-agnostic (semantic tokens only), always visible.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* const [date, setDate] = createSignal(new Date())
|
|
18
|
+
* <Calendar value={date()} onChange={setDate} />
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare function Calendar(props: CalendarProps): JSX.Element;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface CarouselProps {
|
|
3
|
+
/** Slides to page through, one visible at a time. */
|
|
4
|
+
slides: JSX.Element[];
|
|
5
|
+
/** Auto-advance interval in ms. Omit to disable autoplay (also skipped under reduced motion / hover). */
|
|
6
|
+
autoplayMs?: number;
|
|
7
|
+
class?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Horizontally-sliding carousel that shows one slide at a time inside a rounded,
|
|
11
|
+
* overflow-hidden viewport. Includes wrapping prev/next arrow buttons, a row of
|
|
12
|
+
* dot indicators, Left/Right arrow-key navigation when focused, and optional
|
|
13
|
+
* autoplay that pauses on hover and is disabled under `prefers-reduced-motion`.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* <Carousel
|
|
18
|
+
* autoplayMs={4000}
|
|
19
|
+
* slides={[<img src="/a.jpg" />, <img src="/b.jpg" />, <img src="/c.jpg" />]}
|
|
20
|
+
* />
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function Carousel(props: CarouselProps): JSX.Element;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { JSX, ParentProps } from 'solid-js';
|
|
2
|
+
interface CollapseProps extends ParentProps {
|
|
3
|
+
/** Whether the panel is currently expanded. */
|
|
4
|
+
open: boolean;
|
|
5
|
+
/** Called with the next open state when the header is toggled. */
|
|
6
|
+
onOpenChange: (open: boolean) => void;
|
|
7
|
+
/** Text shown in the header button. */
|
|
8
|
+
title: string;
|
|
9
|
+
class?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A single controlled collapsible region: a header button that toggles a panel
|
|
13
|
+
* of arbitrary children. State is owned by the caller via `open`/`onOpenChange`.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* const [open, setOpen] = createSignal(false)
|
|
18
|
+
* <Collapse open={open()} onOpenChange={setOpen} title="Details">
|
|
19
|
+
* <p>Hidden content revealed on toggle.</p>
|
|
20
|
+
* </Collapse>
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function Collapse(props: CollapseProps): JSX.Element;
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
/** A single selectable row in the palette. */
|
|
3
|
+
export interface CommandItem {
|
|
4
|
+
/** Primary text shown on the left of the row. */
|
|
5
|
+
label: string;
|
|
6
|
+
/** Optional secondary text shown muted on the right. */
|
|
7
|
+
hint?: string;
|
|
8
|
+
/** Optional group name; rows sharing a group render under one header. */
|
|
9
|
+
group?: string;
|
|
10
|
+
/** Invoked when the row is picked (click or Enter). */
|
|
11
|
+
onSelect: () => void;
|
|
12
|
+
}
|
|
13
|
+
export interface CommandProps {
|
|
14
|
+
open: boolean;
|
|
15
|
+
onOpenChange: (open: boolean) => void;
|
|
16
|
+
/** Flat list of commands; filtered live against the search query. */
|
|
17
|
+
items: CommandItem[];
|
|
18
|
+
/** Search input placeholder. @default 'Type a command…' */
|
|
19
|
+
placeholder?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A ⌘K command palette: a centered, top-anchored dialog with a search input and
|
|
23
|
+
* a filtered, keyboard-navigable list of commands. Filtering is a
|
|
24
|
+
* case-insensitive substring match over each item's `label + hint + group`.
|
|
25
|
+
* Picking a row runs its `onSelect`, closes the palette, and clears the query.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* const [open, setOpen] = createSignal(false)
|
|
30
|
+
* <Command
|
|
31
|
+
* open={open()}
|
|
32
|
+
* onOpenChange={setOpen}
|
|
33
|
+
* items={[
|
|
34
|
+
* { label: 'New file', hint: '⌘N', group: 'File', onSelect: () => createFile() },
|
|
35
|
+
* { label: 'Toggle theme', group: 'View', onSelect: () => toggleTheme() },
|
|
36
|
+
* ]}
|
|
37
|
+
* />
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare function Command(props: CommandProps): JSX.Element;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface CountdownProps {
|
|
3
|
+
/** Target moment the countdown runs toward. */
|
|
4
|
+
to: Date;
|
|
5
|
+
/** Called once, the moment the countdown reaches zero. */
|
|
6
|
+
onComplete?: () => void;
|
|
7
|
+
class?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Live countdown to `props.to`, shown as four cells (Days / Hours / Mins /
|
|
11
|
+
* Secs). Updates every second and calls `props.onComplete` once when it hits
|
|
12
|
+
* zero. Hours, minutes, and seconds are zero-padded to two digits.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <Countdown to={new Date(Date.now() + 86_400_000)} onComplete={() => launch()} />
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare function Countdown(props: CountdownProps): JSX.Element;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
/** A single label/value row in a {@link Descriptions} list. */
|
|
3
|
+
export interface DescriptionItem {
|
|
4
|
+
label: string;
|
|
5
|
+
value: JSX.Element;
|
|
6
|
+
}
|
|
7
|
+
export interface DescriptionsProps {
|
|
8
|
+
items: DescriptionItem[];
|
|
9
|
+
/** Number of columns on `sm`+ screens (1, 2, or 3). Default: 1. */
|
|
10
|
+
columns?: number;
|
|
11
|
+
class?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Renders a set of label/value pairs as a semantic `<dl>` in a responsive grid.
|
|
15
|
+
* Use `columns` to fan the pairs out into 2 or 3 columns on wider screens.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* <Descriptions
|
|
20
|
+
* columns={2}
|
|
21
|
+
* items={[
|
|
22
|
+
* { label: 'Status', value: <Badge tone="success">Active</Badge> },
|
|
23
|
+
* { label: 'Owner', value: 'Ada Lovelace' },
|
|
24
|
+
* ]}
|
|
25
|
+
* />
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function Descriptions(props: DescriptionsProps): JSX.Element;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface EmptyProps {
|
|
3
|
+
/** Bold headline describing the empty state. */
|
|
4
|
+
title: string;
|
|
5
|
+
/** Optional supporting line under the title. */
|
|
6
|
+
description?: string;
|
|
7
|
+
/** Optional custom icon; falls back to a lucide-solid `Inbox`. */
|
|
8
|
+
icon?: JSX.Element;
|
|
9
|
+
/** Optional action slot (e.g. a Button) rendered below the text. */
|
|
10
|
+
action?: JSX.Element;
|
|
11
|
+
class?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Empty-state placeholder — a centered icon, title, optional description, and an
|
|
15
|
+
* optional action slot — for lists, search results, or first-run views that have
|
|
16
|
+
* nothing to show yet. Falls back to an `Inbox` icon when none is provided.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <Empty
|
|
21
|
+
* title="No projects yet"
|
|
22
|
+
* description="Create your first project to get started."
|
|
23
|
+
* action={<Button>New project</Button>}
|
|
24
|
+
* />
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function Empty(props: EmptyProps): JSX.Element;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
/** Screen corner a {@link FloatingActionButton} anchors to. Defaults to `'bottom-right'`. */
|
|
3
|
+
export type FloatingActionButtonPosition = 'bottom-right' | 'bottom-left';
|
|
4
|
+
export interface FloatingActionButtonProps {
|
|
5
|
+
/** Icon rendered centered inside the button. */
|
|
6
|
+
icon: JSX.Element;
|
|
7
|
+
/** Accessible label; surfaced via `aria-label`. */
|
|
8
|
+
label: string;
|
|
9
|
+
onClick?: () => void;
|
|
10
|
+
/** Screen corner to anchor to. Defaults to `'bottom-right'`. */
|
|
11
|
+
position?: FloatingActionButtonPosition;
|
|
12
|
+
class?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A fixed circular primary action button pinned to a screen corner.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* <FloatingActionButton icon={<PlusIcon />} label="New item" onClick={() => create()} />
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function FloatingActionButton(props: FloatingActionButtonProps): JSX.Element;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface HighlightProps {
|
|
3
|
+
/** Full text to render. */
|
|
4
|
+
text: string;
|
|
5
|
+
/** Substring to highlight; every case-insensitive occurrence is marked. */
|
|
6
|
+
query: string;
|
|
7
|
+
class?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Highlights every case-insensitive occurrence of `query` within `text`.
|
|
11
|
+
* When `query` is empty the text renders unchanged.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* <Highlight text="Sonora Precision" query="prec" />
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare function Highlight(props: HighlightProps): JSX.Element;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface ImageProps {
|
|
3
|
+
src: string;
|
|
4
|
+
alt: string;
|
|
5
|
+
class?: string;
|
|
6
|
+
/** When true, clicking the image opens a zoomable lightbox. @default true */
|
|
7
|
+
preview?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Lazy-loaded content image. Unless `preview` is disabled, the thumbnail is a
|
|
11
|
+
* zoom-in button that opens a centered lightbox (dimmed overlay + close button)
|
|
12
|
+
* on Kobalte's `Dialog` primitive.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <Image src="/photo.jpg" alt="A scenic view" />
|
|
17
|
+
* <Image src="/logo.svg" alt="Logo" preview={false} />
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function Image(props: ImageProps): JSX.Element;
|
package/dist/ui/Kbd.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { JSX, ParentProps } from 'solid-js';
|
|
2
|
+
interface KbdProps extends ParentProps {
|
|
3
|
+
class?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Keycap-styled indicator for a keyboard key or shortcut token.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```tsx
|
|
10
|
+
* <Kbd>⌘</Kbd><Kbd>K</Kbd>
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function Kbd(props: KbdProps): JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
/** A single row in a {@link List}. */
|
|
3
|
+
export interface ListItem {
|
|
4
|
+
title: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
avatar?: JSX.Element;
|
|
7
|
+
meta?: JSX.Element;
|
|
8
|
+
actions?: JSX.Element;
|
|
9
|
+
}
|
|
10
|
+
interface ListProps {
|
|
11
|
+
items: ListItem[];
|
|
12
|
+
class?: string;
|
|
13
|
+
}
|
|
14
|
+
export type { ListProps };
|
|
15
|
+
/**
|
|
16
|
+
* Vertical list of rows inside a rounded, bordered container with divider
|
|
17
|
+
* lines between items. Each item shows an optional leading `avatar`, a
|
|
18
|
+
* `title` with optional `description`, and an optional trailing `meta` /
|
|
19
|
+
* `actions` slot.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* <List
|
|
24
|
+
* items={[
|
|
25
|
+
* {
|
|
26
|
+
* title: 'Alfredo Rivera',
|
|
27
|
+
* description: 'Owner',
|
|
28
|
+
* avatar: <Avatar name="Alfredo" />,
|
|
29
|
+
* meta: <span>2h ago</span>,
|
|
30
|
+
* actions: <Button size="sm">Edit</Button>,
|
|
31
|
+
* },
|
|
32
|
+
* ]}
|
|
33
|
+
* />
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function List(props: ListProps): JSX.Element;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { JSX, ParentProps } from 'solid-js';
|
|
2
|
+
interface MarqueeProps extends ParentProps {
|
|
3
|
+
/** Seconds for one full loop of the track. Lower is faster. Defaults to `20`. */
|
|
4
|
+
speed?: number;
|
|
5
|
+
/** Pause the scroll while the pointer hovers the strip. Defaults to `true`. */
|
|
6
|
+
pauseOnHover?: boolean;
|
|
7
|
+
class?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* A horizontally scrolling strip that loops its children seamlessly. The
|
|
11
|
+
* children are rendered twice inside a flex track; when the first copy has
|
|
12
|
+
* scrolled fully out of view the second copy sits exactly where the first
|
|
13
|
+
* began, so the animation restarts with no visible seam. Honors reduced
|
|
14
|
+
* motion (the track sits still) and, by default, pauses on hover.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* <Marquee speed={30}>
|
|
19
|
+
* <span class="mx-4">A4ui</span>
|
|
20
|
+
* <span class="mx-4">SolidJS</span>
|
|
21
|
+
* <span class="mx-4">Tailwind</span>
|
|
22
|
+
* </Marquee>
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function Marquee(props: MarqueeProps): JSX.Element;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface RatingProps {
|
|
3
|
+
/** Currently selected rating, from 0 to `max`. */
|
|
4
|
+
value: number;
|
|
5
|
+
/** Called with the new rating when a star is clicked or set via keyboard. */
|
|
6
|
+
onChange?: (value: number) => void;
|
|
7
|
+
/** Number of stars to render. Default: 5. */
|
|
8
|
+
max?: number;
|
|
9
|
+
/** Render a non-interactive, display-only rating. Default: false. */
|
|
10
|
+
readonly?: boolean;
|
|
11
|
+
class?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Star rating control. In interactive mode each star is a button: click or use
|
|
15
|
+
* the Left/Right arrow keys to set the rating, and hovering previews it. In
|
|
16
|
+
* `readonly` mode it renders as a static, labelled row of stars.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```tsx
|
|
20
|
+
* <Rating value={rating()} onChange={setRating} max={5} />
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function Rating(props: RatingProps): JSX.Element;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
/** Semantic status of a {@link Result}; drives the icon, tint, and optional HTTP number. */
|
|
3
|
+
export type ResultStatus = 'success' | 'error' | 'info' | 'warning' | '404' | '500';
|
|
4
|
+
export interface ResultProps {
|
|
5
|
+
/** Result status; drives the icon and color. Defaults to `'info'`. */
|
|
6
|
+
status?: ResultStatus;
|
|
7
|
+
/** Bold headline describing the outcome. */
|
|
8
|
+
title: string;
|
|
9
|
+
/** Optional supporting line under the title. */
|
|
10
|
+
description?: string;
|
|
11
|
+
/** Optional action slot (e.g. Buttons) rendered below the text. */
|
|
12
|
+
actions?: JSX.Element;
|
|
13
|
+
class?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Full-status result screen — a large status icon in a tinted circle, a title,
|
|
17
|
+
* optional description, and an optional actions slot — for terminal states such
|
|
18
|
+
* as success/error confirmations or HTTP 404/500 pages. For `'404'`/`'500'` the
|
|
19
|
+
* big HTTP number is shown above the icon.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* <Result
|
|
24
|
+
* status="success"
|
|
25
|
+
* title="Payment complete"
|
|
26
|
+
* description="A receipt has been sent to your email."
|
|
27
|
+
* actions={<Button>Back to dashboard</Button>}
|
|
28
|
+
* />
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function Result(props: ResultProps): JSX.Element;
|