@dxos/react-ui-form 0.8.1-staging.5be625a → 0.8.1-staging.97aedb1

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.
Files changed (32) hide show
  1. package/dist/lib/browser/index.mjs +228 -159
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +311 -237
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +228 -159
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/components/ControlSection.d.ts +20 -0
  11. package/dist/types/src/components/ControlSection.d.ts.map +1 -0
  12. package/dist/types/src/components/Form/Form.stories.d.ts +2 -2
  13. package/dist/types/src/components/Form/Form.stories.d.ts.map +1 -1
  14. package/dist/types/src/components/Form/Input.d.ts +1 -1
  15. package/dist/types/src/components/Form/Input.d.ts.map +1 -1
  16. package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts.map +1 -1
  17. package/dist/types/src/components/index.d.ts +1 -0
  18. package/dist/types/src/components/index.d.ts.map +1 -1
  19. package/dist/types/src/util/field.d.ts +0 -1
  20. package/dist/types/src/util/field.d.ts.map +1 -1
  21. package/dist/types/src/util/formatting.d.ts.map +1 -1
  22. package/package.json +24 -24
  23. package/src/components/ControlSection.tsx +113 -0
  24. package/src/components/FieldEditor/FieldEditor.stories.tsx +1 -1
  25. package/src/components/Form/Form.stories.tsx +2 -2
  26. package/src/components/Form/Input.tsx +1 -1
  27. package/src/components/Form/custom/SelectOptionsInput.tsx +5 -1
  28. package/src/components/ViewEditor/ViewEditor.stories.tsx +1 -1
  29. package/src/components/ViewEditor/ViewEditor.tsx +1 -1
  30. package/src/components/index.ts +1 -1
  31. package/src/util/field.ts +3 -4
  32. package/src/util/formatting.ts +9 -10
@@ -29,6 +29,13 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  var node_exports = {};
30
30
  __export(node_exports, {
31
31
  BooleanInput: () => BooleanInput,
32
+ ControlFrame: () => ControlFrame,
33
+ ControlFrameItem: () => ControlFrameItem,
34
+ ControlGroup: () => ControlGroup,
35
+ ControlItem: () => ControlItem,
36
+ ControlItemInput: () => ControlItemInput,
37
+ ControlSection: () => ControlSection,
38
+ ControlSectionHeading: () => ControlSectionHeading,
32
39
  DeprecatedFormContainer: () => DeprecatedFormContainer,
33
40
  DeprecatedFormInput: () => DeprecatedFormInput,
34
41
  FieldEditor: () => FieldEditor,
@@ -44,7 +51,7 @@ __export(node_exports, {
44
51
  TupleInput: () => TupleInput,
45
52
  ViewEditor: () => ViewEditor,
46
53
  cellClassesForFieldType: () => cellClassesForFieldType,
47
- cellClassesForRowSelection: () => cellClassesForRowSelection,
54
+ controlItemClasses: () => controlItemClasses,
48
55
  formatForDisplay: () => formatForDisplay,
49
56
  formatForEditing: () => formatForEditing,
50
57
  parseValue: () => parseValue,
@@ -60,40 +67,42 @@ var import_react = __toESM(require("react"));
60
67
  var import_react_ui = require("@dxos/react-ui");
61
68
  var import_react_ui_theme = require("@dxos/react-ui-theme");
62
69
  var import_react2 = __toESM(require("react"));
63
- var import_echo_schema = require("@dxos/echo-schema");
64
- var import_log = require("@dxos/log");
65
70
  var import_react_ui2 = require("@dxos/react-ui");
66
- var import_schema = require("@dxos/schema");
67
71
  var import_react3 = __toESM(require("react"));
68
- var import_echo_schema2 = require("@dxos/echo-schema");
72
+ var import_echo_schema = require("@dxos/echo-schema");
73
+ var import_log = require("@dxos/log");
69
74
  var import_react_ui3 = require("@dxos/react-ui");
70
- var import_util = require("@dxos/util");
75
+ var import_schema = require("@dxos/schema");
71
76
  var import_react4 = __toESM(require("react"));
77
+ var import_echo_schema2 = require("@dxos/echo-schema");
72
78
  var import_react_ui4 = require("@dxos/react-ui");
73
- var import_react_ui_theme2 = require("@dxos/react-ui-theme");
79
+ var import_util = require("@dxos/util");
74
80
  var import_react5 = __toESM(require("react"));
75
- var import_keys = require("@dxos/keys");
76
81
  var import_react_ui5 = require("@dxos/react-ui");
82
+ var import_react_ui_theme2 = require("@dxos/react-ui-theme");
83
+ var import_react6 = __toESM(require("react"));
84
+ var import_keys = require("@dxos/keys");
85
+ var import_react_ui6 = require("@dxos/react-ui");
77
86
  var import_react_ui_list = require("@dxos/react-ui-list");
78
87
  var import_react_ui_pickers = require("@dxos/react-ui-pickers");
79
88
  var import_react_ui_theme3 = require("@dxos/react-ui-theme");
80
- var import_react6 = __toESM(require("react"));
81
- var import_react_ui6 = require("@dxos/react-ui");
82
- var import_react_ui_theme4 = require("@dxos/react-ui-theme");
83
- var import_util2 = require("@dxos/util");
84
89
  var import_react7 = __toESM(require("react"));
85
90
  var import_react_ui7 = require("@dxos/react-ui");
91
+ var import_react_ui_theme4 = require("@dxos/react-ui-theme");
92
+ var import_util2 = require("@dxos/util");
86
93
  var import_react8 = __toESM(require("react"));
87
- var import_react_ui_theme5 = require("@dxos/react-ui-theme");
88
- var import_react9 = __toESM(require("react"));
89
94
  var import_react_ui8 = require("@dxos/react-ui");
90
- var import_react_ui_theme6 = require("@dxos/react-ui-theme");
95
+ var import_react9 = __toESM(require("react"));
96
+ var import_react_ui_theme5 = require("@dxos/react-ui-theme");
91
97
  var import_react10 = __toESM(require("react"));
98
+ var import_react_ui9 = require("@dxos/react-ui");
99
+ var import_react_ui_theme6 = require("@dxos/react-ui-theme");
100
+ var import_react11 = __toESM(require("react"));
92
101
  var import_debug = require("@dxos/debug");
93
102
  var import_echo_schema3 = require("@dxos/echo-schema");
94
103
  var import_effect = require("@dxos/effect");
95
104
  var import_effect2 = require("effect");
96
- var import_react11 = require("react");
105
+ var import_react12 = require("react");
97
106
  var import_echo_schema4 = require("@dxos/echo-schema");
98
107
  var import_effect3 = require("@dxos/effect");
99
108
  var import_invariant = require("@dxos/invariant");
@@ -101,7 +110,7 @@ var import_log2 = require("@dxos/log");
101
110
  var import_schema2 = require("@dxos/schema");
102
111
  var import_effect4 = require("effect");
103
112
  var import_String = require("effect/String");
104
- var import_react12 = __toESM(require("react"));
113
+ var import_react13 = __toESM(require("react"));
105
114
  var import_echo_schema5 = require("@dxos/echo-schema");
106
115
  var import_effect5 = require("@dxos/effect");
107
116
  var import_react_ui_theme7 = require("@dxos/react-ui-theme");
@@ -109,22 +118,23 @@ var import_schema3 = require("@dxos/schema");
109
118
  var import_util3 = require("@dxos/util");
110
119
  var import_effect6 = require("effect");
111
120
  var import_String2 = require("effect/String");
112
- var import_react13 = __toESM(require("react"));
121
+ var import_react14 = __toESM(require("react"));
113
122
  var import_echo_schema6 = require("@dxos/echo-schema");
114
123
  var import_effect7 = require("@dxos/effect");
115
124
  var import_invariant2 = require("@dxos/invariant");
116
- var import_react_ui9 = require("@dxos/react-ui");
125
+ var import_react_ui10 = require("@dxos/react-ui");
117
126
  var import_react_ui_theme8 = require("@dxos/react-ui-theme");
118
127
  var import_schema4 = require("@dxos/schema");
119
128
  var import_echo_schema7 = require("@dxos/echo-schema");
120
- var import_react14 = __toESM(require("react"));
129
+ var import_react15 = __toESM(require("react"));
121
130
  var import_echo_schema8 = require("@dxos/echo-schema");
122
131
  var import_invariant3 = require("@dxos/invariant");
123
- var import_react_ui10 = require("@dxos/react-ui");
132
+ var import_react_ui11 = require("@dxos/react-ui");
124
133
  var import_react_ui_list2 = require("@dxos/react-ui-list");
125
134
  var import_react_ui_theme9 = require("@dxos/react-ui-theme");
126
135
  var import_schema5 = require("@dxos/schema");
127
136
  var import_echo_schema9 = require("@dxos/echo-schema");
137
+ var import_format = require("date-fns/format");
128
138
  var import_echo_schema10 = require("@dxos/echo-schema");
129
139
  var translationKey = "react-ui-form";
130
140
  var translations_default = [
@@ -220,42 +230,102 @@ var DeprecatedFormInput = ({ label, description, secondary, children }) => {
220
230
  }
221
231
  return primary;
222
232
  };
233
+ var ControlSectionHeading = ({ title, description }) => {
234
+ const { t } = (0, import_react_ui2.useTranslation)(translationKey);
235
+ return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement("h2", {
236
+ className: "pli-4 container-max-width text-xl mbs-6 mbe-4"
237
+ }, (0, import_react_ui2.toLocalizedString)(title, t)), description && /* @__PURE__ */ import_react2.default.createElement("p", {
238
+ className: "pli-4 mlb-4 container-max-width text-description"
239
+ }, (0, import_react_ui2.toLocalizedString)(description, t)));
240
+ };
241
+ var ControlSection = ({ title, description, children }) => {
242
+ return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(ControlSectionHeading, {
243
+ title,
244
+ description
245
+ }), children);
246
+ };
247
+ var ControlGroup = ({ children }) => /* @__PURE__ */ import_react2.default.createElement("div", {
248
+ role: "none",
249
+ className: "group container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content] gap-4"
250
+ }, children);
251
+ var ControlFrame = ({ children }) => /* @__PURE__ */ import_react2.default.createElement("div", {
252
+ role: "none",
253
+ className: "p-4 border border-separator rounded-lg container-max-width grid grid-cols-1 md:grid-cols-[1fr_1fr] gap-2 md:gap-8"
254
+ }, children);
255
+ var controlItemClasses = "p-4 border border-separator rounded-lg container-max-width grid md:col-span-2 grid-cols-subgrid items-center";
256
+ var controlItemTitleClasses = "text-lg font-normal mbe-2";
257
+ var controlItemDescriptionClasses = "text-base mlb-2 md:mbe-0 text-description";
258
+ var ControlItem = ({ title, description, children }) => {
259
+ const { t } = (0, import_react_ui2.useTranslation)(translationKey);
260
+ return /* @__PURE__ */ import_react2.default.createElement("div", {
261
+ className: controlItemClasses
262
+ }, /* @__PURE__ */ import_react2.default.createElement("div", {
263
+ role: "none"
264
+ }, /* @__PURE__ */ import_react2.default.createElement("h3", {
265
+ className: controlItemTitleClasses
266
+ }, (0, import_react_ui2.toLocalizedString)(title, t)), description && /* @__PURE__ */ import_react2.default.createElement("p", {
267
+ className: controlItemDescriptionClasses
268
+ }, (0, import_react_ui2.toLocalizedString)(description, t))), children);
269
+ };
270
+ var ControlItemInput = ({ title, description, children }) => {
271
+ const { t } = (0, import_react_ui2.useTranslation)(translationKey);
272
+ return /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Input.Root, null, /* @__PURE__ */ import_react2.default.createElement("div", {
273
+ className: controlItemClasses
274
+ }, /* @__PURE__ */ import_react2.default.createElement("div", {
275
+ role: "none"
276
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Input.Label, {
277
+ classNames: controlItemTitleClasses
278
+ }, (0, import_react_ui2.toLocalizedString)(title, t)), description && /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Input.DescriptionAndValidation, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui2.Input.Description, {
279
+ classNames: controlItemDescriptionClasses
280
+ }, (0, import_react_ui2.toLocalizedString)(description, t)))), children));
281
+ };
282
+ var ControlFrameItem = ({ title, description, children }) => {
283
+ const { t } = (0, import_react_ui2.useTranslation)(translationKey);
284
+ return /* @__PURE__ */ import_react2.default.createElement("div", {
285
+ role: "group",
286
+ className: "min-is-0"
287
+ }, /* @__PURE__ */ import_react2.default.createElement("h3", {
288
+ className: "text-lg mbe-2"
289
+ }, (0, import_react_ui2.toLocalizedString)(title, t)), description && /* @__PURE__ */ import_react2.default.createElement("p", {
290
+ className: "mlb-2 md:mbe-0 text-description"
291
+ }, (0, import_react_ui2.toLocalizedString)(description, t)), children);
292
+ };
223
293
  var InputHeader = ({ children, error }) => {
224
- return /* @__PURE__ */ import_react4.default.createElement("div", {
294
+ return /* @__PURE__ */ import_react5.default.createElement("div", {
225
295
  role: "none",
226
296
  className: "flex justify-between items-center mb-1"
227
- }, children, error && /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Tooltip.Root, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Tooltip.Trigger, {
297
+ }, children, error && /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Tooltip.Root, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Tooltip.Trigger, {
228
298
  asChild: true
229
- }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Icon, {
299
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Icon, {
230
300
  icon: "ph--warning--regular",
231
301
  size: 4,
232
302
  classNames: import_react_ui_theme2.errorText
233
- })), /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Tooltip.Content, {
303
+ })), /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Tooltip.Content, {
234
304
  side: "bottom"
235
- }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Tooltip.Arrow, null), error)));
305
+ }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Tooltip.Arrow, null), error)));
236
306
  };
