@plitzi/sdk-elements 0.36.2 → 0.37.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,71 @@
1
1
  # @plitzi/sdk-elements
2
2
 
3
+ ## 0.37.0
4
+
5
+ ### Minor Changes
6
+
7
+ - - A `button` takes a `title`: shown as a tooltip, and its accessible name when it has no text of its own — an
8
+ icon-only button without one was announced as nothing. The builder's settings offer it as "Tooltip". The JSON export
9
+ is two files, `schema.json` and `style.json`, shown as tabs; each group of changes in the export folds away.
10
+
11
+ - `BindingTransformer.params` is `Record<string, string | number | boolean>`: a param the builder draws as a checkbox
12
+ (`styleVariant`'s `append`) is stored as the boolean it is and read as one, so the type now says so. The MCP compares
13
+ such a param with its catalog options as text. A `container` may be an `li`, for the rows of a list. The export
14
+ keeps every element id with `keepIds`, and the header's Publish dialog opens wider.
15
+
16
+ - **The builder exports the space on screen — on paid plans.** **Export** in the header opens a wide dialog: the
17
+ format as tabs (TypeScript in one file, TypeScript with a file per page as a `.zip`, or JSON), generated as soon as
18
+ it is picked, shown read-only in CodeMirror — beside a file list when there are several — with one row of actions,
19
+ **Copy** and **Download**. What the export tidied is a one-line note that unfolds into readable groups. On the free
20
+ plan the dialog explains what export is instead; the server refuses the code with a 402 (`limit: 'spaceExport'`)
21
+ whatever the builder shows. `useSpaceExport` is the one way into it, for anything else that needs the space as files.
22
+
23
+ - **A space document can be read back into code.** `specFromSpace(documents)` turns a `{ schema, style }` pair — a
24
+ builder export, a seed checked in as JSON — into the `SpaceSpec` that authors it, and `specToSource(spec, { exportName })`
25
+ writes that spec out as the TypeScript a person would write: one factory call per element, the attributes a type
26
+ already defaults to left out, the longhands the document stores written back as `padding: 10px 20px`, and every class
27
+ something names as a `styles()` declaration held in a variable. `split: true` writes one file per page and per layout.
28
+ `compareSpaces(expected, actual)` proves the round trip: it lists every way two pairs render differently — the tree,
29
+ the attributes, the rules that apply to each element whatever its selector is called, bindings, flows, pages, layouts
30
+ and settings — and nothing else. A selector used by one element becomes that element's own `css`; one shared, or
31
+ spelled out anywhere in the document (a `customCss` rule, a template), stays a class under its own name; an element id
32
+ nothing refers to is left out and derived again.
33
+
34
+ What an older builder left behind is repaired on the way, and every repair is reported in `corrections` rather than
35
+ made silently: element types that no longer exist (`navbar` → a `list` laid out in a row, `navbarItem` → `listItem`),
36
+ a hover stored as a class of its own (`card:hover`) folded into the class, fields and attributes no component reads,
37
+ a setting nothing reads, a link `target` of `_blank` (the component adds the underscore, so it rendered as `__blank`),
38
+ `null` or an empty list where an attribute is unset, a binding to a source nothing publishes, a flow with a step that
39
+ runs nothing, and a global callback registered on the wrong module. A CSS property the style editor cannot hold is
40
+ kept in `customCss` under the same selector, so the page still renders it.
41
+
42
+ - **What a spec can say grew to what a document holds.** A selector carries its states and variants beside its rules —
43
+ `styles('card', { css, states: { hover }, variants: { active } })`, and `states` on an element's own `css` — and the
44
+ selector cache is now written by `processSelector`, the function the style editor writes it with. An element type's
45
+ defaults (`elements`) take states, variants, per-breakpoint rules and `slots` for its other selectors (a modal's
46
+ `rootContainer`). A space declares `layouts` — shells that pages render inside, named by `layout: { id, slot }` on a
47
+ page or on another layout, with the slot checked to be inside the shell — and a page takes `keepState` and
48
+ `stateStorage`. `visible: false` starts an element hidden for a flow to reveal, and `loadStrategy` is carried through.
49
+ An element's own selector never takes the name of a declared class any more, however that class happens to be called.
50
+
51
+ - `elementAttributeNames` lists, as data, the attributes each built-in element can be authored with — `null` for one
52
+ that takes any. It is generated from the elements' attribute types (`yarn generate:attribute-names`) and a type test
53
+ fails when the two disagree. `defaultAttributes(type)` and `defaultLabel(type)` expose what a factory fills in.
54
+
55
+ - `CustomAttributes` accepts any attribute, because the component a custom element's `renderType` names reads its own
56
+ attributes off it; and `FormControlAttributes` declares `previewError`, which `withFieldValue` reads.
57
+
58
+ ### Patch Changes
59
+
60
+ - Updated dependencies
61
+ - @plitzi/sdk-auth@0.37.0
62
+ - @plitzi/sdk-dev-tools@0.37.0
63
+ - @plitzi/sdk-event-bridge@0.37.0
64
+ - @plitzi/sdk-interactions@0.37.0
65
+ - @plitzi/sdk-navigation@0.37.0
66
+ - @plitzi/sdk-schema@0.37.0
67
+ - @plitzi/sdk-shared@0.37.0
68
+
3
69
  ## 0.36.2
4
70
 
5
71
  ### Patch Changes
@@ -8,7 +8,7 @@ var r = ({ source: e, transformers: t }) => {
8
8
  let t = e.indexOf(".");
9
9
  r.push(t > -1 ? e.substring(0, t) : e);
10
10
  }
11
- for (let { action: e, params: i } of t ?? []) e === "twigTemplate" && i.template && r.push(...n(i.template));
11
+ for (let { action: e, params: i } of t ?? []) e === "twigTemplate" && typeof i.template == "string" && i.template && r.push(...n(i.template));
12
12
  return r;
13
13
  }, i = ({ bindings: n, sources: i }) => {
14
14
  let a = e(() => {
@@ -1,7 +1,11 @@
1
1
  import { CustomProps } from './Custom';
2
2
  import { AuthorableAttributes } from '@plitzi/sdk-shared/authoring/declare';
3
- /** What this element can be authored with — its component's own props, minus what the runtime supplies. */
4
- export type CustomAttributes = AuthorableAttributes<CustomProps>;
3
+ /**
4
+ * What this element can be authored with — its component's own props, minus what the runtime supplies — and
5
+ * anything else: the component its `renderType` names reads its own attributes off this element (a chart's
6
+ * `series`, a map's `height`), so the element carries whatever that component declares.
7
+ */
8
+ export type CustomAttributes = AuthorableAttributes<CustomProps> & Record<string, unknown>;
5
9
  declare const declaration: {
6
10
  readonly type: "custom";
7
11
  readonly content: {
@@ -53,11 +57,5 @@ declare const declaration: {
53
57
  };
54
58
  readonly settings: {};
55
59
  };
56
- } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
57
- settings?: string | undefined;
58
- assets?: string | undefined;
59
- renderType?: string | undefined;
60
- isPlugin?: boolean | undefined;
61
- scriptUrl?: string | undefined;
62
- }>>;
60
+ } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<CustomAttributes>;
63
61
  export default declaration;
@@ -52,11 +52,5 @@ declare const Custom: {
52
52
  };
53
53
  readonly settings: {};
54
54
  };
