@cosmicdrift/kumiko-types 0.391.1 → 0.392.1

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/dist/fields.d.ts CHANGED
@@ -181,7 +181,7 @@ export type BooleanFieldDef = {
181
181
  readonly default?: boolean;
182
182
  readonly access?: FieldAccess;
183
183
  };
184
- export declare const SELECT_OPTION_TONES: readonly ["ok", "warn", "bad", "neutral"];
184
+ export declare const SELECT_OPTION_TONES: readonly ["ok", "warn", "bad", "critical", "accent", "neutral"];
185
185
  export type SelectOptionTone = (typeof SELECT_OPTION_TONES)[number];
186
186
  /** One `optionsQueryPayload` entry: a literal, or `{ field }` = the current value of
187
187
  * a sibling field of the same form (config keys: another key of the owner feature). */
package/dist/fields.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference types="temporal-polyfill/global" preserve="true" />
2
2
  // --- Field Types ---
3
- export const SELECT_OPTION_TONES = ["ok", "warn", "bad", "neutral"];
3
+ export const SELECT_OPTION_TONES = ["ok", "warn", "bad", "critical", "accent", "neutral"];
4
4
  export function isOptionsQueryFieldRef(value) {
5
5
  return typeof value === "object" && value !== null;
6
6
  }
@@ -2,7 +2,7 @@ import type { FormFieldDefinition } from "./fields.ts";
2
2
  import type { AccessRule, AgentScreenHints } from "./handlers.ts";
3
3
  import type { IconKey } from "./nav-icon.ts";
4
4
  import type { ScreenNavSugar, ScreenSlots } from "./screen.ts";
5
- import type { DashboardPanelVisibility } from "./screen-dashboard.ts";
5
+ import type { ScreenVisibility } from "./screen-dashboard.ts";
6
6
  import type { EditLayout } from "./screen-entity-edit.ts";
7
7
  /** A form field computed from other fields of the same form. `listSum` adds one
8
8
  * numeric cell over all rows of an embedded list field; its `whenEmpty`
@@ -35,7 +35,7 @@ export type ActionFormScreenDefinition = {
35
35
  * app); exempts it from the nav-area boot check. */
36
36
  readonly dormant?: boolean;
37
37
  /** UI-only gate, also on direct URL access; handlers still enforce access. Unmet or failed renders `fallback`. */
38
- readonly visibleWhen?: DashboardPanelVisibility;
38
+ readonly visibleWhen?: ScreenVisibility;
39
39
  /** Same-feature short id or cross-feature QN `<feature>:screen:<id>` shown when `visibleWhen` is unmet (default: standard notice). */
40
40
  readonly fallback?: string;
41
41
  /** Derived by buildAppSchema — see EntityEditScreenDefinition.urlPrefillFields. */
@@ -272,7 +272,7 @@ export type SecretMintScreenDefinition = {
272
272
  * app); exempts it from the nav-area boot check. */
273
273
  readonly dormant?: boolean;
274
274
  /** UI-only gate, also on direct URL access; handlers still enforce access. Unmet or failed renders `fallback`. */
275
- readonly visibleWhen?: DashboardPanelVisibility;
275
+ readonly visibleWhen?: ScreenVisibility;
276
276
  /** Same-feature short id or cross-feature QN `<feature>:screen:<id>` shown when `visibleWhen` is unmet (default: standard notice). */
277
277
  readonly fallback?: string;
278
278
  /** Derived by buildAppSchema — see EntityEditScreenDefinition.urlPrefillFields. */
@@ -1,7 +1,7 @@
1
1
  import type { FieldDefinition } from "./fields.ts";
2
2
  import type { AccessRule, AgentScreenHints } from "./handlers.ts";
3
3
  import type { PlatformComponent, ScreenNavSugar, ScreenSlots } from "./screen.ts";
4
- import type { DashboardPanelVisibility } from "./screen-dashboard.ts";
4
+ import type { ScreenVisibility } from "./screen-dashboard.ts";
5
5
  import type { EditLayout } from "./screen-entity-edit.ts";
