@a4ui/core 0.5.0 → 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.
- package/dist/index.d.ts +7 -1
- package/dist/index.js +2239 -1594
- package/dist/ui/Cascader.d.ts +38 -0
- package/dist/ui/DataGrid.d.ts +40 -0
- package/dist/ui/Mentions.d.ts +37 -0
- package/dist/ui/NotificationCenter.d.ts +32 -0
- package/dist/ui/Tour.d.ts +35 -0
- package/dist/ui/TreeSelect.d.ts +40 -0
- package/package.json +1 -1
|
@@ -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,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,37 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export interface MentionOption {
|
|
3
|
+
value: string;
|
|
4
|
+
label: string;
|
|
5
|
+
}
|
|
6
|
+
export interface MentionsProps {
|
|
7
|
+
value: string;
|
|
8
|
+
/** Called with the new string value on every input (not the raw DOM event). */
|
|
9
|
+
onChange: (value: string) => void;
|
|
10
|
+
/** Options offered while typing an `@mention`. */
|
|
11
|
+
options: MentionOption[];
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
class?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Controlled multi-line text field that shows an autocomplete dropdown while
|
|
17
|
+
* the user types an `@mention`. On each input, the text before the caret is
|
|
18
|
+
* checked for a trailing `@query`; matching {@link MentionOption}s (by `label`
|
|
19
|
+
* or `value`, case-insensitive) are offered in a panel. Selecting one replaces
|
|
20
|
+
* the `@query` with `@{label} `. Arrow keys move the highlight, Enter accepts,
|
|
21
|
+
* Escape dismisses.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* const [body, setBody] = createSignal('')
|
|
26
|
+
* <Mentions
|
|
27
|
+
* value={body()}
|
|
28
|
+
* onChange={setBody}
|
|
29
|
+
* options={[
|
|
30
|
+
* { value: 'ada', label: 'Ada Lovelace' },
|
|
31
|
+
* { value: 'alan', label: 'Alan Turing' },
|
|
32
|
+
* ]}
|
|
33
|
+
* placeholder="Write a note, use @ to mention someone"
|
|
34
|
+
* />
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function Mentions(props: MentionsProps): JSX.Element;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
/** A single entry rendered by {@link NotificationCenter}. */
|
|
3
|
+
export interface NotificationItem {
|
|
4
|
+
id: string;
|
|
5
|
+
title: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
time?: string;
|
|
8
|
+
read?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface NotificationCenterProps {
|
|
11
|
+
/** Notifications to display, newest first. */
|
|
12
|
+
items: NotificationItem[];
|
|
13
|
+
/** Called with an item's id when its dismiss button is clicked. */
|
|
14
|
+
onDismiss?: (id: string) => void;
|
|
15
|
+
/** Called when the "Mark all read" action is clicked. */
|
|
16
|
+
onMarkAllRead?: () => void;
|
|
17
|
+
class?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Bell button that opens a popover listing notifications, with an unread count
|
|
21
|
+
* badge, per-item dismiss, and a "mark all read" action. Built on {@link Popover}.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* <NotificationCenter
|
|
26
|
+
* items={items}
|
|
27
|
+
* onDismiss={(id) => remove(id)}
|
|
28
|
+
* onMarkAllRead={() => markAll()}
|
|
29
|
+
* />
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare function NotificationCenter(props: NotificationCenterProps): JSX.Element;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
/** A single stop in a {@link Tour}. */
|
|
3
|
+
export interface TourStep {
|
|
4
|
+
/** CSS selector for the element to highlight. */
|
|
5
|
+
target: string;
|
|
6
|
+
title: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface TourProps {
|
|
10
|
+
steps: TourStep[];
|
|
11
|
+
open: boolean;
|
|
12
|
+
onOpenChange: (open: boolean) => void;
|
|
13
|
+
/** Called after the last step's "Done" (in addition to `onOpenChange(false)`). */
|
|
14
|
+
onFinish?: () => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Guided coachmark tour: walks the user through a sequence of on-page targets,
|
|
18
|
+
* spotlighting each one and explaining it in a floating tooltip. Theme-agnostic —
|
|
19
|
+
* the dimmer uses `--background` so it adapts to light/dark automatically.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* const [open, setOpen] = createSignal(false)
|
|
24
|
+
* <Tour
|
|
25
|
+
* open={open()}
|
|
26
|
+
* onOpenChange={setOpen}
|
|
27
|
+
* onFinish={() => markTourSeen()}
|
|
28
|
+
* steps={[
|
|
29
|
+
* { target: '#new-btn', title: 'Create', description: 'Start a new record here.' },
|
|
30
|
+
* { target: '#search', title: 'Search', description: 'Find anything fast.' },
|
|
31
|
+
* ]}
|
|
32
|
+
* />
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function Tour(props: TourProps): JSX.Element;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
import { TreeNode } from './Tree';
|
|
3
|
+
export interface TreeSelectProps {
|
|
4
|
+
/** Hierarchical options; the same shape consumed by {@link Tree}. */
|
|
5
|
+
nodes: TreeNode[];
|
|
6
|
+
/** Id of the currently selected leaf node. */
|
|
7
|
+
value?: string;
|
|
8
|
+
/** Fired when a leaf is picked, with its id and the node itself. */
|
|
9
|
+
onChange: (value: string, node: TreeNode) => void;
|
|
10
|
+
/** Text shown when no value is selected. */
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
class?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A dropdown that pairs a {@link Select}-styled trigger with a {@link Tree} in a
|
|
16
|
+
* popover panel. Clicking a branch toggles its subtree; clicking a leaf calls
|
|
17
|
+
* `onChange` and closes the panel. The trigger shows the selected leaf's label
|
|
18
|
+
* (found by walking `nodes`) or a muted `placeholder`. Closes on outside click.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```tsx
|
|
22
|
+
* const [dept, setDept] = createSignal<string>()
|
|
23
|
+
* <TreeSelect
|
|
24
|
+
* placeholder="Pick a team"
|
|
25
|
+
* value={dept()}
|
|
26
|
+
* onChange={(id) => setDept(id)}
|
|
27
|
+
* nodes={[
|
|
28
|
+
* {
|
|
29
|
+
* id: 'eng',
|
|
30
|
+
* label: 'Engineering',
|
|
31
|
+
* children: [
|
|
32
|
+
* { id: 'fe', label: 'Frontend' },
|
|
33
|
+
* { id: 'be', label: 'Backend' },
|
|
34
|
+
* ],
|
|
35
|
+
* },
|
|
36
|
+
* ]}
|
|
37
|
+
* />
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare function TreeSelect(props: TreeSelectProps): JSX.Element;
|
package/package.json
CHANGED