55
- } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
56
- settings?: string | undefined;
57
- assets?: string | undefined;
58
- renderType?: string | undefined;
59
- isPlugin?: boolean | undefined;
60
- scriptUrl?: string | undefined;
61
- }>>;
55
+ } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<import('./declaration').CustomAttributes>;
62
56
  export default Custom;
@@ -16,8 +16,16 @@ export type ButtonProps = {
16
16
  ariaExpanded?: boolean;
17
17
  /** For a button that stays on or off — a filter, a mode: `true` while it is on. Left out, it is a plain button. */
18
18
  ariaPressed?: boolean;
19
+ /**
20
+ * What the button does, in words — shown as a tooltip on hover, and the button's accessible name when it has no text
21
+ * of its own. An icon-only button without one is announced as nothing at all.
22
+ *
23
+ * The browser falls back to it by itself, so it is never copied into `aria-label`: an `aria-label` would win over a
24
+ * visually-hidden label among the children, which is how a button with an empty `content` names itself.
25
+ */
26
+ title?: string;
19
27
  };
20
- declare const Button: ({ ref, className, children, contentPlacement, content, subType, disabled, ariaExpanded, ariaPressed }: ButtonProps) => import("react").JSX.Element;
28
+ declare const Button: ({ ref, className, children, contentPlacement, content, subType, disabled, ariaExpanded, ariaPressed, title }: ButtonProps) => import("react").JSX.Element;
21
29
  declare const _default: {
22
30
  (props: import('../../../Element/hocs/withElement').WithElementProps<ButtonProps>): import("react").JSX.Element;
23
31
  displayName: string;
@@ -1,28 +1,27 @@
1
1
  import e from "../../../Element/hocs/withElement.mjs";
2
- import t from "../../../Element/hooks/useElement.mjs";
3
- import { RootElement as n } from "../../../Element/RootElement.mjs";
4
- import { useMemo as r } from "react";
5
- import i from "@plitzi/sdk-shared/hooks/usePlitziServiceContext";
6
- import { jsxs as a } from "react/jsx-runtime";
7
- import o from "clsx";
2
+ import { RootElement as t } from "../../../Element/RootElement.mjs";
3
+ import n from "@plitzi/sdk-shared/hooks/usePlitziServiceContext";
4
+ import { jsxs as r } from "react/jsx-runtime";
5
+ import i from "clsx";
8
6
  //#region src/elements/basic/Button/Button.tsx
9
- var s = ({ ref: e, className: s = "", children: c, contentPlacement: l = "after", content: u = "Button", subType: d = "button", disabled: f = !1, ariaExpanded: p, ariaPressed: m }) => {
10
- let { definition: { label: h } } = t(), { settings: { previewMode: g } } = i(), _ = r(() => typeof u == "string" ? u : h, [u, h]);
11
- return /* @__PURE__ */ a(n, {
7
+ var a = ({ ref: e, className: a = "", children: o, contentPlacement: s = "after", content: c = "Button", subType: l = "button", disabled: u = !1, ariaExpanded: d, ariaPressed: f, title: p }) => {
8
+ let { settings: { previewMode: m } } = n();
9
+ return /* @__PURE__ */ r(t, {
12
10
  ref: e,
13
11
  tag: "button",
14
- type: g ? d : "button",
15
- className: o("plitzi-component__button", s, { "container--empty--skip": !g && !c && u }),
16
- disabled: f,
17
- "aria-label": _,
18
- "aria-expanded": p,
19
- "aria-pressed": m,
12
+ type: m ? l : "button",
13
+ className: i("plitzi-component__button", a, { "container--empty--skip": !m && !o && c }),
14
+ disabled: u,
15
+ "aria-label": c || void 0,
16
+ title: p || void 0,
17
+ "aria-expanded": d,
18
+ "aria-pressed": f,
20
19
  children: [
21
- l === "before" && u,
22
- c,
23
- l === "after" && u
20
+ s === "before" && c,
21
+ o,
22
+ s === "after" && c
24
23
  ]
25
24
  });
26
- }, c = e(s);
25
+ }, o = e(a);
27
26
  //#endregion
28
- export { s as Button, c as default };
27
+ export { a as Button, o as default };
@@ -3,7 +3,8 @@ type SettingsProps = {
3
3
  contentPlacement?: 'before' | 'after' | 'elements';
4
4
  subType?: 'button' | 'reset' | 'submit';
5
5
  disabled?: boolean;
6
+ title?: string;
6
7
  onUpdate?: (key: string, value: string | number | boolean) => void;
7
8
  };
8
- declare const Settings: ({ content, contentPlacement, subType, disabled, onUpdate }: SettingsProps) => import("react").JSX.Element;
9
+ declare const Settings: ({ content, contentPlacement, subType, disabled, title, onUpdate }: SettingsProps) => import("react").JSX.Element;
9
10
  export default Settings;
@@ -4,21 +4,28 @@ import r from "@plitzi/plitzi-ui/Checkbox";
4
4
  import i from "@plitzi/plitzi-ui/Input";
5
5
  import a from "@plitzi/plitzi-ui/Select";
6
6
  //#region src/elements/basic/Button/Settings.tsx
7
- var o = ({ content: o = "Button", contentPlacement: s = "after", subType: c = "button", disabled: l = !1, onUpdate: u }) => {
8
- let d = e((e) => u?.("content", e), [u]), f = e((e) => u?.("contentPlacement", e), [u]), p = e((e) => u?.("subType", e), [u]), m = e((e) => u?.("disabled", e.target.checked), [u]);
7
+ var o = ({ content: o = "Button", contentPlacement: s = "after", subType: c = "button", disabled: l = !1, title: u = "", onUpdate: d }) => {
8
+ let f = e((e) => d?.("content", e), [d]), p = e((e) => d?.("contentPlacement", e), [d]), m = e((e) => d?.("subType", e), [d]), h = e((e) => d?.("title", e), [d]), g = e((e) => d?.("disabled", e.target.checked), [d]);
9
9
  return /* @__PURE__ */ n("div", {
10
10
  className: "flex h-full flex-col gap-4 py-2",
11
11
  children: [
12
12
  /* @__PURE__ */ t(i, {
13
13
  value: o,
14
14
  label: "Content",
15
- onChange: d,
15
+ onChange: f,
16
+ size: "xs"
17
+ }),
18
+ /* @__PURE__ */ t(i, {
19
+ value: u,
20
+ label: "Tooltip",
21
+ placeholder: "What the button does, for an icon-only one",
22
+ onChange: h,
16
23
  size: "xs"
17
24
  }),
18
25
  /* @__PURE__ */ n(a, {
19
26
  value: s,
20
27
  label: "Mode",
21
- onChange: f,
28
+ onChange: p,
22
29
  size: "xs",
23
30
  children: [
24
31
  /* @__PURE__ */ t("option", {
@@ -38,7 +45,7 @@ var o = ({ content: o = "Button", contentPlacement: s = "after", subType: c = "b
38
45
  /* @__PURE__ */ n(a, {
39
46
  value: c,
40
47
  label: "Button Type",
41
- onChange: p,
48
+ onChange: m,
42
49
  size: "xs",
43
50
  children: [
44
51
  /* @__PURE__ */ t("option", {
@@ -58,7 +65,7 @@ var o = ({ content: o = "Button", contentPlacement: s = "after", subType: c = "b
58
65
  /* @__PURE__ */ t(r, {
59
66
  checked: l,
60
67
  label: "Is Disabled",
61
- onChange: m,
68
+ onChange: g,
62
69
  size: "xs"
63
70
  })
64
71
  ]
@@ -119,6 +119,7 @@ declare const declaration: {
119
119
  readonly settings: {};
120
120
  };
121
121
  } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
122
+ title?: string | undefined;
122
123
  content?: string | undefined;
123
124
  disabled?: boolean | undefined;
124
125
  subType?: "button" | "submit" | "reset" | undefined;
@@ -118,6 +118,7 @@ declare const Button: {
118
118
  readonly settings: {};
119
119
  };
120
120
  } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
121
+ title?: string | undefined;
121
122
  content?: string | undefined;
122
123
  disabled?: boolean | undefined;
123
124
  subType?: "button" | "submit" | "reset" | undefined;
@@ -319,6 +319,7 @@ export declare const elementDeclarations: {
319
319
  readonly settings: {};
320
320
  };
321
321
  } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
322
+ title?: string | undefined;
322
323
  content?: string | undefined;
323
324
  disabled?: boolean | undefined;
324
325
  subType?: "button" | "submit" | "reset" | undefined;
@@ -376,7 +377,7 @@ export declare const elementDeclarations: {
376
377
  readonly settings: {};
377
378
  };
378
379
  } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
379
- subType?: "div" | "header" | "footer" | "nav" | "main" | "section" | "article" | "aside" | "address" | "figure" | "dl" | "dt" | "dd" | undefined;
380
+ subType?: "div" | "header" | "footer" | "nav" | "main" | "section" | "article" | "aside" | "address" | "figure" | "dl" | "dt" | "dd" | "li" | undefined;
380
381
  }>>;
381
382
  readonly Custom: {
382
383
  readonly type: "custom";
@@ -429,13 +430,7 @@ export declare const elementDeclarations: {
429
430
  };
430
431
  readonly settings: {};
431
432
  };
432
- } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
433
- settings?: string | undefined;
434
- assets?: string | undefined;
435
- renderType?: string | undefined;
436
- isPlugin?: boolean | undefined;
437
- scriptUrl?: string | undefined;
438
- }>>;
433
+ } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<import('../advanced/Custom/declaration').CustomAttributes>;
439
434
  readonly DialogContainer: {
440
435
  readonly type: "dialogContainer";
441
436
  readonly sourceType: "dialogContainer";
@@ -3,6 +3,8 @@ import { AuthorableAttributes } from '@plitzi/sdk-shared/authoring/declare';
3
3
  /** What this element can be authored with — its component's own props, minus what the runtime supplies. */
4
4
  export type FormControlAttributes = AuthorableAttributes<FormControlProps, 'value' | 'error' | 'handleChange' | 'handleValidate'> & {
5
5
  defaultValue?: string;
6
+ /** Read by `withFieldValue`, not by the component: shows the control in its error state while editing. */
7
+ previewError?: boolean;
6
8
  };
7
9
  declare const declaration: {
8
10
  readonly type: "formControl";
@@ -2,7 +2,7 @@ import { ReactNode, RefObject } from 'react';
2
2
  export type ContainerProps = {
3
3
  ref?: RefObject<HTMLElement>;
4
4
  className?: string;
5
- subType?: 'div' | 'header' | 'footer' | 'nav' | 'main' | 'section' | 'article' | 'aside' | 'address' | 'figure' | 'dl' | 'dt' | 'dd';
5
+ subType?: 'div' | 'header' | 'footer' | 'nav' | 'main' | 'section' | 'article' | 'aside' | 'address' | 'figure' | 'dl' | 'dt' | 'dd' | 'li';
6
6
  children?: ReactNode;
7
7
  };
8
8
  declare const Container: ({ ref, className, subType, children }: ContainerProps) => import("react").JSX.Element;
@@ -1,5 +1,5 @@
1
1
  type SettingsProps = {
2
- subType?: 'div' | 'header' | 'footer' | 'nav' | 'main' | 'section' | 'article' | 'aside' | 'address' | 'figure' | 'dl' | 'dt' | 'dd';
2
+ subType?: 'div' | 'header' | 'footer' | 'nav' | 'main' | 'section' | 'article' | 'aside' | 'address' | 'figure' | 'dl' | 'dt' | 'dd' | 'li';
3
3
  onUpdate?: (key: string, value: string | boolean | number) => void;
4
4
  };
5
5
  declare const Settings: ({ subType, onUpdate }: SettingsProps) => import("react").JSX.Element;
@@ -63,6 +63,10 @@ var i = ({ subType: i = "div", onUpdate: a }) => {
63
63
  /* @__PURE__ */ t("option", {
64
64
  value: "dd",
65
65
  children: "DD"
66
+ }),
67
+ /* @__PURE__ */ t("option", {
68
+ value: "li",
69
+ children: "LI"
66
70
  })
67
71
  ]
68
72
  })
@@ -52,6 +52,6 @@ declare const declaration: {
52
52
  readonly settings: {};
53
53
  };
54
54
  } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
55
- subType?: "div" | "header" | "footer" | "nav" | "main" | "section" | "article" | "aside" | "address" | "figure" | "dl" | "dt" | "dd" | undefined;
55
+ subType?: "div" | "header" | "footer" | "nav" | "main" | "section" | "article" | "aside" | "address" | "figure" | "dl" | "dt" | "dd" | "li" | undefined;
56
56
  }>>;
57
57
  export default declaration;
@@ -51,6 +51,6 @@ declare const Container: {
51
51
  readonly settings: {};
52
52
  };
53
53
  } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
54
- subType?: "div" | "header" | "footer" | "nav" | "main" | "section" | "article" | "aside" | "address" | "figure" | "dl" | "dt" | "dd" | undefined;
54
+ subType?: "div" | "header" | "footer" | "nav" | "main" | "section" | "article" | "aside" | "address" | "figure" | "dl" | "dt" | "dd" | "li" | undefined;
55
55
  }>>;
56
56
  export default Container;
package/dist/index.d.ts CHANGED
@@ -309,13 +309,7 @@ export declare const defaultElements: {
309
309
  };
310
310
  readonly settings: {};
311
311
  };
312
- } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
313
- settings?: string | undefined;
314
- assets?: string | undefined;
315
- renderType?: string | undefined;
316
- isPlugin?: boolean | undefined;
317
- scriptUrl?: string | undefined;
318
- }>>;
312
+ } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<import('./elements/advanced/Custom/declaration').CustomAttributes>;
319
313
  reference: {
320
314
  (props: import('./Element/hocs/withElement').WithElementProps<import('./elements/advanced/Reference/Reference').ReferenceProps>): import("react").JSX.Element;
321
315
  displayName: string;
@@ -956,7 +950,7 @@ export declare const defaultElements: {
956
950
  readonly settings: {};
957
951
  };
958
952
  } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
959
- subType?: "div" | "header" | "footer" | "nav" | "main" | "section" | "article" | "aside" | "address" | "figure" | "dl" | "dt" | "dd" | undefined;
953
+ subType?: "div" | "header" | "footer" | "nav" | "main" | "section" | "article" | "aside" | "address" | "figure" | "dl" | "dt" | "dd" | "li" | undefined;
960
954
  }>>;
961
955
  layoutContainer: {
962
956
  (props: import('./Element/hocs/withElement').WithElementProps<import('./elements/internal/LayoutContainer/LayoutContainer').LayoutContainerProps>): import("react").JSX.Element;
@@ -1977,6 +1971,7 @@ export declare const defaultElements: {
1977
1971
  readonly settings: {};
1978
1972
  };
1979
1973
  } & import('@plitzi/sdk-shared/authoring/declare').ElementAttributesBrand<Partial<{
1974
+ title?: string | undefined;
1980
1975
  content?: string | undefined;
1981
1976
  disabled?: boolean | undefined;
1982
1977
  subType?: "button" | "submit" | "reset" | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plitzi/sdk-elements",
3
- "version": "0.36.2",
3
+ "version": "0.37.0",
4
4
  "license": "AGPL-3.0",
5
5
  "files": [
6
6
  "dist"
@@ -1014,13 +1014,13 @@
1014
1014
  "dependencies": {
1015
1015
  "@plitzi/nexus": "^1.2.2",
1016
1016
  "@plitzi/plitzi-ui": "^1.6.21",
1017
- "@plitzi/sdk-auth": "0.36.2",
1018
- "@plitzi/sdk-dev-tools": "0.36.2",
1019
- "@plitzi/sdk-event-bridge": "0.36.2",
1020
- "@plitzi/sdk-interactions": "0.36.2",
1021
- "@plitzi/sdk-navigation": "0.36.2",
1022
- "@plitzi/sdk-schema": "0.36.2",
1023
- "@plitzi/sdk-shared": "0.36.2",
1017
+ "@plitzi/sdk-auth": "0.37.0",
1018
+ "@plitzi/sdk-dev-tools": "0.37.0",
1019
+ "@plitzi/sdk-event-bridge": "0.37.0",
1020
+ "@plitzi/sdk-interactions": "0.37.0",
1021
+ "@plitzi/sdk-navigation": "0.37.0",
1022
+ "@plitzi/sdk-schema": "0.37.0",
1023
+ "@plitzi/sdk-shared": "0.37.0",
1024
1024
  "clsx": "^2.1.1",
1025
1025
  "immer": "^11.1.18"
1026
1026
  },