@mpfrontend/ui 0.1.0 → 1.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 CHANGED
@@ -1,8 +1,10 @@
1
1
  # @mpfrontend/ui
2
2
 
3
- Local development package. Runtime: client. Public API is exported from src/index.ts and compiled
4
- into dist. Nx owns build, typecheck, lint and test targets. Consumer applications install packed artifacts.
5
- See ../../docs/IMPLEMENTATION-STATUS.md for observed evidence and remaining work.
3
+ Part of [MP Frontend](https://github.com/panahister/mpfrontend), released to the public npm registry as one cohort: every `@mpfrontend`
4
+ package at the same exact version. Runtime: client. Install it through a workspace that `mpfrontend init`
5
+ created, which pins the cohort and binds the scope to the registry in `.npmrc`. [Versioning](https://github.com/panahister/mpfrontend#versioning)
6
+ states the compatibility policy and [Implementation status](https://github.com/panahister/mpfrontend/blob/main/docs/IMPLEMENTATION-STATUS.md) the
7
+ evidence.
6
8
 
7
9
  Import `@mpfrontend/ui/tailwind.css` from the consumer's Tailwind v4 entry so its compiler scans the
8
10
  published JavaScript for structural utility classes. Import `@mpfrontend/ui/styles.css` for semantic
@@ -25,7 +27,7 @@ has an error state and never logs or stores the value.
25
27
  `ConfirmWithCode` confirms a sensitive action in a `Dialog`: `onConfirm(code, signal)` sends the code to
26
28
  the server through the BFF (a same-origin request with the CSRF token and an idempotency key), the browser
27
29
  never checks the code, and the code is cleared on close and on failure and never written to browser
28
- storage, a URL or a log. DOM behaviour (keyboard, focus, names, clearing) is tested with happy-dom 20.14.5,
30
+ storage, a URL or a log. DOM behaviour (keyboard, focus, names, clearing) is tested with happy-dom 21.0.4,
29
31
  a test-only dependency chosen because the tests need focus and keyboard events without a browser.
30
32
 
31
33
  ## Tree
@@ -48,7 +50,9 @@ and `aria-expanded`, and its accessible name includes its state label.
48
50
  may not be viewed is not rendered, with its label, `helpers` text and `errors` text, and leaves validation and the
49
51
  submitted values; a field that may not be edited is disabled; a save passes `onSubmit` only the changed fields that
50
52
  may be edited, compared with `original` (`dirtyPatch`), and a changed field that may not be edited throws
51
- `FORBIDDEN_FIELD` instead of being sent. Without `access` both components behave as before. A hidden field is a
53
+ `FORBIDDEN_FIELD` instead of being sent. With `access`, `ResourceForm` requires `original`, in its type and at run time
54
+ (`RESOURCE_FORM_ORIGINAL_REQUIRED`): without it every shown field would count as changed and be sent. A form for a new
55
+ record passes an empty `original`. Without `access` both components behave as before. A hidden field is a
52
56
  presentation; the server still refuses a field the person may not write.
53
57
 
54
58
  ## Paging, sorting and filtering
package/dist/core.d.ts ADDED
@@ -0,0 +1,115 @@
1
+ import { type ButtonHTMLAttributes, type InputHTMLAttributes, type SelectHTMLAttributes, type ReactNode, type Key } from 'react';
2
+ import type { AccessReader } from '@mpfrontend/access-core';
3
+ export type DisplayField = Readonly<{
4
+ key: string;
5
+ type: string;
6
+ required: boolean;
7
+ editable: boolean;
8
+ nullable: boolean;
9
+ }>;
10
+ export type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
11
+ tone?: 'primary' | 'secondary' | 'ghost' | 'danger';
12
+ loading?: boolean;
13
+ loadingLabel?: ReactNode;
14
+ restricted?: boolean;
15
+ leadingIcon?: ReactNode;
16
+ trailingIcon?: ReactNode;
17
+ };
18
+ export type FieldProps = InputHTMLAttributes<HTMLInputElement> & {
19
+ label: string;
20
+ helper?: string;
21
+ error?: string;
22
+ };
23
+ export type SelectProps = SelectHTMLAttributes<HTMLSelectElement> & {
24
+ label: string;
25
+ icon?: ReactNode;
26
+ };
27
+ export declare function Button({ tone, loading, loadingLabel, restricted, leadingIcon, trailingIcon, children, disabled, ...props }: ButtonProps): import("react").JSX.Element;
28
+ export declare function Field({ label, helper, error, ...props }: FieldProps): import("react").JSX.Element;
29
+ export declare function Select({ label, children, icon, ...props }: SelectProps): import("react").JSX.Element;
30
+ export declare function Card({ children }: {
31
+ children: ReactNode;
32
+ }): import("react").JSX.Element;
33
+ export type TableSort = Readonly<{
34
+ field: string;
35
+ direction: 'asc' | 'desc';
36
+ }>;
37
+ /** The visible text of the table's controls, from the consumer's catalog. */
38
+ export type TableText = Readonly<{
39
+ pagination: string;
40
+ previous: string;
41
+ next: string;
42
+ /** The current page and the page count, when the count is known. */
43
+ page: (page: number, count: number | undefined) => string;
44
+ size?: string;
45
+ apply?: string;
46
+ filters?: string;
47
+ }>;
48
+ /**
49
+ * The controlled state of a table and its change events. The mode is declared, never inferred: in `client` mode the
50
+ * table filters, sorts and pages the rows it is given; in `server` mode it shows them as the server returned them and
51
+ * never sorts, filters or pages them itself.
52
+ */
53
+ export type TableControl = Readonly<{
54
+ mode: 'client' | 'server';
55
+ page: number;
56
+ size: number;
57
+ sort?: TableSort | undefined;
58
+ filters?: Readonly<Record<string, string>>;
59
+ /** The total number of rows the server reports (server mode). */
60
+ total?: number | undefined;
61
+ /** Whether a next page exists, when the server reports no total (server mode). */
62
+ hasMore?: boolean;
63
+ sortable?: readonly string[];
64
+ filterable?: readonly string[];
65
+ sizes?: readonly number[];
66
+ onPageChange: (page: number) => void;
67
+ onSizeChange?: (size: number) => void;
68
+ onSortChange?: (sort: TableSort | undefined) => void;
69
+ onFiltersChange?: (filters: Readonly<Record<string, string>>) => void;
70
+ text: TableText;
71
+ }>;
72
+ /**
73
+ * With `access`, a column whose field may not be viewed is removed with its header. Without it, every field shows.
74
+ * With `control`, the table has sortable headers, filters and paging bound to the controlled values; a sort or a
75
+ * filter on a column the person may not view is ignored. Without it, the table renders the rows as before.
76
+ */
77
+ export declare function ResourceTable({ fields, rows, caption, format, labels, detail, rowKey, access, control }: {
78
+ fields: readonly DisplayField[];
79
+ rows: readonly Record<string, unknown>[];
80
+ caption: string;
81
+ format: (value: unknown) => string;
82
+ labels?: Readonly<Record<string, string>>;
83
+ detail?: (row: Record<string, unknown>) => ReactNode;
84
+ rowKey?: (row: Record<string, unknown>, index: number) => Key;
85
+ access?: AccessReader;
86
+ control?: TableControl;
87
+ }): import("react").JSX.Element;
88
+ /**
89
+ * With `access`, a field that may not be viewed is not rendered (its label, helper and error with it) and leaves
90
+ * validation and the submitted values; a field that may not be edited is disabled; a save passes `onSubmit` only the
91
+ * changed fields that may be edited, compared with `original` (dirtyPatch); `original` is required with `access`, in the
92
+ * type and at run time (`RESOURCE_FORM_ORIGINAL_REQUIRED`), because without it every shown field would count as changed
93
+ * and be sent; a new record passes an empty one. Without `access`, every editable field shows and `onSubmit` receives
94
+ * nothing, as before.
95
+ */
96
+ export declare function ResourceForm({ fields, values, onChange, onSubmit, labels, saveLabel, disabled, access, original, helpers, errors }: {
97
+ fields: readonly DisplayField[];
98
+ values: Readonly<Record<string, unknown>>;
99
+ onChange: (key: string, value: unknown) => void;
100
+ onSubmit: (patch?: Record<string, unknown>) => void;
101
+ labels?: Readonly<Record<string, string>>;
102
+ saveLabel: string;
103
+ disabled?: boolean;
104
+ helpers?: Readonly<Record<string, string>>;
105
+ errors?: Readonly<Record<string, string>>;
106
+ } & (Readonly<{
107
+ access?: undefined;
108
+ original?: Readonly<Record<string, unknown>>;
109
+ }> | Readonly<{
110
+ access: AccessReader;
111
+ original: Readonly<Record<string, unknown>>;
112
+ }>)): import("react").JSX.Element;
113
+ export { Dialog, nextFocus, type DialogProps } from './dialog.js';
114
+ export { OneTimeCodeField, ConfirmWithCode, codeDigits, type OneTimeCodeFieldProps, type ConfirmWithCodeProps } from './one-time-code.js';
115
+ export { Tree, visibleRows, descendantIds, treeKey, type TreeNode, type TreeRow, type TreeColumn, type TreeMove, type TreeProps } from './tree.js';
package/dist/core.js ADDED
@@ -0,0 +1,103 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useId } from 'react';
4
+ import { buttonState, fieldState, isControlUnavailable } from '@mpfrontend/primitives/internal';
5
+ export function Button({ tone = 'primary', loading = false, loadingLabel, restricted = false, leadingIcon, trailingIcon, children, disabled, ...props }) {
6
+ const state = buttonState({ disabled: disabled ?? false, loading, restricted });
7
+ return _jsxs("button", { ...props, disabled: isControlUnavailable(state), "aria-busy": state === 'loading' || undefined, "aria-disabled": state === 'restricted' || undefined, "data-state": state, "data-tone": tone, className: ['mp-button', 'inline-flex h-[var(--mp-control-height)] items-center justify-center gap-2 whitespace-nowrap rounded-[var(--mp-radius-control)] border-0 px-[var(--mp-control-padding)]', props.className].filter(Boolean).join(' '), children: [loading ? _jsx("span", { className: "mp-button-spinner", "aria-hidden": "true" }) : leadingIcon, _jsx("span", { children: loading ? (loadingLabel ?? children) : children }), !loading && trailingIcon] });
8
+ }
9
+ export function Field({ label, helper, error, ...props }) {
10
+ const generated = useId(), id = props.id ?? generated, description = id + '-description';
11
+ const state = fieldState({ disabled: props.disabled ?? false, readOnly: props.readOnly ?? false, invalid: !!error });
12
+ return _jsxs("label", { className: "mp-field flex max-w-full flex-col gap-[var(--mp-field-gap)]", "data-state": state, htmlFor: id, children: [_jsx("span", { className: "mp-field-label text-sm font-medium", children: label }), _jsx("input", { ...props, id: id, className: ['mp-input', 'h-[var(--mp-control-height)] w-full rounded-[var(--mp-radius-control)] border px-3', props.className].filter(Boolean).join(' '), "aria-invalid": !!error, "aria-describedby": error || helper ? description : props['aria-describedby'] }), (helper || error) && _jsx("span", { id: description, className: error ? 'mp-field-helper mp-field-error text-xs' : 'mp-field-helper text-xs', children: error ?? helper })] });
13
+ }
14
+ export function Select({ label, children, icon, ...props }) {
15
+ const generated = useId(), id = props.id ?? generated;
16
+ const state = fieldState({ disabled: props.disabled ?? false });
17
+ return _jsxs("label", { className: "mp-field flex max-w-full flex-col gap-[var(--mp-field-gap)]", "data-state": state, htmlFor: id, children: [_jsx("span", { className: "mp-field-label text-sm font-medium", children: label }), _jsxs("span", { className: "mp-select-wrap relative w-full", "data-custom-icon": icon ? 'true' : undefined, children: [_jsx("select", { ...props, id: id, className: ['mp-select', 'h-[var(--mp-control-height)] w-full rounded-[var(--mp-radius-control)] border px-3', props.className].filter(Boolean).join(' '), children: children }), icon && _jsx("span", { className: "mp-select-icon pointer-events-none absolute end-3 top-1/2 -translate-y-1/2", "aria-hidden": "true", children: icon })] })] });
18
+ }
19
+ export function Card({ children }) { return _jsx("section", { className: "mp-card rounded-[var(--mp-radius-surface)] border p-6", children: children }); }
20
+ function compareValues(a, b) {
21
+ if (a === b)
22
+ return 0;
23
+ if (a === null || a === undefined)
24
+ return 1;
25
+ if (b === null || b === undefined)
26
+ return -1;
27
+ if (typeof a === 'number' && typeof b === 'number')
28
+ return a - b;
29
+ if (typeof a === 'boolean' && typeof b === 'boolean')
30
+ return a === b ? 0 : a ? 1 : -1;
31
+ return String(a).localeCompare(String(b));
32
+ }
33
+ const nextSort = (sort, field) => sort?.field !== field ? { field, direction: 'asc' } : sort.direction === 'asc' ? { field, direction: 'desc' } : undefined;
34
+ /**
35
+ * With `access`, a column whose field may not be viewed is removed with its header. Without it, every field shows.
36
+ * With `control`, the table has sortable headers, filters and paging bound to the controlled values; a sort or a
37
+ * filter on a column the person may not view is ignored. Without it, the table renders the rows as before.
38
+ */
39
+ export function ResourceTable({ fields, rows, caption, format, labels = {}, detail, rowKey, access, control }) {
40
+ const columns = access ? fields.filter(field => access.field(field.key).view) : fields;
41
+ const visible = new Set(columns.map(field => field.key)), hiddenField = (key) => fields.some(field => field.key === key) && !visible.has(key);
42
+ let shown = rows, total;
43
+ if (control?.mode === 'client') {
44
+ const filters = Object.entries(control.filters ?? {}).filter(([key, value]) => value !== '' && visible.has(key));
45
+ let selected = rows.filter(row => filters.every(([key, value]) => format(row[key]).toLocaleLowerCase().includes(value.toLocaleLowerCase())));
46
+ const sort = control.sort && visible.has(control.sort.field) ? control.sort : undefined;
47
+ if (sort)
48
+ selected = [...selected].sort((a, b) => compareValues(a[sort.field], b[sort.field]) * (sort.direction === 'asc' ? 1 : -1));
49
+ total = selected.length;
50
+ shown = selected.slice((control.page - 1) * control.size, control.page * control.size);
51
+ }
52
+ else if (control)
53
+ total = control.total;
54
+ const count = control && total !== undefined ? Math.max(1, Math.ceil(total / control.size)) : undefined;
55
+ const header = (field) => {
56
+ const label = labels[field.key] ?? field.key;
57
+ if (!control?.onSortChange || !control.sortable?.includes(field.key))
58
+ return _jsx("th", { className: "border-b p-3 text-start", scope: "col", children: label }, field.key);
59
+ const direction = control.sort?.field === field.key ? control.sort.direction : undefined;
60
+ const onSortChange = control.onSortChange;
61
+ return _jsx("th", { className: "border-b p-3 text-start", scope: "col", "aria-sort": direction === 'asc' ? 'ascending' : direction === 'desc' ? 'descending' : 'none', children: _jsx("button", { type: "button", className: "mp-table-sort inline-flex items-center gap-1", onClick: () => onSortChange(nextSort(control.sort, field.key)), children: label }) }, field.key);
62
+ };
63
+ const filterable = control?.onFiltersChange ? (control.filterable ?? []).filter(name => !hiddenField(name)) : [];
64
+ const table = _jsx("div", { className: "mp-table-wrap overflow-auto", children: _jsxs("table", { className: "w-full border-collapse", children: [_jsx("caption", { children: caption }), _jsx("thead", { children: _jsxs("tr", { children: [columns.map(header), detail && _jsx("th", { className: "border-b p-3 text-start", scope: "col", children: labels.detail ?? 'Details' })] }) }), _jsx("tbody", { children: shown.map((row, index) => _jsxs("tr", { children: [columns.map(field => _jsx("td", { className: "border-b p-3 text-start", children: format(row[field.key]) }, field.key)), detail && _jsx("td", { className: "border-b p-3 text-start", children: detail(row) })] }, rowKey ? rowKey(row, index) : index)) })] }) });
65
+ if (!control)
66
+ return table;
67
+ const { page, size, sizes, onSizeChange, onFiltersChange, text } = control;
68
+ return _jsxs("div", { className: "mp-table grid gap-4", children: [filterable.length > 0 && onFiltersChange && _jsxs("form", { role: "search", "aria-label": text.filters, className: "flex flex-wrap items-end gap-4", onSubmit: event => { event.preventDefault(); const data = new FormData(event.currentTarget); onFiltersChange(Object.fromEntries(filterable.map(name => [name, String(data.get(name) ?? '')]))); }, children: [filterable.map(name => _jsx(Field, { name: name, label: labels[name] ?? name, defaultValue: control.filters?.[name] ?? '' }, name)), _jsx(Button, { type: "submit", tone: "secondary", children: text.apply })] }, JSON.stringify(control.filters ?? {})), table, _jsxs("nav", { "aria-label": text.pagination, className: "flex flex-wrap items-center gap-4", children: [_jsx(Button, { type: "button", tone: "ghost", disabled: page <= 1, onClick: () => control.onPageChange(page - 1), children: text.previous }), _jsx("span", { children: text.page(page, count) }), _jsx(Button, { type: "button", tone: "ghost", disabled: count !== undefined ? page >= count : control.hasMore !== true, onClick: () => control.onPageChange(page + 1), children: text.next }), sizes && onSizeChange && _jsx(Select, { label: text.size ?? '', value: String(size), onChange: event => onSizeChange(Number(event.target.value)), children: sizes.map(option => _jsx("option", { value: option, children: option }, option)) })] })] });
69
+ }
70
+ /**
71
+ * With `access`, a field that may not be viewed is not rendered (its label, helper and error with it) and leaves
72
+ * validation and the submitted values; a field that may not be edited is disabled; a save passes `onSubmit` only the
73
+ * changed fields that may be edited, compared with `original` (dirtyPatch); `original` is required with `access`, in the
74
+ * type and at run time (`RESOURCE_FORM_ORIGINAL_REQUIRED`), because without it every shown field would count as changed
75
+ * and be sent; a new record passes an empty one. Without `access`, every editable field shows and `onSubmit` receives
76
+ * nothing, as before.
77
+ */
78
+ export function ResourceForm({ fields, values, onChange, onSubmit, labels = {}, saveLabel, disabled = false, access, original, helpers = {}, errors = {} }) {
79
+ if (access && original === undefined)
80
+ throw new Error('RESOURCE_FORM_ORIGINAL_REQUIRED');
81
+ const editable = fields.filter(field => field.editable);
82
+ if (editable.some(field => !['string', 'boolean', 'number', 'integer'].includes(field.type)))
83
+ throw new Error('UNSUPPORTED_FORM_FIELD');
84
+ const shown = access ? editable.filter(field => access.field(field.key).view) : editable;
85
+ const locked = (field) => disabled || (access ? !access.field(field.key).edit : false);
86
+ const unavailable = disabled || shown.length === 0 || shown.every(locked);
87
+ const submit = () => {
88
+ if (unavailable)
89
+ return;
90
+ if (!access) {
91
+ onSubmit();
92
+ return;
93
+ }
94
+ // Only the fields shown are compared, so a hidden field never leaves; a changed field that may not be edited
95
+ // throws FORBIDDEN_FIELD instead of being sent.
96
+ onSubmit(access.patch(original ?? {}, Object.fromEntries(shown.filter(field => Object.hasOwn(values, field.key)).map(field => [field.key, values[field.key]]))));
97
+ };
98
+ return _jsxs("form", { className: "mp-form grid gap-4", onSubmit: event => { event.preventDefault(); submit(); }, children: [shown.map(field => _jsx(Field, { label: labels[field.key] ?? field.key, name: field.key, required: field.required && field.type !== 'boolean', disabled: locked(field), ...(helpers[field.key] !== undefined ? { helper: helpers[field.key] } : {}), ...(errors[field.key] !== undefined ? { error: errors[field.key] } : {}), type: field.type === 'boolean' ? 'checkbox' : field.type === 'number' || field.type === 'integer' ? 'number' : 'text', step: field.type === 'number' ? 'any' : field.type === 'integer' ? 1 : undefined, checked: field.type === 'boolean' ? values[field.key] === true : undefined, value: field.type === 'boolean' ? undefined : String(values[field.key] ?? ''), onChange: event => onChange(field.key, field.type === 'boolean' ? event.target.checked : field.type === 'number' || field.type === 'integer' ? event.target.valueAsNumber : event.target.value) }, field.key)), _jsx(Button, { disabled: unavailable, type: "submit", tone: "secondary", children: saveLabel })] });
99
+ }
100
+ export { Dialog, nextFocus } from './dialog.js';
101
+ export { OneTimeCodeField, ConfirmWithCode, codeDigits } from './one-time-code.js';
102
+ export { Tree, visibleRows, descendantIds, treeKey } from './tree.js';
103
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,109 +1 @@
1
- import { type ButtonHTMLAttributes, type InputHTMLAttributes, type SelectHTMLAttributes, type ReactNode, type Key } from 'react';
2
- import type { AccessReader } from '@mpfrontend/access-core';
3
- export type DisplayField = Readonly<{
4
- key: string;
5
- type: string;
6
- required: boolean;
7
- editable: boolean;
8
- nullable: boolean;
9
- }>;
10
- export type ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & {
11
- tone?: 'primary' | 'secondary' | 'ghost' | 'danger';
12
- loading?: boolean;
13
- loadingLabel?: ReactNode;
14
- restricted?: boolean;
15
- leadingIcon?: ReactNode;
16
- trailingIcon?: ReactNode;
17
- };
18
- export type FieldProps = InputHTMLAttributes<HTMLInputElement> & {
19
- label: string;
20
- helper?: string;
21
- error?: string;
22
- };
23
- export type SelectProps = SelectHTMLAttributes<HTMLSelectElement> & {
24
- label: string;
25
- icon?: ReactNode;
26
- };
27
- export declare function Button({ tone, loading, loadingLabel, restricted, leadingIcon, trailingIcon, children, disabled, ...props }: ButtonProps): import("react").JSX.Element;
28
- export declare function Field({ label, helper, error, ...props }: FieldProps): import("react").JSX.Element;
29
- export declare function Select({ label, children, icon, ...props }: SelectProps): import("react").JSX.Element;
30
- export declare function Card({ children }: {
31
- children: ReactNode;
32
- }): import("react").JSX.Element;
33
- export type TableSort = Readonly<{
34
- field: string;
35
- direction: 'asc' | 'desc';
36
- }>;
37
- /** The visible text of the table's controls, from the consumer's catalog. */
38
- export type TableText = Readonly<{
39
- pagination: string;
40
- previous: string;
41
- next: string;
42
- /** The current page and the page count, when the count is known. */
43
- page: (page: number, count: number | undefined) => string;
44
- size?: string;
45
- apply?: string;
46
- filters?: string;
47
- }>;
48
- /**
49
- * The controlled state of a table and its change events. The mode is declared, never inferred: in `client` mode the
50
- * table filters, sorts and pages the rows it is given; in `server` mode it shows them as the server returned them and
51
- * never sorts, filters or pages them itself.
52
- */
53
- export type TableControl = Readonly<{
54
- mode: 'client' | 'server';
55
- page: number;
56
- size: number;
57
- sort?: TableSort | undefined;
58
- filters?: Readonly<Record<string, string>>;
59
- /** The total number of rows the server reports (server mode). */
60
- total?: number | undefined;
61
- /** Whether a next page exists, when the server reports no total (server mode). */
62
- hasMore?: boolean;
63
- sortable?: readonly string[];
64
- filterable?: readonly string[];
65
- sizes?: readonly number[];
66
- onPageChange: (page: number) => void;
67
- onSizeChange?: (size: number) => void;
68
- onSortChange?: (sort: TableSort | undefined) => void;
69
- onFiltersChange?: (filters: Readonly<Record<string, string>>) => void;
70
- text: TableText;
71
- }>;
72
- /**
73
- * With `access`, a column whose field may not be viewed is removed with its header. Without it, every field shows.
74
- * With `control`, the table has sortable headers, filters and paging bound to the controlled values; a sort or a
75
- * filter on a column the person may not view is ignored. Without it, the table renders the rows as before.
76
- */
77
- export declare function ResourceTable({ fields, rows, caption, format, labels, detail, rowKey, access, control }: {
78
- fields: readonly DisplayField[];
79
- rows: readonly Record<string, unknown>[];
80
- caption: string;
81
- format: (value: unknown) => string;
82
- labels?: Readonly<Record<string, string>>;
83
- detail?: (row: Record<string, unknown>) => ReactNode;
84
- rowKey?: (row: Record<string, unknown>, index: number) => Key;
85
- access?: AccessReader;
86
- control?: TableControl;
87
- }): import("react").JSX.Element;
88
- /**
89
- * With `access`, a field that may not be viewed is not rendered (its label, helper and error with it) and leaves
90
- * validation and the submitted values; a field that may not be edited is disabled; a save passes `onSubmit` only the
91
- * changed fields that may be edited, compared with `original` (dirtyPatch). Without `access`, every editable field
92
- * shows and `onSubmit` receives nothing, as before.
93
- */
94
- export declare function ResourceForm({ fields, values, onChange, onSubmit, labels, saveLabel, disabled, access, original, helpers, errors }: {
95
- fields: readonly DisplayField[];
96
- values: Readonly<Record<string, unknown>>;
97
- onChange: (key: string, value: unknown) => void;
98
- onSubmit: (patch?: Record<string, unknown>) => void;
99
- labels?: Readonly<Record<string, string>>;
100
- saveLabel: string;
101
- disabled?: boolean;
102
- access?: AccessReader;
103
- original?: Readonly<Record<string, unknown>>;
104
- helpers?: Readonly<Record<string, string>>;
105
- errors?: Readonly<Record<string, string>>;
106
- }): import("react").JSX.Element;
107
- export { Dialog, nextFocus, type DialogProps } from './dialog.js';
108
- export { OneTimeCodeField, ConfirmWithCode, codeDigits, type OneTimeCodeFieldProps, type ConfirmWithCodeProps } from './one-time-code.js';
109
- export { Tree, visibleRows, descendantIds, treeKey, type TreeNode, type TreeRow, type TreeColumn, type TreeMove, type TreeProps } from './tree.js';
1
+ export { Button, type ButtonProps, Card, codeDigits, ConfirmWithCode, type ConfirmWithCodeProps, descendantIds, Dialog, type DialogProps, type DisplayField, Field, type FieldProps, OneTimeCodeField, type OneTimeCodeFieldProps, ResourceForm, ResourceTable, Select, type SelectProps, type TableControl, type TableSort, type TableText, Tree, type TreeColumn, type TreeMove, type TreeNode, type TreeProps, type TreeRow, } from './core.js';
package/dist/index.js CHANGED
@@ -1,99 +1,2 @@
1
- 'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useId } from 'react';
4
- import { buttonState, fieldState, isControlUnavailable } from '@mpfrontend/primitives';
5
- export function Button({ tone = 'primary', loading = false, loadingLabel, restricted = false, leadingIcon, trailingIcon, children, disabled, ...props }) {
6
- const state = buttonState({ disabled: disabled ?? false, loading, restricted });
7
- return _jsxs("button", { ...props, disabled: isControlUnavailable(state), "aria-busy": state === 'loading' || undefined, "aria-disabled": state === 'restricted' || undefined, "data-state": state, "data-tone": tone, className: ['mp-button', 'inline-flex h-[var(--mp-control-height)] items-center justify-center gap-2 whitespace-nowrap rounded-[var(--mp-radius-control)] border-0 px-[var(--mp-control-padding)]', props.className].filter(Boolean).join(' '), children: [loading ? _jsx("span", { className: "mp-button-spinner", "aria-hidden": "true" }) : leadingIcon, _jsx("span", { children: loading ? (loadingLabel ?? children) : children }), !loading && trailingIcon] });
8
- }
9
- export function Field({ label, helper, error, ...props }) {
10
- const generated = useId(), id = props.id ?? generated, description = id + '-description';
11
- const state = fieldState({ disabled: props.disabled ?? false, readOnly: props.readOnly ?? false, invalid: !!error });
12
- return _jsxs("label", { className: "mp-field flex max-w-full flex-col gap-[var(--mp-field-gap)]", "data-state": state, htmlFor: id, children: [_jsx("span", { className: "mp-field-label text-sm font-medium", children: label }), _jsx("input", { ...props, id: id, className: ['mp-input', 'h-[var(--mp-control-height)] w-full rounded-[var(--mp-radius-control)] border px-3', props.className].filter(Boolean).join(' '), "aria-invalid": !!error, "aria-describedby": error || helper ? description : props['aria-describedby'] }), (helper || error) && _jsx("span", { id: description, className: error ? 'mp-field-helper mp-field-error text-xs' : 'mp-field-helper text-xs', children: error ?? helper })] });
13
- }
14
- export function Select({ label, children, icon, ...props }) {
15
- const generated = useId(), id = props.id ?? generated;
16
- const state = fieldState({ disabled: props.disabled ?? false });
17
- return _jsxs("label", { className: "mp-field flex max-w-full flex-col gap-[var(--mp-field-gap)]", "data-state": state, htmlFor: id, children: [_jsx("span", { className: "mp-field-label text-sm font-medium", children: label }), _jsxs("span", { className: "mp-select-wrap relative w-full", "data-custom-icon": icon ? 'true' : undefined, children: [_jsx("select", { ...props, id: id, className: ['mp-select', 'h-[var(--mp-control-height)] w-full rounded-[var(--mp-radius-control)] border px-3', props.className].filter(Boolean).join(' '), children: children }), icon && _jsx("span", { className: "mp-select-icon pointer-events-none absolute end-3 top-1/2 -translate-y-1/2", "aria-hidden": "true", children: icon })] })] });
18
- }
19
- export function Card({ children }) { return _jsx("section", { className: "mp-card rounded-[var(--mp-radius-surface)] border p-6", children: children }); }
20
- function compareValues(a, b) {
21
- if (a === b)
22
- return 0;
23
- if (a === null || a === undefined)
24
- return 1;
25
- if (b === null || b === undefined)
26
- return -1;
27
- if (typeof a === 'number' && typeof b === 'number')
28
- return a - b;
29
- if (typeof a === 'boolean' && typeof b === 'boolean')
30
- return a === b ? 0 : a ? 1 : -1;
31
- return String(a).localeCompare(String(b));
32
- }
33
- const nextSort = (sort, field) => sort?.field !== field ? { field, direction: 'asc' } : sort.direction === 'asc' ? { field, direction: 'desc' } : undefined;
34
- /**
35
- * With `access`, a column whose field may not be viewed is removed with its header. Without it, every field shows.
36
- * With `control`, the table has sortable headers, filters and paging bound to the controlled values; a sort or a
37
- * filter on a column the person may not view is ignored. Without it, the table renders the rows as before.
38
- */
39
- export function ResourceTable({ fields, rows, caption, format, labels = {}, detail, rowKey, access, control }) {
40
- const columns = access ? fields.filter(field => access.field(field.key).view) : fields;
41
- const visible = new Set(columns.map(field => field.key)), hiddenField = (key) => fields.some(field => field.key === key) && !visible.has(key);
42
- let shown = rows, total;
43
- if (control?.mode === 'client') {
44
- const filters = Object.entries(control.filters ?? {}).filter(([key, value]) => value !== '' && visible.has(key));
45
- let selected = rows.filter(row => filters.every(([key, value]) => format(row[key]).toLocaleLowerCase().includes(value.toLocaleLowerCase())));
46
- const sort = control.sort && visible.has(control.sort.field) ? control.sort : undefined;
47
- if (sort)
48
- selected = [...selected].sort((a, b) => compareValues(a[sort.field], b[sort.field]) * (sort.direction === 'asc' ? 1 : -1));
49
- total = selected.length;
50
- shown = selected.slice((control.page - 1) * control.size, control.page * control.size);
51
- }
52
- else if (control)
53
- total = control.total;
54
- const count = control && total !== undefined ? Math.max(1, Math.ceil(total / control.size)) : undefined;
55
- const header = (field) => {
56
- const label = labels[field.key] ?? field.key;
57
- if (!control?.onSortChange || !control.sortable?.includes(field.key))
58
- return _jsx("th", { className: "border-b p-3 text-start", scope: "col", children: label }, field.key);
59
- const direction = control.sort?.field === field.key ? control.sort.direction : undefined;
60
- const onSortChange = control.onSortChange;
61
- return _jsx("th", { className: "border-b p-3 text-start", scope: "col", "aria-sort": direction === 'asc' ? 'ascending' : direction === 'desc' ? 'descending' : 'none', children: _jsx("button", { type: "button", className: "mp-table-sort inline-flex items-center gap-1", onClick: () => onSortChange(nextSort(control.sort, field.key)), children: label }) }, field.key);
62
- };
63
- const filterable = control?.onFiltersChange ? (control.filterable ?? []).filter(name => !hiddenField(name)) : [];
64
- const table = _jsx("div", { className: "mp-table-wrap overflow-auto", children: _jsxs("table", { className: "w-full border-collapse", children: [_jsx("caption", { children: caption }), _jsx("thead", { children: _jsxs("tr", { children: [columns.map(header), detail && _jsx("th", { className: "border-b p-3 text-start", scope: "col", children: labels.detail ?? 'Details' })] }) }), _jsx("tbody", { children: shown.map((row, index) => _jsxs("tr", { children: [columns.map(field => _jsx("td", { className: "border-b p-3 text-start", children: format(row[field.key]) }, field.key)), detail && _jsx("td", { className: "border-b p-3 text-start", children: detail(row) })] }, rowKey ? rowKey(row, index) : index)) })] }) });
65
- if (!control)
66
- return table;
67
- const { page, size, sizes, onSizeChange, onFiltersChange, text } = control;
68
- return _jsxs("div", { className: "mp-table grid gap-4", children: [filterable.length > 0 && onFiltersChange && _jsxs("form", { role: "search", "aria-label": text.filters, className: "flex flex-wrap items-end gap-4", onSubmit: event => { event.preventDefault(); const data = new FormData(event.currentTarget); onFiltersChange(Object.fromEntries(filterable.map(name => [name, String(data.get(name) ?? '')]))); }, children: [filterable.map(name => _jsx(Field, { name: name, label: labels[name] ?? name, defaultValue: control.filters?.[name] ?? '' }, name)), _jsx(Button, { type: "submit", tone: "secondary", children: text.apply })] }, JSON.stringify(control.filters ?? {})), table, _jsxs("nav", { "aria-label": text.pagination, className: "flex flex-wrap items-center gap-4", children: [_jsx(Button, { type: "button", tone: "ghost", disabled: page <= 1, onClick: () => control.onPageChange(page - 1), children: text.previous }), _jsx("span", { children: text.page(page, count) }), _jsx(Button, { type: "button", tone: "ghost", disabled: count !== undefined ? page >= count : control.hasMore !== true, onClick: () => control.onPageChange(page + 1), children: text.next }), sizes && onSizeChange && _jsx(Select, { label: text.size ?? '', value: String(size), onChange: event => onSizeChange(Number(event.target.value)), children: sizes.map(option => _jsx("option", { value: option, children: option }, option)) })] })] });
69
- }
70
- /**
71
- * With `access`, a field that may not be viewed is not rendered (its label, helper and error with it) and leaves
72
- * validation and the submitted values; a field that may not be edited is disabled; a save passes `onSubmit` only the
73
- * changed fields that may be edited, compared with `original` (dirtyPatch). Without `access`, every editable field
74
- * shows and `onSubmit` receives nothing, as before.
75
- */
76
- export function ResourceForm({ fields, values, onChange, onSubmit, labels = {}, saveLabel, disabled = false, access, original = {}, helpers = {}, errors = {} }) {
77
- const editable = fields.filter(field => field.editable);
78
- if (editable.some(field => !['string', 'boolean', 'number', 'integer'].includes(field.type)))
79
- throw new Error('UNSUPPORTED_FORM_FIELD');
80
- const shown = access ? editable.filter(field => access.field(field.key).view) : editable;
81
- const locked = (field) => disabled || (access ? !access.field(field.key).edit : false);
82
- const unavailable = disabled || shown.length === 0 || shown.every(locked);
83
- const submit = () => {
84
- if (unavailable)
85
- return;
86
- if (!access) {
87
- onSubmit();
88
- return;
89
- }
90
- // Only the fields shown are compared, so a hidden field never leaves; a changed field that may not be edited
91
- // throws FORBIDDEN_FIELD instead of being sent.
92
- onSubmit(access.patch(original, Object.fromEntries(shown.filter(field => Object.hasOwn(values, field.key)).map(field => [field.key, values[field.key]]))));
93
- };
94
- return _jsxs("form", { className: "mp-form grid gap-4", onSubmit: event => { event.preventDefault(); submit(); }, children: [shown.map(field => _jsx(Field, { label: labels[field.key] ?? field.key, name: field.key, required: field.required && field.type !== 'boolean', disabled: locked(field), ...(helpers[field.key] !== undefined ? { helper: helpers[field.key] } : {}), ...(errors[field.key] !== undefined ? { error: errors[field.key] } : {}), type: field.type === 'boolean' ? 'checkbox' : field.type === 'number' || field.type === 'integer' ? 'number' : 'text', step: field.type === 'number' ? 'any' : field.type === 'integer' ? 1 : undefined, checked: field.type === 'boolean' ? values[field.key] === true : undefined, value: field.type === 'boolean' ? undefined : String(values[field.key] ?? ''), onChange: event => onChange(field.key, field.type === 'boolean' ? event.target.checked : field.type === 'number' || field.type === 'integer' ? event.target.valueAsNumber : event.target.value) }, field.key)), _jsx(Button, { disabled: unavailable, type: "submit", tone: "secondary", children: saveLabel })] });
95
- }
96
- export { Dialog, nextFocus } from './dialog.js';
97
- export { OneTimeCodeField, ConfirmWithCode, codeDigits } from './one-time-code.js';
98
- export { Tree, visibleRows, descendantIds, treeKey } from './tree.js';
1
+ export { Button, Card, codeDigits, ConfirmWithCode, descendantIds, Dialog, Field, OneTimeCodeField, ResourceForm, ResourceTable, Select, Tree, } from './core.js';
99
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAEN,IAAI,EACJ,UAAU,EACV,eAAe,EAEf,aAAa,EACb,MAAM,EAGN,KAAK,EAEL,gBAAgB,EAEhB,YAAY,EACZ,aAAa,EACb,MAAM,EAKN,IAAI,GAML,MAAM,WAAW,CAAC"}
@@ -0,0 +1 @@
1
+ export { nextFocus, treeKey, visibleRows } from './core.js';
@@ -0,0 +1,3 @@
1
+ // For the cohort's own packages: outside the compatibility guarantee (README "Versioning").
2
+ export { nextFocus, treeKey, visibleRows } from './core.js';
3
+ //# sourceMappingURL=internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,OAAO,EAAC,SAAS,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { useEffect, useId, useRef, useState } from 'react';
4
- import { Button } from './index.js';
4
+ import { Button } from './core.js';
5
5
  import { Dialog } from './dialog.js';
6
6
  const decimalDigit = /^\p{Nd}$/u;
7
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"one-time-code.js","sourceRoot":"","sources":["../src/one-time-code.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"one-time-code.js","sourceRoot":"","sources":["../src/one-time-code.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mpfrontend/ui",
3
- "version": "0.1.0",
3
+ "version": "1.1.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -16,7 +16,11 @@
16
16
  "import": "./dist/index.js"
17
17
  },
18
18
  "./styles.css": "./src/styles.css",
19
- "./tailwind.css": "./src/tailwind.css"
19
+ "./tailwind.css": "./src/tailwind.css",
20
+ "./internal": {
21
+ "types": "./dist/internal.d.ts",
22
+ "import": "./dist/internal.js"
23
+ }
20
24
  },
21
25
  "files": [
22
26
  "dist",
@@ -29,12 +33,12 @@
29
33
  "provenance": true
30
34
  },
31
35
  "dependencies": {
32
- "@mpfrontend/access-core": "0.1.0",
33
- "@mpfrontend/primitives": "0.1.0"
36
+ "@mpfrontend/access-core": "1.1.0",
37
+ "@mpfrontend/primitives": "1.1.0"
34
38
  },
35
39
  "devDependencies": {
36
- "@happy-dom/global-registrator": "20.14.5",
37
- "happy-dom": "20.14.5"
40
+ "@happy-dom/global-registrator": "21.0.4",
41
+ "happy-dom": "21.0.4"
38
42
  },
39
43
  "peerDependencies": {
40
44
  "react": "^19.3.0",