@cosmicdrift/kumiko-headless 0.356.0 → 0.357.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.
@@ -268,6 +268,8 @@ export function renderApexPage(page) {
268
268
  // Brand-CSS ist app-authored (Trust-Boundary siehe Datei-Header), kein Tenant-Input.
269
269
  const cssHtml = (brand.fontFaceCss ?? "") + brand.tokensCss + APEX_STRUCTURAL_CSS;
270
270
  const sectionsHtml = page.sections.map(renderSection).join("\n\n ");
271
+ // interactive-widget is ignored by iOS Safari; apex pages have no fixed bottom bars, so
272
+ // the key only matters for Chromium/Android and needs no visualViewport fallback here.
271
273
  return `<!doctype html>
272
274
  <html lang="${escapeHtml(head.lang)}">
273
275
  <head>
@@ -98,6 +98,13 @@ function deriveSelectOptionsQuery(fieldDef) {
98
98
  : {};
99
99
  }
100
100
  function deriveSelectOptionsAvailabilityQuery(fieldDef) {
101
+ if (fieldDef.type === "multiSelect") {
102
+ return fieldDef.optionsAvailabilityQuery !== undefined
103
+ ? {
104
+ selectOptionsAvailabilityQuery: { query: fieldDef.optionsAvailabilityQuery, payload: {} },
105
+ }
106
+ : {};
107
+ }
101
108
  return fieldDef.type === "select" && fieldDef.optionsAvailabilityQuery !== undefined
102
109
  ? {
103
110
  selectOptionsAvailabilityQuery: {
@@ -145,8 +152,10 @@ function deriveTextFieldHints(fieldDef) {
145
152
  const multiline = fieldDef.type === "text" || fieldDef.type === "longText" ? fieldDef.multiline : undefined;
146
153
  const format = fieldDef.type === "text" ? fieldDef.format : undefined;
147
154
  const writeOnly = fieldDef.type === "text" && fieldDef.writeOnly === true;
155
+ const autoComplete = fieldDef.type === "text" ? fieldDef.autoComplete : undefined;
148
156
  return {
149
157
  ...(multiline !== undefined && { multiline }),
158
+ ...(autoComplete !== undefined && { autoComplete }),
150
159
  ...(format !== undefined && { format }),
151
160
  ...(writeOnly && { writeOnly: true }),
152
161
  ...("sensitive" in fieldDef && fieldDef.sensitive === true && { sensitive: true }),
@@ -37,6 +37,7 @@ export function computeListViewModel(input) {
37
37
  refFeature: refTarget.featureName,
38
38
  refLabelField: normalized.refLabelField ?? "id",
39
39
  ...(normalized.renderer !== undefined && { renderer: normalized.renderer }),
40
+ ...(normalized.hideOnNarrow === true && { hideOnNarrow: true }),
40
41
  });
41
42
  continue;
42
43
  }
@@ -64,6 +65,7 @@ export function computeListViewModel(input) {
64
65
  // ORDER BY would sort by GUID while the cell shows the name.
65
66
  sortable: rowMetaRef === undefined,
66
67
  ...(normalized.renderer !== undefined && { renderer: normalized.renderer }),
68
+ ...(normalized.hideOnNarrow === true && { hideOnNarrow: true }),
67
69
  ...(rowMetaRef !== undefined && {
68
70
  refEntity: rowMetaRef.refEntity,
69
71
  refFeature: rowMetaRef.refFeature,
@@ -86,6 +88,7 @@ export function computeListViewModel(input) {
86
88
  type: "text",
87
89
  sortable: false,
88
90
  renderer: normalized.renderer,
91
+ ...(normalized.hideOnNarrow === true && { hideOnNarrow: true }),
89
92
  });
90
93
  continue;
91
94
  }
@@ -99,6 +102,7 @@ export function computeListViewModel(input) {
99
102
  // no column to sort by (see DerivedFieldDef). Never offer the affordance.
100
103
  sortable: false,
101
104
  ...(normalized.renderer !== undefined && { renderer: normalized.renderer }),
105
+ ...(normalized.hideOnNarrow === true && { hideOnNarrow: true }),
102
106
  });
103
107
  continue;
104
108
  }
@@ -93,9 +93,10 @@ export type EditFieldViewModel = {
93
93
  readonly query: string;
94
94
  readonly payload: OptionsQueryPayload;
95
95
  };
96
- /** Set for `type: "select"` when SelectFieldDef.optionsAvailabilityQuery is set:
96
+ /** Set for `type: "select"` / `"multiSelect"` when optionsAvailabilityQuery is set:
97
97
  * the renderer loads `{ rows: { value, disabled?, hint? }[] }` from this query and
98
- * merges it onto `options`. `payload` is optionsQueryPayload, `{}` when absent. */
98
+ * merges it onto `options`. `payload` is optionsQueryPayload, `{}` when absent
99
+ * (always `{}` for multiSelect). */
99
100
  readonly selectOptionsAvailabilityQuery?: {
100
101
  readonly query: string;
101
102
  readonly payload: OptionsQueryPayload;
@@ -124,6 +125,8 @@ export type EditFieldViewModel = {
124
125
  };
125
126
  /** From TextFieldDef.format — `password` makes the renderer mask the input. */
126
127
  readonly format?: "email" | "url" | "phone" | "password";
128
+ /** From TextFieldDef.autoComplete — HTML autocomplete token for the text input. */
129
+ readonly autoComplete?: string;
127
130
  /** From TextFieldDef.writeOnly — value is `true` (set) / `null` (empty), never plaintext. */
128
131
  readonly writeOnly?: true;
129
132
  /** From the field's `sensitive: true` — the value must not leave the form (drafts, URL prefill). */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-headless",
3
- "version": "0.356.0",
3
+ "version": "0.357.0",
4
4
  "description": "Headless UI logic for Kumiko — Dispatcher contract, Form-Controller, View-Model, Nav-Resolver. Plattform- und React-frei; jeder Renderer (renderer, renderer-web, renderer-native, …) komponiert darauf.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -36,8 +36,8 @@
36
36
  }
37
37
  },
38
38
  "dependencies": {
39
- "@cosmicdrift/kumiko-framework": "0.356.0",
40
- "@cosmicdrift/kumiko-types": "0.356.0",
39
+ "@cosmicdrift/kumiko-framework": "0.357.0",
40
+ "@cosmicdrift/kumiko-types": "0.357.0",
41
41
  "temporal-polyfill": "^0.3.2",
42
42
  "zod": "^4.4.3"
43
43
  },
package/src/changes.json CHANGED
@@ -1,4 +1,9 @@
1
1
  [
2
+ {
3
+ "version": "0.357.0",
4
+ "type": "improvement",
5
+ "title": "Edit view-model carries selectOptionsAvailabilityQuery for multiSelect fields"
6
+ },
2
7
  {
3
8
  "version": "0.353.0",
4
9
  "type": "fix",