@a4ui/core 0.4.3 → 0.6.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 (43) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts +38 -2
  3. package/dist/index.js +3262 -1130
  4. package/dist/layout/ChristmasBackground.d.ts +8 -0
  5. package/dist/layout/SnowScenery.d.ts +7 -0
  6. package/dist/styles.css +99 -0
  7. package/dist/themes/index.d.ts +1 -1
  8. package/dist/themes/palettes.d.ts +2 -0
  9. package/dist/ui/Affix.d.ts +21 -0
  10. package/dist/ui/Anchor.d.ts +28 -0
  11. package/dist/ui/AvatarGroup.d.ts +29 -0
  12. package/dist/ui/BackToTop.d.ts +17 -0
  13. package/dist/ui/BottomNavigation.d.ts +33 -0
  14. package/dist/ui/Calendar.d.ts +21 -0
  15. package/dist/ui/Carousel.d.ts +23 -0
  16. package/dist/ui/Cascader.d.ts +38 -0
  17. package/dist/ui/Collapse.d.ts +24 -0
  18. package/dist/ui/Command.d.ts +40 -0
  19. package/dist/ui/Countdown.d.ts +19 -0
  20. package/dist/ui/DataGrid.d.ts +40 -0
  21. package/dist/ui/Descriptions.d.ts +28 -0
  22. package/dist/ui/Empty.d.ts +27 -0
  23. package/dist/ui/FloatingActionButton.d.ts +22 -0
  24. package/dist/ui/Highlight.d.ts +18 -0
  25. package/dist/ui/Image.d.ts +20 -0
  26. package/dist/ui/Kbd.d.ts +14 -0
  27. package/dist/ui/List.d.ts +36 -0
  28. package/dist/ui/Marquee.d.ts +26 -0
  29. package/dist/ui/Mentions.d.ts +37 -0
  30. package/dist/ui/NotificationCenter.d.ts +32 -0
  31. package/dist/ui/Rating.d.ts +23 -0
  32. package/dist/ui/Result.d.ts +31 -0
  33. package/dist/ui/RingProgress.d.ts +23 -0
  34. package/dist/ui/SpeedDial.d.ts +29 -0
  35. package/dist/ui/Splitter.d.ts +32 -0
  36. package/dist/ui/Stepper.d.ts +38 -0
  37. package/dist/ui/TagInput.d.ts +22 -0
  38. package/dist/ui/Timeline.d.ts +36 -0
  39. package/dist/ui/Tour.d.ts +35 -0
  40. package/dist/ui/Transfer.d.ts +35 -0
  41. package/dist/ui/Tree.d.ts +41 -0
  42. package/dist/ui/TreeSelect.d.ts +40 -0
  43. 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
+ }
@@ -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,38 @@
1
+ import { JSX } from 'solid-js';
2
+ /** A node in a {@link Cascader} tree. `children` makes it a branch column. */
3
+ export interface CascaderOption {
4
+ value: string;
5
+ label: string;
6
+ children?: CascaderOption[];
7
+ }
8
+ export interface CascaderProps {
9
+ options: CascaderOption[];
10
+ /** The currently selected value-path (root → leaf). */
11
+ value?: string[];
12
+ /** Fired when a leaf is chosen, with the full value-path and label-path. */
13
+ onChange: (path: string[], labels: string[]) => void;
14
+ placeholder?: string;
15
+ class?: string;
16
+ }
17
+ /**
18
+ * Cascading multi-level select. Renders a Select-styled trigger showing the
19
+ * selected path (labels joined with " / "); clicking opens a floating panel of
20
+ * side-by-side columns. Hovering an option with children reveals the next
21
+ * column; clicking a leaf commits the selection and closes the panel.
22
+ *
23
+ * @example
24
+ * ```tsx
25
+ * <Cascader
26
+ * options={[
27
+ * { value: 'mx', label: 'Mexico', children: [
28
+ * { value: 'son', label: 'Sonora' },
29
+ * { value: 'jal', label: 'Jalisco' },
30
+ * ] },
31
+ * ]}
32
+ * value={path()}
33
+ * onChange={(p, labels) => { setPath(p); console.log(labels.join(' / ')) }}
34
+ * placeholder="Select a region"
35
+ * />
36
+ * ```
37
+ */
38
+ export declare function Cascader(props: CascaderProps): 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,40 @@
1
+ import { JSX } from 'solid-js';
2
+ /** A single column definition for {@link DataGrid}. */
3
+ export interface DataGridColumn {
4
+ /** Row property this column reads (also used as the sort key). */
5
+ key: string;
6
+ /** Column heading text. */
7
+ header: string;
8
+ /** When true, the header becomes a button that cycles asc → desc → none. */
9
+ sortable?: boolean;
10
+ /** Custom cell renderer; falls back to `String(row[key])` when omitted. */
11
+ render?: (row: Record<string, unknown>) => JSX.Element;
12
+ }
13
+ /** Props for {@link DataGrid}. */
14
+ export interface DataGridProps {
15
+ columns: DataGridColumn[];
16
+ rows: Record<string, unknown>[];
17
+ /** Rows per page. Defaults to 10. */
18
+ pageSize?: number;
19
+ /** Show the global text filter above the table. Defaults to true. */
20
+ filterable?: boolean;
21
+ class?: string;
22
+ }
23
+ /**
24
+ * Sortable + filterable table. Provide `columns` and `rows`; the grid handles
25
+ * global text filtering, per-column sorting (click a sortable header to cycle
26
+ * ascending → descending → unsorted), and pagination on its own.
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * <DataGrid
31
+ * columns={[
32
+ * { key: 'name', header: 'Name', sortable: true },
33
+ * { key: 'age', header: 'Age', sortable: true },
34
+ * ]}
35
+ * rows={[{ name: 'Alfredo', age: 30 }, { name: 'Sonora', age: 12 }]}
36
+ * pageSize={25}
37
+ * />
38
+ * ```
39
+ */
40
+ export declare function DataGrid(props: DataGridProps): 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;
@@ -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;