6
6
  export type CustomScreenRoute = {
7
7
  readonly path: string;
@@ -30,7 +30,7 @@ export type CustomScreenDefinition = {
30
30
  * `dormant` on other screens. */
31
31
  readonly dormant?: boolean;
32
32
  /** UI-only gate, also on direct URL access; handlers still enforce access. Unmet or failed renders `fallback`. */
33
- readonly visibleWhen?: DashboardPanelVisibility;
33
+ readonly visibleWhen?: ScreenVisibility;
34
34
  /** Same-feature short id or cross-feature QN `<feature>:screen:<id>` shown when `visibleWhen` is unmet (default: standard notice). */
35
35
  readonly fallback?: string;
36
36
  };
@@ -48,7 +48,7 @@ export type ConfigEditScreenDefinition = {
48
48
  * app); exempts it from the nav-area boot check. */
49
49
  readonly dormant?: boolean;
50
50
  /** UI-only gate, also on direct URL access; handlers still enforce access. Unmet or failed renders `fallback`. */
51
- readonly visibleWhen?: DashboardPanelVisibility;
51
+ readonly visibleWhen?: ScreenVisibility;
52
52
  /** Same-feature short id or cross-feature QN `<feature>:screen:<id>` shown when `visibleWhen` is unmet (default: standard notice). */
53
53
  readonly fallback?: string;
54
54
  /** scope for config:write:set calls. Must match the scope declaration of
@@ -101,7 +101,7 @@ export type SecretsEditScreenDefinition = {
101
101
  * app); exempts it from the nav-area boot check. */
102
102
  readonly dormant?: boolean;
103
103
  /** UI-only gate, also on direct URL access; handlers still enforce access. Unmet or failed renders `fallback`. */
104
- readonly visibleWhen?: DashboardPanelVisibility;
104
+ readonly visibleWhen?: ScreenVisibility;
105
105
  /** Same-feature short id or cross-feature QN `<feature>:screen:<id>` shown when `visibleWhen` is unmet (default: standard notice). */
106
106
  readonly fallback?: string;
107
107
  /** field id -> qualified secret name (`<feature>:secret:<kebab>`). */
@@ -200,6 +200,9 @@ export type DashboardCustomPanel = {
200
200
  readonly kind: "custom";
201
201
  readonly id: string;
202
202
  readonly component: PlatformComponent;
203
+ /** Static author values laid over the screen's filterParams, like
204
+ * `DashboardPanelQueryOptions.params`; the panel wins on a name clash. */
205
+ readonly params?: Readonly<Record<string, unknown>>;
203
206
  };
204
207
  export type DashboardTextBlock = {
205
208
  readonly kind: "heading";
@@ -241,6 +244,11 @@ export type DashboardPanelVisibility = {
241
244
  readonly field: string;
242
245
  readonly eq: string | number | boolean | null;
243
246
  };
247
+ export type ScreenVisibility = DashboardPanelVisibility & {
248
+ /** Payload key that receives the screen's route id (projectionDetail only). Without it
249
+ * the gate query runs with an empty payload. */
250
+ readonly idParam?: string;
251
+ };
244
252
  export type DashboardScreenPanel = {
245
253
  readonly kind: "screen";
246
254
  readonly id: string;
@@ -321,7 +329,7 @@ export type DashboardScreenDefinition = {
321
329
  * app); exempts it from the nav-area boot check. */
322
330
  readonly dormant?: boolean;
323
331
  /** UI-only gate, also on direct URL access; handlers still enforce access. Unmet or failed renders `fallback`. */
324
- readonly visibleWhen?: DashboardPanelVisibility;
332
+ readonly visibleWhen?: ScreenVisibility;
325
333
  /** Same-feature short id or cross-feature QN `<feature>:screen:<id>` shown when `visibleWhen` is unmet (default: standard notice). */
326
334
  readonly fallback?: string;
327
335
  readonly panels: readonly DashboardPanelDefinition[];
@@ -4,7 +4,7 @@ import type { AccessRule, AgentScreenHints } from "./handlers.ts";
4
4
  import type { IconKey } from "./nav-icon.ts";
5
5
  import type { FieldRenderer, PlatformComponent, ScreenNavSugar, ScreenSlots } from "./screen.ts";
6
6
  import type { ActionFormRedirect } from "./screen-action-form.ts";
7
- import type { DashboardPanelVisibility } from "./screen-dashboard.ts";
7
+ import type { ScreenVisibility } from "./screen-dashboard.ts";
8
8
  import type { ListColumnSpec, ListSortSpec, RelatedListToolbarAction, RowAction, RowActionMode, RowFieldExtractor } from "./screen-entity-list.ts";
9
9
  import type { ListBulkAction } from "./screen-list-bulk.ts";
10
10
  import type { ListTableGrouping, ListTableOptions } from "./screen-list-table.ts";
@@ -292,7 +292,18 @@ export type EditRelatedListSection = {
292
292
  * section's query returns zero rows. Omitted: the DataTable default
293
293
  * ("kumiko.list.no-entries") applies. `action`'s icon must resolve, same
294
294
  * as `actions` above. */
295
- readonly emptyState?: ListEmptyStateSpec;
295
+ readonly emptyState?: RelatedListEmptyStateSpec;
296
+ };
297
+ /** Empty-state text for one parent-record state, e.g. "still running" vs. "finished without rows". */
298
+ export type RelatedListEmptyStateVariant = {
299
+ readonly when: Exclude<FieldCondition, boolean>;
300
+ readonly title: string;
301
+ readonly description?: string;
302
+ };
303
+ /** The first `variants` entry whose `when` holds for the parent record replaces `title` and
304
+ * `description`; `action` stays. */
305
+ export type RelatedListEmptyStateSpec = ListEmptyStateSpec & {
306
+ readonly variants?: readonly RelatedListEmptyStateVariant[];
296
307
  };
297
308
  export type EditWriteFormSection = {
298
309
  /** Kebab-case tab id, used as the `?tab=` value. Required by the
@@ -378,7 +389,7 @@ export type EntityEditScreenDefinition = {
378
389
  * app); exempts it from the nav-area boot check. */
379
390
  readonly dormant?: boolean;
380
391
  /** UI-only gate, also on direct URL access; handlers still enforce access. Unmet or failed renders `fallback`. */
381
- readonly visibleWhen?: DashboardPanelVisibility;
392
+ readonly visibleWhen?: ScreenVisibility;
382
393
  /** Same-feature short id or cross-feature QN `<feature>:screen:<id>` shown when `visibleWhen` is unmet (default: standard notice). */
383
394
  readonly fallback?: string;
384
395
  /** Derived by buildAppSchema from the navigate `params` targeting this
@@ -3,7 +3,7 @@ import type { AccessRule, AgentScreenHints } from "./handlers.ts";
3
3
  import type { IconKey } from "./nav-icon.ts";
4
4
  import type { FieldRenderer, PlatformComponent, ScreenNavSugar, ScreenSlots } from "./screen.ts";
5
5
  import type { ActionFormRedirect } from "./screen-action-form.ts";
6
- import type { DashboardPanelVisibility } from "./screen-dashboard.ts";
6
+ import type { ScreenVisibility } from "./screen-dashboard.ts";
7
7
  import type { ListEmptyStateSpec } from "./screen-entity-edit.ts";
8
8
  import type { EntityListExpandableRow } from "./screen-expandable-row.ts";
9
9
  import type { ListBulkAction } from "./screen-list-bulk.ts";
@@ -334,10 +334,17 @@ export type RelatedListToolbarAction = (Extract<ToolbarAction, {
334
334
  readonly kind: "writeHandler";
335
335
  }> & {
336
336
  readonly visible?: FieldCondition;
337
+ /** Values extracted from the parent record, merged over the static
338
+ * `payload` (extracted values win). Without a parent record the action
339
+ * stays hidden. */
340
+ readonly params?: RowFieldExtractor;
337
341
  }) | (Extract<ToolbarAction, {
338
342
  readonly kind: "drawer";
339
343
  }> & {
340
344
  readonly visible?: FieldCondition;
345
+ /** Values extracted from the parent record, prefilling the drawer's
346
+ * actionForm. Without a parent record the action stays hidden. */
347
+ readonly params?: RowFieldExtractor;
341
348
  });
342
349
  /** An extra choice on a facet next to the field's own options: a named
343
350
  * bundle of values ("Running" = several statuses) or "no filter" (`values:
@@ -381,7 +388,7 @@ export type EntityListScreenDefinition = {
381
388
  * app); exempts it from the nav-area boot check. */
382
389
  readonly dormant?: boolean;
383
390
  /** UI-only gate, also on direct URL access; handlers still enforce access. Unmet or failed renders `fallback`. */
384
- readonly visibleWhen?: DashboardPanelVisibility;
391
+ readonly visibleWhen?: ScreenVisibility;
385
392
  /** Same-feature short id or cross-feature QN `<feature>:screen:<id>` shown when `visibleWhen` is unmet (default: standard notice). */
386
393
  readonly fallback?: string;
387
394
  readonly entity: string;
@@ -1,8 +1,8 @@
1
1
  import type { SelectOptionTone } from "./fields.ts";
2
2
  import type { AccessRule, AgentScreenHints } from "./handlers.ts";
3
3
  import type { NavIconKey } from "./nav-icon.ts";
4
- import type { PlatformComponent, ScreenNavSugar, ScreenSlots } from "./screen.ts";
5
- import type { DashboardPanelVisibility, DashboardStatTone } from "./screen-dashboard.ts";
4
+ import type { FormatSpec, PlatformComponent, ScreenNavSugar, ScreenSlots } from "./screen.ts";
5
+ import type { DashboardStatTone, ScreenVisibility } from "./screen-dashboard.ts";
6
6
  import type { EditLayout, ListEmptyStateSpec } from "./screen-entity-edit.ts";
7
7
  import type { ListColumnSpec, ListPaginationMode, ListSortSpec, RowAction, RowActionMode, RowFieldExtractor, ScreenFilter, ToolbarAction } from "./screen-entity-list.ts";
8
8
  import type { ListBulkAction } from "./screen-list-bulk.ts";
@@ -64,7 +64,7 @@ export type ProjectionListScreenDefinition = {
64
64
  * app); exempts it from the nav-area boot check. */
65
65
  readonly dormant?: boolean;
66
66
  /** UI-only gate, also on direct URL access; handlers still enforce access. Unmet or failed renders `fallback`. */
67
- readonly visibleWhen?: DashboardPanelVisibility;
67
+ readonly visibleWhen?: ScreenVisibility;
68
68
  /** Same-feature short id or cross-feature QN `<feature>:screen:<id>` shown when `visibleWhen` is unmet (default: standard notice). */
69
69
  readonly fallback?: string;
70
70
  readonly query: string;
@@ -124,6 +124,8 @@ export type RecordHeaderSpec = {
124
124
  * joined by a separator; parts with an empty value are dropped. */
125
125
  readonly subtitle?: string | readonly RecordHeaderSubtitlePart[];
126
126
  readonly status?: string;
127
+ /** Formats the badge text (typically `enumOption` with a `keyPrefix`); tones still resolve on the raw value. Needs `status`. Without it, the `status` field's layout renderer is used when it is `enumOption` or `i18nText`. */
128
+ readonly statusFormat?: FormatSpec;
127
129
  /** Record field holding an absolute http(s) URL. When present and the
128
130
  * field's value is such a URL, the subtitle renders as an external link
129
131
  * (`target="_blank"`) instead of plain text. Only valid with the string
@@ -172,7 +174,7 @@ export type ProjectionDetailScreenDefinition = {
172
174
  * app); exempts it from the nav-area boot check. */
173
175
  readonly dormant?: boolean;
174
176
  /** UI-only gate, also on direct URL access; handlers still enforce access. Unmet or failed renders `fallback`. */
175
- readonly visibleWhen?: DashboardPanelVisibility;
177
+ readonly visibleWhen?: ScreenVisibility;
176
178
  /** Same-feature short id or cross-feature QN `<feature>:screen:<id>` shown when `visibleWhen` is unmet (default: standard notice). */
177
179
  readonly fallback?: string;
178
180
  readonly query: string;
@@ -226,6 +228,10 @@ export type ProjectionDetailScreenDefinition = {
226
228
  * action); default precedence is `edit`, then `style: "primary"`, then the
227
229
  * first action. */
228
230
  readonly primaryAction?: string;
231
+ /** Action ids that stay visible buttons next to the primary action when the rest
232
+ * collapses into the menu. Same id rules as `primaryAction`; the phone header keeps
233
+ * its single icon button. */
234
+ readonly inlineActions?: readonly string[];
229
235
  /** How head fields render. Default "text" — plain text instead of a
230
236
  * disabled Input, since every field on this screen type is forced
231
237
  * readOnly anyway (there is no write path, see the shim doc above).
package/dist/screen.d.ts CHANGED
@@ -117,9 +117,9 @@ export type ScreenNavSugar = {
117
117
  export type ScreenDefinition = EntityListScreenDefinition | ProjectionListScreenDefinition | ProjectionDetailScreenDefinition | DashboardScreenDefinition | EntityEditScreenDefinition | ActionFormScreenDefinition | ConfigEditScreenDefinition | SecretsEditScreenDefinition | SecretMintScreenDefinition | CustomScreenDefinition;
118
118
  export type { ActionFormFooterAction, ActionFormLoad, ActionFormRedirect, ActionFormScreenDefinition, ActionFormSuccessFact, ActionFormSuccessLink, FormFieldDerivation, FormFieldDerivationWithoutList, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, } from "./screen-action-form.ts";
119
119
  export type { ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, SecretsEditScreenDefinition, SecretsEditSection, } from "./screen-custom-config.ts";
120
- export type { DashboardChartKind, DashboardChartMarkerKind, DashboardChartPanel, DashboardChartRangeOption, DashboardChartRanges, DashboardChartTone, DashboardCurrencyFormat, DashboardCustomPanel, DashboardDateParam, DashboardFeedPanel, DashboardFilterDefinition, DashboardI18nText, DashboardListPanel, DashboardMoneyParam, DashboardPanelDefinition, DashboardPanelEmptyState, DashboardPanelGate, DashboardPanelQueryOptions, DashboardPanelSpan, DashboardPanelVisibility, DashboardProgressListPanel, DashboardProgressTone, DashboardRecordBinding, DashboardRefresh, DashboardRelativeTimeFormat, DashboardRelativeTimeParam, DashboardScopeDefinition, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardStatTone, DashboardText, DashboardTextBlock, DashboardTextPanel, DashboardTextParam, DashboardTimeRangeDefinition, DashboardValueFormat, } from "./screen-dashboard.ts";
120
+ export type { DashboardChartKind, DashboardChartMarkerKind, DashboardChartPanel, DashboardChartRangeOption, DashboardChartRanges, DashboardChartTone, DashboardCurrencyFormat, DashboardCustomPanel, DashboardDateParam, DashboardFeedPanel, DashboardFilterDefinition, DashboardI18nText, DashboardListPanel, DashboardMoneyParam, DashboardPanelDefinition, DashboardPanelEmptyState, DashboardPanelGate, DashboardPanelQueryOptions, DashboardPanelSpan, DashboardPanelVisibility, DashboardProgressListPanel, DashboardProgressTone, DashboardRecordBinding, DashboardRefresh, DashboardRelativeTimeFormat, DashboardRelativeTimeParam, DashboardScopeDefinition, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardStatTone, DashboardText, DashboardTextBlock, DashboardTextPanel, DashboardTextParam, DashboardTimeRangeDefinition, DashboardValueFormat, ScreenVisibility, } from "./screen-dashboard.ts";
121
121
  export { DASHBOARD_MIN_REFRESH_SECONDS, DASHBOARD_STAT_TONES } from "./screen-dashboard.ts";
122
- export type { EditExtensionSection, EditFieldGroup, EditFieldPrefill, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EmbeddedListEditSpec, EntityEditAction, EntityEditActionPlacement, EntityEditScreenDefinition, EntityWriteExcludedFields, FieldAffix, FieldFillAction, FormWidth, ListEmptyStateSpec, RelatedListRowTone, } from "./screen-entity-edit.ts";
122
+ export type { EditExtensionSection, EditFieldGroup, EditFieldPrefill, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EmbeddedListEditSpec, EntityEditAction, EntityEditActionPlacement, EntityEditScreenDefinition, EntityWriteExcludedFields, FieldAffix, FieldFillAction, FormWidth, ListEmptyStateSpec, RelatedListEmptyStateSpec, RelatedListEmptyStateVariant, RelatedListRowTone, } from "./screen-entity-edit.ts";
123
123
  export { relatedListGroupHeaderLabel, relatedListGroupKey } from "./screen-entity-edit.ts";
124
124
  export type { EntityListFacetConfig, EntityListFacetExtraOption, EntityListScreenDefinition, ListBadgeTone, ListColumnDisplay, ListColumnSpec, ListPaginationMode, ListSortDir, ListSortSpec, RelatedListToolbarAction, RowAction, RowActionClientAction, RowActionDisplay, RowActionDrawer, RowActionMode, RowActionNavigate, RowActionNavigateBase, RowActionWriteHandler, RowFieldExtractor, ScreenFilter, ScreenFilterOp, ToolbarAction, } from "./screen-entity-list.ts";
125
125
  export type { EntityListExpandableRow, ExpandableRowGrouping } from "./screen-expandable-row.ts";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-types",
3
- "version": "0.391.1",
3
+ "version": "0.392.1",
4
4
  "description": "Framework-Type-Definitions für Kumiko — FeatureDefinition, BootCheck-Types und die reinen Engine-Types. Erlaubt Downstream-Konsumenten, gegen die Type-Contracts zu bauen, ohne das ganze Framework-Package zu importieren. Enthaelt keine identitaets-sensitiven Runtime-Werte mehr (Error-Klassen leben seit #1629 in kumiko-framework, Brand-Symbole nutzen Symbol.for) und ist deshalb eine plain dependency, keine peerDependency.",
5
5
  "license": "MIT",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
package/src/changes.json CHANGED
@@ -1,4 +1,40 @@
1
1
  [
2
+ {
3
+ "version": "0.392.0",
4
+ "type": "improvement",
5
+ "title": "RecordHeaderSpec takes statusFormat",
6
+ "detail": "header.statusFormat is a FormatSpec for the header badge text, typically enumOption with a keyPrefix. The badge tone still resolves on the raw status value."
7
+ },
8
+ {
9
+ "version": "0.392.0",
10
+ "type": "improvement",
11
+ "title": "projectionDetail takes inlineActions",
12
+ "detail": "ProjectionDetailScreenDefinition.inlineActions lists action ids that stay visible buttons next to the primary action in the page header instead of folding into the \"More actions\" menu. Without it the header behaves as before. The phone header keeps its single icon button."
13
+ },
14
+ {
15
+ "version": "0.392.0",
16
+ "type": "improvement",
17
+ "title": "relatedList emptyState takes variants",
18
+ "detail": "EditRelatedListSection.emptyState is a RelatedListEmptyStateSpec. Its optional variants list pairs a FieldCondition on the parent record with a title and description; the first matching variant replaces the default text, the action stays."
19
+ },
20
+ {
21
+ "version": "0.392.0",
22
+ "type": "improvement",
23
+ "title": "relatedList drawer and writeHandler toolbar actions take params",
24
+ "detail": "RelatedListToolbarAction kind \"drawer\" and kind \"writeHandler\" accept params as a RowFieldExtractor evaluated against the parent record, for example params with map appId to id. A drawer gets the values as prefill, a writeHandler merges them over its static payload with the extracted values winning. Without a parent record the action stays hidden."
25
+ },
26
+ {
27
+ "version": "0.392.0",
28
+ "type": "improvement",
29
+ "title": "Option tones gain critical and accent",
30
+ "detail": "SelectOptionTone is now ok, warn, bad, critical, accent or neutral, for select optionTones, enumOption tones, relatedList rowTone and projectionDetail header.statusTones. critical and accent reuse the StatusBadge colors (status-critical and the primary brand color), neutral stays muted. An informative state such as \"Ready\" can use accent instead of a custom cell."
31
+ },
32
+ {
33
+ "version": "0.392.0",
34
+ "type": "improvement",
35
+ "title": "Custom dashboard panels accept static params",
36
+ "detail": "A dashboard panel of kind custom takes params, static values laid over the screen's filterParams for its component. The panel wins when a filter uses the same name. Without params nothing changes."
37
+ },
2
38
  {
3
39
  "version": "0.391.0",
4
40
  "type": "improvement",