@cosmicdrift/kumiko-renderer 0.369.0 → 0.371.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.
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
- import type { FeatureSchema } from "./feature-schema.js";
2
+ import type { FeatureSchema } from "./feature-schema.ts";
3
3
  export type AppFeaturesProviderProps = {
4
4
  readonly features: readonly FeatureSchema[];
5
5
  readonly children: ReactNode;
@@ -1,5 +1,5 @@
1
1
  import type { EditFieldSpec } from "@cosmicdrift/kumiko-framework/ui-types";
2
- import type { CurrentUser } from "../current-user.js";
2
+ import type { CurrentUser } from "../current-user.tsx";
3
3
  type NormalizedEditField = Exclude<EditFieldSpec, string>;
4
4
  /** Calendar date (`YYYY-MM-DD`) of `now` in the given IANA zone. The en-CA
5
5
  * locale is used only because it formats dates as year-month-day. */
@@ -1,4 +1,4 @@
1
- import type { RenderEditAction } from "../components/render-edit-types.js";
1
+ import type { RenderEditAction } from "../components/render-edit-types.ts";
2
2
  export declare function primaryHeaderAction(actions: readonly RenderEditAction[], preferredId?: string): RenderEditAction | undefined;
3
3
  export type CompactHeaderPrimary = {
4
4
  readonly action: RenderEditAction;
@@ -1,10 +1,10 @@
1
1
  import type { ScreenDefinition } from "@cosmicdrift/kumiko-framework/ui-types";
2
2
  import type { FormValues, ListRowViewModel, Translate } from "@cosmicdrift/kumiko-headless";
3
3
  import { type ReactNode } from "react";
4
- import { type ListSort } from "../hooks/use-list-url-state.js";
5
- import type { FeatureSchema } from "./feature-schema.js";
6
- import { qualifyScreenId } from "./qualify-screen-id.js";
7
- import { screenAccessAllows } from "./screen-access.js";
4
+ import { type ListSort } from "../hooks/use-list-url-state.ts";
5
+ import type { FeatureSchema } from "./feature-schema.ts";
6
+ import { qualifyScreenId } from "./qualify-screen-id.ts";
7
+ import { screenAccessAllows } from "./screen-access.ts";
8
8
  export type KumikoScreenProps = {
9
9
  readonly schema: FeatureSchema;
10
10
  readonly qn: string;
@@ -134,7 +134,10 @@ export function ScreenMissingState({ screenQn, homeScreenId, testId = "kumiko-sc
134
134
  useEffect(() => {
135
135
  console.warn(`[kumiko] screen "${screenQn}" is not in the schema (feature disabled, stale link or miswired screen).`);
136
136
  }, [screenQn]);
137
- return (_jsxs(Card, { options: { padded: true }, testId: testId, children: [_jsx(Text, { testId: `${testId}-title`, children: t("kumiko.screen-missing.title") }), _jsx(Text, { variant: "muted", children: t("kumiko.screen-missing.hint") }), homeScreenId !== undefined && (_jsx(ScreenMissingHomeButton, { homeScreenId: homeScreenId, testId: `${testId}-home` }))] }));
137
+ return (_jsx(Card, { options: { padded: true }, slots: {
138
+ title: _jsx(Text, { testId: `${testId}-title`, children: t("kumiko.screen-missing.title") }),
139
+ subtitle: _jsx(Text, { variant: "muted", children: t("kumiko.screen-missing.hint") }),
140
+ }, testId: testId, children: homeScreenId !== undefined ? (_jsx(ScreenMissingHomeButton, { homeScreenId: homeScreenId, testId: `${testId}-home` })) : null }));
138
141
  }
139
142
  function ScreenAccessDeniedBanner({ screenQn, testId, }) {
140
143
  const { Banner } = usePrimitives();
@@ -1,7 +1,7 @@
1
1
  import type { ListEmptyStateSpec } from "@cosmicdrift/kumiko-framework/ui-types";
2
2
  import type { Translate } from "@cosmicdrift/kumiko-headless";
3
- import type { ListEmptyStateContent } from "../components/list-empty-state.js";
4
- import { buildRecordActions } from "./row-actions.js";
3
+ import type { ListEmptyStateContent } from "../components/list-empty-state.tsx";
4
+ import { buildRecordActions } from "./row-actions.ts";
5
5
  type ActionBindings = Pick<Parameters<typeof buildRecordActions>[0], "nav" | "host" | "dispatcher" | "openDrawer" | "onWriteSuccess">;
6
6
  export declare function useListEmptyContent(spec: ListEmptyStateSpec | undefined, translate: Translate, bindings: ActionBindings): ListEmptyStateContent | undefined;
7
7
  export declare function isListNarrowed(search: string, filters: Readonly<Record<string, readonly string[]>>, defaultFilters?: Readonly<Record<string, readonly string[]>>): boolean;
@@ -1,6 +1,6 @@
1
1
  import type { EntityListFacetConfig, ListFacetSpec } from "@cosmicdrift/kumiko-framework/ui-types";
2
2
  import type { Translate } from "@cosmicdrift/kumiko-headless";
3
- import type { DataTableFacet, DataTableFacetChip } from "../primitives.js";
3
+ import type { DataTableFacet, DataTableFacetChip } from "../primitives.tsx";
4
4
  export type ResolvedFacetSpec = {
5
5
  readonly field: string;
6
6
  readonly type: "select" | "boolean" | "reference";
package/dist/app/nav.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
- import type { FeatureSchema } from "./feature-schema.js";
2
+ import type { FeatureSchema } from "./feature-schema.ts";
3
3
  export type NavRoute = {
4
4
  readonly workspaceId?: string;
5
5
  readonly screenId: string;
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
- import type { ResolvedFacetSpec } from "./list-facets.js";
2
+ import type { ResolvedFacetSpec } from "./list-facets.ts";
3
3
  export type ReferenceFacetOption = {
4
4
  readonly value: string;
5
5
  readonly label: string;
@@ -1,6 +1,6 @@
1
1
  import { type ReactNode } from "react";
2
- import type { FeatureSchema } from "./feature-schema.js";
3
- import { type NavApi, type NavTarget, type ScreenTarget } from "./nav.js";
2
+ import type { FeatureSchema } from "./feature-schema.ts";
3
+ import { type NavApi, type NavTarget, type ScreenTarget } from "./nav.tsx";
4
4
  export declare const RETURN_TO_PARAM = "returnTo";
5
5
  export type ReturnHost = {
6
6
  readonly screenId: string;
@@ -1,10 +1,10 @@
1
1
  import type { EntityEditScreenDefinition, RelatedListToolbarAction, RowAction, RowActionDrawer, RowActionNavigate, RowActionWriteHandler, RowFieldExtractor, ToolbarAction } from "@cosmicdrift/kumiko-framework/ui-types";
2
2
  import type { Dispatcher, ListRowViewModel, Translate } from "@cosmicdrift/kumiko-headless";
3
- import type { RenderEditAction } from "../components/render-edit-types.js";
4
- import type { ToolbarActionButton } from "../components/render-list.js";
5
- import type { DataTableRowAction } from "../primitives.js";
6
- import type { NavApi } from "./nav.js";
7
- import { type ReturnHost } from "./return-to.js";
3
+ import type { RenderEditAction } from "../components/render-edit-types.ts";
4
+ import type { ToolbarActionButton } from "../components/render-list.tsx";
5
+ import type { DataTableRowAction } from "../primitives.tsx";
6
+ import type { NavApi } from "./nav.tsx";
7
+ import { type ReturnHost } from "./return-to.tsx";
8
8
  export declare function buildDefaultEditRowAction(editScreen: EntityEditScreenDefinition | undefined, idColumn?: string): RowActionNavigate | undefined;
9
9
  export declare function evalRowExtractor(extractor: RowFieldExtractor, row: Record<string, unknown>): Record<string, unknown>;
10
10
  export declare function isWriteHandlerRowAction(action: RowAction): action is RowActionWriteHandler;
@@ -1,7 +1,7 @@
1
1
  import type { SecretMintScreenDefinition } from "@cosmicdrift/kumiko-framework/ui-types";
2
2
  import type { Translate } from "@cosmicdrift/kumiko-headless";
3
3
  import { type ReactNode } from "react";
4
- import type { FeatureSchema } from "./feature-schema.js";
4
+ import type { FeatureSchema } from "./feature-schema.ts";
5
5
  export type SecretMintBodyProps = {
6
6
  readonly schema: FeatureSchema;
7
7
  readonly screen: SecretMintScreenDefinition;
@@ -1,4 +1,4 @@
1
- import type { FeatureSchema } from "./feature-schema.js";
1
+ import type { FeatureSchema } from "./feature-schema.ts";
2
2
  export type EmbeddedScreenTarget = {
3
3
  readonly schema: FeatureSchema;
4
4
  readonly qn: string;
@@ -3,5 +3,7 @@ export type VariableChipsProps = {
3
3
  readonly variables: readonly string[];
4
4
  readonly onInsert: (name: string) => void;
5
5
  readonly disabled?: boolean;
6
+ /** Display text per variable name; a named chip keeps the raw name as tooltip. */
7
+ readonly labels?: Readonly<Record<string, string>>;
6
8
  };
7
- export declare function VariableChips({ variables, onInsert, disabled }: VariableChipsProps): ReactNode;
9
+ export declare function VariableChips({ variables, onInsert, disabled, labels, }: VariableChipsProps): ReactNode;
@@ -9,8 +9,11 @@ import { usePrimitives } from "../primitives.js";
9
9
  // No wrapping element: @cosmicdrift/kumiko-renderer is DOM-free (native impls
10
10
  // have no <div>), and layout is a platform concern anyway — the caller
11
11
  // (PlainContentEditor et al.) places these buttons in its own container.
12
- export function VariableChips({ variables, onInsert, disabled }) {
12
+ export function VariableChips({ variables, onInsert, disabled, labels, }) {
13
13
  const { Button } = usePrimitives();
14
14
  const t = useTranslation();
15
- return (_jsx(Fragment, { children: variables.map((name) => (_jsx(Button, { type: "button", variant: "secondary", size: "sm", disabled: disabled, onClick: () => onInsert(name), ariaLabel: t("kumiko.contentEditor.insertVariable", { name }), children: `{{${name}}}` }, name))) }));
15
+ return (_jsx(Fragment, { children: variables.map((name) => {
16
+ const label = labels !== undefined && Object.hasOwn(labels, name) ? labels[name] : undefined;
17
+ return (_jsx(Button, { type: "button", variant: "secondary", size: "sm", disabled: disabled, onClick: () => onInsert(name), ariaLabel: t("kumiko.contentEditor.insertVariable", { name: label ?? name }), ...(label !== undefined && { title: name }), children: label ?? `{{${name}}}` }, name));
18
+ }) }));
16
19
  }
@@ -1,5 +1,5 @@
1
1
  import type { DashboardPanelVisibility } from "@cosmicdrift/kumiko-framework/ui-types";
2
- import type { UseQueryResult } from "../hooks/use-query.js";
2
+ import type { UseQueryResult } from "../hooks/use-query.ts";
3
3
  export type VisibleWhenVerdict = "loading" | "visible" | "hidden" | "error";
4
4
  export declare function evalVisibleWhen(visibleWhen: DashboardPanelVisibility, result: UseQueryResult<Readonly<Record<string, unknown>>> | undefined): VisibleWhenVerdict;
5
5
  export declare function evalVisibleWhenAfterShown(visibleWhen: DashboardPanelVisibility, result: UseQueryResult<Readonly<Record<string, unknown>>> | undefined, wasShown: boolean): VisibleWhenVerdict;
@@ -1,6 +1,6 @@
1
1
  import type { EditFieldViewModel, FieldIssue } from "@cosmicdrift/kumiko-headless";
2
2
  import type { ReactNode } from "react";
3
- import type { FieldCellWidth, FieldProps, usePrimitives } from "../primitives.js";
3
+ import type { FieldCellWidth, FieldProps, usePrimitives } from "../primitives.tsx";
4
4
  export type GridCellForFieldProps = {
5
5
  readonly field: EditFieldViewModel;
6
6
  readonly columns: number;
@@ -1,5 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
- import type { RenderEditAction } from "./render-edit-types.js";
2
+ import type { RenderEditAction } from "./render-edit-types.ts";
3
3
  export type ListEmptyStateContent = {
4
4
  readonly title: string;
5
5
  readonly description?: string;
@@ -4,7 +4,7 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { useAppFeatures } from "../app/app-features-context.js";
5
5
  import { buildFilterFacets, buildFilterPayload, mergeReferenceFacetOptions, resolveProjectionFacetSpecs, } from "../app/list-facets.js";
6
6
  import { useNav } from "../app/nav.js";
7
- import { ReferenceFacetBridges } from "../app/reference-facet-bridge.js";
7
+ import { ReferenceFacetBridges, } from "../app/reference-facet-bridge.js";
8
8
  import { navigateWithReturnTo, useReturnHost } from "../app/return-to.js";
9
9
  import { buildDefaultEditRowAction, buildProjectionRowActions, buildProjectionToolbarActions, buildRecordActions, runProjectionRowNavigate, } from "../app/row-actions.js";
10
10
  import { findEditScreenFor } from "../app/screen-access.js";
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
- import type { usePrimitives } from "../primitives.js";
3
- import type { RenderEditAction } from "./render-edit-types.js";
2
+ import type { usePrimitives } from "../primitives.tsx";
3
+ import type { RenderEditAction } from "./render-edit-types.ts";
4
4
  export declare function needsActionConfirm(action: Pick<RenderEditAction, "confirm" | "confirmRequired" | "style">): boolean;
5
5
  export declare function RenderEditActionConfirmDialog({ action, open, onOpenChange, onConfirm, Dialog, }: {
6
6
  readonly action: RenderEditAction;
@@ -1,6 +1,6 @@
1
1
  import type { FormValues } from "@cosmicdrift/kumiko-headless";
2
- import type { RenderEditProps } from "./render-edit-types.js";
3
- export type { RenderEditAction, RenderEditChangeState, RenderEditControls, RenderEditProps, } from "./render-edit-types.js";
2
+ import type { RenderEditProps } from "./render-edit-types.ts";
3
+ export type { RenderEditAction, RenderEditChangeState, RenderEditControls, RenderEditProps, } from "./render-edit-types.ts";
4
4
  import { type ReactNode } from "react";
5
5
  export declare const PATCH_DRAFT_SAVE_DEBOUNCE_MS = 500;
6
6
  /** A record title is a non-blank string; anything else leaves the screen title alone. */
@@ -1,6 +1,6 @@
1
1
  import { type EditFieldViewModel, type FieldIssue } from "@cosmicdrift/kumiko-headless";
2
2
  import { type ReactNode } from "react";
3
- import { type FieldProps } from "../primitives.js";
3
+ import { type FieldProps } from "../primitives.tsx";
4
4
  export type RenderFieldProps = {
5
5
  readonly field: EditFieldViewModel;
6
6
  readonly issues?: readonly FieldIssue[];
@@ -1,9 +1,9 @@
1
1
  import type { EntityDefinition, EntityListScreenDefinition, IconKey } from "@cosmicdrift/kumiko-framework/ui-types";
2
2
  import type { ListRowViewModel, Translate } from "@cosmicdrift/kumiko-headless";
3
3
  import { type ReactNode } from "react";
4
- import type { ListSort } from "../hooks/use-list-url-state.js";
5
- import { type DataTableDateRangeFacet, type DataTableFacet, type DataTableProps, type DataTableRowAction, type DataTableRowActionMode, type DataTableRowGrouping } from "../primitives.js";
6
- import { type ListEmptyStateContent } from "./list-empty-state.js";
4
+ import type { ListSort } from "../hooks/use-list-url-state.ts";
5
+ import { type DataTableDateRangeFacet, type DataTableFacet, type DataTableProps, type DataTableRowAction, type DataTableRowActionMode, type DataTableRowGrouping } from "../primitives.tsx";
6
+ import { type ListEmptyStateContent } from "./list-empty-state.tsx";
7
7
  export type RenderListProps = {
8
8
  readonly screen: EntityListScreenDefinition;
9
9
  readonly entity: EntityDefinition;
@@ -1,6 +1,6 @@
1
1
  import { type ReactNode } from "react";
2
- import type { ActionMenuItemSpec, usePrimitives } from "../primitives.js";
3
- import type { RenderEditAction } from "./render-edit-types.js";
2
+ import type { ActionMenuItemSpec, usePrimitives } from "../primitives.tsx";
3
+ import type { RenderEditAction } from "./render-edit-types.ts";
4
4
  export declare function useActionMenuItems({ Dialog, onError, }: {
5
5
  readonly Dialog: ReturnType<typeof usePrimitives>["Dialog"];
6
6
  readonly onError: (text: string | null) => void;
@@ -1,6 +1,6 @@
1
1
  import type { Dispatcher, DispatcherStatus } from "@cosmicdrift/kumiko-headless";
2
2
  import { type ReactNode } from "react";
3
- import { type QueryPools } from "./query-pool.js";
3
+ import { type QueryPools } from "./query-pool.ts";
4
4
  export type DispatcherProviderProps = {
5
5
  readonly dispatcher: Dispatcher;
6
6
  readonly children: ReactNode;
@@ -1,4 +1,4 @@
1
- import type { DataTableSort, DataTableSortDir } from "../primitives.js";
1
+ import type { DataTableSort, DataTableSortDir } from "../primitives.tsx";
2
2
  export declare const NO_FILTER_URL_VALUE = "~";
3
3
  export type ListSortDir = DataTableSortDir;
4
4
  export type ListSort = DataTableSort;
@@ -1,2 +1,2 @@
1
- import type { ExtensionSectionProps } from "../app/extension-sections.js";
1
+ import type { ExtensionSectionProps } from "../app/extension-sections.tsx";
2
2
  export declare function useReportStepComplete(reportStepComplete: ExtensionSectionProps["reportStepComplete"], complete: boolean | null): void;
@@ -1,2 +1,2 @@
1
- import type { TranslationsByLocale } from "./i18n.js";
1
+ import type { TranslationsByLocale } from "./i18n.tsx";
2
2
  export declare const kumikoDefaultTranslations: TranslationsByLocale;
@@ -257,6 +257,7 @@ export const kumikoDefaultTranslations = {
257
257
  "errors.validation.failed": "Validation failed.",
258
258
  "errors.feature.disabled": "This feature is currently unavailable.",
259
259
  "errors.access.denied": "You don't have permission to do this.",
260
+ "errors.demoReadOnly": "This live demo is read-only.",
260
261
  "errors.notFound": "Not found.",
261
262
  "errors.conflict": "Conflict — the operation could not be completed.",
262
263
  "errors.versionConflict": "The record was modified in the meantime. Reload and try again.",
package/dist/index.d.ts CHANGED
@@ -1,87 +1,87 @@
1
1
  export { type Formality, formalLocaleTag } from "@cosmicdrift/kumiko-framework/ui-types";
2
- export { synthesizeActionFormEntity, synthesizeActionFormScreen } from "./app/action-form-shim.js";
3
- export type { AppFeaturesProviderProps } from "./app/app-features-context.js";
4
- export { AppFeaturesProvider, useAppFeatures } from "./app/app-features-context.js";
5
- export type { ColumnRendererComponent, ColumnRendererProps, ColumnRenderersMap, ColumnRenderersProviderProps, } from "./app/column-renderers.js";
6
- export { ColumnRenderersProvider, useColumnRenderer } from "./app/column-renderers.js";
7
- export type { ContentEditorComponent, ContentEditorProps, ContentEditorsMap, ContentEditorsProviderProps, } from "./app/content-editors.js";
8
- export { CONTENT_EDITOR_ELEMENT_ID, ContentEditorsProvider, TextareaContentEditor, useContentEditor, } from "./app/content-editors.js";
9
- export type { ContentPreviewProps } from "./app/content-preview.js";
10
- export { ContentPreview, substituteVariables } from "./app/content-preview.js";
11
- export type { CustomScreensMap, CustomScreensProviderProps } from "./app/custom-screens.js";
12
- export { CustomScreensProvider, useCustomScreenComponent } from "./app/custom-screens.js";
13
- export type { DashboardBodyProps, DashboardBodyProviderProps } from "./app/dashboard-body.js";
14
- export { DashboardBodyProvider, useDashboardBody } from "./app/dashboard-body.js";
15
- export type { ExtensionFormRegistry, ExtensionFormSubmitHandler, ExtensionSubmitContext, ExtensionSubmitResult, } from "./app/extension-form-submit.js";
16
- export { ExtensionFormRegistryProvider, useExtensionFormSubmit, } from "./app/extension-form-submit.js";
17
- export type { ExtensionSectionComponent, ExtensionSectionProps, ExtensionSectionsMap, ExtensionSectionsProviderProps, } from "./app/extension-sections.js";
18
- export { ExtensionSectionsProvider, extensionSectionName, useExtensionSectionComponent, } from "./app/extension-sections.js";
19
- export type { AppSchema, FeatureSchema, QualifiedContentCollection, WorkspaceSchema, } from "./app/feature-schema.js";
20
- export { isAppSchema, toAppSchema } from "./app/feature-schema.js";
21
- export type { KumikoScreenProps } from "./app/kumiko-screen.js";
22
- export { KumikoScreen, qualifyNavId, qualifyScreenId, ScreenMissingState, } from "./app/kumiko-screen.js";
23
- export type { DateRangeBound, DateRangeValue, ResolvedDateRangeFacet } from "./app/list-facets.js";
24
- export { buildDateRangePayload, clampDateRange, readDateRange, resolveDateRangeFacets, } from "./app/list-facets.js";
25
- export type { NavApi, NavigateOptions, NavProviderProps, NavRoute, NavTarget, ObjectTarget, ScreenTarget, } from "./app/nav.js";
26
- export { formatPath, hasDetailScreen, NavProvider, parsePath, resolveTarget, useNav, useNavigateWithInitialValues, } from "./app/nav.js";
27
- export { lastSegment } from "./app/qn.js";
28
- export type { ReturnHost, ReturnTo } from "./app/return-to.js";
29
- export { navigateToReturn, navigateToReturnOr, navigateWithReturnTo, RETURN_TO_PARAM, ReturnHostProvider, resolveReturnTarget, splitReturnTo, useReturnHost, useReturnTarget, } from "./app/return-to.js";
30
- export type { EmbeddedScreenTarget } from "./app/use-embedded-screen.js";
31
- export { useEmbeddedScreen } from "./app/use-embedded-screen.js";
32
- export type { VariableChipsProps } from "./app/variable-chips.js";
33
- export { VariableChips } from "./app/variable-chips.js";
34
- export { evalVisibleWhen, type VisibleWhenVerdict } from "./app/visible-when.js";
35
- export { dispatcherErrorText, WriteFailedError } from "./app/write-failed-error.js";
36
- export type { ErrorBoundaryFallbackProps, ErrorBoundaryProps, } from "./components/error-boundary.js";
37
- export { ErrorBoundary } from "./components/error-boundary.js";
38
- export { RelatedListSection } from "./components/related-list-section.js";
39
- export type { RenderEditAction, RenderEditChangeState, RenderEditControls, RenderEditProps, } from "./components/render-edit.js";
40
- export { RenderEdit } from "./components/render-edit.js";
41
- export { needsActionConfirm } from "./components/render-edit-action-button.js";
42
- export type { RenderFieldProps } from "./components/render-field.js";
43
- export { RenderField } from "./components/render-field.js";
44
- export type { RenderListProps } from "./components/render-list.js";
45
- export { RenderList } from "./components/render-list.js";
46
- export type { DispatcherProviderProps } from "./context/dispatcher-context.js";
47
- export { DispatcherProvider, useDispatcher, useDispatcherStatus, useOptionalDispatcher, } from "./context/dispatcher-context.js";
48
- export type { DraftStorage, DraftStorageProviderProps } from "./context/draft-storage-context.js";
49
- export { DraftStorageProvider, useDraftStorage } from "./context/draft-storage-context.js";
50
- export { EmbeddedScreenProvider, useIsEmbeddedScreen } from "./context/embedded-screen-context.js";
51
- export type { UserRolesProviderProps } from "./context/user-roles-context.js";
52
- export { UserRolesProvider, useUserRoles } from "./context/user-roles-context.js";
53
- export type { CurrentUser } from "./current-user.js";
54
- export { CurrentUserProvider, useOptionalCurrentUser } from "./current-user.js";
55
- export { formatWhen } from "./format-when.js";
56
- export { REFERENCE_COMBOBOX_LIMIT, REFERENCE_LIST_LOOKUP_LIMIT, REFERENCE_SEARCH_DEBOUNCE_MS, } from "./hooks/reference-limits.js";
57
- export type { AiTextActionState, AiTextMode, AiTextRewriteStyle, AiTextRunPayload, AiTextRunResult, AiTextUsage, UseAiTextActionResult, UseCompletionResult, } from "./hooks/use-ai-text.js";
58
- export { AI_TEXT_RUN_QN, useAiTextAction, useCompletion } from "./hooks/use-ai-text.js";
59
- export type { UseDisclosureResult } from "./hooks/use-disclosure.js";
60
- export { useDisclosure } from "./hooks/use-disclosure.js";
61
- export type { UseFormOptions, UseFormResult } from "./hooks/use-form.js";
62
- export { useForm } from "./hooks/use-form.js";
63
- export type { ListSort, ListSortDir, ListUrlState, ListUrlStateApi, } from "./hooks/use-list-url-state.js";
64
- export { listFilterUrlKey, useListUrlState } from "./hooks/use-list-url-state.js";
65
- export type { UseMutationResult } from "./hooks/use-mutation.js";
66
- export { useMutation } from "./hooks/use-mutation.js";
67
- export type { UseQueryOptions, UseQueryResult } from "./hooks/use-query.js";
68
- export { entityFromQueryType, useQuery } from "./hooks/use-query.js";
69
- export { useReportStepComplete } from "./hooks/use-report-step-complete.js";
70
- export { useStore, useStoreSelector } from "./hooks/use-store.js";
71
- export type { StreamStatus, UseStreamHandlerOptions, UseStreamHandlerResult, } from "./hooks/use-stream-handler.js";
72
- export { useStreamHandler } from "./hooks/use-stream-handler.js";
73
- export type { LocaleProviderProps, TranslationBundle, TranslationsByKey, TranslationsByLocale, } from "./i18n.js";
74
- export { createStaticLocaleResolver, FormalityProvider, LocaleProvider, mergeTranslations, translationsByKeyFromLocales, translationsByLocaleFromKeys, useFormality, useLocale, useOptionalLocale, useOptionalTranslation, useTranslation, } from "./i18n.js";
75
- export { kumikoDefaultTranslations } from "./i18n-defaults.js";
76
- export { InsideDrawerProvider, useInsideDrawer } from "./inside-drawer.js";
77
- export { PageHeaderCompactProvider, PageHeaderSlotAvailableProvider, usePageHeaderCompact, usePageHeaderSlotAvailable, } from "./page-header-slot.js";
78
- export type { ActionMenuItemSpec, ActionOverflowMenuProps, AppPrimitives, BannerProps, ButtonProps, CardOptions, CardProps, CardSlots, CopyButtonProps, CorePrimitives, DataTableDateRangeFacet, DataTableFacet, DataTableFacetChip, DataTableProps, DataTableRowAction, DataTableRowActionMode, DataTableRowGrouping, DataTableSort, DataTableSortDir, DialogProps, DrawerProps, EmbeddedListCellType, EmbeddedListColumn, EmbeddedListInputProps, EmbeddedListTotal, FieldCellWidth, FieldProps, FillContainerProps, FooterActionMarker, FooterActionRole, FormProps, FormSectionNavItem, FormWidth, GridCellProps, GridProps, HeadingProps, InputProps, JsonViewProps, LightboxImage, LightboxProps, LinkProps, MetricBandProps, MetricProps, ModalProps, PageHeaderProps, PickedFile, PrimitivesProviderProps, PrimitivesRegistry, ProgressProps, ProgressTone, PromoPanelAction, PromoPanelProps, RuntimeRenderer, SecretRevealProps, SecretRevealValue, SectionProps, ShareButtonProps, StatusBadgeProps, StatusTone, StepBarProps, StickyActionBarProps, StickyPrimaryActionMarker, TabsProps, TextProps, TrailingInputAction, WizardStepGroupProps, } from "./primitives.js";
79
- export { FOOTER_ACTION_ROLE_PROP, NARROW_LABEL_PROP, PrimitivesProvider, STICKY_PRIMARY_ACTION_PROP, shouldRenderActionsIconOnly, statusToneForOptionTone, statusToneForValue, useOptionalPrimitives, usePrimitives, } from "./primitives.js";
80
- export type { SessionEndedSignal, SessionEndedSignalProviderProps, } from "./session/session-ended.js";
81
- export { createSessionEndedSignal, isSessionEndedError, SESSION_ENDED_ERROR_CODES, SessionEndedSignalProvider, useSessionEndedSignal, withSessionEndedDetection, } from "./session/session-ended.js";
82
- export { buildWhatsAppShareUrl } from "./share-links.js";
83
- export { sortByAccessor } from "./sort-by-accessor.js";
84
- export type { LiveEvent, LiveEventSubscriber, LiveEventsProviderProps } from "./sse/live-events.js";
85
- export { LiveEventsProvider, useLiveEvents } from "./sse/live-events.js";
86
- export type { AppTokens, ColorTokens, CoreTokens, FontTokens, RadiusTokens, ShadowTokens, SpacingTokens, ThemeMode, ThemePreference, Tokens, TokensApi, TokensProviderProps, } from "./tokens.js";
87
- export { cssVarTokens, TokensProvider, useTokenController, useTokens } from "./tokens.js";
2
+ export { synthesizeActionFormEntity, synthesizeActionFormScreen } from "./app/action-form-shim.ts";
3
+ export type { AppFeaturesProviderProps } from "./app/app-features-context.tsx";
4
+ export { AppFeaturesProvider, useAppFeatures } from "./app/app-features-context.tsx";
5
+ export type { ColumnRendererComponent, ColumnRendererProps, ColumnRenderersMap, ColumnRenderersProviderProps, } from "./app/column-renderers.tsx";
6
+ export { ColumnRenderersProvider, useColumnRenderer } from "./app/column-renderers.tsx";
7
+ export type { ContentEditorComponent, ContentEditorProps, ContentEditorsMap, ContentEditorsProviderProps, } from "./app/content-editors.tsx";
8
+ export { CONTENT_EDITOR_ELEMENT_ID, ContentEditorsProvider, TextareaContentEditor, useContentEditor, } from "./app/content-editors.tsx";
9
+ export type { ContentPreviewProps } from "./app/content-preview.tsx";
10
+ export { ContentPreview, substituteVariables } from "./app/content-preview.tsx";
11
+ export type { CustomScreensMap, CustomScreensProviderProps } from "./app/custom-screens.tsx";
12
+ export { CustomScreensProvider, useCustomScreenComponent } from "./app/custom-screens.tsx";
13
+ export type { DashboardBodyProps, DashboardBodyProviderProps } from "./app/dashboard-body.tsx";
14
+ export { DashboardBodyProvider, useDashboardBody } from "./app/dashboard-body.tsx";
15
+ export type { ExtensionFormRegistry, ExtensionFormSubmitHandler, ExtensionSubmitContext, ExtensionSubmitResult, } from "./app/extension-form-submit.tsx";
16
+ export { ExtensionFormRegistryProvider, useExtensionFormSubmit, } from "./app/extension-form-submit.tsx";
17
+ export type { ExtensionSectionComponent, ExtensionSectionProps, ExtensionSectionsMap, ExtensionSectionsProviderProps, } from "./app/extension-sections.tsx";
18
+ export { ExtensionSectionsProvider, extensionSectionName, useExtensionSectionComponent, } from "./app/extension-sections.tsx";
19
+ export type { AppSchema, FeatureSchema, QualifiedContentCollection, WorkspaceSchema, } from "./app/feature-schema.ts";
20
+ export { isAppSchema, toAppSchema } from "./app/feature-schema.ts";
21
+ export type { KumikoScreenProps } from "./app/kumiko-screen.tsx";
22
+ export { KumikoScreen, qualifyNavId, qualifyScreenId, ScreenMissingState, } from "./app/kumiko-screen.tsx";
23
+ export type { DateRangeBound, DateRangeValue, ResolvedDateRangeFacet } from "./app/list-facets.ts";
24
+ export { buildDateRangePayload, clampDateRange, readDateRange, resolveDateRangeFacets, } from "./app/list-facets.ts";
25
+ export type { NavApi, NavigateOptions, NavProviderProps, NavRoute, NavTarget, ObjectTarget, ScreenTarget, } from "./app/nav.tsx";
26
+ export { formatPath, hasDetailScreen, NavProvider, parsePath, resolveTarget, useNav, useNavigateWithInitialValues, } from "./app/nav.tsx";
27
+ export { lastSegment } from "./app/qn.ts";
28
+ export type { ReturnHost, ReturnTo } from "./app/return-to.tsx";
29
+ export { navigateToReturn, navigateToReturnOr, navigateWithReturnTo, RETURN_TO_PARAM, ReturnHostProvider, resolveReturnTarget, splitReturnTo, useReturnHost, useReturnTarget, } from "./app/return-to.tsx";
30
+ export type { EmbeddedScreenTarget } from "./app/use-embedded-screen.ts";
31
+ export { useEmbeddedScreen } from "./app/use-embedded-screen.ts";
32
+ export type { VariableChipsProps } from "./app/variable-chips.tsx";
33
+ export { VariableChips } from "./app/variable-chips.tsx";
34
+ export { evalVisibleWhen, type VisibleWhenVerdict } from "./app/visible-when.ts";
35
+ export { dispatcherErrorText, WriteFailedError } from "./app/write-failed-error.ts";
36
+ export type { ErrorBoundaryFallbackProps, ErrorBoundaryProps, } from "./components/error-boundary.tsx";
37
+ export { ErrorBoundary } from "./components/error-boundary.tsx";
38
+ export { RelatedListSection } from "./components/related-list-section.tsx";
39
+ export type { RenderEditAction, RenderEditChangeState, RenderEditControls, RenderEditProps, } from "./components/render-edit.tsx";
40
+ export { RenderEdit } from "./components/render-edit.tsx";
41
+ export { needsActionConfirm } from "./components/render-edit-action-button.tsx";
42
+ export type { RenderFieldProps } from "./components/render-field.tsx";
43
+ export { RenderField } from "./components/render-field.tsx";
44
+ export type { RenderListProps } from "./components/render-list.tsx";
45
+ export { RenderList } from "./components/render-list.tsx";
46
+ export type { DispatcherProviderProps } from "./context/dispatcher-context.tsx";
47
+ export { DispatcherProvider, useDispatcher, useDispatcherStatus, useOptionalDispatcher, } from "./context/dispatcher-context.tsx";
48
+ export type { DraftStorage, DraftStorageProviderProps } from "./context/draft-storage-context.tsx";
49
+ export { DraftStorageProvider, useDraftStorage } from "./context/draft-storage-context.tsx";
50
+ export { EmbeddedScreenProvider, useIsEmbeddedScreen } from "./context/embedded-screen-context.tsx";
51
+ export type { UserRolesProviderProps } from "./context/user-roles-context.tsx";
52
+ export { UserRolesProvider, useUserRoles } from "./context/user-roles-context.tsx";
53
+ export type { CurrentUser } from "./current-user.tsx";
54
+ export { CurrentUserProvider, useOptionalCurrentUser } from "./current-user.tsx";
55
+ export { formatWhen } from "./format-when.ts";
56
+ export { REFERENCE_COMBOBOX_LIMIT, REFERENCE_LIST_LOOKUP_LIMIT, REFERENCE_SEARCH_DEBOUNCE_MS, } from "./hooks/reference-limits.ts";
57
+ export type { AiTextActionState, AiTextMode, AiTextRewriteStyle, AiTextRunPayload, AiTextRunResult, AiTextUsage, UseAiTextActionResult, UseCompletionResult, } from "./hooks/use-ai-text.ts";
58
+ export { AI_TEXT_RUN_QN, useAiTextAction, useCompletion } from "./hooks/use-ai-text.ts";
59
+ export type { UseDisclosureResult } from "./hooks/use-disclosure.ts";
60
+ export { useDisclosure } from "./hooks/use-disclosure.ts";
61
+ export type { UseFormOptions, UseFormResult } from "./hooks/use-form.ts";
62
+ export { useForm } from "./hooks/use-form.ts";
63
+ export type { ListSort, ListSortDir, ListUrlState, ListUrlStateApi, } from "./hooks/use-list-url-state.ts";
64
+ export { listFilterUrlKey, useListUrlState } from "./hooks/use-list-url-state.ts";
65
+ export type { UseMutationResult } from "./hooks/use-mutation.ts";
66
+ export { useMutation } from "./hooks/use-mutation.ts";
67
+ export type { UseQueryOptions, UseQueryResult } from "./hooks/use-query.ts";
68
+ export { entityFromQueryType, useQuery } from "./hooks/use-query.ts";
69
+ export { useReportStepComplete } from "./hooks/use-report-step-complete.ts";
70
+ export { useStore, useStoreSelector } from "./hooks/use-store.ts";
71
+ export type { StreamStatus, UseStreamHandlerOptions, UseStreamHandlerResult, } from "./hooks/use-stream-handler.ts";
72
+ export { useStreamHandler } from "./hooks/use-stream-handler.ts";
73
+ export type { LocaleProviderProps, TranslationBundle, TranslationsByKey, TranslationsByLocale, } from "./i18n.tsx";
74
+ export { createStaticLocaleResolver, FormalityProvider, LocaleProvider, mergeTranslations, translationsByKeyFromLocales, translationsByLocaleFromKeys, useFormality, useLocale, useOptionalLocale, useOptionalTranslation, useTranslation, } from "./i18n.tsx";
75
+ export { kumikoDefaultTranslations } from "./i18n-defaults.ts";
76
+ export { InsideDrawerProvider, useInsideDrawer } from "./inside-drawer.ts";
77
+ export { PageHeaderCompactProvider, PageHeaderSlotAvailableProvider, usePageHeaderCompact, usePageHeaderSlotAvailable, } from "./page-header-slot.ts";
78
+ export type { ActionMenuItemSpec, ActionOverflowMenuProps, AppPrimitives, BannerProps, ButtonProps, CardOptions, CardProps, CardSlots, CopyButtonProps, CorePrimitives, DataTableDateRangeFacet, DataTableFacet, DataTableFacetChip, DataTableProps, DataTableRowAction, DataTableRowActionMode, DataTableRowGrouping, DataTableSort, DataTableSortDir, DialogProps, DrawerProps, EmbeddedListCellType, EmbeddedListColumn, EmbeddedListInputProps, EmbeddedListTotal, FieldCellWidth, FieldProps, FillContainerProps, FooterActionMarker, FooterActionRole, FormProps, FormSectionNavItem, FormWidth, GridCellProps, GridProps, HeadingProps, InputProps, JsonViewProps, LightboxImage, LightboxProps, LinkProps, MetricBandProps, MetricProps, ModalProps, PageHeaderProps, PickedFile, PrimitivesProviderProps, PrimitivesRegistry, ProgressProps, ProgressTone, PromoPanelAction, PromoPanelProps, RuntimeRenderer, SecretRevealProps, SecretRevealValue, SectionProps, ShareButtonProps, StatusBadgeProps, StatusTone, StepBarProps, StickyActionBarProps, StickyPrimaryActionMarker, TabsProps, TextProps, TrailingInputAction, WizardStepGroupProps, } from "./primitives.tsx";
79
+ export { FOOTER_ACTION_ROLE_PROP, NARROW_LABEL_PROP, PrimitivesProvider, STICKY_PRIMARY_ACTION_PROP, shouldRenderActionsIconOnly, statusToneForOptionTone, statusToneForValue, useOptionalPrimitives, usePrimitives, } from "./primitives.tsx";
80
+ export type { SessionEndedSignal, SessionEndedSignalProviderProps, } from "./session/session-ended.tsx";
81
+ export { createSessionEndedSignal, isSessionEndedError, SESSION_ENDED_ERROR_CODES, SessionEndedSignalProvider, useSessionEndedSignal, withSessionEndedDetection, } from "./session/session-ended.tsx";
82
+ export { buildWhatsAppShareUrl } from "./share-links.ts";
83
+ export { sortByAccessor } from "./sort-by-accessor.ts";
84
+ export type { LiveEvent, LiveEventSubscriber, LiveEventsProviderProps, } from "./sse/live-events.tsx";
85
+ export { LiveEventsProvider, useLiveEvents } from "./sse/live-events.tsx";
86
+ export type { AppTokens, ColorTokens, CoreTokens, FontTokens, RadiusTokens, ShadowTokens, SpacingTokens, ThemeMode, ThemePreference, Tokens, TokensApi, TokensProviderProps, } from "./tokens.tsx";
87
+ export { cssVarTokens, TokensProvider, useTokenController, useTokens } from "./tokens.tsx";
@@ -1,4 +1,4 @@
1
- import type { DataTableSort } from "./primitives.js";
1
+ import type { DataTableSort } from "./primitives.tsx";
2
2
  type SortValue = string | number | null;
3
3
  /** Sorts `rows` by a `DataTableSort` against a field->accessor map. Unknown
4
4
  * field or `sort === null` returns `rows` unchanged (no-op, not an error —
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-renderer",
3
- "version": "0.369.0",
3
+ "version": "0.371.0",
4
4
  "description": "Platform-agnostic React renderer for Kumiko screens. Contains the shared logic — primitives-contract, hooks, KumikoScreen, navigation & SSE abstractions — that any platform-specific renderer (web, native) composes. No DOM, no EventSource, no react-dom.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -15,9 +15,9 @@
15
15
  }
16
16
  },
17
17
  "dependencies": {
18
- "@cosmicdrift/kumiko-framework": "0.369.0",
19
- "@cosmicdrift/kumiko-headless": "0.369.0",
20
- "@cosmicdrift/kumiko-types": "0.369.0",
18
+ "@cosmicdrift/kumiko-framework": "0.371.0",
19
+ "@cosmicdrift/kumiko-headless": "0.371.0",
20
+ "@cosmicdrift/kumiko-types": "0.371.0",
21
21
  "react": "^19.2.6",
22
22
  "temporal-polyfill": "^0.3.2",
23
23
  "zod": "^4.4.3"
@@ -28,7 +28,7 @@
28
28
  "@types/react-dom": "^19.2.3",
29
29
  "jsdom": "^29.1.1",
30
30
  "react-dom": "^19.2.6",
31
- "@cosmicdrift/kumiko-locale-de": "0.369.0"
31
+ "@cosmicdrift/kumiko-locale-de": "0.371.0"
32
32
  },
33
33
  "repository": {
34
34
  "type": "git",
package/src/changes.json CHANGED
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.371.0",
4
+ "type": "improvement",
5
+ "title": "Missing-screen page spaces title and hint like other cards",
6
+ "detail": "The page-not-available card renders title and hint through the Card title and subtitle slots."
7
+ },
2
8
  {
3
9
  "version": "0.368.0",
4
10
  "type": "fix",