@magicvr/schema-ui-renderer 0.2.0 → 0.3.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/components/account-session-toolbar.d.ts +2 -0
- package/components/activity-export.d.ts +2 -0
- package/components/cron-preview.d.ts +2 -0
- package/components/data-permission-scopes.d.ts +2 -0
- package/components/data-table.d.ts +43 -0
- package/components/email-identity.d.ts +2 -0
- package/components/force-password-change.d.ts +1 -0
- package/components/import-template-download.d.ts +2 -0
- package/components/invite-accept.d.ts +6 -0
- package/components/invite-issue-card.d.ts +7 -0
- package/components/invite-resend-dialog.d.ts +9 -0
- package/components/locale-switcher.d.ts +23 -0
- package/components/mail-admin-tab.d.ts +2 -0
- package/components/mfa-manager.d.ts +2 -0
- package/components/monitoring-auto-refresh.d.ts +2 -0
- package/components/notification-center.d.ts +2 -0
- package/components/password-policy-tab.d.ts +6 -0
- package/components/qr-code.d.ts +16 -0
- package/components/theme-toggle.d.ts +10 -0
- package/components/timezone-switcher.d.ts +16 -0
- package/components/wallet-ensure.d.ts +2 -0
- package/index.js +23 -6538
- package/package.json +15 -10
- package/renderer/custom-components.d.ts +1 -1
- package/renderer/form-controls.d.ts +3 -3
- package/renderer/index.d.ts +3 -3
- package/renderer/permissions.d.ts +1 -1
- package/renderer/render.d.ts +4 -4
- package/renderer/render.types.d.ts +2 -2
- package/renderer/resource.d.ts +1 -1
- package/renderer/row-action.d.ts +2 -2
- package/renderer/schema-table.d.ts +2 -2
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
export type SortOrder = "asc" | "desc";
|
|
3
|
+
export interface SortState {
|
|
4
|
+
field: string;
|
|
5
|
+
order: SortOrder;
|
|
6
|
+
}
|
|
7
|
+
export interface DataTableColumn<T> {
|
|
8
|
+
key: string;
|
|
9
|
+
/** Cell content or header node (checkboxes render in headers for selection). */
|
|
10
|
+
label: ReactNode;
|
|
11
|
+
sortable?: boolean;
|
|
12
|
+
/** W4 · GOAL-005: render the string fallback single-line truncated with a
|
|
13
|
+
* native title full-text affordance so long values do not crowd out
|
|
14
|
+
* sibling columns. Custom render cells are unaffected. Since the
|
|
15
|
+
* table-style refresh every string cell truncates by default; this flag
|
|
16
|
+
* is kept for schema declarations that opt into the 16rem cap. */
|
|
17
|
+
truncate?: boolean;
|
|
18
|
+
/** Column width hint (px number or CSS length). Content-driven auto layout
|
|
19
|
+
* otherwise; a column that declares a width skips the default max-width
|
|
20
|
+
* cap so it can exceed it (table-layout auto still grows on content). */
|
|
21
|
+
width?: number | string;
|
|
22
|
+
/** Minimum column width (px number or CSS length). */
|
|
23
|
+
minWidth?: number | string;
|
|
24
|
+
render?: (row: T) => ReactNode;
|
|
25
|
+
}
|
|
26
|
+
export interface DataTableProps<T> {
|
|
27
|
+
columns: DataTableColumn<T>[];
|
|
28
|
+
rows: T[];
|
|
29
|
+
rowKey: (row: T) => string;
|
|
30
|
+
sort?: SortState;
|
|
31
|
+
onSortChange?: (sort: SortState | null) => void;
|
|
32
|
+
loading?: boolean;
|
|
33
|
+
error?: string | null;
|
|
34
|
+
emptyMessage?: string;
|
|
35
|
+
caption?: string;
|
|
36
|
+
/** Invoked when a data row is clicked (row selection, S4 · GOAL-007). */
|
|
37
|
+
onRowClick?: (row: T) => void;
|
|
38
|
+
/** Row key of the currently selected row (highlight), S4 · GOAL-007. */
|
|
39
|
+
selectedKey?: string;
|
|
40
|
+
/** W15-F02: retry control shown in the error state. */
|
|
41
|
+
onRetry?: () => void;
|
|
42
|
+
}
|
|
43
|
+
export declare function DataTable<T>({ columns, rows, rowKey, sort, onSortChange, loading, error, emptyMessage, caption, onRowClick, selectedKey, onRetry, }: DataTableProps<T>): import("react").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function ForcePasswordChange(): import("react").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public invitation acceptance surface (workspace-019 R3 · GOAL-004 C4):
|
|
3
|
+
* mounted at /invite/accept?token=… for unauthenticated visitors. Success
|
|
4
|
+
* returns WITHOUT tokens — the new user signs in with their chosen password.
|
|
5
|
+
*/
|
|
6
|
+
export declare function InviteAcceptPage(): import("react").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Invitation issue card (workspace-019): the create operation PLUS one-time
|
|
3
|
+
* link disclosure for creation and resend. The records list lives on the
|
|
4
|
+
* schema table of the same page; resend accepts the invite id from the table
|
|
5
|
+
* (column "id") because the schema engine cannot disclose response bodies.
|
|
6
|
+
*/
|
|
7
|
+
export declare function InviteIssueCard(_props: unknown): import("react").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type CustomComponentProps } from "@schema-ui/renderer/renderer/custom-components";
|
|
2
|
+
/**
|
|
3
|
+
* Resend dialog (workspace-019, protocol modal action): the row-level
|
|
4
|
+
* "Resend" opens this modal with the triggering invite in context.modalRow
|
|
5
|
+
* (renderer injects it for modal content). Sending rotates the token via the
|
|
6
|
+
* admin API and discloses the ONE-TIME link inline — the schema engine cannot
|
|
7
|
+
* stream response bodies into the page, so the modal is the interaction.
|
|
8
|
+
*/
|
|
9
|
+
export declare function InviteResendDialog(props: CustomComponentProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Language switcher (S1 · C4) — refactored to a lightweight header
|
|
3
|
+
* dropdown (2026-08-14, user request):
|
|
4
|
+
*
|
|
5
|
+
* - Trigger: pure icon button (lucide Languages), same size/shape as the
|
|
6
|
+
* theme toggle and notification bell (size-9 rounded-md ghost).
|
|
7
|
+
* - Menu: absolutely positioned panel (NO portal — the app root carries
|
|
8
|
+
* the `dark` class, so the panel inherits the dark theme variables
|
|
9
|
+
* automatically; no Radix/Headless portal scope issue).
|
|
10
|
+
* - Dark-mode styling via design tokens (shadcn convention): bg-popover
|
|
11
|
+
* resolves to ~neutral-900 in dark, border-border to white/10
|
|
12
|
+
* (~neutral-800), accent hover to ~neutral-800, popover-foreground to
|
|
13
|
+
* ~neutral-200 — exactly the requested palette; light mode stays
|
|
14
|
+
* correct automatically.
|
|
15
|
+
* - Selected item shows a checkmark (lucide Check) on the right.
|
|
16
|
+
*
|
|
17
|
+
* Reachable from the Shell and the anonymous login page — no settings
|
|
18
|
+
* permission required (VP-007 requirement).
|
|
19
|
+
*/
|
|
20
|
+
export interface LocaleSwitcherProps {
|
|
21
|
+
className?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function LocaleSwitcher({ className }: LocaleSwitcherProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Password-policy configuration block (workspace-019 R3 · GOAL-004 D-001
|
|
3
|
+
* §2): the admin.settings tab extension. GET/PATCH /api/settings/password-
|
|
4
|
+
* policy; the server enforces range validation (8–72 / 0–4 / 0–10).
|
|
5
|
+
*/
|
|
6
|
+
export declare function PasswordPolicyTab(_props: unknown): import("react").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface QrCodeProps {
|
|
2
|
+
/** Text to encode (e.g. an otpauth:// URI). Empty → renders nothing. */
|
|
3
|
+
value: string;
|
|
4
|
+
/** Rendered size in CSS pixels (the matrix is square). */
|
|
5
|
+
size?: number;
|
|
6
|
+
/** Extra class names for the wrapping figure. */
|
|
7
|
+
className?: string;
|
|
8
|
+
/** Accessible label. */
|
|
9
|
+
label?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Renders the QR module matrix as SVG. Each dark module becomes a 1×1 rect in
|
|
13
|
+
* a unit viewBox scaled to `size`; a white background rect keeps scanners
|
|
14
|
+
* happy (quiet zone included via the 4-module default margin of the encoder).
|
|
15
|
+
*/
|
|
16
|
+
export declare function QrCode({ value, size, className, label }: QrCodeProps): import("react").JSX.Element | null;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Theme toggle (S1 · C3) — W8 visual unification (GOAL-009):
|
|
3
|
+
*
|
|
4
|
+
* The trigger now matches the neighbouring header icon buttons (language
|
|
5
|
+
* switcher and notification bell): size-9 rounded-md ghost with
|
|
6
|
+
* text-muted-foreground + hover:bg-accent — instead of the form-styled
|
|
7
|
+
* outline Button. The tooltip / aria-label follow the active locale via
|
|
8
|
+
* the i18n catalog (shell.theme.toggle) — no hardcoded English.
|
|
9
|
+
*/
|
|
10
|
+
export declare function ThemeToggle(): import("react").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timezone switcher (workspace-020 · R2 · C2).
|
|
3
|
+
*
|
|
4
|
+
* User-level timezone override next to the language switcher in the header
|
|
5
|
+
* locale channel (contract GOAL-002 D-001 §4.2): persists via the single
|
|
6
|
+
* localStorage channel "schema-ui:timezone"; "auto" removes the key.
|
|
7
|
+
* The option list is the documented common set (contract §6 permits a
|
|
8
|
+
* verifiable, extendable list); the effective timezone always degrades
|
|
9
|
+
* safely through the L1–L4 resolver in i18n/timezone.
|
|
10
|
+
*/
|
|
11
|
+
/** Common IANA set offered in the header menu (extendable per contract §6). */
|
|
12
|
+
export declare const TIMEZONE_OPTIONS: readonly string[];
|
|
13
|
+
export interface TimezoneSwitcherProps {
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function TimezoneSwitcher({ className }: TimezoneSwitcherProps): import("react").JSX.Element;
|