@homebound/beam 2.117.2 → 2.118.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/dist/Css.d.ts CHANGED
@@ -2527,6 +2527,9 @@ declare class CssBuilder<T extends Properties1> {
2527
2527
  } & {
2528
2528
  textOverflow: import("csstype").Property.TextOverflow | undefined;
2529
2529
  }>;
2530
+ lh(value: Properties["lineHeight"]): CssBuilder<T & {
2531
+ lineHeight: import("csstype").Property.LineHeight<0 | (string & {})> | undefined;
2532
+ }>;
2530
2533
  get selectNone(): CssBuilder<T & {
2531
2534
  userSelect: import("csstype").Property.UserSelect | undefined;
2532
2535
  }>;
package/dist/Css.js CHANGED
@@ -754,6 +754,7 @@ class CssBuilder {
754
754
  get indent() { return this.add("textIndent", "1em").add("marginTop", 0).add("marginBottom", 0); }
755
755
  get smallCaps() { return this.add("fontVariant", "small-caps"); }
756
756
  get truncate() { return this.add("whiteSpace", "nowrap").add("overflow", "hidden").add("textOverflow", "ellipsis"); }
757
+ lh(value) { return this.add("lineHeight", value); }
757
758
  // userSelect
758
759
  get selectNone() { return this.add("userSelect", "none"); }
759
760
  get selectText() { return this.add("userSelect", "text"); }
@@ -127,6 +127,9 @@ function GridTable(props) {
127
127
  // (or us) is resetting component state more than necessary, so we track render counts from
128
128
  // here instead.
129
129
  const { getCount } = (0, useRenderCount_1.useRenderCount)();
130
+ const columnSizes = (0, columnSizes_1.useSetupColumnSizes)(style, columns, tableRef, resizeTarget);
131
+ // Make a single copy of our current collapsed state, so we'll have a single observer.
132
+ const collapsedIds = (0, hooks_1.useComputed)(() => rowState.collapsedIds, [rowState]);
130
133
  const [sortState, setSortKey] = (0, useSortState_1.useSortState)(columns, sorting);
131
134
  const maybeSorted = (0, react_1.useMemo)(() => {
132
135
  if ((sorting === null || sorting === void 0 ? void 0 : sorting.on) === "client" && sortState) {
@@ -135,13 +138,34 @@ function GridTable(props) {
135
138
  }
136
139
  return rows;
137
140
  }, [columns, rows, sorting, sortState]);
138
- const columnSizes = (0, columnSizes_1.useSetupColumnSizes)(style, columns, tableRef, resizeTarget);
139
- // Make a single copy of our current collapsed state, so we'll have a single observer.
140
- const collapsedIds = (0, hooks_1.useComputed)(() => rowState.collapsedIds, [rowState]);
141
- // Filter + flatten + component-ize the sorted rows.
142
- let [headerRows, filteredRows] = (0, react_1.useMemo)(() => {
141
+ // Filter rows - ensures parent rows remain in the list if any children match the filter.
142
+ const filterRows = (0, react_1.useCallback)((acc, row) => {
143
+ var _a, _b, _c;
143
144
  // Break up "foo bar" into `[foo, bar]` and a row must match both `foo` and `bar`
144
145
  const filters = (filter && filter.split(/ +/)) || [];
146
+ const matches = row.kind === "header" ||
147
+ filters.length === 0 ||
148
+ !!row.pin ||
149
+ filters.every((f) => columns.map((c) => applyRowFn(c, row, api)).some((maybeContent) => matchesFilter(maybeContent, f)));
150
+ // If the row matches, add it in
151
+ if (matches) {
152
+ return acc.concat([[row, (_b = (_a = row.children) === null || _a === void 0 ? void 0 : _a.reduce(filterRows, [])) !== null && _b !== void 0 ? _b : []]]);
153
+ }
154
+ else {
155
+ // Otherwise, maybe one of the children match.
156
+ const isCollapsed = collapsedIds.includes(row.id);
157
+ if (!isCollapsed && !!((_c = row.children) === null || _c === void 0 ? void 0 : _c.length)) {
158
+ const matchedChildren = row.children.reduce(filterRows, []);
159
+ // If some children did match, then add the parent row with its matched children.
160
+ if (matchedChildren.length > 0) {
161
+ return acc.concat([[row, matchedChildren]]);
162
+ }
163
+ }
164
+ }
165
+ return acc;
166
+ }, [filter, collapsedIds]);
167
+ // Flatten + component-ize the sorted rows.
168
+ let [headerRows, filteredRows] = (0, react_1.useMemo)(() => {
145
169
  function makeRowComponent(row, level) {
146
170
  // We only pass sortState to header rows, b/c non-headers rows shouldn't have to re-render on sorting
147
171
  // changes, and so by not passing the sortProps, it means the data rows' React.memo will still cache them.
@@ -168,38 +192,30 @@ function GridTable(props) {
168
192
  const filteredRows = [];
169
193
  // Misc state to track our nested card-ification, i.e. interleaved actual rows + chrome rows
170
194
  const nestedCards = !!style.nestedCards && new nestedCards_1.NestedCards(columns, filteredRows, style.nestedCards);
171
- // Depth-first to filter
172
- function visit(row, level) {
173
- var _a;
174
- const matches = filters.length === 0 ||
175
- row.pin ||
176
- filters.every((filter) => columns.map((c) => applyRowFn(c, row, api)).some((maybeContent) => matchesFilter(maybeContent, filter)));
177
- let isCard = false;
178
- // Even if we don't pass the filter, one of our children might, so we continue on after this check
179
- if (matches) {
180
- isCard = nestedCards && nestedCards.maybeOpenCard(row);
181
- filteredRows.push([row, makeRowComponent(row, level)]);
182
- }
195
+ function visit([row, children], level) {
196
+ let isCard = nestedCards && nestedCards.maybeOpenCard(row);
197
+ filteredRows.push([row, makeRowComponent(row, level)]);
183
198
  const isCollapsed = collapsedIds.includes(row.id);
184
- if (!isCollapsed && !!((_a = row.children) === null || _a === void 0 ? void 0 : _a.length)) {
185
- nestedCards && matches && nestedCards.addSpacer();
186
- visitRows(row.children, isCard, level + 1);
199
+ if (!isCollapsed && children.length) {
200
+ nestedCards && nestedCards.addSpacer();
201
+ visitRows(children, isCard, level + 1);
187
202
  }
188
203
  !(0, nestedCards_1.isLeafRow)(row) && isCard && nestedCards && nestedCards.closeCard();
189
204
  }
190
205
  function visitRows(rows, addSpacer, level) {
191
206
  const length = rows.length;
192
207
  rows.forEach((row, i) => {
193
- if (row.kind === "header") {
194
- headerRows.push([row, makeRowComponent(row, level)]);
208
+ if (row[0].kind === "header") {
209
+ headerRows.push([row[0], makeRowComponent(row[0], level)]);
195
210
  return;
196
211
  }
197
212
  visit(row, level);
198
213
  addSpacer && nestedCards && i !== length - 1 && nestedCards.addSpacer();
199
214
  });
200
215
  }
216
+ // Call `visitRows` with our a pre-filtered set list
201
217
  // If nestedCards is set, we assume the top-level kind is a card, and so should add spacers between them
202
- visitRows(maybeSorted, !!nestedCards, 0);
218
+ visitRows(maybeSorted.reduce(filterRows, []), !!nestedCards, 0);
203
219
  nestedCards && nestedCards.done();
204
220
  return [headerRows, filteredRows];
205
221
  }, [
@@ -34,6 +34,8 @@ export declare class RowState {
34
34
  get collapsedIds(): string[];
35
35
  isCollapsed(id: string): boolean;
36
36
  toggleCollapsed(id: string): void;
37
+ private getVisibleChildrenStates;
38
+ private setNestedSelectedStates;
37
39
  }
38
40
  /** Provides a context for rows to access their table's `RowState`. */
39
41
  export declare const RowStateContext: React.Context<{
@@ -37,6 +37,13 @@ class RowState {
37
37
  // Make ourselves an observable so that mobx will do caching of .collapseIds so
38
38
  // that it'll be a stable identity for GridTable to useMemo against.
39
39
  (0, mobx_1.makeAutoObservable)(this, { rows: false }); // as any b/c rows is private, so the mapped type doesn't see it
40
+ // Whenever our `visibleRows` change (i.e. via filtering) then we need to re-derive header and parent rows' selected state.
41
+ (0, mobx_1.reaction)(() => [...this.visibleRows.values()].sort(), () => {
42
+ const map = new Map();
43
+ map.set("header", deriveParentSelected(this.rows.current.flatMap((row) => this.setNestedSelectedStates(row, map))));
44
+ // Merge the changes back into the selected rows state
45
+ this.selectedRows.merge(map);
46
+ }, { equals: mobx_1.comparer.shallow });
40
47
  }
41
48
  get selectedIds() {
42
49
  // Return only ids that are fully checked, i.e. not partial
@@ -62,7 +69,7 @@ class RowState {
62
69
  // Just mash the header + all rows + children as selected
63
70
  const map = new Map();
64
71
  map.set("header", "checked");
65
- (0, visitor_1.visit)(this.rows.current, (row) => map.set(row.id, "checked"));
72
+ (0, visitor_1.visit)(this.rows.current, (row) => this.visibleRows.has(row.id) && map.set(row.id, "checked"));
66
73
  this.selectedRows.replace(map);
67
74
  }
68
75
  else {
@@ -80,19 +87,15 @@ class RowState {
80
87
  }
81
88
  // Everything here & down is deterministically on/off
82
89
  const map = new Map();
83
- (0, visitor_1.visit)([curr.row], (row) => map.set(row.id, selected ? "checked" : "unchecked"));
90
+ (0, visitor_1.visit)([curr.row], (row) => this.visibleRows.has(row.id) && map.set(row.id, selected ? "checked" : "unchecked"));
84
91
  // Now walk up the parents and see if they are now-all-checked/now-all-unchecked/some-of-each
85
92
  for (const parent of [...curr.parents].reverse()) {
86
93
  if (parent.children) {
87
- const children = parent.children.map((row) => map.get(row.id) || this.getSelected(row.id));
88
- map.set(parent.id, deriveParentSelected(children));
94
+ map.set(parent.id, deriveParentSelected(this.getVisibleChildrenStates(parent.children, map)));
89
95
  }
90
96
  }
91
97
  // And do the header + top-level "children" as a final one-off
92
- const children = this.rows.current
93
- .filter((row) => row.id !== "header")
94
- .map((row) => map.get(row.id) || this.getSelected(row.id));
95
- map.set("header", deriveParentSelected(children));
98
+ map.set("header", deriveParentSelected(this.getVisibleChildrenStates(this.rows.current, map)));
96
99
  this.selectedRows.merge(map);
97
100
  }
98
101
  }
@@ -145,6 +148,24 @@ class RowState {
145
148
  localStorage.setItem(this.persistCollapse, JSON.stringify(collapsedIds));
146
149
  }
147
150
  }
151
+ getVisibleChildrenStates(children, map) {
152
+ return children
153
+ .filter((row) => row.id !== "header" && this.visibleRows.has(row.id))
154
+ .map((row) => map.get(row.id) || this.getSelected(row.id));
155
+ }
156
+ // Recursively traverse through rows to determine selected state of parent rows based on children
157
+ setNestedSelectedStates(row, map) {
158
+ if (this.visibleRows.has(row.id)) {
159
+ if (!row.children) {
160
+ return [this.getSelected(row.id)];
161
+ }
162
+ const childrenSelectedStates = row.children.flatMap((rc) => this.setNestedSelectedStates(rc, map));
163
+ const parentState = deriveParentSelected(childrenSelectedStates);
164
+ map.set(row.id, parentState);
165
+ return [parentState];
166
+ }
167
+ return [];
168
+ }
148
169
  }
149
170
  exports.RowState = RowState;
150
171
  /** Provides a context for rows to access their table's `RowState`. */
@@ -177,5 +198,5 @@ function findRow(rows, id) {
177
198
  function deriveParentSelected(children) {
178
199
  const allChecked = children.every((child) => child === "checked");
179
200
  const allUnchecked = children.every((child) => child === "unchecked");
180
- return allChecked ? "checked" : allUnchecked ? "unchecked" : "partial";
201
+ return children.length === 0 ? "unchecked" : allChecked ? "checked" : allUnchecked ? "unchecked" : "partial";
181
202
  }
@@ -8,7 +8,7 @@ function sortRows(columns, rows, sortState) {
8
8
  // Recursively sort child rows
9
9
  sorted.forEach((row, i) => {
10
10
  if (row.children) {
11
- sorted[i] = { ...sorted[i], children: sortRows(columns, row.children, sortState) };
11
+ sorted[i].children = sortRows(columns, row.children, sortState);
12
12
  }
13
13
  });
14
14
  return sorted;
@@ -1,4 +1,4 @@
1
- import { FieldState } from "@homebound/form-state/dist/formState";
1
+ import { FieldState } from "@homebound/form-state";
2
2
  import { Value } from "../inputs";
3
3
  import { ChipSelectFieldProps } from "../inputs/ChipSelectField";
4
4
  import { HasIdAndName, Optional } from "../types";
@@ -1,4 +1,4 @@
1
- import { FieldState } from "@homebound/form-state/dist/formState";
1
+ import { FieldState } from "@homebound/form-state";
2
2
  import { MultiSelectFieldProps, Value } from "../inputs";
3
3
  import { HasIdAndName, Optional } from "../types";
4
4
  export declare type BoundMultiSelectFieldProps<O, V extends Value> = Omit<MultiSelectFieldProps<O, V>, "values" | "onSelect" | "label"> & {
@@ -1,4 +1,4 @@
1
- import { FieldState } from "@homebound/form-state/dist/formState";
1
+ import { FieldState } from "@homebound/form-state";
2
2
  import { SelectFieldProps, Value } from "../inputs";
3
3
  import { HasIdAndName, Optional } from "../types";
4
4
  export declare type BoundSelectFieldProps<T, V extends Value> = Omit<SelectFieldProps<T, V>, "value" | "onSelect" | "label"> & {
@@ -56,9 +56,9 @@ function FormStateApp() {
56
56
  { value: "a:4", label: "Iguana" },
57
57
  { value: "a:5", label: "Turtle" },
58
58
  ];
59
- return ((0, jsx_runtime_1.jsx)(mobx_react_1.Observer, { children: () => ((0, jsx_runtime_1.jsxs)("div", Object.assign({ css: Css_1.Css.df.$ }, { children: [(0, jsx_runtime_1.jsxs)("header", Object.assign({ css: Css_1.Css.wPx(700).$ }, { children: [(0, jsx_runtime_1.jsxs)(FormLines_1.FormLines, Object.assign({ labelSuffix: { required: "*", optional: "(Opt)" } }, { children: [(0, jsx_runtime_1.jsx)("b", { children: "Author" }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundTextField, { field: formState.firstName }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundTextField, { field: formState.middleInitial }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundTextField, { field: formState.lastName }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundDateField, { field: formState.birthday }, void 0), (0, jsx_runtime_1.jsxs)(forms_1.FieldGroup, { children: [(0, jsx_runtime_1.jsx)(forms_1.StaticField, { label: "Revenue", value: "$500" }, void 0), (0, jsx_runtime_1.jsx)(forms_1.StaticLinkField, { label: "Website", href: "https://google.com" }, void 0)] }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundNumberField, { field: formState.heightInInches }, void 0), (0, jsx_runtime_1.jsx)(forms_1.FormDivider, {}, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundSelectField, { field: formState.favoriteSport, options: sports }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundMultiSelectField, { field: formState.favoriteShapes, options: shapes }, void 0), (0, jsx_runtime_1.jsx)(BoundCheckboxGroupField_1.BoundCheckboxGroupField, { field: formState.favoriteColors, options: colors }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundToggleChipGroupField, { field: formState.animals, options: animals }, void 0), (0, jsx_runtime_1.jsx)(forms_1.FormDivider, {}, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundSwitchField, { field: formState.isAvailable }, void 0)] }), void 0), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("strong", { children: ["Books", (0, jsx_runtime_1.jsx)(components_1.IconButton, { icon: "plus", onClick: () => formState.books.add({ id: String(formState.books.value.length) }) }, void 0)] }, void 0), (0, jsx_runtime_1.jsx)(components_1.GridTable, { columns: columns, rows: rows, observeRows: true }, void 0)] }, void 0), (0, jsx_runtime_1.jsxs)("div", Object.assign({ css: Css_1.Css.df.childGap1.$ }, { children: [(0, jsx_runtime_1.jsx)(components_1.Button, { onClick: () => formState.reset(), label: "Cancel" }, void 0), (0, jsx_runtime_1.jsx)(components_1.Button, { onClick: () => {
59
+ return ((0, jsx_runtime_1.jsx)(mobx_react_1.Observer, { children: () => ((0, jsx_runtime_1.jsxs)("div", Object.assign({ css: Css_1.Css.df.$ }, { children: [(0, jsx_runtime_1.jsxs)("header", Object.assign({ css: Css_1.Css.wPx(700).$ }, { children: [(0, jsx_runtime_1.jsxs)(FormLines_1.FormLines, Object.assign({ labelSuffix: { required: "*", optional: "(Opt)" } }, { children: [(0, jsx_runtime_1.jsx)("b", { children: "Author" }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundTextField, { field: formState.firstName }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundTextField, { field: formState.middleInitial }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundTextField, { field: formState.lastName }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundDateField, { field: formState.birthday }, void 0), (0, jsx_runtime_1.jsxs)(forms_1.FieldGroup, { children: [(0, jsx_runtime_1.jsx)(forms_1.StaticField, { label: "Revenue", value: "$500" }, void 0), (0, jsx_runtime_1.jsx)(forms_1.StaticLinkField, { label: "Website", href: "https://google.com" }, void 0)] }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundNumberField, { field: formState.heightInInches }, void 0), (0, jsx_runtime_1.jsx)(forms_1.FormDivider, {}, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundSelectField, { field: formState.favoriteSport, options: sports }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundMultiSelectField, { field: formState.favoriteShapes, options: shapes }, void 0), (0, jsx_runtime_1.jsx)(BoundCheckboxGroupField_1.BoundCheckboxGroupField, { field: formState.favoriteColors, options: colors }, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundToggleChipGroupField, { field: formState.animals, options: animals }, void 0), (0, jsx_runtime_1.jsx)(forms_1.FormDivider, {}, void 0), (0, jsx_runtime_1.jsx)(forms_1.BoundSwitchField, { field: formState.isAvailable }, void 0)] }), void 0), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsxs)("strong", { children: ["Books", (0, jsx_runtime_1.jsx)(components_1.IconButton, { icon: "plus", onClick: () => formState.books.add({ id: String(formState.books.value.length) }) }, void 0)] }, void 0), (0, jsx_runtime_1.jsx)(components_1.GridTable, { columns: columns, rows: rows, observeRows: true }, void 0)] }, void 0), (0, jsx_runtime_1.jsxs)("div", Object.assign({ css: Css_1.Css.df.childGap1.$ }, { children: [(0, jsx_runtime_1.jsx)(components_1.Button, { onClick: () => formState.revertChanges(), label: "Cancel" }, void 0), (0, jsx_runtime_1.jsx)(components_1.Button, { onClick: () => {
60
60
  if (formState.canSave()) {
61
- formState.save();
61
+ formState.commitChanges();
62
62
  }
63
63
  }, label: "Save" }, void 0)] }), void 0)] }), void 0), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(components_1.Button, { label: "Read Only", onClick: () => setReadOnly(!readOnly) }, void 0) }, void 0), (0, jsx_runtime_1.jsxs)("div", Object.assign({ css: Css_1.Css.mt1.$ }, { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Form Values:" }, void 0), (0, jsx_runtime_1.jsx)("pre", { children: JSON.stringify(formState.value, null, 2) }, void 0)] }), void 0)] }, void 0)] }), void 0)) }, void 0));
64
64
  }
@@ -89,7 +89,7 @@ function MiscAuthorDetails({ formState, onBack }) {
89
89
  var _a, _b;
90
90
  return ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h1", Object.assign({ css: Css_1.Css.mb1.$ }, { children: "Author Details" }), void 0), (0, jsx_runtime_1.jsx)("div", Object.assign({ css: Css_1.Css.mb2.$ }, { children: (0, jsx_runtime_1.jsx)(BoundDateField_1.BoundDateField, { field: formState.birthday, helperText: "Required" }, void 0) }), void 0), (0, jsx_runtime_1.jsx)("div", Object.assign({ css: Css_1.Css.mb2.$ }, { children: (0, jsx_runtime_1.jsx)(BoundNumberField_1.BoundNumberField, { field: formState.heightInInches }, void 0) }), void 0), (0, jsx_runtime_1.jsxs)("div", Object.assign({ css: Css_1.Css.df.jcsb.bt.bGray300.py1.mt2.$ }, { children: [(0, jsx_runtime_1.jsx)(components_1.Button, { variant: "tertiary", label: "Back", onClick: onBack }, void 0), (0, jsx_runtime_1.jsx)(components_1.Button, { disabled: !formState.valid, onClick: () => {
91
91
  if (formState.canSave()) {
92
- formState.save();
92
+ formState.commitChanges();
93
93
  setShowFormData(true);
94
94
  }
95
95
  }, label: "Save" }, void 0)] }), void 0), showFormData && ((0, jsx_runtime_1.jsxs)("div", Object.assign({ css: Css_1.Css.mt5.$ }, { children: [(0, jsx_runtime_1.jsx)("h2", { children: "Form saved!" }, void 0), (0, jsx_runtime_1.jsxs)("ul", { children: [(0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "First Name" }, void 0), " ", formState.value.firstName] }, void 0), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Last Name" }, void 0), " ", formState.value.lastName] }, void 0), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Books" }, void 0), " ", (_a = formState.value.books) === null || _a === void 0 ? void 0 : _a.map((b) => b.title).join(", ")] }, void 0), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Birthday" }, void 0), " ", (_b = formState.value.birthday) === null || _b === void 0 ? void 0 : _b.toDateString()] }, void 0), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("strong", { children: "Height" }, void 0), " ", formState.value.heightInInches] }, void 0)] }, void 0)] }), void 0))] }, void 0));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@homebound/beam",
3
- "version": "2.117.2",
3
+ "version": "2.118.0",
4
4
  "author": "Homebound",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -20,8 +20,7 @@
20
20
  "scripts": {
21
21
  "start": "yarn storybook",
22
22
  "build": "yarn copy && ttsc",
23
- "build:truss": "cd ./truss && npm run generate",
24
- "watch:truss": "cd ./truss && watch 'npm run generate' ./",
23
+ "build:truss": "truss",
25
24
  "build:storybook": "build-storybook -s ./testAssets",
26
25
  "test": "jest --maxWorkers 4",
27
26
  "test:watch": "jest --watch",
@@ -33,7 +32,7 @@
33
32
  "format": "prettier --loglevel warn --write \"**/*.{ts,tsx,css,md}\""
34
33
  },
35
34
  "dependencies": {
36
- "@homebound/form-state": "2.5.0",
35
+ "@homebound/form-state": "2.13.0",
37
36
  "@internationalized/number": "^3.0.3",
38
37
  "@react-aria/utils": "^3.9.0",
39
38
  "@react-hook/resize-observer": "^1.2.2",
@@ -78,6 +77,7 @@
78
77
  "@emotion/react": "^11.1.5",
79
78
  "@homebound/rtl-react-router-utils": "^1.0.3",
80
79
  "@homebound/rtl-utils": "^2.51.0",
80
+ "@homebound/truss": "^1.111.3",
81
81
  "@homebound/tsconfig": "^1.0.3",
82
82
  "@semantic-release/exec": "^6.0.3",
83
83
  "@semantic-release/git": "^9.0.0",