@cosmicdrift/kumiko-renderer-web 0.123.0 → 0.123.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-renderer-web",
3
- "version": "0.123.0",
3
+ "version": "0.123.2",
4
4
  "description": "Web-platform bindings for @cosmicdrift/kumiko-renderer. HTML default-primitives, browser history-based navigation, EventSource-backed live events, and a one-call createKumikoApp that mounts the whole stack via react-dom.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -16,9 +16,9 @@
16
16
  "./styles.css": "./src/styles.css"
17
17
  },
18
18
  "dependencies": {
19
- "@cosmicdrift/kumiko-dispatcher-live": "0.123.0",
20
- "@cosmicdrift/kumiko-headless": "0.123.0",
21
- "@cosmicdrift/kumiko-renderer": "0.123.0",
19
+ "@cosmicdrift/kumiko-dispatcher-live": "0.123.2",
20
+ "@cosmicdrift/kumiko-headless": "0.123.2",
21
+ "@cosmicdrift/kumiko-renderer": "0.123.2",
22
22
  "@radix-ui/react-dialog": "^1.1.15",
23
23
  "@radix-ui/react-dropdown-menu": "^2.1.16",
24
24
  "@radix-ui/react-label": "^2.1.8",
package/src/index.ts CHANGED
@@ -124,7 +124,12 @@ export type { WorkspaceSwitcherProps } from "./layout/workspace-switcher";
124
124
  export { WorkspaceSwitcher } from "./layout/workspace-switcher";
125
125
  export { cn } from "./lib/cn";
126
126
  export { postWithDownload } from "./lib/download";
127
- export { BareFormProvider, DefaultCard as Card, defaultPrimitives } from "./primitives";
127
+ export {
128
+ BareFormProvider,
129
+ DefaultCard as Card,
130
+ defaultPrimitives,
131
+ FormScreenShell,
132
+ } from "./primitives";
128
133
  export type { ActionMenuProps, MenuItemDef } from "./primitives/action-menu";
129
134
  export { ActionMenu } from "./primitives/action-menu";
130
135
  export {
@@ -517,9 +517,11 @@ function DefaultDataTable({
517
517
  {emptyState ?? <span>No entries.</span>}
518
518
  </div>
519
519
  ) : (
520
- // dashboard-01-Muster: schlichter `rounded-lg border`-Rahmen (kein
521
- // bg-card/shadow), die Header-Zeile trägt den bg-muted-Grauton.
522
- <div className="overflow-hidden rounded-lg border">
520
+ // dashboard-01-Muster: `rounded-lg border`-Rahmen, die Header-Zeile
521
+ // trägt den bg-muted-Grauton. `bg-card` (statt transparent) → die Liste
522
+ // sitzt auf derselben Card-Fläche wie Forms; auf Themes mit farbigem
523
+ // Page-Background (z.B. Cream) matchen Listen sonst nicht die Cards.
524
+ <div className="overflow-hidden rounded-lg border bg-card">
523
525
  <Table data-testid={testId}>
524
526
  {tableInner(columns, rows, onRowClick, sort, onSortChange, rowActions, rowActionMode)}
525
527
  </Table>
@@ -1382,7 +1384,7 @@ function DefaultForm({
1382
1384
  data-testid={testId}
1383
1385
  className="flex flex-col w-full"
1384
1386
  >
1385
- <div className="px-6 pt-6 pb-12 max-w-3xl w-full mx-auto">
1387
+ <FormScreenShell>
1386
1388
  <div className={cn(cardSurface(), "overflow-hidden")}>
1387
1389
  {(title !== undefined || subtitle !== undefined) && (
1388
1390
  <div className="px-6 pb-2 pt-5">
@@ -1426,11 +1428,32 @@ function DefaultForm({
1426
1428
  </div>
1427
1429
  )}
1428
1430
  </div>
1429
- </div>
1431
+ </FormScreenShell>
1430
1432
  </form>
1431
1433
  );
1432
1434
  }
1433
1435
 
1436
+ // Kanonische Form/Settings-Shell: zentrierte max-w-3xl-Spalte mit Standard-
1437
+ // Screen-Padding. DefaultForm (configEdit/entityEdit) UND custom Settings-
1438
+ // Screens (url-settings, privacy-center) teilen sie → einheitliche Breite +
1439
+ // Zentrierung statt per-Screen-Wildwuchs. Inhalt nutzt Card-Primitives;
1440
+ // `className` (z.B. "flex flex-col gap-6") für Multi-Card-Stacks.
1441
+ export function FormScreenShell({
1442
+ children,
1443
+ className,
1444
+ testId,
1445
+ }: {
1446
+ readonly children: ReactNode;
1447
+ readonly className?: string;
1448
+ readonly testId?: string;
1449
+ }): ReactNode {
1450
+ return (
1451
+ <div data-testid={testId} className={cn("px-6 pt-6 pb-12 max-w-3xl w-full mx-auto", className)}>
1452
+ {children}
1453
+ </div>
1454
+ );
1455
+ }
1456
+
1434
1457
  function DefaultSection({ title, subtitle, children, actions, testId }: SectionProps): ReactNode {
1435
1458
  const insideForm = useContext(InsideFormContext);
1436
1459