237
307
  var GeoPointInput = ({ type, label, disabled, getStatus, getValue: getValue3, onValueChange, onBlur }) => {
238
- const { t } = (0, import_react_ui3.useTranslation)(translationKey);
308
+ const { t } = (0, import_react_ui4.useTranslation)(translationKey);
239
309
  const { status, error } = getStatus();
240
- const geoPoint = (0, import_react3.useMemo)(() => getValue3() ?? [
310
+ const geoPoint = (0, import_react4.useMemo)(() => getValue3() ?? [
241
311
  0,
242
312
  0
243
313
  ], [
244
314
  getValue3
245
315
  ]);
246
- const geoLocation = (0, import_react3.useMemo)(() => import_echo_schema2.GeoLocation.fromGeoPoint(geoPoint), [
316
+ const geoLocation = (0, import_react4.useMemo)(() => import_echo_schema2.GeoLocation.fromGeoPoint(geoPoint), [
247
317
  geoPoint
248
318
  ]);
249
- const [longitudeText, setLongitudeText] = (0, import_react3.useState)(geoLocation.longitude?.toString());
250
- const [latitudeText, setLatitudeText] = (0, import_react3.useState)(geoLocation.latitude?.toString());
251
- (0, import_react3.useEffect)(() => {
319
+ const [longitudeText, setLongitudeText] = (0, import_react4.useState)(geoLocation.longitude?.toString());
320
+ const [latitudeText, setLatitudeText] = (0, import_react4.useState)(geoLocation.latitude?.toString());
321
+ (0, import_react4.useEffect)(() => {
252
322
  const location = import_echo_schema2.GeoLocation.fromGeoPoint(geoPoint);
253
323
  setLongitudeText(location.longitude.toString());
254
324
  setLatitudeText(location.latitude.toString());
255
325
  }, [
256
326
  geoPoint
257
327
  ]);
258
- const handleCoordinateChange = (0, import_react3.useCallback)((coordinateType, setText) => (event) => {
328
+ const handleCoordinateChange = (0, import_react4.useCallback)((coordinateType, setText) => (event) => {
259
329
  const inputText = event.target.value;
260
330
  setText(inputText);
261
331
  if (inputText !== "" && inputText !== "-") {
@@ -278,14 +348,14 @@ var GeoPointInput = ({ type, label, disabled, getStatus, getValue: getValue3, on
278
348
  onValueChange,
279
349
  type
280
350
  ]);
281
- return /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.Root, {
351
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Input.Root, {
282
352
  validationValence: status
283
- }, /* @__PURE__ */ import_react3.default.createElement(InputHeader, {
353
+ }, /* @__PURE__ */ import_react4.default.createElement(InputHeader, {
284
354
  error
285
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.Label, null, label)), /* @__PURE__ */ import_react3.default.createElement("div", {
355
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Input.Label, null, label)), /* @__PURE__ */ import_react4.default.createElement("div", {
286
356
  role: "none",
287
357
  className: "grid grid-cols-2 gap-2"
288
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.TextInput, {
358
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Input.TextInput, {
289
359
  type: "text",
290
360
  pattern: "^-?[0-9]*\\.?[0-9]*$",
291
361
  disabled,
@@ -293,7 +363,7 @@ var GeoPointInput = ({ type, label, disabled, getStatus, getValue: getValue3, on
293
363
  value: latitudeText,
294
364
  onChange: handleCoordinateChange("latitude", setLatitudeText),
295
365
  onBlur
296
- }), /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Input.TextInput, {
366
+ }), /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Input.TextInput, {
297
367
  type: "text",
298
368
  pattern: "^-?[0-9]*\\.?[0-9]*$",
299
369
  disabled,
@@ -304,13 +374,13 @@ var GeoPointInput = ({ type, label, disabled, getStatus, getValue: getValue3, on
304
374
  })));
305
375
  };
306
376
  var SelectOptionInput = ({ type, label, disabled, getStatus, getValue: getValue3, onValueChange }) => {
307
- const [selected, setSelectedId] = (0, import_react5.useState)(null);
308
- const [isNewOption, setIsNewOption] = (0, import_react5.useState)(false);
309
- const inputRef = (0, import_react5.useRef)(null);
310
- const { t } = (0, import_react_ui5.useTranslation)(translationKey);
377
+ const [selected, setSelectedId] = (0, import_react6.useState)(null);
378
+ const [isNewOption, setIsNewOption] = (0, import_react6.useState)(false);
379
+ const inputRef = (0, import_react6.useRef)(null);
380
+ const { t } = (0, import_react_ui6.useTranslation)(translationKey);
311
381
  const { status, error } = getStatus();
312
382
  const options = getValue3();
313
- (0, import_react5.useEffect)(() => {
383
+ (0, import_react6.useEffect)(() => {
314
384
  if (options === void 0) {
315
385
  onValueChange(type, []);
316
386
  }
@@ -329,7 +399,7 @@ var SelectOptionInput = ({ type, label, disabled, getStatus, getValue: getValue3
329
399
  const availableHues = import_react_ui_theme3.hues.filter((hue) => !lastThree.has(hue));
330
400
  return availableHues[Math.floor(Math.random() * availableHues.length)] ?? import_react_ui_theme3.hues[Math.floor(Math.random() * import_react_ui_theme3.hues.length)];
331
401
  };
332
- const handleAdd = (0, import_react5.useCallback)(() => {
402
+ const handleAdd = (0, import_react6.useCallback)(() => {
333
403
  const newId = import_keys.PublicKey.random().truncate();
334
404
  const newOption = {
335
405
  id: newId,
@@ -347,7 +417,7 @@ var SelectOptionInput = ({ type, label, disabled, getStatus, getValue: getValue3
347
417
  type,
348
418
  onValueChange
349
419
  ]);
350
- const handleDelete = (0, import_react5.useCallback)((id) => {
420
+ const handleDelete = (0, import_react6.useCallback)((id) => {
351
421
  const newOptions = options?.filter((option) => option.id !== id) ?? [];
352
422
  onValueChange(type, newOptions);
353
423
  setSelectedId(null);
@@ -356,7 +426,7 @@ var SelectOptionInput = ({ type, label, disabled, getStatus, getValue: getValue3
356
426
  type,
357
427
  onValueChange
358
428
  ]);
359
- const handleMove = (0, import_react5.useCallback)((from, to) => {
429
+ const handleMove = (0, import_react6.useCallback)((from, to) => {
360
430
  if (!options) {
361
431
  return;
362
432
  }
@@ -371,10 +441,10 @@ var SelectOptionInput = ({ type, label, disabled, getStatus, getValue: getValue3
371
441
  type,
372
442
  onValueChange
373
443
  ]);
374
- const handleClick = (0, import_react5.useCallback)((id) => {
444
+ const handleClick = (0, import_react6.useCallback)((id) => {
375
445
  setSelectedId((current) => current === id ? null : id);
376
446
  }, []);
377
- const handleTitleChange = (0, import_react5.useCallback)((id) => (e) => {
447
+ const handleTitleChange = (0, import_react6.useCallback)((id) => (e) => {
378
448
  const newOptions = options?.map((o) => o.id === id ? {
379
449
  ...o,
380
450
  title: e.target.value
@@ -385,12 +455,12 @@ var SelectOptionInput = ({ type, label, disabled, getStatus, getValue: getValue3
385
455
  type,
386
456
  onValueChange
387
457
  ]);
388
- const handleKeyDown = (0, import_react5.useCallback)((e) => {
458
+ const handleKeyDown = (0, import_react6.useCallback)((e) => {
389
459
  if (e.key === "Enter") {
390
460
  setSelectedId(null);
391
461
  }
392
462
  }, []);
393
- const handleColorChange = (0, import_react5.useCallback)((id) => (hue) => {
463
+ const handleColorChange = (0, import_react6.useCallback)((id) => (hue) => {
394
464
  const newOptions = options?.map((o) => o.id === id ? {
395
465
  ...o,
396
466
  color: hue
@@ -401,7 +471,7 @@ var SelectOptionInput = ({ type, label, disabled, getStatus, getValue: getValue3
401
471
  type,
402
472
  onValueChange
403
473
  ]);
404
- (0, import_react5.useEffect)(() => {
474
+ (0, import_react6.useEffect)(() => {
405
475
  if (selected && isNewOption && inputRef.current) {
406
476
  inputRef.current.focus();
407
477
  setIsNewOption(false);
@@ -410,43 +480,43 @@ var SelectOptionInput = ({ type, label, disabled, getStatus, getValue: getValue3
410
480
  selected,
411
481
  isNewOption
412
482
  ]);
413
- return /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Input.Root, {
483
+ return /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Input.Root, {
414
484
  validationValence: status
415
- }, /* @__PURE__ */ import_react5.default.createElement(InputHeader, {
485
+ }, /* @__PURE__ */ import_react6.default.createElement(InputHeader, {
416
486
  error
417
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Input.Label, null, label)), /* @__PURE__ */ import_react5.default.createElement("div", {
487
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Input.Label, null, label)), /* @__PURE__ */ import_react6.default.createElement("div", {
418
488
  role: "none"
419
- }, options && /* @__PURE__ */ import_react5.default.createElement(import_react_ui_list.List.Root, {
489
+ }, options && /* @__PURE__ */ import_react6.default.createElement(import_react_ui_list.List.Root, {
420
490
  items: options,
421
491
  isItem: (item) => true,
422
492
  onMove: handleMove
423
- }, ({ items }) => /* @__PURE__ */ import_react5.default.createElement("div", {
493
+ }, ({ items }) => /* @__PURE__ */ import_react6.default.createElement("div", {
424
494
  role: "list",
425
495
  className: "w-full overflow-auto"
426
- }, items?.map((item) => /* @__PURE__ */ import_react5.default.createElement("div", {
496
+ }, items?.map((item) => /* @__PURE__ */ import_react6.default.createElement("div", {
427
497
  key: item.id
428
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_list.List.Item, {
498
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_list.List.Item, {
429
499
  role: "button",
430
500
  item,
431
501
  classNames: (0, import_react_ui_theme3.mx)("p-1 plb-2", "flex flex-col", "cursor-pointer", "hover:bg-hoverOverlay"),
432
502
  "aria-expanded": selected === item.id
433
- }, /* @__PURE__ */ import_react5.default.createElement("div", {
503
+ }, /* @__PURE__ */ import_react6.default.createElement("div", {
434
504
  className: "flex items-center"
435
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_list.List.ItemDragHandle, null), /* @__PURE__ */ import_react5.default.createElement(import_react_ui_list.List.ItemTitle, {
505
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_list.List.ItemDragHandle, null), /* @__PURE__ */ import_react6.default.createElement(import_react_ui_list.List.ItemTitle, {
436
506
  onClick: () => handleClick(item.id),
437
507
  classNames: "flex-1"
438
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Tag, {
508
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Tag, {
439
509
  palette: item.color
440
- }, item.title || "\u200B")), /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Icon, {
510
+ }, item.title || "\u200B")), /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Icon, {
441
511
  icon: selected === item.id ? "ph--caret-down--regular" : "ph--caret-right--regular",
442
512
  onClick: () => handleClick(item.id)
443
- })), selected === item.id && /* @__PURE__ */ import_react5.default.createElement("div", {
513
+ })), selected === item.id && /* @__PURE__ */ import_react6.default.createElement("div", {
444
514
  className: "mis-4 mbs-2 flex flex-col gap-1"
445
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Input.Label, {
515
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Input.Label, {
446
516
  classNames: "text-xs"
447
- }, t("select option label")), /* @__PURE__ */ import_react5.default.createElement("div", {
517
+ }, t("select option label")), /* @__PURE__ */ import_react6.default.createElement("div", {
448
518
  className: "flex flex-row items-center gap-1"
449
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Input.TextInput, {
519
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Input.TextInput, {
450
520
  placeholder: t("select option label placeholder"),
451
521
  ref: selected === item.id ? inputRef : void 0,
452
522
  value: item.title,
@@ -454,27 +524,28 @@ var SelectOptionInput = ({ type, label, disabled, getStatus, getValue: getValue3
454
524
  onKeyDown: handleKeyDown,
455
525
  classNames: "flex-1",
456
526
  "data-no-submit": true
457
- }), /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Toolbar.Root, {
527
+ }), /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Toolbar.Root, {
458
528
  classNames: "p-0 m-0 !is-auto"
459
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_pickers.HuePicker, {
529
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_pickers.HuePicker, {
460
530
  value: item.color,
461
- onChange: handleColorChange(item.id)
462
- })), /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.IconButton, {
531
+ onChange: handleColorChange(item.id),
532
+ rootVariant: "toolbar-button"
533
+ })), /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.IconButton, {
463
534
  icon: "ph--trash--fill",
464
535
  iconOnly: true,
465
536
  label: t("select option delete"),
466
537
  onClick: () => handleDelete(item.id)
467
- })))))), /* @__PURE__ */ import_react5.default.createElement("div", {
538
+ })))))), /* @__PURE__ */ import_react6.default.createElement("div", {
468
539
  role: "listitem"
469
- }, /* @__PURE__ */ import_react5.default.createElement("div", {
540
+ }, /* @__PURE__ */ import_react6.default.createElement("div", {
470
541
  role: "button",
471
542
  className: (0, import_react_ui_theme3.mx)("p-1 plb-2", "flex flex-col", "cursor-pointer", "hover:bg-hoverOverlay"),
472
543
  onClick: handleAdd
473
- }, /* @__PURE__ */ import_react5.default.createElement("div", {
544
+ }, /* @__PURE__ */ import_react6.default.createElement("div", {
474
545
  className: "flex items-center gap-1"
475
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Icon, {
546
+ }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Icon, {
476
547
  icon: "ph--plus--regular"
477
- }), /* @__PURE__ */ import_react5.default.createElement("span", {
548
+ }), /* @__PURE__ */ import_react6.default.createElement("span", {
478
549
  className: "text-sm"
479
550
  }, t("select option add")))))))));
480
551
  };
@@ -487,13 +558,13 @@ var gridCols = [
487
558
  var TupleInput = ({ binding, type, label, disabled, getStatus, getValue: getValue3, onValueChange, onBlur }) => {
488
559
  const { status, error } = getStatus();
489
560
  const values = getValue3() ?? {};
490
- return /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Input.Root, {
561
+ return /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Root, {
491
562
  validationValence: status
492
- }, /* @__PURE__ */ import_react6.default.createElement(InputHeader, {
563
+ }, /* @__PURE__ */ import_react7.default.createElement(InputHeader, {
493
564
  error
494
- }, /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Input.Label, null, label)), /* @__PURE__ */ import_react6.default.createElement("div", {
565
+ }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Label, null, label)), /* @__PURE__ */ import_react7.default.createElement("div", {
495
566
  className: (0, import_react_ui_theme4.mx)("grid gap-2", gridCols[binding.length - 1])
496
- }, binding.map((prop) => /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Input.TextInput, {
567
+ }, binding.map((prop) => /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.TextInput, {
497
568
  key: prop,
498
569
  type: "number",
499
570
  disabled,
@@ -507,92 +578,92 @@ var TupleInput = ({ binding, type, label, disabled, getStatus, getValue: getValu
507
578
  };
508
579
  var TextInput = ({ type, label, inputOnly, disabled, placeholder, getStatus, getValue: getValue3, onValueChange, onBlur }) => {
509
580
  const { status, error } = getStatus();
510
- return /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Root, {
581
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Root, {
511
582
  validationValence: status
512
- }, !inputOnly && /* @__PURE__ */ import_react7.default.createElement(InputHeader, {
583
+ }, !inputOnly && /* @__PURE__ */ import_react8.default.createElement(InputHeader, {
513
584
  error
514
- }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Label, null, label)), /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.TextInput, {
585
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Label, null, label)), /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.TextInput, {
515
586
  disabled,
516
587
  placeholder,
517
588
  value: getValue3() ?? "",
518
589
  onChange: (event) => onValueChange(type, event.target.value),
519
590
  onBlur
520
- }), inputOnly && /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Validation, null, error));
591
+ }), inputOnly && /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Validation, null, error));
521
592
  };
522
593
  var NumberInput = ({ type, label, inputOnly, disabled, placeholder, getStatus, getValue: getValue3, onValueChange, onBlur }) => {
523
594
  const { status, error } = getStatus();
524
- return /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Root, {
595
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Root, {
525
596
  validationValence: status
526
- }, !inputOnly && /* @__PURE__ */ import_react7.default.createElement(InputHeader, {
597
+ }, !inputOnly && /* @__PURE__ */ import_react8.default.createElement(InputHeader, {
527
598
  error
528
- }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Label, null, label)), /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.TextInput, {
599
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Label, null, label)), /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.TextInput, {
529
600
  type: "number",
530
601
  disabled,
531
602
  placeholder,
532
603
  value: getValue3() ?? 0,
533
604
  onChange: (event) => onValueChange(type, event.target.value),
534
605
  onBlur
535
- }), inputOnly && /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.DescriptionAndValidation, null, error));
606
+ }), inputOnly && /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.DescriptionAndValidation, null, error));
536
607
  };
537
608
  var BooleanInput = ({ type, label, inputOnly, getStatus, getValue: getValue3, onValueChange }) => {
538
609
  const { status, error } = getStatus();
539
610
  const checked = Boolean(getValue3());
540
- return /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Root, {
611
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Root, {
541
612
  validationValence: status
542
- }, !inputOnly && /* @__PURE__ */ import_react7.default.createElement(InputHeader, {
613
+ }, !inputOnly && /* @__PURE__ */ import_react8.default.createElement(InputHeader, {
543
614
  error
544
- }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Label, null, label)), /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Switch, {
615
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Label, null, label)), /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Switch, {
545
616
  checked,
546
617
  onCheckedChange: (value) => onValueChange(type, value)
547
- }), inputOnly && /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.DescriptionAndValidation, null, error));
618
+ }), inputOnly && /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.DescriptionAndValidation, null, error));
548
619
  };
549
620
  var SelectInput = ({ type, label, inputOnly, disabled, placeholder, options, getStatus, getValue: getValue3, onValueChange }) => {
550
621
  const { status, error } = getStatus();
551
- return /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Root, {
622
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Root, {
552
623
  validationValence: status
553
- }, !inputOnly && /* @__PURE__ */ import_react7.default.createElement(InputHeader, {
624
+ }, !inputOnly && /* @__PURE__ */ import_react8.default.createElement(InputHeader, {
554
625
  error
555
- }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Label, null, label)), /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Select.Root, {
626
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Label, null, label)), /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Select.Root, {
556
627
  value: getValue3(),
557
628
  onValueChange: (value) => onValueChange(type, value)
558
- }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Select.TriggerButton, {
629
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Select.TriggerButton, {
559
630
  classNames: "is-full",
560
631
  disabled,
561
632
  placeholder
562
- }), /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Select.Portal, null, /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Select.Content, null, /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Select.Viewport, null, options?.map(({ value, label: label2 }) => (
633
+ }), /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Select.Portal, null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Select.Content, null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Select.Viewport, null, options?.map(({ value, label: label2 }) => (
563
634
  // NOTE: Numeric values are converted to and from strings.
564
- /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Select.Option, {
635
+ /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Select.Option, {
565
636
  key: String(value),
566
637
  value: String(value)
567
638
  }, label2 ?? String(value))
568
- )))))), inputOnly && /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.DescriptionAndValidation, null, error));
639
+ )))))), inputOnly && /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.DescriptionAndValidation, null, error));
569
640
  };
570
641
  var MarkdownInput = ({ type, label, inputOnly, disabled, placeholder, getStatus, getValue: getValue3, onValueChange, onBlur }) => {
571
642
  const { status, error } = getStatus();
572
- const textareaRef = (0, import_react7.useRef)(null);
573
- const adjustHeight = (0, import_react7.useCallback)(() => {
643
+ const textareaRef = (0, import_react8.useRef)(null);
644
+ const adjustHeight = (0, import_react8.useCallback)(() => {
574
645
  const textarea = textareaRef.current;
575
646
  if (textarea) {
576
647
  textarea.style.blockSize = "auto";
577
648
  textarea.style.blockSize = `${textarea.scrollHeight + 2}px`;
578
649
  }
579
650
  }, []);
580
- (0, import_react7.useEffect)(() => {
651
+ (0, import_react8.useEffect)(() => {
581
652
  adjustHeight();
582
653
  }, [
583
654
  adjustHeight
584
655
  ]);
585
- (0, import_react7.useEffect)(() => {
656
+ (0, import_react8.useEffect)(() => {
586
657
  adjustHeight();
587
658
  }, [
588
659
  getValue3(),
589
660
  adjustHeight
590
661
  ]);
591
- return /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Root, {
662
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Root, {
592
663
  validationValence: status
593
- }, !inputOnly && /* @__PURE__ */ import_react7.default.createElement(InputHeader, {
664
+ }, !inputOnly && /* @__PURE__ */ import_react8.default.createElement(InputHeader, {
594
665
  error
595
- }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Label, null, label)), /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.TextArea, {
666
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Label, null, label)), /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.TextArea, {
596
667
  ref: textareaRef,
597
668
  disabled,
598
669
  placeholder,
@@ -604,7 +675,7 @@ var MarkdownInput = ({ type, label, inputOnly, disabled, placeholder, getStatus,
604
675
  resize: "none"
605
676
  },
606
677
  spellCheck: false
607
- }), inputOnly && /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Validation, null, error));
678
+ }), inputOnly && /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Validation, null, error));
608
679
  };
609
680
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui-form/src/hooks/useForm.ts";
610
681
  var useForm = ({ schema, initialValues, onValuesChanged, onValidate, onValid, onSave }) => {
@@ -617,17 +688,17 @@ var useForm = ({ schema, initialValues, onValuesChanged, onValidate, onValid, on
617
688
  ""
618
689
  ]
619
690
  });
620
- const [values, setValues] = (0, import_react11.useState)(initialValues);
621
- (0, import_react11.useEffect)(() => {
691
+ const [values, setValues] = (0, import_react12.useState)(initialValues);
692
+ (0, import_react12.useEffect)(() => {
622
693
  setValues(initialValues);
623
694
  }, [
624
695
  initialValues
625
696
  ]);
626
- const [touched, setTouched] = (0, import_react11.useState)(createKeySet(initialValues, false));
627
- const [changed, setChanged] = (0, import_react11.useState)(createKeySet(initialValues, false));
628
- const [errors, setErrors] = (0, import_react11.useState)({});
629
- const [saving, setSaving] = (0, import_react11.useState)(false);
630
- const validate = (0, import_react11.useCallback)((values2) => {
697
+ const [touched, setTouched] = (0, import_react12.useState)(createKeySet(initialValues, false));
698
+ const [changed, setChanged] = (0, import_react12.useState)(createKeySet(initialValues, false));
699
+ const [errors, setErrors] = (0, import_react12.useState)({});
700
+ const [saving, setSaving] = (0, import_react12.useState)(false);
701
+ const validate = (0, import_react12.useCallback)((values2) => {
631
702
  let errors2 = (0, import_schema2.validateSchema)(schema, values2) ?? [];
632
703
  if (errors2.length === 0 && onValidate) {
633
704
  const validatedValues = values2;
@@ -640,11 +711,11 @@ var useForm = ({ schema, initialValues, onValuesChanged, onValidate, onValid, on
640
711
  schema,
641
712
  onValidate
642
713
  ]);
643
- const [schemaDirty, setSchemaDirty] = (0, import_react11.useState)(false);
644
- (0, import_react11.useEffect)(() => setSchemaDirty(true), [
714
+ const [schemaDirty, setSchemaDirty] = (0, import_react12.useState)(false);
715
+ (0, import_react12.useEffect)(() => setSchemaDirty(true), [
645
716
  schema
646
717
  ]);
647
- (0, import_react11.useEffect)(() => {
718
+ (0, import_react12.useEffect)(() => {
648
719
  if (schemaDirty) {
649
720
  validate(values);
650
721
  setSchemaDirty(false);
@@ -653,18 +724,18 @@ var useForm = ({ schema, initialValues, onValuesChanged, onValidate, onValid, on
653
724
  values,
654
725
  schemaDirty
655
726
  ]);
656
- const formIsValid = (0, import_react11.useMemo)(() => {
727
+ const formIsValid = (0, import_react12.useMemo)(() => {
657
728
  return Object.keys(errors).length === 0;
658
729
  }, [
659
730
  errors
660
731
  ]);
661
- const canSave = (0, import_react11.useMemo)(() => !saving && // Check if any error paths that are touched have errors.
732
+ const canSave = (0, import_react12.useMemo)(() => !saving && // Check if any error paths that are touched have errors.
662
733
  !Object.entries(touched).some(([path, isTouched]) => isTouched && Object.keys(errors).some((errorPath) => errorPath === path || errorPath.startsWith(`${path}.`) || errorPath.startsWith(`${path}[`))), [
663
734
  touched,
664
735
  errors,
665
736
  saving
666
737
  ]);
667
- const handleSave = (0, import_react11.useCallback)(async () => {
738
+ const handleSave = (0, import_react12.useCallback)(async () => {
668
739
  if (validate(values)) {
669
740
  setSaving(true);
670
741
  try {
@@ -681,7 +752,7 @@ var useForm = ({ schema, initialValues, onValuesChanged, onValidate, onValid, on
681
752
  onSave,
682
753
  changed
683
754
  ]);
684
- const getStatus = (0, import_react11.useCallback)((path) => {
755
+ const getStatus = (0, import_react12.useCallback)((path) => {
685
756
  const jsonPath = Array.isArray(path) ? (0, import_effect3.createJsonPath)(path) : path;
686
757
  const matchingError = Object.entries(errors).find(([errorPath]) => errorPath === jsonPath || errorPath.startsWith(`${jsonPath}.`) || errorPath.startsWith(`${jsonPath}[`));
687
758
  const isTouched = touched[jsonPath];
@@ -699,12 +770,12 @@ var useForm = ({ schema, initialValues, onValuesChanged, onValidate, onValid, on
699
770
  errors,
700
771
  touched
701
772
  ]);
702
- const getFormValue = (0, import_react11.useCallback)((path) => {
773
+ const getFormValue = (0, import_react12.useCallback)((path) => {
703
774
  return (0, import_echo_schema4.getValue)(values, (0, import_effect3.createJsonPath)(path));
704
775
  }, [
705
776
  values
706
777
  ]);
707
- const onValueChange = (0, import_react11.useCallback)((path, type, value) => {
778
+ const onValueChange = (0, import_react12.useCallback)((path, type, value) => {
708
779
  const jsonPath = (0, import_effect3.createJsonPath)(path);
709
780
  let parsedValue = value;
710
781
  try {
@@ -742,7 +813,7 @@ var useForm = ({ schema, initialValues, onValuesChanged, onValidate, onValid, on
742
813
  onValid,
743
814
  changed
744
815
  ]);
745
- const onTouched = (0, import_react11.useCallback)((path) => {
816
+ const onTouched = (0, import_react12.useCallback)((path) => {
746
817
  const jsonPath = (0, import_effect3.createJsonPath)(path);
747
818
  setTouched((touched2) => ({
748
819
  ...touched2,
@@ -753,7 +824,7 @@ var useForm = ({ schema, initialValues, onValuesChanged, onValidate, onValid, on
753
824
  validate,
754
825
  values
755
826
  ]);
756
- return (0, import_react11.useMemo)(() => ({
827
+ return (0, import_react12.useMemo)(() => ({
757
828
  // State.
758
829
  values,
759
830
  errors,
@@ -806,9 +877,9 @@ var flatMap = (errors) => {
806
877
  return result;
807
878
  }, {});
808
879
  };
809
- var FormContext = /* @__PURE__ */ (0, import_react10.createContext)(void 0);
880
+ var FormContext = /* @__PURE__ */ (0, import_react11.createContext)(void 0);
810
881
  var useFormContext = () => {
811
- return (0, import_react10.useContext)(FormContext) ?? (0, import_debug.raise)(new Error("Missing FormContext"));
882
+ return (0, import_react11.useContext)(FormContext) ?? (0, import_debug.raise)(new Error("Missing FormContext"));
812
883
  };
813
884
  var useFormValues = (path = []) => {
814
885
  const { values: formValues } = useFormContext();
@@ -817,10 +888,10 @@ var useFormValues = (path = []) => {
817
888
  };
818
889
  var useInputProps = (path = []) => {
819
890
  const { getStatus, getValue: getFormValue, onValueChange, onTouched } = useFormContext();
820
- const stablePath = (0, import_react10.useMemo)(() => path, [
891
+ const stablePath = (0, import_react11.useMemo)(() => path, [
821
892
  Array.isArray(path) ? path.join(".") : path
822
893
  ]);
823
- return (0, import_react10.useMemo)(() => ({
894
+ return (0, import_react11.useMemo)(() => ({
824
895
  getStatus: () => getStatus(stablePath),
825
896
  getValue: () => getFormValue(stablePath),
826
897
  onValueChange: (type, value) => onValueChange(stablePath, type, value),
@@ -835,7 +906,7 @@ var useInputProps = (path = []) => {
835
906
  };
836
907
  var FormProvider = ({ children, formRef, autoSave, ...formOptions }) => {
837
908
  const form = useForm(formOptions);
838
- (0, import_react10.useEffect)(() => {
909
+ (0, import_react11.useEffect)(() => {
839
910
  if (!formRef?.current) {
840
911
  return;
841
912
  }
@@ -865,25 +936,25 @@ var FormProvider = ({ children, formRef, autoSave, ...formOptions }) => {
865
936
  form.handleSave,
866
937
  autoSave
867
938
  ]);
868
- return /* @__PURE__ */ import_react10.default.createElement(FormContext.Provider, {
939
+ return /* @__PURE__ */ import_react11.default.createElement(FormContext.Provider, {
869
940
  value: form
870
941
  }, children);
871
942
  };
872
943
  var FormActions = ({ onCancel, readonly }) => {
873
- const { t } = (0, import_react_ui8.useTranslation)(translationKey);
944
+ const { t } = (0, import_react_ui9.useTranslation)(translationKey);
874
945
  const { canSave, handleSave } = useFormContext();
875
- return /* @__PURE__ */ import_react9.default.createElement("div", {
946
+ return /* @__PURE__ */ import_react10.default.createElement("div", {
876
947
  role: "none",
877
948
  className: "mt-2 flex justify-center"
878
- }, /* @__PURE__ */ import_react9.default.createElement("div", {
949
+ }, /* @__PURE__ */ import_react10.default.createElement("div", {
879
950
  role: "none",
880
951
  className: (0, import_react_ui_theme6.mx)(onCancel && !readonly && "grid grid-cols-2 gap-2")
881
- }, onCancel && !readonly && /* @__PURE__ */ import_react9.default.createElement(import_react_ui8.IconButton, {
952
+ }, onCancel && !readonly && /* @__PURE__ */ import_react10.default.createElement(import_react_ui9.IconButton, {
882
953
  "data-testid": "cancel-button",
883
954
  icon: "ph--x--regular",
884
955
  label: t("button cancel"),
885
956
  onClick: onCancel
886
- }), handleSave && /* @__PURE__ */ import_react9.default.createElement(import_react_ui8.IconButton, {
957
+ }), handleSave && /* @__PURE__ */ import_react10.default.createElement(import_react_ui9.IconButton, {
887
958
  type: "submit",
888
959
  "data-testid": "save-button",
889
960
  disabled: !canSave,
@@ -895,7 +966,7 @@ var FormActions = ({ onCancel, readonly }) => {
895
966
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-form/src/components/Form/ArrayField.tsx";
896
967
  var padding = "px-2";
897
968
  var ArrayField = ({ property, readonly, path, inputProps, Custom, lookupComponent }) => {
898
- const { t } = (0, import_react_ui9.useTranslation)(translationKey);
969
+ const { t } = (0, import_react_ui10.useTranslation)(translationKey);
899
970
  const { ast, name, type, title } = property;
900
971
  const values = useFormValues(path ?? []);
901
972
  (0, import_invariant2.invariant)(Array.isArray(values), `Values at path ${path?.join(".")} must be an array.`, {
@@ -921,7 +992,7 @@ var ArrayField = ({ property, readonly, path, inputProps, Custom, lookupComponen
921
992
  prop.defaultValue
922
993
  ]));
923
994
  };
924
- const newValue = (0, import_react13.useMemo)(() => {
995
+ const newValue = (0, import_react14.useMemo)(() => {
925
996
  if (type === "object" && elementType) {
926
997
  return getDefaultObjectValue(elementType);
927
998
  } else {
@@ -931,7 +1002,7 @@ var ArrayField = ({ property, readonly, path, inputProps, Custom, lookupComponen
931
1002
  type,
932
1003
  elementType
933
1004
  ]);
934
- const handleAdd = (0, import_react13.useCallback)(() => {
1005
+ const handleAdd = (0, import_react14.useCallback)(() => {
935
1006
  inputProps.onValueChange(type, [
936
1007
  ...values,
937
1008
  newValue
@@ -943,7 +1014,7 @@ var ArrayField = ({ property, readonly, path, inputProps, Custom, lookupComponen
943
1014
  newValue,
944
1015
  values
945
1016
  ]);
946
- const handleRemove = (0, import_react13.useCallback)((index) => {
1017
+ const handleRemove = (0, import_react14.useCallback)((index) => {
947
1018
  const newValues = values.filter((_, i) => i !== index);
948
1019
  inputProps.onValueChange(type, newValues);
949
1020
  }, [
@@ -954,20 +1025,20 @@ var ArrayField = ({ property, readonly, path, inputProps, Custom, lookupComponen
954
1025
  if (!elementType) {
955
1026
  return null;
956
1027
  }
957
- return /* @__PURE__ */ import_react13.default.createElement("div", {
1028
+ return /* @__PURE__ */ import_react14.default.createElement("div", {
958
1029
  role: "none",
959
1030
  className: (0, import_react_ui_theme8.mx)(padding)
960
- }, /* @__PURE__ */ import_react13.default.createElement(InputHeader, null, label), /* @__PURE__ */ import_react13.default.createElement("div", {
1031
+ }, /* @__PURE__ */ import_react14.default.createElement(InputHeader, null, label), /* @__PURE__ */ import_react14.default.createElement("div", {
961
1032
  role: "none",
962
1033
  className: "flex flex-col gap-1"
963
- }, values.map((_value, index) => /* @__PURE__ */ import_react13.default.createElement("div", {
1034
+ }, values.map((_value, index) => /* @__PURE__ */ import_react14.default.createElement("div", {
964
1035
  key: index,
965
1036
  role: "none",
966
1037
  className: "flex items-center gap-1"
967
- }, /* @__PURE__ */ import_react13.default.createElement("div", {
1038
+ }, /* @__PURE__ */ import_react14.default.createElement("div", {
968
1039
  role: "none",
969
1040
  className: "flex-1"
970
- }, /* @__PURE__ */ import_react13.default.createElement(FormField, {
1041
+ }, /* @__PURE__ */ import_react14.default.createElement(FormField, {
971
1042
  property: {
972
1043
  ...property,
973
1044
  array: false,
@@ -981,15 +1052,15 @@ var ArrayField = ({ property, readonly, path, inputProps, Custom, lookupComponen
981
1052
  inline: true,
982
1053
  Custom,
983
1054
  lookupComponent
984
- })), /* @__PURE__ */ import_react13.default.createElement(import_react_ui9.IconButton, {
1055
+ })), /* @__PURE__ */ import_react14.default.createElement(import_react_ui10.IconButton, {
985
1056
  icon: "ph--trash--regular",
986
1057
  iconOnly: true,
987
1058
  label: t("button remove"),
988
1059
  onClick: () => handleRemove(index)
989
- })))), /* @__PURE__ */ import_react13.default.createElement("div", {
1060
+ })))), /* @__PURE__ */ import_react14.default.createElement("div", {
990
1061
  role: "none",
991
1062
  className: "flex justify-between items-center plb-1"
992
- }, /* @__PURE__ */ import_react13.default.createElement(import_react_ui9.IconButton, {
1063
+ }, /* @__PURE__ */ import_react14.default.createElement(import_react_ui10.IconButton, {
993
1064
  icon: "ph--plus--regular",
994
1065
  iconOnly: true,
995
1066
  label: t("button add"),
@@ -1015,11 +1086,11 @@ var getInputComponent = (type, format) => {
1015
1086
  var FormField = ({ property, path, readonly, inline, lookupComponent, Custom }) => {
1016
1087
  const inputProps = useInputProps(path);
1017
1088
  const { ast, name, type, format, title, description, options, examples, array } = property;
1018
- const label = (0, import_react12.useMemo)(() => title ?? (0, import_effect4.pipe)(name, import_String.capitalize), [
1089
+ const label = (0, import_react13.useMemo)(() => title ?? (0, import_effect4.pipe)(name, import_String.capitalize), [
1019
1090
  title,
1020
1091
  name
1021
1092
  ]);
1022
- const placeholder = (0, import_react12.useMemo)(() => examples?.length ? `Example: "${examples[0]}"` : description, [
1093
+ const placeholder = (0, import_react13.useMemo)(() => examples?.length ? `Example: "${examples[0]}"` : description, [
1023
1094
  examples,
1024
1095
  description
1025
1096
  ]);
@@ -1036,14 +1107,14 @@ var FormField = ({ property, path, readonly, inline, lookupComponent, Custom })
1036
1107
  }
1037
1108
  });
1038
1109
  if (FoundComponent) {
1039
- return /* @__PURE__ */ import_react12.default.createElement("div", {
1110
+ return /* @__PURE__ */ import_react13.default.createElement("div", {
1040
1111
  role: "none"
1041
1112
  }, FoundComponent);
1042
1113
  }
1043
1114
  const jsonPath = (0, import_effect5.createJsonPath)(path ?? []);
1044
1115
  const CustomComponent = Custom?.[jsonPath];
1045
1116
  if (CustomComponent) {
1046
- return /* @__PURE__ */ import_react12.default.createElement(CustomComponent, {
1117
+ return /* @__PURE__ */ import_react13.default.createElement(CustomComponent, {
1047
1118
  type,
1048
1119
  format,
1049
1120
  label,
@@ -1054,7 +1125,7 @@ var FormField = ({ property, path, readonly, inline, lookupComponent, Custom })
1054
1125
  });
1055
1126
  }
1056
1127
  if (array) {
1057
- return /* @__PURE__ */ import_react12.default.createElement(ArrayField, {
1128
+ return /* @__PURE__ */ import_react13.default.createElement(ArrayField, {
1058
1129
  property,
1059
1130
  path,
1060
1131
  inputProps,
@@ -1064,9 +1135,9 @@ var FormField = ({ property, path, readonly, inline, lookupComponent, Custom })
1064
1135
  }
1065
1136
  const InputComponent = getInputComponent(type, format);
1066
1137
  if (InputComponent) {
1067
- return /* @__PURE__ */ import_react12.default.createElement("div", {
1138
+ return /* @__PURE__ */ import_react13.default.createElement("div", {
1068
1139
  role: "none"
1069
- }, /* @__PURE__ */ import_react12.default.createElement(InputComponent, {
1140
+ }, /* @__PURE__ */ import_react13.default.createElement(InputComponent, {
1070
1141
  type,
1071
1142
  format,
1072
1143
  label,
@@ -1077,9 +1148,9 @@ var FormField = ({ property, path, readonly, inline, lookupComponent, Custom })
1077
1148
  }));
1078
1149
  }
1079
1150
  if (options) {
1080
- return /* @__PURE__ */ import_react12.default.createElement("div", {
1151
+ return /* @__PURE__ */ import_react13.default.createElement("div", {
1081
1152
  role: "none"
1082
- }, /* @__PURE__ */ import_react12.default.createElement(SelectInput, {
1153
+ }, /* @__PURE__ */ import_react13.default.createElement(SelectInput, {
1083
1154
  type,
1084
1155
  format,
1085
1156
  disabled: readonly,
@@ -1097,9 +1168,9 @@ var FormField = ({ property, path, readonly, inline, lookupComponent, Custom })
1097
1168
  const baseNode = (0, import_effect5.findNode)(ast, import_effect5.isDiscriminatedUnion);
1098
1169
  const typeLiteral = baseNode ? (0, import_effect5.getDiscriminatedType)(baseNode, inputProps.getValue()) : (0, import_effect5.findNode)(ast, import_echo_schema5.AST.isTypeLiteral);
1099
1170
  if (typeLiteral) {
1100
- return /* @__PURE__ */ import_react12.default.createElement("div", {
1171
+ return /* @__PURE__ */ import_react13.default.createElement("div", {
1101
1172
  role: "none"
1102
- }, !inline && /* @__PURE__ */ import_react12.default.createElement("div", null, label), /* @__PURE__ */ import_react12.default.createElement(FormFields, {
1173
+ }, !inline && /* @__PURE__ */ import_react13.default.createElement("div", null, label), /* @__PURE__ */ import_react13.default.createElement(FormFields, {
1103
1174
  schema: import_echo_schema5.S.make(typeLiteral),
1104
1175
  path,
1105
1176
  readonly,
@@ -1111,7 +1182,7 @@ var FormField = ({ property, path, readonly, inline, lookupComponent, Custom })
1111
1182
  };
1112
1183
  var FormFields = ({ schema, path, filter, sort, readonly, lookupComponent, Custom }) => {
1113
1184
  const values = useFormValues(path);
1114
- const properties = (0, import_react12.useMemo)(() => {
1185
+ const properties = (0, import_react13.useMemo)(() => {
1115
1186
  const props = (0, import_schema3.getSchemaProperties)(schema.ast, values);
1116
1187
  const filtered = filter ? filter(props) : props;
1117
1188
  return sort ? filtered.sort((a, b) => sort.indexOf(a.name) - sort.indexOf(b.name)) : filtered;
@@ -1121,11 +1192,11 @@ var FormFields = ({ schema, path, filter, sort, readonly, lookupComponent, Custo
1121
1192
  filter,
1122
1193
  sort
1123
1194
  ]);
1124
- return /* @__PURE__ */ import_react12.default.createElement("div", {
1195
+ return /* @__PURE__ */ import_react13.default.createElement("div", {
1125
1196
  role: "form",
1126
1197
  className: (0, import_react_ui_theme7.mx)("flex flex-col w-full gap-2")
1127
1198
  }, properties.map((property) => {
1128
- return /* @__PURE__ */ import_react12.default.createElement(FormField, {
1199
+ return /* @__PURE__ */ import_react13.default.createElement(FormField, {
1129
1200
  key: property.name,
1130
1201
  property,
1131
1202
  path: [
@@ -1139,12 +1210,12 @@ var FormFields = ({ schema, path, filter, sort, readonly, lookupComponent, Custo
1139
1210
  }).filter(import_util3.isNotFalsy));
1140
1211
  };
1141
1212
  var Form = ({ classNames, schema, values: initialValues, path = [], autoFocus, readonly, filter, sort, autoSave, testId, onValuesChanged, onValidate, onSave, onCancel, lookupComponent, Custom }) => {
1142
- const formRef = (0, import_react8.useRef)(null);
1143
- const onValid = (0, import_react8.useMemo)(() => autoSave ? onSave : void 0, [
1213
+ const formRef = (0, import_react9.useRef)(null);
1214
+ const onValid = (0, import_react9.useMemo)(() => autoSave ? onSave : void 0, [
1144
1215
  autoSave,
1145
1216
  onSave
1146
1217
  ]);
1147
- (0, import_react8.useEffect)(() => {
1218
+ (0, import_react9.useEffect)(() => {
1148
1219
  if (autoFocus && formRef.current) {
1149
1220
  const input = formRef.current.querySelector("input");
1150
1221
  if (input) {
@@ -1154,7 +1225,7 @@ var Form = ({ classNames, schema, values: initialValues, path = [], autoFocus, r
1154
1225
  }, [
1155
1226
  autoFocus
1156
1227
  ]);
1157
- return /* @__PURE__ */ import_react8.default.createElement(FormProvider, {
1228
+ return /* @__PURE__ */ import_react9.default.createElement(FormProvider, {
1158
1229
  formRef,
1159
1230
  schema,
1160
1231
  autoSave,
@@ -1163,12 +1234,12 @@ var Form = ({ classNames, schema, values: initialValues, path = [], autoFocus, r
1163
1234
  onValidate,
1164
1235
  onValid,
1165
1236
  onSave
1166
- }, /* @__PURE__ */ import_react8.default.createElement("div", {
1237
+ }, /* @__PURE__ */ import_react9.default.createElement("div", {
1167
1238
  ref: formRef,
1168
1239
  role: "none",
1169
1240
  className: (0, import_react_ui_theme5.mx)("p-2", classNames),
1170
1241
  "data-testid": testId
1171
- }, /* @__PURE__ */ import_react8.default.createElement(FormFields, {
1242
+ }, /* @__PURE__ */ import_react9.default.createElement(FormFields, {
1172
1243
  schema,
1173
1244
  path,
1174
1245
  readonly,
@@ -1176,21 +1247,21 @@ var Form = ({ classNames, schema, values: initialValues, path = [], autoFocus, r
1176
1247
  sort,
1177
1248
  lookupComponent,
1178
1249
  Custom
1179
- }), (onCancel || onSave) && !autoSave && /* @__PURE__ */ import_react8.default.createElement(FormActions, {
1250
+ }), (onCancel || onSave) && !autoSave && /* @__PURE__ */ import_react9.default.createElement(FormActions, {
1180
1251
  onCancel,
1181
1252
  readonly
1182
1253
  })));
1183
1254
  };
1184
1255
  var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-form/src/components/FieldEditor/FieldEditor.tsx";
1185
1256
  var FieldEditor = ({ view, projection, field, registry, onSave, onCancel }) => {
1186
- const { t } = (0, import_react_ui2.useTranslation)(translationKey);
1187
- const [props, setProps] = (0, import_react2.useState)(projection.getFieldProjection(field.id).props);
1188
- (0, import_react2.useEffect)(() => setProps(projection.getFieldProjection(field.id).props), [
1257
+ const { t } = (0, import_react_ui3.useTranslation)(translationKey);
1258
+ const [props, setProps] = (0, import_react3.useState)(projection.getFieldProjection(field.id).props);
1259
+ (0, import_react3.useEffect)(() => setProps(projection.getFieldProjection(field.id).props), [
1189
1260
  field,
1190
1261
  projection
1191
1262
  ]);
1192
- const [schemas, setSchemas] = (0, import_react2.useState)([]);
1193
- (0, import_react2.useEffect)(() => {
1263
+ const [schemas, setSchemas] = (0, import_react3.useState)([]);
1264
+ (0, import_react3.useEffect)(() => {
1194
1265
  if (!registry) {
1195
1266
  return;
1196
1267
  }
@@ -1208,17 +1279,17 @@ var FieldEditor = ({ view, projection, field, registry, onSave, onCancel }) => {
1208
1279
  }, [
1209
1280
  registry
1210
1281
  ]);
1211
- const [referenceSchema, setReferenceSchema] = (0, import_react2.useState)();
1212
- (0, import_react2.useEffect)(() => {
1282
+ const [referenceSchema, setReferenceSchema] = (0, import_react3.useState)();
1283
+ (0, import_react3.useEffect)(() => {
1213
1284
  setReferenceSchema(schemas.find((schema) => schema.typename === props?.referenceSchema));
1214
1285
  }, [
1215
1286
  schemas,
1216
1287
  props?.referenceSchema
1217
1288
  ]);
1218
- const [{ fieldSchema }, setFieldSchema] = (0, import_react2.useState)({
1289
+ const [{ fieldSchema }, setFieldSchema] = (0, import_react3.useState)({
1219
1290
  fieldSchema: (0, import_schema.getFormatSchema)(props?.format)
1220
1291
  });
1221
- const handleValuesChanged = (0, import_react2.useCallback)((_props) => {
1292
+ const handleValuesChanged = (0, import_react3.useCallback)((_props) => {
1222
1293
  setFieldSchema((prev) => {
1223
1294
  const fieldSchema2 = (0, import_schema.getFormatSchema)(_props.format);
1224
1295
  if (prev.fieldSchema === fieldSchema2) {
@@ -1253,7 +1324,7 @@ var FieldEditor = ({ view, projection, field, registry, onSave, onCancel }) => {
1253
1324
  props.format,
1254
1325
  props.referenceSchema
1255
1326
  ]);
1256
- const handleValidate = (0, import_react2.useCallback)(({ property }) => {
1327
+ const handleValidate = (0, import_react3.useCallback)(({ property }) => {
1257
1328
  if (property && view.fields.find((f) => f.path === property && f.path !== field.path)) {
1258
1329
  return [
1259
1330
  {
@@ -1266,7 +1337,7 @@ var FieldEditor = ({ view, projection, field, registry, onSave, onCancel }) => {
1266
1337
  view.fields,
1267
1338
  field
1268
1339
  ]);
1269
- const handleSave = (0, import_react2.useCallback)((props2) => {
1340
+ const handleSave = (0, import_react3.useCallback)((props2) => {
1270
1341
  projection.setFieldProjection({
1271
1342
  field,
1272
1343
  props: props2
@@ -1277,39 +1348,39 @@ var FieldEditor = ({ view, projection, field, registry, onSave, onCancel }) => {
1277
1348
  field,
1278
1349
  onSave
1279
1350
  ]);
1280
- const handleCancel = (0, import_react2.useCallback)(() => {
1351
+ const handleCancel = (0, import_react3.useCallback)(() => {
1281
1352
  requestAnimationFrame(() => onCancel?.());
1282
1353
  onSave();
1283
1354
  }, [
1284
1355
  onSave
1285
1356
  ]);
1286
- const Custom = (0, import_react2.useMemo)(() => ({
1287
- ["format"]: (props2) => /* @__PURE__ */ import_react2.default.createElement(SelectInput, {
1357
+ const Custom = (0, import_react3.useMemo)(() => ({
1358
+ ["format"]: (props2) => /* @__PURE__ */ import_react3.default.createElement(SelectInput, {
1288
1359
  ...props2,
1289
1360
  options: import_echo_schema.FormatEnums.filter((value) => value !== import_echo_schema.FormatEnum.None).map((value) => ({
1290
1361
  value,
1291
1362
  label: t(`format ${value}`)
1292
1363
  }))
1293
1364
  }),
1294
- ["referenceSchema"]: (props2) => /* @__PURE__ */ import_react2.default.createElement(SelectInput, {
1365
+ ["referenceSchema"]: (props2) => /* @__PURE__ */ import_react3.default.createElement(SelectInput, {
1295
1366
  ...props2,
1296
1367
  options: schemas.map((schema) => ({
1297
1368
  value: schema.typename
1298
1369
  }))
1299
1370
  }),
1300
- ["referencePath"]: (props2) => /* @__PURE__ */ import_react2.default.createElement(SelectInput, {
1371
+ ["referencePath"]: (props2) => /* @__PURE__ */ import_react3.default.createElement(SelectInput, {
1301
1372
  ...props2,
1302
1373
  options: referenceSchema ? (0, import_schema.getSchemaProperties)(referenceSchema.ast).sort(import_schema.sortProperties).map((p) => ({
1303
1374
  value: p.name
1304
1375
  })) : []
1305
1376
  }),
1306
- ["options"]: (props2) => /* @__PURE__ */ import_react2.default.createElement(SelectOptionInput, props2)
1377
+ ["options"]: (props2) => /* @__PURE__ */ import_react3.default.createElement(SelectOptionInput, props2)
1307
1378
  }), [
1308
1379
  t,
1309
1380
  schemas,
1310
1381
  referenceSchema
1311
1382
  ]);
1312
- const propIsNotType = (0, import_react2.useCallback)((props2) => props2.filter((p) => p.name !== "type"), []);
1383
+ const propIsNotType = (0, import_react3.useCallback)((props2) => props2.filter((p) => p.name !== "type"), []);
1313
1384
  if (!fieldSchema) {
1314
1385
  import_log.log.warn("invalid format", {
1315
1386
  props
@@ -1321,7 +1392,7 @@ var FieldEditor = ({ view, projection, field, registry, onSave, onCancel }) => {
1321
1392
  });
1322
1393
  return null;
1323
1394
  }
1324
- return /* @__PURE__ */ import_react2.default.createElement(Form, {
1395
+ return /* @__PURE__ */ import_react3.default.createElement(Form, {
1325
1396
  key: field.id,
1326
1397
  autoFocus: true,
1327
1398
  values: props,
@@ -1349,13 +1420,13 @@ var ViewMetaSchema = import_echo_schema8.S.Struct({
1349
1420
  })
1350
1421
  }).pipe(import_echo_schema8.S.mutable);
1351
1422
  var ViewEditor = ({ classNames, schema, view, registry, readonly, showHeading = false, onTypenameChanged, onDelete }) => {
1352
- const { t } = (0, import_react_ui10.useTranslation)(translationKey);
1353
- const projection = (0, import_react14.useMemo)(() => new import_schema5.ViewProjection(schema, view), [
1423
+ const { t } = (0, import_react_ui11.useTranslation)(translationKey);
1424
+ const projection = (0, import_react15.useMemo)(() => new import_schema5.ViewProjection(schema.jsonSchema, view), [
1354
1425
  schema,
1355
1426
  view
1356
1427
  ]);
1357
- const [field, setField] = (0, import_react14.useState)();
1358
- const viewValues = (0, import_react14.useMemo)(() => {
1428
+ const [field, setField] = (0, import_react15.useState)();
1429
+ const viewValues = (0, import_react15.useMemo)(() => {
1359
1430
  return {
1360
1431
  name: view.name,
1361
1432
  // TODO(burdon): Need to warn user of possible consequences of editing.
@@ -1365,10 +1436,10 @@ var ViewEditor = ({ classNames, schema, view, registry, readonly, showHeading =
1365
1436
  }, [
1366
1437
  view
1367
1438
  ]);
1368
- const handleSelect = (0, import_react14.useCallback)((field2) => {
1439
+ const handleSelect = (0, import_react15.useCallback)((field2) => {
1369
1440
  setField((f) => f === field2 ? void 0 : field2);
1370
1441
  }, []);
1371
- const handleAdd = (0, import_react14.useCallback)(() => {
1442
+ const handleAdd = (0, import_react15.useCallback)(() => {
1372
1443
  (0, import_invariant3.invariant)(!schema.readonly, void 0, {
1373
1444
  F: __dxlog_file4,
1374
1445
  L: 76,
@@ -1384,7 +1455,7 @@ var ViewEditor = ({ classNames, schema, view, registry, readonly, showHeading =
1384
1455
  schema,
1385
1456
  view
1386
1457
  ]);
1387
- const handleUpdate = (0, import_react14.useCallback)(({ name, typename }) => {
1458
+ const handleUpdate = (0, import_react15.useCallback)(({ name, typename }) => {
1388
1459
  (0, import_invariant3.invariant)(!schema.readonly, void 0, {
1389
1460
  F: __dxlog_file4,
1390
1461
  L: 83,
@@ -1407,7 +1478,7 @@ var ViewEditor = ({ classNames, schema, view, registry, readonly, showHeading =
1407
1478
  view,
1408
1479
  onTypenameChanged
1409
1480
  ]);
1410
- const handleDelete = (0, import_react14.useCallback)((fieldId) => {
1481
+ const handleDelete = (0, import_react15.useCallback)((fieldId) => {
1411
1482
  (0, import_invariant3.invariant)(!schema.readonly, void 0, {
1412
1483
  F: __dxlog_file4,
1413
1484
  L: 99,
@@ -1426,7 +1497,7 @@ var ViewEditor = ({ classNames, schema, view, registry, readonly, showHeading =
1426
1497
  field,
1427
1498
  onDelete
1428
1499
  ]);
1429
- const handleMove = (0, import_react14.useCallback)((fromIndex, toIndex) => {
1500
+ const handleMove = (0, import_react15.useCallback)((fromIndex, toIndex) => {
1430
1501
  (0, import_invariant3.invariant)(!schema.readonly, void 0, {
1431
1502
  F: __dxlog_file4,
1432
1503
  L: 111,
@@ -1446,91 +1517,91 @@ var ViewEditor = ({ classNames, schema, view, registry, readonly, showHeading =
1446
1517
  schema,
1447
1518
  view.fields
1448
1519
  ]);
1449
- const handleClose = (0, import_react14.useCallback)(() => setField(void 0), []);
1520
+ const handleClose = (0, import_react15.useCallback)(() => setField(void 0), []);
1450
1521
  const hiddenProperties = projection.getHiddenProperties();
1451
- const handleHide = (0, import_react14.useCallback)((fieldId) => {
1522
+ const handleHide = (0, import_react15.useCallback)((fieldId) => {
1452
1523
  setField(void 0);
1453
1524
  projection.hideFieldProjection(fieldId);
1454
1525
  }, [
1455
1526
  projection
1456
1527
  ]);
1457
- const handleShow = (0, import_react14.useCallback)((property) => {
1528
+ const handleShow = (0, import_react15.useCallback)((property) => {
1458
1529
  setField(void 0);
1459
1530
  projection.showFieldProjection(property);
1460
1531
  }, [
1461
1532
  projection
1462
1533
  ]);
1463
- return /* @__PURE__ */ import_react14.default.createElement("div", {
1534
+ return /* @__PURE__ */ import_react15.default.createElement("div", {
1464
1535
  role: "none",
1465
1536
  className: (0, import_react_ui_theme9.mx)("flex flex-col w-full divide-y divide-separator", classNames)
1466
- }, /* @__PURE__ */ import_react14.default.createElement(Form, {
1537
+ }, /* @__PURE__ */ import_react15.default.createElement(Form, {
1467
1538
  autoSave: true,
1468
1539
  schema: ViewMetaSchema,
1469
1540
  values: viewValues,
1470
1541
  onSave: schema.readonly ? void 0 : handleUpdate
1471
- }), /* @__PURE__ */ import_react14.default.createElement("div", null, /* @__PURE__ */ import_react14.default.createElement("div", {
1542
+ }), /* @__PURE__ */ import_react15.default.createElement("div", null, /* @__PURE__ */ import_react15.default.createElement("div", {
1472
1543
  role: "none",
1473
1544
  className: "p-2"
1474
- }, /* @__PURE__ */ import_react14.default.createElement("label", {
1545
+ }, /* @__PURE__ */ import_react15.default.createElement("label", {
1475
1546
  className: (0, import_react_ui_theme9.mx)(import_react_ui_theme9.inputTextLabel)
1476
- }, t("fields label"))), /* @__PURE__ */ import_react14.default.createElement(import_react_ui_list2.List.Root, {
1547
+ }, t("fields label"))), /* @__PURE__ */ import_react15.default.createElement(import_react_ui_list2.List.Root, {
1477
1548
  items: view.fields,
1478
1549
  isItem: import_echo_schema8.S.is(import_schema5.FieldSchema),
1479
1550
  getId: (field2) => field2.id,
1480
1551
  onMove: schema.readonly ? void 0 : handleMove
1481
- }, ({ items: fields }) => /* @__PURE__ */ import_react14.default.createElement(import_react14.default.Fragment, null, showHeading && /* @__PURE__ */ import_react14.default.createElement("div", {
1552
+ }, ({ items: fields }) => /* @__PURE__ */ import_react15.default.createElement(import_react15.default.Fragment, null, showHeading && /* @__PURE__ */ import_react15.default.createElement("div", {
1482
1553
  role: "heading",
1483
1554
  className: grid
1484
- }, /* @__PURE__ */ import_react14.default.createElement("div", null), /* @__PURE__ */ import_react14.default.createElement("div", {
1555
+ }, /* @__PURE__ */ import_react15.default.createElement("div", null), /* @__PURE__ */ import_react15.default.createElement("div", {
1485
1556
  className: "flex items-center text-sm"
1486
- }, t("field path label"))), /* @__PURE__ */ import_react14.default.createElement("div", {
1557
+ }, t("field path label"))), /* @__PURE__ */ import_react15.default.createElement("div", {
1487
1558
  role: "list",
1488
1559
  className: "flex flex-col w-full"
1489
- }, fields?.map((field2) => /* @__PURE__ */ import_react14.default.createElement(import_react_ui_list2.List.Item, {
1560
+ }, fields?.map((field2) => /* @__PURE__ */ import_react15.default.createElement(import_react_ui_list2.List.Item, {
1490
1561
  key: field2.id,
1491
1562
  item: field2,
1492
1563
  classNames: (0, import_react_ui_theme9.mx)(grid, import_react_ui_theme9.ghostHover, "cursor-pointer")
1493
- }, /* @__PURE__ */ import_react14.default.createElement(import_react_ui_list2.List.ItemDragHandle, null), /* @__PURE__ */ import_react14.default.createElement(import_react_ui_list2.List.ItemTitle, {
1564
+ }, /* @__PURE__ */ import_react15.default.createElement(import_react_ui_list2.List.ItemDragHandle, null), /* @__PURE__ */ import_react15.default.createElement(import_react_ui_list2.List.ItemTitle, {
1494
1565
  onClick: () => handleSelect(field2)
1495
- }, field2.path), /* @__PURE__ */ import_react14.default.createElement("div", {
1566
+ }, field2.path), /* @__PURE__ */ import_react15.default.createElement("div", {
1496
1567
  className: "flex items-center gap-2 -ml-4"
1497
- }, /* @__PURE__ */ import_react14.default.createElement(import_react_ui_list2.List.ItemButton, {
1568
+ }, /* @__PURE__ */ import_react15.default.createElement(import_react_ui_list2.List.ItemButton, {
1498
1569
  icon: "ph--eye-slash--regular",
1499
1570
  disabled: view.fields.length <= 1,
1500
1571
  onClick: () => handleHide(field2.id)
1501
- }), !schema.readonly && /* @__PURE__ */ import_react14.default.createElement(import_react_ui_list2.List.ItemDeleteButton, {
1572
+ }), !schema.readonly && /* @__PURE__ */ import_react15.default.createElement(import_react_ui_list2.List.ItemDeleteButton, {
1502
1573
  icon: "ph--trash--regular",
1503
1574
  disabled: view.fields.length <= 1,
1504
1575
  onClick: () => handleDelete(field2.id)
1505
- }))))))), hiddenProperties.length > 0 && /* @__PURE__ */ import_react14.default.createElement("div", null, /* @__PURE__ */ import_react14.default.createElement("div", {
1576
+ }))))))), hiddenProperties.length > 0 && /* @__PURE__ */ import_react15.default.createElement("div", null, /* @__PURE__ */ import_react15.default.createElement("div", {
1506
1577
  role: "none",
1507
1578
  className: "p-2"
1508
- }, /* @__PURE__ */ import_react14.default.createElement("label", {
1579
+ }, /* @__PURE__ */ import_react15.default.createElement("label", {
1509
1580
  className: (0, import_react_ui_theme9.mx)(import_react_ui_theme9.inputTextLabel)
1510
- }, t("hidden fields label"))), /* @__PURE__ */ import_react14.default.createElement(import_react_ui_list2.List.Root, {
1581
+ }, t("hidden fields label"))), /* @__PURE__ */ import_react15.default.createElement(import_react_ui_list2.List.Root, {
1511
1582
  items: hiddenProperties,
1512
1583
  isItem: (item) => typeof item === "string",
1513
1584
  getId: (property) => property
1514
- }, ({ items: properties }) => /* @__PURE__ */ import_react14.default.createElement("div", {
1585
+ }, ({ items: properties }) => /* @__PURE__ */ import_react15.default.createElement("div", {
1515
1586
  role: "list",
1516
1587
  className: "flex flex-col w-full"
1517
- }, properties?.map((property) => /* @__PURE__ */ import_react14.default.createElement(import_react_ui_list2.List.Item, {
1588
+ }, properties?.map((property) => /* @__PURE__ */ import_react15.default.createElement(import_react_ui_list2.List.Item, {
1518
1589
  key: property,
1519
1590
  item: property,
1520
1591
  classNames: (0, import_react_ui_theme9.mx)(grid, import_react_ui_theme9.ghostHover, "cursor-pointer")
1521
- }, /* @__PURE__ */ import_react14.default.createElement("div", null), /* @__PURE__ */ import_react14.default.createElement(import_react_ui_list2.List.ItemTitle, null, property), /* @__PURE__ */ import_react14.default.createElement(import_react_ui_list2.List.ItemButton, {
1592
+ }, /* @__PURE__ */ import_react15.default.createElement("div", null), /* @__PURE__ */ import_react15.default.createElement(import_react_ui_list2.List.ItemTitle, null, property), /* @__PURE__ */ import_react15.default.createElement(import_react_ui_list2.List.ItemButton, {
1522
1593
  icon: "ph--eye--regular",
1523
1594
  onClick: () => handleShow(property)
1524
- }))))))), field && /* @__PURE__ */ import_react14.default.createElement(FieldEditor, {
1595
+ }))))))), field && /* @__PURE__ */ import_react15.default.createElement(FieldEditor, {
1525
1596
  key: field.id,
1526
1597
  view,
1527
1598
  projection,
1528
1599
  field,
1529
1600
  registry,
1530
1601
  onSave: handleClose
1531
- }), !readonly && !field && /* @__PURE__ */ import_react14.default.createElement("div", {
1602
+ }), !readonly && !field && /* @__PURE__ */ import_react15.default.createElement("div", {
1532
1603
  className: "flex p-2 justify-center"
1533
- }, /* @__PURE__ */ import_react14.default.createElement(import_react_ui10.IconButton, {
1604
+ }, /* @__PURE__ */ import_react15.default.createElement(import_react_ui11.IconButton, {
1534
1605
  icon: "ph--plus--regular",
1535
1606
  label: t("button add property"),
1536
1607
  onClick: schema.readonly ? void 0 : handleAdd,
@@ -1641,12 +1712,14 @@ var cellClassesForFieldType = ({ type, format }) => {
1641
1712
  switch (format) {
1642
1713
  case import_echo_schema9.FormatEnum.Markdown:
1643
1714
  return void 0;
1715
+ case import_echo_schema9.FormatEnum.Time:
1644
1716
  case import_echo_schema9.FormatEnum.Timestamp:
1645
1717
  case import_echo_schema9.FormatEnum.DateTime:
1646
1718
  case import_echo_schema9.FormatEnum.Date:
1647
- case import_echo_schema9.FormatEnum.Time:
1719
+ case import_echo_schema9.FormatEnum.Duration:
1648
1720
  return [
1649
- "font-mono"
1721
+ "font-mono",
1722
+ "text-right"
1650
1723
  ];
1651
1724
  case import_echo_schema9.FormatEnum.Currency:
1652
1725
  return [
@@ -1661,9 +1734,6 @@ var cellClassesForFieldType = ({ type, format }) => {
1661
1734
  return void 0;
1662
1735
  }
1663
1736
  };
1664
- var cellClassesForRowSelection = (selected) => selected ? [
1665
- "!bg-gridCellSelected"
1666
- ] : void 0;
1667
1737
  var pathNotUniqueError = (path) => ({
1668
1738
  path: "path",
1669
1739
  message: `'${path}' is already present`
@@ -1708,17 +1778,14 @@ var formatForDisplay = ({ type, format, value, locale = void 0 }) => {
1708
1778
  maximumFractionDigits: 2
1709
1779
  });
1710
1780
  }
1711
- case import_echo_schema10.FormatEnum.DateTime:
1712
- case import_echo_schema10.FormatEnum.Date:
1781
+ case import_echo_schema10.FormatEnum.Date: {
1782
+ return (0, import_format.format)(new Date(value), "yyyy-MM-dd");
1783
+ }
1713
1784
  case import_echo_schema10.FormatEnum.Time: {
1714
- const date = new Date(value);
1715
- if (format === import_echo_schema10.FormatEnum.DateTime) {
1716
- return date.toLocaleString(locale);
1717
- } else if (format === import_echo_schema10.FormatEnum.Date) {
1718
- return date.toLocaleDateString(locale);
1719
- } else {
1720
- return date.toLocaleTimeString(locale);
1721
- }
1785
+ return (0, import_format.format)(new Date(value), "HH:mm:ss");
1786
+ }
1787
+ case import_echo_schema10.FormatEnum.DateTime: {
1788
+ return (0, import_format.format)(new Date(value), "yyyy-MM-dd HH:mm:ss");
1722
1789
  }
1723
1790
  case import_echo_schema10.FormatEnum.GeoPoint: {
1724
1791
  if (value === null || value === void 0) {
@@ -1796,6 +1863,13 @@ var formatForEditing = ({ type, format, value, locale = void 0 }) => {
1796
1863
  // Annotate the CommonJS export names for ESM import in node:
1797
1864
  0 && (module.exports = {
1798
1865
  BooleanInput,
1866
+ ControlFrame,
1867
+ ControlFrameItem,
1868
+ ControlGroup,
1869
+ ControlItem,
1870
+ ControlItemInput,
1871
+ ControlSection,
1872
+ ControlSectionHeading,
1799
1873
  DeprecatedFormContainer,
1800
1874
  DeprecatedFormInput,
1801
1875
  FieldEditor,
@@ -1811,7 +1885,7 @@ var formatForEditing = ({ type, format, value, locale = void 0 }) => {
1811
1885
  TupleInput,
1812
1886
  ViewEditor,
1813
1887
  cellClassesForFieldType,
1814
- cellClassesForRowSelection,
1888
+ controlItemClasses,
1815
1889
  formatForDisplay,
1816
1890
  formatForEditing,
1817
1891
  parseValue,