@imfusion/web-ui 0.10.1-dev.51.gc342cd5f → 0.10.1-dev.54.g47954adf

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": "@imfusion/web-ui",
3
- "version": "0.10.1-dev.51.gc342cd5f",
3
+ "version": "0.10.1-dev.54.g47954adf",
4
4
  "description": "The official Web UI component library for ImFusion web apps",
5
5
  "author": "ImFusion GmbH",
6
6
  "homepage": "https://imfusion.com",
@@ -8338,6 +8338,13 @@
8338
8338
  "name": "Table.Root",
8339
8339
  "description": "Table.Root — the `<table>` element.",
8340
8340
  "props": [
8341
+ {
8342
+ "name": "density",
8343
+ "required": false,
8344
+ "type": "\"compact\" | \"comfortable\" | \"spacious\"",
8345
+ "defaultValue": "comfortable",
8346
+ "description": "Cell padding: `compact` for dense data, `spacious` for a few rows at a glance."
8347
+ },
8341
8348
  {
8342
8349
  "name": "ref",
8343
8350
  "required": false,
@@ -62,8 +62,10 @@ Use the report contract's severity, `path:line` evidence, concrete impact, and s
62
62
  that same structure: unavailable runtime evidence, the impact of the unknown, and the check that resolves it. Do not promote
63
63
  an optional tool or a working alternative to a missing finding. A `vite.config.ts` without `localWebUILink()` registered from
64
64
  `@imfusion/web-ui/vite` is Missing. A `tsconfig.json` without the `paths` block from the `tooling` topic is Missing too. Each
65
- next action is the add from that topic. A major or minor mismatch between the project and Web UI on a package listed under
66
- Aligned runtime packages in the `tooling` topic is a Deviation. Report both versions, with
65
+ next action is the add from that topic. A Vite config that reads tsconfig `paths` (`resolve.tsconfigPaths` or
66
+ `vite-tsconfig-paths`) is Broken: it loads the React types package as React once Web UI comes from the registry. The fix is
67
+ to drop it and give the `#/` alias through `imports` in `package.json`. A major or minor mismatch between the project and Web
68
+ UI on a package listed under Aligned runtime packages in the `tooling` topic is a Deviation. Report both versions, with
67
69
  `npm install <package>@<Web UI's version>` as the fix.
68
70
 
69
71
  ## Topics
@@ -101,8 +101,15 @@ export default defineConfig({
101
101
  });
102
102
  ```
103
103
 
104
- Use strict TypeScript with bundler module resolution, `verbatimModuleSyntax`, unused-value checks, and `#/` paths. Keep
105
- `import type` for type-only imports.
104
+ Use strict TypeScript with bundler module resolution, `verbatimModuleSyntax`, unused-value checks, and `import type` for
105
+ type-only imports. The `#/` alias is a subpath import in `package.json`, which Vite and TypeScript both read without a
106
+ plugin:
107
+
108
+ ```json
109
+ "imports": {
110
+ "#/*": "./src/*"
111
+ }
112
+ ```
106
113
 
107
114
  ## Pre-commit checks
108
115
 
@@ -150,7 +157,7 @@ Aligned versions are the primary fix. The plugin and the `paths` block below cat
150
157
  checkout, it keeps one React in dev, build, and Vitest.
151
158
 
152
159
  Add this to `compilerOptions` in `tsconfig.json`, merged by hand into an existing `paths`. For a symlinked checkout it keeps
153
- one set of React and Vite types for `tsc`, and it does nothing for an installed package:
160
+ one set of React and Vite types for `tsc`:
154
161
 
155
162
  ```json
156
163
  "paths": {
@@ -159,3 +166,8 @@ one set of React and Vite types for `tsc`, and it does nothing for an installed
159
166
  "vite": ["./node_modules/vite"]
160
167
  }
161
168
  ```
169
+
170
+ Only TypeScript reads these `paths`. Never let Vite read them: leave `resolve.tsconfigPaths` off and do not add
171
+ `vite-tsconfig-paths`. Either one applies the `react` mapping at runtime, loads the types package as React, and breaks the
172
+ build and tests once `@imfusion/web-ui` is installed from the registry. A symlinked checkout hides the break, because
173
+ `localWebUILink()` dedupes React first.
@@ -55,7 +55,8 @@ The plan describes the exact starter files. It does not copy a generic starter p
55
55
  Propose a `vite.config.ts` that registers `imfusionBrandAssets()`, `readableCssModuleNames()`, and `localWebUILink()` from
56
56
  `@imfusion/web-ui/vite`, next to the plugins the project already has. Register `localWebUILink()` in every project: without a
57
57
  symlinked checkout it does nothing. Also propose the `tsconfig.json` `paths` block. Both keep one React and one set of types
58
- when the package is a symlinked checkout. The `tooling` topic has the exact config.
58
+ when the package is a symlinked checkout. Vite must not read those `paths`: never propose `resolve.tsconfigPaths` or
59
+ `vite-tsconfig-paths`, and give the `#/` alias through `imports` in `package.json`. The `tooling` topic has the exact config.
59
60
 
60
61
  ## Installer steps
61
62
 
@@ -80,3 +80,25 @@ When no component covers a piece, compose its primitives and use `--imf-ui-*` to
80
80
 
81
81
  For a screen review, read the relevant reference under `references/`: `usability-heuristics.md`, `visual-design.md`, or
82
82
  `forms.md`.
83
+
84
+ ## Public backdrop handover
85
+
86
+ Public pages share a backdrop with the Keycloak login page: a light column with an animated line mesh, and a brand-colored
87
+ panel. Both sides draw the same geometry, so the cross-origin navigation between them looks seamless. Read the geometry from
88
+ these tokens and never from literals:
89
+
90
+ - `--imf-ui-size-backdrop-edge`: where the brand panel starts on wide landscape screens.
91
+ - `--imf-ui-size-backdrop-band-height`: the height of the light band on top of narrow or portrait screens, with the panel
92
+ below it.
93
+
94
+ The switch between the two layouts is a media query, which a token cannot carry. Use the same breakpoint as the reference
95
+ implementations.
96
+
97
+ The backdrop also paints before React mounts, so the first frame already matches. Put the same two columns on `body` as a
98
+ hard-stop `linear-gradient`, with `min-block-size: 100dvh`. In a single-page app, a marker on `html`
99
+ (`data-backdrop-pending`), set by an inline script in `index.html` for the routes that show the backdrop, gates that
100
+ gradient. The backdrop component removes the marker when it mounts. Generate that script's route list at build time from the
101
+ router's own source, never as a hand-written copy: with TanStack file routes, a small Vite plugin (`transformIndexHtml`)
102
+ reads the folder of backdrop routes and fills a placeholder in `index.html`, so a new route gets the pre-paint without anyone
103
+ touching the script. The ImFusion Portal's public backdrop component and the Keycloak login theme's copy of it are the
104
+ reference implementations.
@@ -913,6 +913,14 @@
913
913
  "name": "--imf-ui-size-9",
914
914
  "value": "4rem"
915
915
  },
916
+ {
917
+ "name": "--imf-ui-size-backdrop-band-height",
918
+ "value": "30dvh"
919
+ },
920
+ {
921
+ "name": "--imf-ui-size-backdrop-edge",
922
+ "value": "38%"
923
+ },
916
924
  {
917
925
  "name": "--imf-ui-size-content-1",
918
926
  "value": "20ch"
@@ -947,5 +955,5 @@
947
955
  }
948
956
  ]
949
957
  },
950
- "count": 231
958
+ "count": 233
951
959
  }