@furcrer/fullstack-components 0.1.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 +328 -0
- package/dist/index.js +2067 -0
- package/dist/styles.css +1 -0
- package/dist/types/components/containers/Grid/Grid.d.ts +7 -0
- package/dist/types/components/containers/Grid/Grid.fixture.d.ts +2 -0
- package/dist/types/components/containers/Grid/index.d.ts +2 -0
- package/dist/types/components/containers/Stack/Stack.d.ts +7 -0
- package/dist/types/components/containers/Stack/Stack.fixture.d.ts +2 -0
- package/dist/types/components/containers/Stack/index.d.ts +2 -0
- package/dist/types/components/data/CrudExample/CrudExample.d.ts +4 -0
- package/dist/types/components/data/CrudExample/CrudExample.preview.d.ts +2 -0
- package/dist/types/components/data/CrudExample/index.d.ts +2 -0
- package/dist/types/components/data/ResourceTable/ResourceTable.d.ts +12 -0
- package/dist/types/components/data/ResourceTable/ResourceTable.preview.d.ts +2 -0
- package/dist/types/components/data/ResourceTable/index.d.ts +2 -0
- package/dist/types/components/forms/ColorInput/ColorInput.d.ts +5 -0
- package/dist/types/components/forms/ColorInput/ColorInput.fixture.d.ts +2 -0
- package/dist/types/components/forms/ColorInput/index.d.ts +2 -0
- package/dist/types/components/forms/DateInput/DateInput.d.ts +5 -0
- package/dist/types/components/forms/DateInput/DateInput.fixture.d.ts +2 -0
- package/dist/types/components/forms/DateInput/index.d.ts +2 -0
- package/dist/types/components/forms/FileInput/FileInput.d.ts +4 -0
- package/dist/types/components/forms/FileInput/FileInput.fixture.d.ts +2 -0
- package/dist/types/components/forms/FileInput/index.d.ts +2 -0
- package/dist/types/components/forms/NumberInput/NumberInput.d.ts +4 -0
- package/dist/types/components/forms/NumberInput/NumberInput.fixture.d.ts +2 -0
- package/dist/types/components/forms/NumberInput/index.d.ts +2 -0
- package/dist/types/components/forms/PasswordInput/PasswordInput.d.ts +4 -0
- package/dist/types/components/forms/PasswordInput/PasswordInput.fixture.d.ts +2 -0
- package/dist/types/components/forms/PasswordInput/index.d.ts +2 -0
- package/dist/types/components/forms/RadioGroup/RadioGroup.d.ts +13 -0
- package/dist/types/components/forms/RadioGroup/RadioGroup.fixture.d.ts +2 -0
- package/dist/types/components/forms/RadioGroup/index.d.ts +2 -0
- package/dist/types/components/forms/SearchInput/SearchInput.d.ts +4 -0
- package/dist/types/components/forms/SearchInput/SearchInput.fixture.d.ts +2 -0
- package/dist/types/components/forms/SearchInput/index.d.ts +2 -0
- package/dist/types/components/forms/Slider/Slider.d.ts +5 -0
- package/dist/types/components/forms/Slider/Slider.fixture.d.ts +2 -0
- package/dist/types/components/forms/Slider/index.d.ts +2 -0
- package/dist/types/components/primitives/Accordion/Accordion.d.ts +10 -0
- package/dist/types/components/primitives/Accordion/Accordion.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Accordion/index.d.ts +2 -0
- package/dist/types/components/primitives/Alert/Alert.d.ts +6 -0
- package/dist/types/components/primitives/Alert/Alert.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Alert/index.d.ts +2 -0
- package/dist/types/components/primitives/Avatar/Avatar.d.ts +8 -0
- package/dist/types/components/primitives/Avatar/Avatar.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Avatar/index.d.ts +2 -0
- package/dist/types/components/primitives/Badge/Badge.d.ts +3 -0
- package/dist/types/components/primitives/Badge/Badge.fixture.d.ts +3 -0
- package/dist/types/components/primitives/Badge/Badge.types.d.ts +9 -0
- package/dist/types/components/primitives/Badge/index.d.ts +2 -0
- package/dist/types/components/primitives/Button/Button.d.ts +6 -0
- package/dist/types/components/primitives/Button/Button.fixture.d.ts +3 -0
- package/dist/types/components/primitives/Button/Button.types.d.ts +15 -0
- package/dist/types/components/primitives/Button/index.d.ts +2 -0
- package/dist/types/components/primitives/Card/Card.d.ts +3 -0
- package/dist/types/components/primitives/Card/Card.fixture.d.ts +3 -0
- package/dist/types/components/primitives/Card/Card.types.d.ts +9 -0
- package/dist/types/components/primitives/Card/index.d.ts +2 -0
- package/dist/types/components/primitives/Carousel/Carousel.d.ts +7 -0
- package/dist/types/components/primitives/Carousel/Carousel.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Carousel/index.d.ts +2 -0
- package/dist/types/components/primitives/Checkbox/Checkbox.d.ts +3 -0
- package/dist/types/components/primitives/Checkbox/Checkbox.fixture.d.ts +3 -0
- package/dist/types/components/primitives/Checkbox/Checkbox.types.d.ts +5 -0
- package/dist/types/components/primitives/Checkbox/index.d.ts +2 -0
- package/dist/types/components/primitives/Combobox/Combobox.d.ts +14 -0
- package/dist/types/components/primitives/Combobox/Combobox.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Combobox/index.d.ts +2 -0
- package/dist/types/components/primitives/CommandPalette/CommandPalette.d.ts +14 -0
- package/dist/types/components/primitives/CommandPalette/CommandPalette.fixture.d.ts +2 -0
- package/dist/types/components/primitives/CommandPalette/index.d.ts +2 -0
- package/dist/types/components/primitives/ContextMenu/ContextMenu.d.ts +11 -0
- package/dist/types/components/primitives/ContextMenu/ContextMenu.fixture.d.ts +2 -0
- package/dist/types/components/primitives/ContextMenu/index.d.ts +2 -0
- package/dist/types/components/primitives/DatePicker/DatePicker.d.ts +8 -0
- package/dist/types/components/primitives/DatePicker/DatePicker.fixture.d.ts +2 -0
- package/dist/types/components/primitives/DatePicker/index.d.ts +2 -0
- package/dist/types/components/primitives/Drawer/Drawer.d.ts +9 -0
- package/dist/types/components/primitives/Drawer/Drawer.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Drawer/index.d.ts +2 -0
- package/dist/types/components/primitives/DropdownMenu/DropdownMenu.d.ts +11 -0
- package/dist/types/components/primitives/DropdownMenu/DropdownMenu.fixture.d.ts +2 -0
- package/dist/types/components/primitives/DropdownMenu/index.d.ts +2 -0
- package/dist/types/components/primitives/EmptyState/EmptyState.d.ts +3 -0
- package/dist/types/components/primitives/EmptyState/EmptyState.fixture.d.ts +3 -0
- package/dist/types/components/primitives/EmptyState/EmptyState.types.d.ts +9 -0
- package/dist/types/components/primitives/EmptyState/index.d.ts +2 -0
- package/dist/types/components/primitives/ErrorState/ErrorState.d.ts +3 -0
- package/dist/types/components/primitives/ErrorState/ErrorState.fixture.d.ts +3 -0
- package/dist/types/components/primitives/ErrorState/ErrorState.types.d.ts +9 -0
- package/dist/types/components/primitives/ErrorState/index.d.ts +2 -0
- package/dist/types/components/primitives/FileUpload/FileUpload.d.ts +8 -0
- package/dist/types/components/primitives/FileUpload/FileUpload.fixture.d.ts +2 -0
- package/dist/types/components/primitives/FileUpload/index.d.ts +2 -0
- package/dist/types/components/primitives/FormField/FormField.d.ts +3 -0
- package/dist/types/components/primitives/FormField/FormField.fixture.d.ts +3 -0
- package/dist/types/components/primitives/FormField/FormField.types.d.ts +11 -0
- package/dist/types/components/primitives/FormField/index.d.ts +2 -0
- package/dist/types/components/primitives/Heading/Heading.d.ts +6 -0
- package/dist/types/components/primitives/Heading/Heading.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Heading/index.d.ts +2 -0
- package/dist/types/components/primitives/IconButton/IconButton.d.ts +3 -0
- package/dist/types/components/primitives/IconButton/IconButton.fixture.d.ts +3 -0
- package/dist/types/components/primitives/IconButton/IconButton.types.d.ts +13 -0
- package/dist/types/components/primitives/IconButton/index.d.ts +2 -0
- package/dist/types/components/primitives/Input/Input.d.ts +3 -0
- package/dist/types/components/primitives/Input/Input.fixture.d.ts +3 -0
- package/dist/types/components/primitives/Input/Input.types.d.ts +5 -0
- package/dist/types/components/primitives/Input/index.d.ts +2 -0
- package/dist/types/components/primitives/Label/Label.d.ts +3 -0
- package/dist/types/components/primitives/Label/Label.fixture.d.ts +3 -0
- package/dist/types/components/primitives/Label/Label.types.d.ts +7 -0
- package/dist/types/components/primitives/Label/index.d.ts +2 -0
- package/dist/types/components/primitives/Link/Link.d.ts +5 -0
- package/dist/types/components/primitives/Link/Link.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Link/index.d.ts +2 -0
- package/dist/types/components/primitives/LoadingState/LoadingState.d.ts +3 -0
- package/dist/types/components/primitives/LoadingState/LoadingState.fixture.d.ts +3 -0
- package/dist/types/components/primitives/LoadingState/LoadingState.types.d.ts +7 -0
- package/dist/types/components/primitives/LoadingState/index.d.ts +2 -0
- package/dist/types/components/primitives/Menubar/Menubar.d.ts +9 -0
- package/dist/types/components/primitives/Menubar/Menubar.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Menubar/index.d.ts +2 -0
- package/dist/types/components/primitives/Modal/Modal.d.ts +3 -0
- package/dist/types/components/primitives/Modal/Modal.fixture.d.ts +3 -0
- package/dist/types/components/primitives/Modal/Modal.types.d.ts +13 -0
- package/dist/types/components/primitives/Modal/index.d.ts +2 -0
- package/dist/types/components/primitives/MultiSelect/MultiSelect.d.ts +13 -0
- package/dist/types/components/primitives/MultiSelect/MultiSelect.fixture.d.ts +2 -0
- package/dist/types/components/primitives/MultiSelect/index.d.ts +2 -0
- package/dist/types/components/primitives/NavigationMenu/NavigationMenu.d.ts +10 -0
- package/dist/types/components/primitives/NavigationMenu/NavigationMenu.fixture.d.ts +2 -0
- package/dist/types/components/primitives/NavigationMenu/index.d.ts +2 -0
- package/dist/types/components/primitives/Pagination/Pagination.d.ts +7 -0
- package/dist/types/components/primitives/Pagination/Pagination.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Pagination/index.d.ts +2 -0
- package/dist/types/components/primitives/Popover/Popover.d.ts +8 -0
- package/dist/types/components/primitives/Popover/Popover.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Popover/index.d.ts +2 -0
- package/dist/types/components/primitives/Progress/Progress.d.ts +7 -0
- package/dist/types/components/primitives/Progress/Progress.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Progress/index.d.ts +2 -0
- package/dist/types/components/primitives/Radio/Radio.d.ts +3 -0
- package/dist/types/components/primitives/Radio/Radio.fixture.d.ts +3 -0
- package/dist/types/components/primitives/Radio/Radio.types.d.ts +5 -0
- package/dist/types/components/primitives/Radio/index.d.ts +2 -0
- package/dist/types/components/primitives/ResizablePanel/ResizablePanel.d.ts +8 -0
- package/dist/types/components/primitives/ResizablePanel/ResizablePanel.fixture.d.ts +2 -0
- package/dist/types/components/primitives/ResizablePanel/index.d.ts +2 -0
- package/dist/types/components/primitives/SearchBar/SearchBar.d.ts +5 -0
- package/dist/types/components/primitives/SearchBar/SearchBar.fixture.d.ts +2 -0
- package/dist/types/components/primitives/SearchBar/index.d.ts +2 -0
- package/dist/types/components/primitives/Select/Select.d.ts +3 -0
- package/dist/types/components/primitives/Select/Select.fixture.d.ts +3 -0
- package/dist/types/components/primitives/Select/Select.types.d.ts +15 -0
- package/dist/types/components/primitives/Select/index.d.ts +2 -0
- package/dist/types/components/primitives/Separator/Separator.d.ts +5 -0
- package/dist/types/components/primitives/Separator/Separator.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Separator/index.d.ts +2 -0
- package/dist/types/components/primitives/Sidebar/Sidebar.d.ts +7 -0
- package/dist/types/components/primitives/Sidebar/Sidebar.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Sidebar/index.d.ts +2 -0
- package/dist/types/components/primitives/Skeleton/Skeleton.d.ts +7 -0
- package/dist/types/components/primitives/Skeleton/Skeleton.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Skeleton/index.d.ts +2 -0
- package/dist/types/components/primitives/Spinner/Spinner.d.ts +6 -0
- package/dist/types/components/primitives/Spinner/Spinner.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Spinner/index.d.ts +2 -0
- package/dist/types/components/primitives/StatCard/StatCard.d.ts +3 -0
- package/dist/types/components/primitives/StatCard/StatCard.fixture.d.ts +3 -0
- package/dist/types/components/primitives/StatCard/StatCard.preview.d.ts +3 -0
- package/dist/types/components/primitives/StatCard/StatCard.types.d.ts +13 -0
- package/dist/types/components/primitives/StatCard/index.d.ts +2 -0
- package/dist/types/components/primitives/Stepper/Stepper.d.ts +13 -0
- package/dist/types/components/primitives/Stepper/Stepper.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Stepper/index.d.ts +2 -0
- package/dist/types/components/primitives/Switch/Switch.d.ts +3 -0
- package/dist/types/components/primitives/Switch/Switch.fixture.d.ts +3 -0
- package/dist/types/components/primitives/Switch/Switch.types.d.ts +5 -0
- package/dist/types/components/primitives/Switch/index.d.ts +2 -0
- package/dist/types/components/primitives/Tabs/Tabs.d.ts +14 -0
- package/dist/types/components/primitives/Tabs/Tabs.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Tabs/index.d.ts +2 -0
- package/dist/types/components/primitives/Text/Text.d.ts +6 -0
- package/dist/types/components/primitives/Text/Text.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Text/index.d.ts +2 -0
- package/dist/types/components/primitives/Textarea/Textarea.d.ts +3 -0
- package/dist/types/components/primitives/Textarea/Textarea.fixture.d.ts +3 -0
- package/dist/types/components/primitives/Textarea/Textarea.types.d.ts +7 -0
- package/dist/types/components/primitives/Textarea/index.d.ts +2 -0
- package/dist/types/components/primitives/Toast/Toast.d.ts +8 -0
- package/dist/types/components/primitives/Toast/Toast.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Toast/index.d.ts +2 -0
- package/dist/types/components/primitives/Tooltip/Tooltip.d.ts +6 -0
- package/dist/types/components/primitives/Tooltip/Tooltip.fixture.d.ts +2 -0
- package/dist/types/components/primitives/Tooltip/index.d.ts +2 -0
- package/dist/types/components/primitives/TreeView/TreeView.d.ts +12 -0
- package/dist/types/components/primitives/TreeView/TreeView.fixture.d.ts +2 -0
- package/dist/types/components/primitives/TreeView/index.d.ts +2 -0
- package/dist/types/data/Table.d.ts +13 -0
- package/dist/types/data/Table.fixture.d.ts +2 -0
- package/dist/types/data/api.d.ts +25 -0
- package/dist/types/data/crud.d.ts +20 -0
- package/dist/types/data/index.d.ts +9 -0
- package/dist/types/data/react-crud.d.ts +6 -0
- package/dist/types/data/react-table.d.ts +6 -0
- package/dist/types/data/resource-controller.d.ts +28 -0
- package/dist/types/data/resource-controller.test.d.ts +1 -0
- package/dist/types/data/resource.d.ts +2 -0
- package/dist/types/data/table-controller.d.ts +28 -0
- package/dist/types/data/types.d.ts +36 -0
- package/dist/types/forms/FormActions.d.ts +4 -0
- package/dist/types/forms/FormActions.fixture.d.ts +3 -0
- package/dist/types/forms/FormField.d.ts +8 -0
- package/dist/types/forms/FormField.fixture.d.ts +2 -0
- package/dist/types/forms/adapters.d.ts +19 -0
- package/dist/types/forms/adapters.fixture.d.ts +2 -0
- package/dist/types/forms/field.d.ts +16 -0
- package/dist/types/forms/form-store.d.ts +8 -0
- package/dist/types/forms/index.d.ts +10 -0
- package/dist/types/forms/react-field.d.ts +7 -0
- package/dist/types/forms/react-form.d.ts +10 -0
- package/dist/types/forms/react-form.fixture.d.ts +2 -0
- package/dist/types/forms/react.d.ts +16 -0
- package/dist/types/forms/react.fixture.d.ts +2 -0
- package/dist/types/forms/resource-form.d.ts +13 -0
- package/dist/types/forms/types.d.ts +25 -0
- package/dist/types/generated/component-registry.d.ts +2238 -0
- package/dist/types/generated/public-exports.d.ts +123 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/theme/index.d.ts +4 -0
- package/dist/types/theme/provider.d.ts +20 -0
- package/dist/types/theme/theme.d.ts +47 -0
- package/dist/types/theme/theme.test.d.ts +1 -0
- package/dist/types/tokens/index.d.ts +1 -0
- package/dist/types/tokens/tokens.d.ts +55 -0
- package/dist/types/tooling/discovery/discover.d.ts +9 -0
- package/dist/types/tooling/discovery/discover.test.d.ts +1 -0
- package/dist/types/tooling/discovery/generate-exports.d.ts +6 -0
- package/dist/types/tooling/discovery/generate-registry.d.ts +6 -0
- package/dist/types/tooling/discovery/generate-registry.test.d.ts +1 -0
- package/dist/types/tooling/discovery/generate.d.ts +1 -0
- package/dist/types/tooling/discovery/vite-plugin.d.ts +8 -0
- package/dist/types/types/component.d.ts +12 -0
- package/dist/types/types/index.d.ts +2 -0
- package/dist/types/types/metadata.d.ts +48 -0
- package/package.json +56 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { TextareaHTMLAttributes } from "react";
|
|
2
|
+
export type TextareaProps = Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "rows"> & {
|
|
3
|
+
/** Visual size of the textarea. */
|
|
4
|
+
size?: "small" | "medium" | "large";
|
|
5
|
+
/** Preferred number of visible text rows. */
|
|
6
|
+
rows?: number;
|
|
7
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface ToastProps {
|
|
3
|
+
open?: boolean;
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
variant?: "info" | "success" | "warning" | "danger";
|
|
6
|
+
onClose?: () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function Toast({ open, children, variant, onClose }: ToastProps): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export interface TreeNode {
|
|
3
|
+
id: string;
|
|
4
|
+
label: ReactNode;
|
|
5
|
+
children?: TreeNode[];
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface TreeViewProps {
|
|
9
|
+
nodes: TreeNode[];
|
|
10
|
+
onSelect?: (id: string) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function TreeView({ nodes, onSelect }: TreeViewProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactNode, TableHTMLAttributes } from "react";
|
|
2
|
+
import type { DataRecord, TableColumn } from "./types.js";
|
|
3
|
+
export interface TableProps<TData extends DataRecord = DataRecord> extends Omit<TableHTMLAttributes<HTMLTableElement>, "children"> {
|
|
4
|
+
/** Rows rendered by the table. */
|
|
5
|
+
data: TData[];
|
|
6
|
+
/** Column definitions used to render headers and cells. */
|
|
7
|
+
columns: TableColumn<TData>[];
|
|
8
|
+
/** Content rendered when the table has no rows. */
|
|
9
|
+
emptyState?: ReactNode;
|
|
10
|
+
/** Optional accessible table caption. */
|
|
11
|
+
caption?: ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export declare function Table<TData extends DataRecord>({ data, columns, emptyState, caption, ...props }: TableProps<TData>): import("react").JSX.Element;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Resource } from "./types.js";
|
|
2
|
+
export interface ApiErrorPayload {
|
|
3
|
+
message?: string;
|
|
4
|
+
code?: string;
|
|
5
|
+
details?: unknown;
|
|
6
|
+
}
|
|
7
|
+
export declare class ApiError extends Error {
|
|
8
|
+
readonly status: number;
|
|
9
|
+
readonly code?: string;
|
|
10
|
+
readonly details?: unknown;
|
|
11
|
+
constructor(status: number, payload?: ApiErrorPayload);
|
|
12
|
+
}
|
|
13
|
+
export interface ApiClient {
|
|
14
|
+
request<TResponse>(path: string, init?: RequestInit): Promise<TResponse>;
|
|
15
|
+
get<TResponse>(path: string, query?: Record<string, unknown>): Promise<TResponse>;
|
|
16
|
+
post<TResponse>(path: string, body?: unknown): Promise<TResponse>;
|
|
17
|
+
patch<TResponse>(path: string, body?: unknown): Promise<TResponse>;
|
|
18
|
+
delete<TResponse = void>(path: string): Promise<TResponse>;
|
|
19
|
+
}
|
|
20
|
+
export declare function createFetchApiClient(baseUrl?: string): ApiClient;
|
|
21
|
+
export interface ApiResourceOptions {
|
|
22
|
+
path: string;
|
|
23
|
+
client: ApiClient;
|
|
24
|
+
}
|
|
25
|
+
export declare function createApiResource<TData extends Record<string, unknown>, TId = string>(options: ApiResourceOptions): Resource<TData, TId>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DataRecord, Resource } from "./types.js";
|
|
2
|
+
export type CrudStatus = "idle" | "loading" | "success" | "error";
|
|
3
|
+
export interface CrudState<TData extends DataRecord = DataRecord> {
|
|
4
|
+
status: CrudStatus;
|
|
5
|
+
data?: TData;
|
|
6
|
+
error: Error | null;
|
|
7
|
+
}
|
|
8
|
+
export interface CrudController<TData extends DataRecord = DataRecord, TId = string> {
|
|
9
|
+
getState(): CrudState<TData>;
|
|
10
|
+
get(id: TId): Promise<TData | undefined>;
|
|
11
|
+
create(data: Partial<TData>): Promise<TData | undefined>;
|
|
12
|
+
update(id: TId, data: Partial<TData>): Promise<TData | undefined>;
|
|
13
|
+
remove(id: TId): Promise<boolean>;
|
|
14
|
+
reset(): void;
|
|
15
|
+
subscribe(listener: () => void): () => void;
|
|
16
|
+
}
|
|
17
|
+
export interface CreateCrudOptions<TData extends DataRecord = DataRecord, TId = string> {
|
|
18
|
+
resource: Resource<TData, TId>;
|
|
19
|
+
}
|
|
20
|
+
export declare function createCrudController<TData extends DataRecord, TId = string>({ resource }: CreateCrudOptions<TData, TId>): CrudController<TData, TId>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./types.js";
|
|
2
|
+
export * from "./resource.js";
|
|
3
|
+
export * from "./resource-controller.js";
|
|
4
|
+
export * from "./table-controller.js";
|
|
5
|
+
export * from "./react-table.js";
|
|
6
|
+
export * from "./Table.js";
|
|
7
|
+
export * from "./api.js";
|
|
8
|
+
export * from "./crud.js";
|
|
9
|
+
export * from "./react-crud.js";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CrudController } from "./crud.js";
|
|
2
|
+
import type { ResourceController } from "./resource-controller.js";
|
|
3
|
+
import type { DataRecord, Resource } from "./types.js";
|
|
4
|
+
export declare function useCrud<TData extends DataRecord, TId = string>(resource: Resource<TData, TId>): CrudController<TData, TId> & ReturnType<CrudController<TData, TId>["getState"]>;
|
|
5
|
+
export type UseResourceCrudResult<TData extends DataRecord, TId = string, TCreate = Partial<TData>, TUpdate = Partial<TData>> = ResourceController<TData, TId, TCreate, TUpdate> & ReturnType<ResourceController<TData, TId, TCreate, TUpdate>["getState"]>;
|
|
6
|
+
export declare function useResourceCrud<TData extends DataRecord, TId = string, TCreate = Partial<TData>, TUpdate = Partial<TData>>(resource: Resource<TData, TId>): UseResourceCrudResult<TData, TId, TCreate, TUpdate>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { CreateTableOptions, TableController, TableState } from "./table-controller.js";
|
|
2
|
+
import type { DataRecord } from "./types.js";
|
|
3
|
+
export declare function useTable<TData extends DataRecord>(options: CreateTableOptions<TData>): {
|
|
4
|
+
controller: TableController<TData>;
|
|
5
|
+
state: TableState<TData>;
|
|
6
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DataRecord, ListQuery, ListResult, Resource } from "./types.js";
|
|
2
|
+
export type ResourceOperation = "idle" | "listing" | "reading" | "creating" | "updating" | "deleting";
|
|
3
|
+
export interface ResourceControllerState<TData extends DataRecord, TId = string> {
|
|
4
|
+
data: TData[];
|
|
5
|
+
total?: number;
|
|
6
|
+
selected?: TData;
|
|
7
|
+
operation: ResourceOperation;
|
|
8
|
+
error?: Error;
|
|
9
|
+
lastQuery?: ListQuery;
|
|
10
|
+
lastUpdated?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface CreateResourceControllerOptions {
|
|
13
|
+
initialQuery?: ListQuery;
|
|
14
|
+
}
|
|
15
|
+
export interface ResourceController<TData extends DataRecord, TId = string, TCreate = Partial<TData>, TUpdate = Partial<TData>> {
|
|
16
|
+
getState(): ResourceControllerState<TData, TId>;
|
|
17
|
+
list(query?: ListQuery): Promise<ListResult<TData>>;
|
|
18
|
+
get(id: TId): Promise<TData>;
|
|
19
|
+
create(input: TCreate): Promise<TData>;
|
|
20
|
+
update(id: TId, input: TUpdate): Promise<TData>;
|
|
21
|
+
remove(id: TId): Promise<void>;
|
|
22
|
+
refresh(): Promise<ListResult<TData>>;
|
|
23
|
+
select(item?: TData): void;
|
|
24
|
+
clearSelection(): void;
|
|
25
|
+
clearError(): void;
|
|
26
|
+
subscribe(listener: () => void): () => void;
|
|
27
|
+
}
|
|
28
|
+
export declare function createResourceController<TData extends DataRecord, TId = string, TCreate = Partial<TData>, TUpdate = Partial<TData>>(resource: Resource<TData, TId>, options?: CreateResourceControllerOptions): ResourceController<TData, TId, TCreate, TUpdate>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DataRecord, ListQuery, Resource, TableColumn } from "./types.js";
|
|
2
|
+
export interface TableState<TData extends DataRecord = DataRecord> {
|
|
3
|
+
data: TData[];
|
|
4
|
+
columns: TableColumn<TData>[];
|
|
5
|
+
loading: boolean;
|
|
6
|
+
error: Error | null;
|
|
7
|
+
page: number;
|
|
8
|
+
pageSize: number;
|
|
9
|
+
total: number | undefined;
|
|
10
|
+
search: string;
|
|
11
|
+
sort: ListQuery["sort"];
|
|
12
|
+
}
|
|
13
|
+
export interface TableController<TData extends DataRecord = DataRecord> {
|
|
14
|
+
getState(): TableState<TData>;
|
|
15
|
+
load(): Promise<void>;
|
|
16
|
+
setSearch(search: string): Promise<void>;
|
|
17
|
+
setPage(page: number): Promise<void>;
|
|
18
|
+
setPageSize(pageSize: number): Promise<void>;
|
|
19
|
+
setSort(field: keyof TData & string): Promise<void>;
|
|
20
|
+
reset(): Promise<void>;
|
|
21
|
+
subscribe(listener: () => void): () => void;
|
|
22
|
+
}
|
|
23
|
+
export interface CreateTableOptions<TData extends DataRecord = DataRecord> {
|
|
24
|
+
resource: Resource<TData>;
|
|
25
|
+
columns?: TableColumn<TData>[];
|
|
26
|
+
pageSize?: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function createTableController<TData extends DataRecord>(options: CreateTableOptions<TData>): TableController<TData>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export type DataRecord = Record<string, unknown>;
|
|
3
|
+
export interface ListQuery {
|
|
4
|
+
page?: number;
|
|
5
|
+
pageSize?: number;
|
|
6
|
+
search?: string;
|
|
7
|
+
sort?: {
|
|
8
|
+
field: string;
|
|
9
|
+
direction: "asc" | "desc";
|
|
10
|
+
};
|
|
11
|
+
filters?: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
export interface ListResult<TData extends DataRecord = DataRecord> {
|
|
14
|
+
data: TData[];
|
|
15
|
+
total?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface Resource<TData extends DataRecord = DataRecord, TId = string> {
|
|
18
|
+
name: string;
|
|
19
|
+
list(query?: ListQuery): Promise<ListResult<TData>>;
|
|
20
|
+
get(id: TId): Promise<TData>;
|
|
21
|
+
create?(data: Partial<TData>): Promise<TData>;
|
|
22
|
+
update?(id: TId, data: Partial<TData>): Promise<TData>;
|
|
23
|
+
delete?(id: TId): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export interface TableColumn<TData extends DataRecord = DataRecord> {
|
|
26
|
+
key: keyof TData & string;
|
|
27
|
+
header?: string;
|
|
28
|
+
sortable?: boolean;
|
|
29
|
+
render?: (value: TData[keyof TData], row: TData) => ReactNode;
|
|
30
|
+
}
|
|
31
|
+
export interface TableConfig<TData extends DataRecord = DataRecord> {
|
|
32
|
+
columns?: TableColumn<TData>[];
|
|
33
|
+
pageSize?: number;
|
|
34
|
+
search?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare function inferTableColumns<TData extends DataRecord>(data: TData[]): TableColumn<TData>[];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ButtonHTMLAttributes } from "react";
|
|
2
|
+
import type { FormValues } from "./types.js";
|
|
3
|
+
export declare function FormSubmit<TValues extends FormValues = FormValues>(props: ButtonHTMLAttributes<HTMLButtonElement>): import("react").JSX.Element;
|
|
4
|
+
export declare function FormReset<TValues extends FormValues = FormValues>(props: ButtonHTMLAttributes<HTMLButtonElement>): import("react").JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ComponentPreviewProps } from "../types/metadata.js";
|
|
2
|
+
export declare function FormSubmitFixture({ props }: ComponentPreviewProps): import("react").JSX.Element;
|
|
3
|
+
export declare function FormResetFixture({ props }: ComponentPreviewProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ComponentPropsWithoutRef, ReactNode } from "react";
|
|
2
|
+
import type { FormValues } from "./types.js";
|
|
3
|
+
import { useField } from "./react-field.js";
|
|
4
|
+
export interface FormFieldProps<TValues extends FormValues, TKey extends keyof TValues> extends Omit<ComponentPropsWithoutRef<"input">, "name" | "value" | "defaultValue" | "onChange" | "onBlur" | "children"> {
|
|
5
|
+
name: TKey;
|
|
6
|
+
children?: (field: ReturnType<typeof useField<TValues, TKey>>) => ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export declare function FormField<TValues extends FormValues, TKey extends keyof TValues>({ name, children, ...inputProps }: FormFieldProps<TValues, TKey>): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ComponentType, ReactNode } from "react";
|
|
2
|
+
import type { FormValues } from "./types.js";
|
|
3
|
+
export interface FieldAdapterProps<TValue> {
|
|
4
|
+
value: TValue;
|
|
5
|
+
onChange: (value: TValue) => void;
|
|
6
|
+
onBlur: () => void;
|
|
7
|
+
error?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface FieldAdapterOptions<TValues extends FormValues, TKey extends keyof TValues> {
|
|
10
|
+
name: TKey;
|
|
11
|
+
render: (props: FieldAdapterProps<TValues[TKey]>) => ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export declare function FormFieldAdapter<TValues extends FormValues, TKey extends keyof TValues>({ name, render }: FieldAdapterOptions<TValues, TKey>): ReactNode;
|
|
14
|
+
export interface BoundFieldProps<TValue> extends FieldAdapterProps<TValue> {
|
|
15
|
+
children?: ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export declare function createFieldAdapter<TValue, TProps extends FieldAdapterProps<TValue>>(Component: ComponentType<TProps>): (props: Omit<TProps, keyof FieldAdapterProps<TValue>> & {
|
|
18
|
+
field: FieldAdapterProps<TValue>;
|
|
19
|
+
}) => import("react").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { FormStore } from "./form-store.js";
|
|
2
|
+
import type { FormValues } from "./types.js";
|
|
3
|
+
export interface FormFieldState<TValue = unknown> {
|
|
4
|
+
value: TValue;
|
|
5
|
+
error?: string;
|
|
6
|
+
touched: boolean;
|
|
7
|
+
dirty: boolean;
|
|
8
|
+
submitting: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface FormFieldController<TValues extends FormValues, TKey extends keyof TValues> {
|
|
11
|
+
name: TKey;
|
|
12
|
+
getState(): FormFieldState<TValues[TKey]>;
|
|
13
|
+
setValue(value: TValues[TKey]): void;
|
|
14
|
+
setTouched(touched?: boolean): void;
|
|
15
|
+
}
|
|
16
|
+
export declare function createFieldController<TValues extends FormValues, TKey extends keyof TValues>(store: FormStore<TValues>, name: TKey): FormFieldController<TValues, TKey>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FormConfig, FormController, FormErrors, FormValues } from "./types.js";
|
|
2
|
+
export interface FormStore<TValues extends FormValues = FormValues> extends FormController<TValues> {
|
|
3
|
+
setValue<TKey extends keyof TValues>(key: TKey, value: TValues[TKey]): void;
|
|
4
|
+
setTouched<TKey extends keyof TValues>(key: TKey, touched?: boolean): void;
|
|
5
|
+
setErrors(errors: FormErrors<TValues>): void;
|
|
6
|
+
subscribe(listener: () => void): () => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function createFormStore<TValues extends FormValues>(config: FormConfig<TValues>): FormStore<TValues>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from "./types.js";
|
|
2
|
+
export * from "./form-store.js";
|
|
3
|
+
export * from "./field.js";
|
|
4
|
+
export * from "./react.js";
|
|
5
|
+
export * from "./react-field.js";
|
|
6
|
+
export * from "./react-form.js";
|
|
7
|
+
export * from "./FormField.js";
|
|
8
|
+
export * from "./FormActions.js";
|
|
9
|
+
export * from "./adapters.js";
|
|
10
|
+
export * from "./resource-form.js";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FormFieldState } from "./field.js";
|
|
2
|
+
import type { FormValues } from "./types.js";
|
|
3
|
+
export interface UseFieldResult<TValue> extends FormFieldState<TValue> {
|
|
4
|
+
setValue(value: TValue): void;
|
|
5
|
+
setTouched(touched?: boolean): void;
|
|
6
|
+
}
|
|
7
|
+
export declare function useField<TValues extends FormValues, TKey extends keyof TValues>(name: TKey): UseFieldResult<TValues[TKey]>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FormHTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import type { FormStore } from "./form-store.js";
|
|
3
|
+
import type { FormValues } from "./types.js";
|
|
4
|
+
export interface FormProps<TValues extends FormValues = FormValues> extends Omit<FormHTMLAttributes<HTMLFormElement>, "onSubmit" | "onReset"> {
|
|
5
|
+
store: FormStore<TValues>;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
onSubmitResult?: (submitted: boolean) => void | Promise<void>;
|
|
8
|
+
onReset?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function Form<TValues extends FormValues>({ store, children, onSubmitResult, onReset, ...props }: FormProps<TValues>): import("react").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { FormStore } from "./form-store.js";
|
|
3
|
+
import type { FormConfig, FormState, FormValues } from "./types.js";
|
|
4
|
+
export declare function FormProvider<TValues extends FormValues>({ store, children, }: {
|
|
5
|
+
store: FormStore<TValues>;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
}): import("react").JSX.Element;
|
|
8
|
+
export declare function useFormStore<TValues extends FormValues>(): FormStore<TValues>;
|
|
9
|
+
export declare function useForm<TValues extends FormValues>(config: FormConfig<TValues>): {
|
|
10
|
+
store: FormStore<TValues>;
|
|
11
|
+
state: FormState<TValues>;
|
|
12
|
+
submit: () => Promise<boolean>;
|
|
13
|
+
reset: (values?: TValues | undefined) => void;
|
|
14
|
+
validate: () => Promise<Partial<Record<keyof TValues, string>>>;
|
|
15
|
+
};
|
|
16
|
+
export declare function useFormState<TValues extends FormValues = FormValues>(): FormState<TValues>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { FormStore } from "./form-store.js";
|
|
2
|
+
import type { FormConfig } from "./types.js";
|
|
3
|
+
import type { DataRecord, Resource } from "../data/types.js";
|
|
4
|
+
export interface ResourceFormOptions<TData extends DataRecord, TValues extends Record<string, unknown> = Partial<TData>, TId = string> {
|
|
5
|
+
resource: Resource<TData, TId>;
|
|
6
|
+
mode: "create" | "edit";
|
|
7
|
+
id?: TId;
|
|
8
|
+
initialValues: TValues;
|
|
9
|
+
validate?: FormConfig<TValues>["validate"];
|
|
10
|
+
transform?: (values: TValues) => Partial<TData>;
|
|
11
|
+
onSuccess?: (data: TData) => void | Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare function createResourceForm<TData extends DataRecord, TValues extends Record<string, unknown> = Partial<TData>, TId = string>(options: ResourceFormOptions<TData, TValues, TId>): FormStore<TValues>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type FormValues = Record<string, unknown>;
|
|
2
|
+
export type FormErrors<TValues extends FormValues = FormValues> = Partial<Record<keyof TValues, string>>;
|
|
3
|
+
export type FormStatus = "idle" | "submitting" | "success" | "error";
|
|
4
|
+
export interface FormState<TValues extends FormValues = FormValues> {
|
|
5
|
+
values: TValues;
|
|
6
|
+
errors: FormErrors<TValues>;
|
|
7
|
+
touched: Partial<Record<keyof TValues, boolean>>;
|
|
8
|
+
dirty: boolean;
|
|
9
|
+
submitting: boolean;
|
|
10
|
+
status: FormStatus;
|
|
11
|
+
submitError?: string;
|
|
12
|
+
}
|
|
13
|
+
export type FormValidator<TValues extends FormValues = FormValues> = (values: TValues) => FormErrors<TValues> | Promise<FormErrors<TValues>>;
|
|
14
|
+
export type FormSubmitHandler<TValues extends FormValues = FormValues> = (values: TValues) => void | Promise<void>;
|
|
15
|
+
export interface FormConfig<TValues extends FormValues = FormValues> {
|
|
16
|
+
initialValues: TValues;
|
|
17
|
+
validate?: FormValidator<TValues>;
|
|
18
|
+
onSubmit: FormSubmitHandler<TValues>;
|
|
19
|
+
}
|
|
20
|
+
export interface FormController<TValues extends FormValues = FormValues> {
|
|
21
|
+
getState(): FormState<TValues>;
|
|
22
|
+
submit(): Promise<boolean>;
|
|
23
|
+
reset(values?: TValues): void;
|
|
24
|
+
validate(): Promise<FormErrors<TValues>>;
|
|
25
|
+
}
|