@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.
- package/dist/lib/browser/index.mjs +228 -159
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +311 -237
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +228 -159
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/components/ControlSection.d.ts +20 -0
- package/dist/types/src/components/ControlSection.d.ts.map +1 -0
- package/dist/types/src/components/Form/Form.stories.d.ts +2 -2
- package/dist/types/src/components/Form/Form.stories.d.ts.map +1 -1
- package/dist/types/src/components/Form/Input.d.ts +1 -1
- package/dist/types/src/components/Form/Input.d.ts.map +1 -1
- package/dist/types/src/components/Form/custom/SelectOptionsInput.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/util/field.d.ts +0 -1
- package/dist/types/src/util/field.d.ts.map +1 -1
- package/dist/types/src/util/formatting.d.ts.map +1 -1
- package/package.json +24 -24
- package/src/components/ControlSection.tsx +113 -0
- package/src/components/FieldEditor/FieldEditor.stories.tsx +1 -1
- package/src/components/Form/Form.stories.tsx +2 -2
- package/src/components/Form/Input.tsx +1 -1
- package/src/components/Form/custom/SelectOptionsInput.tsx +5 -1
- package/src/components/ViewEditor/ViewEditor.stories.tsx +1 -1
- package/src/components/ViewEditor/ViewEditor.tsx +1 -1
- package/src/components/index.ts +1 -1
- package/src/util/field.ts +3 -4
- package/src/util/formatting.ts +9 -10
package/dist/lib/node/index.cjs
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
303
|
+
})), /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Tooltip.Content, {
|
|
234
304
|
side: "bottom"
|
|
235
|
-
}, /* @__PURE__ */
|
|
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,
|
|
308
|
+
const { t } = (0, import_react_ui4.useTranslation)(translationKey);
|
|
239
309
|
const { status, error } = getStatus();
|
|
240
|
-
const geoPoint = (0,
|
|
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,
|
|
316
|
+
const geoLocation = (0, import_react4.useMemo)(() => import_echo_schema2.GeoLocation.fromGeoPoint(geoPoint), [
|
|
247
317
|
geoPoint
|
|
248
318
|
]);
|
|
249
|
-
const [longitudeText, setLongitudeText] = (0,
|
|
250
|
-
const [latitudeText, setLatitudeText] = (0,
|
|
251
|
-
(0,
|
|
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,
|
|
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__ */
|
|
351
|
+
return /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Input.Root, {
|
|
282
352
|
validationValence: status
|
|
283
|
-
}, /* @__PURE__ */
|
|
353
|
+
}, /* @__PURE__ */ import_react4.default.createElement(InputHeader, {
|
|
284
354
|
error
|
|
285
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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,
|
|
308
|
-
const [isNewOption, setIsNewOption] = (0,
|
|
309
|
-
const inputRef = (0,
|
|
310
|
-
const { t } = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
444
|
+
const handleClick = (0, import_react6.useCallback)((id) => {
|
|
375
445
|
setSelectedId((current) => current === id ? null : id);
|
|
376
446
|
}, []);
|
|
377
|
-
const handleTitleChange = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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__ */
|
|
483
|
+
return /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Input.Root, {
|
|
414
484
|
validationValence: status
|
|
415
|
-
}, /* @__PURE__ */
|
|
485
|
+
}, /* @__PURE__ */ import_react6.default.createElement(InputHeader, {
|
|
416
486
|
error
|
|
417
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
493
|
+
}, ({ items }) => /* @__PURE__ */ import_react6.default.createElement("div", {
|
|
424
494
|
role: "list",
|
|
425
495
|
className: "w-full overflow-auto"
|
|
426
|
-
}, items?.map((item) => /* @__PURE__ */
|
|
496
|
+
}, items?.map((item) => /* @__PURE__ */ import_react6.default.createElement("div", {
|
|
427
497
|
key: item.id
|
|
428
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
503
|
+
}, /* @__PURE__ */ import_react6.default.createElement("div", {
|
|
434
504
|
className: "flex items-center"
|
|
435
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
508
|
+
}, /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Tag, {
|
|
439
509
|
palette: item.color
|
|
440
|
-
}, item.title || "\u200B")), /* @__PURE__ */
|
|
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__ */
|
|
513
|
+
})), selected === item.id && /* @__PURE__ */ import_react6.default.createElement("div", {
|
|
444
514
|
className: "mis-4 mbs-2 flex flex-col gap-1"
|
|
445
|
-
}, /* @__PURE__ */
|
|
515
|
+
}, /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Input.Label, {
|
|
446
516
|
classNames: "text-xs"
|
|
447
|
-
}, t("select option label")), /* @__PURE__ */
|
|
517
|
+
}, t("select option label")), /* @__PURE__ */ import_react6.default.createElement("div", {
|
|
448
518
|
className: "flex flex-row items-center gap-1"
|
|
449
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
527
|
+
}), /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Toolbar.Root, {
|
|
458
528
|
classNames: "p-0 m-0 !is-auto"
|
|
459
|
-
}, /* @__PURE__ */
|
|
529
|
+
}, /* @__PURE__ */ import_react6.default.createElement(import_react_ui_pickers.HuePicker, {
|
|
460
530
|
value: item.color,
|
|
461
|
-
onChange: handleColorChange(item.id)
|
|
462
|
-
|
|
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__ */
|
|
538
|
+
})))))), /* @__PURE__ */ import_react6.default.createElement("div", {
|
|
468
539
|
role: "listitem"
|
|
469
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
544
|
+
}, /* @__PURE__ */ import_react6.default.createElement("div", {
|
|
474
545
|
className: "flex items-center gap-1"
|
|
475
|
-
}, /* @__PURE__ */
|
|
546
|
+
}, /* @__PURE__ */ import_react6.default.createElement(import_react_ui6.Icon, {
|
|
476
547
|
icon: "ph--plus--regular"
|
|
477
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
561
|
+
return /* @__PURE__ */ import_react7.default.createElement(import_react_ui7.Input.Root, {
|
|
491
562
|
validationValence: status
|
|
492
|
-
}, /* @__PURE__ */
|
|
563
|
+
}, /* @__PURE__ */ import_react7.default.createElement(InputHeader, {
|
|
493
564
|
error
|
|
494
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
581
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Root, {
|
|
511
582
|
validationValence: status
|
|
512
|
-
}, !inputOnly && /* @__PURE__ */
|
|
583
|
+
}, !inputOnly && /* @__PURE__ */ import_react8.default.createElement(InputHeader, {
|
|
513
584
|
error
|
|
514
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
595
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Root, {
|
|
525
596
|
validationValence: status
|
|
526
|
-
}, !inputOnly && /* @__PURE__ */
|
|
597
|
+
}, !inputOnly && /* @__PURE__ */ import_react8.default.createElement(InputHeader, {
|
|
527
598
|
error
|
|
528
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
611
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Root, {
|
|
541
612
|
validationValence: status
|
|
542
|
-
}, !inputOnly && /* @__PURE__ */
|
|
613
|
+
}, !inputOnly && /* @__PURE__ */ import_react8.default.createElement(InputHeader, {
|
|
543
614
|
error
|
|
544
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
622
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Root, {
|
|
552
623
|
validationValence: status
|
|
553
|
-
}, !inputOnly && /* @__PURE__ */
|
|
624
|
+
}, !inputOnly && /* @__PURE__ */ import_react8.default.createElement(InputHeader, {
|
|
554
625
|
error
|
|
555
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
629
|
+
}, /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Select.TriggerButton, {
|
|
559
630
|
classNames: "is-full",
|
|
560
631
|
disabled,
|
|
561
632
|
placeholder
|
|
562
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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,
|
|
573
|
-
const adjustHeight = (0,
|
|
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,
|
|
651
|
+
(0, import_react8.useEffect)(() => {
|
|
581
652
|
adjustHeight();
|
|
582
653
|
}, [
|
|
583
654
|
adjustHeight
|
|
584
655
|
]);
|
|
585
|
-
(0,
|
|
656
|
+
(0, import_react8.useEffect)(() => {
|
|
586
657
|
adjustHeight();
|
|
587
658
|
}, [
|
|
588
659
|
getValue3(),
|
|
589
660
|
adjustHeight
|
|
590
661
|
]);
|
|
591
|
-
return /* @__PURE__ */
|
|
662
|
+
return /* @__PURE__ */ import_react8.default.createElement(import_react_ui8.Input.Root, {
|
|
592
663
|
validationValence: status
|
|
593
|
-
}, !inputOnly && /* @__PURE__ */
|
|
664
|
+
}, !inputOnly && /* @__PURE__ */ import_react8.default.createElement(InputHeader, {
|
|
594
665
|
error
|
|
595
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
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,
|
|
621
|
-
(0,
|
|
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,
|
|
627
|
-
const [changed, setChanged] = (0,
|
|
628
|
-
const [errors, setErrors] = (0,
|
|
629
|
-
const [saving, setSaving] = (0,
|
|
630
|
-
const validate = (0,
|
|
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,
|
|
644
|
-
(0,
|
|
714
|
+
const [schemaDirty, setSchemaDirty] = (0, import_react12.useState)(false);
|
|
715
|
+
(0, import_react12.useEffect)(() => setSchemaDirty(true), [
|
|
645
716
|
schema
|
|
646
717
|
]);
|
|
647
|
-
(0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
880
|
+
var FormContext = /* @__PURE__ */ (0, import_react11.createContext)(void 0);
|
|
810
881
|
var useFormContext = () => {
|
|
811
|
-
return (0,
|
|
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,
|
|
891
|
+
const stablePath = (0, import_react11.useMemo)(() => path, [
|
|
821
892
|
Array.isArray(path) ? path.join(".") : path
|
|
822
893
|
]);
|
|
823
|
-
return (0,
|
|
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,
|
|
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__ */
|
|
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,
|
|
944
|
+
const { t } = (0, import_react_ui9.useTranslation)(translationKey);
|
|
874
945
|
const { canSave, handleSave } = useFormContext();
|
|
875
|
-
return /* @__PURE__ */
|
|
946
|
+
return /* @__PURE__ */ import_react10.default.createElement("div", {
|
|
876
947
|
role: "none",
|
|
877
948
|
className: "mt-2 flex justify-center"
|
|
878
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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__ */
|
|
1028
|
+
return /* @__PURE__ */ import_react14.default.createElement("div", {
|
|
958
1029
|
role: "none",
|
|
959
1030
|
className: (0, import_react_ui_theme8.mx)(padding)
|
|
960
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
1038
|
+
}, /* @__PURE__ */ import_react14.default.createElement("div", {
|
|
968
1039
|
role: "none",
|
|
969
1040
|
className: "flex-1"
|
|
970
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
1060
|
+
})))), /* @__PURE__ */ import_react14.default.createElement("div", {
|
|
990
1061
|
role: "none",
|
|
991
1062
|
className: "flex justify-between items-center plb-1"
|
|
992
|
-
}, /* @__PURE__ */
|
|
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,
|
|
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,
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
1138
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", {
|
|
1068
1139
|
role: "none"
|
|
1069
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
1151
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", {
|
|
1081
1152
|
role: "none"
|
|
1082
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
1171
|
+
return /* @__PURE__ */ import_react13.default.createElement("div", {
|
|
1101
1172
|
role: "none"
|
|
1102
|
-
}, !inline && /* @__PURE__ */
|
|
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,
|
|
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__ */
|
|
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__ */
|
|
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,
|
|
1143
|
-
const onValid = (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,
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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,
|
|
1187
|
-
const [props, setProps] = (0,
|
|
1188
|
-
(0,
|
|
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,
|
|
1193
|
-
(0,
|
|
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,
|
|
1212
|
-
(0,
|
|
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,
|
|
1289
|
+
const [{ fieldSchema }, setFieldSchema] = (0, import_react3.useState)({
|
|
1219
1290
|
fieldSchema: (0, import_schema.getFormatSchema)(props?.format)
|
|
1220
1291
|
});
|
|
1221
|
-
const handleValuesChanged = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1287
|
-
["format"]: (props2) => /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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,
|
|
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__ */
|
|
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,
|
|
1353
|
-
const projection = (0,
|
|
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,
|
|
1358
|
-
const viewValues = (0,
|
|
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,
|
|
1439
|
+
const handleSelect = (0, import_react15.useCallback)((field2) => {
|
|
1369
1440
|
setField((f) => f === field2 ? void 0 : field2);
|
|
1370
1441
|
}, []);
|
|
1371
|
-
const handleAdd = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
1520
|
+
const handleClose = (0, import_react15.useCallback)(() => setField(void 0), []);
|
|
1450
1521
|
const hiddenProperties = projection.getHiddenProperties();
|
|
1451
|
-
const handleHide = (0,
|
|
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,
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
1566
|
+
}, field2.path), /* @__PURE__ */ import_react15.default.createElement("div", {
|
|
1496
1567
|
className: "flex items-center gap-2 -ml-4"
|
|
1497
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
1602
|
+
}), !readonly && !field && /* @__PURE__ */ import_react15.default.createElement("div", {
|
|
1532
1603
|
className: "flex p-2 justify-center"
|
|
1533
|
-
}, /* @__PURE__ */
|
|
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.
|
|
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.
|
|
1712
|
-
|
|
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
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
|
|
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
|
-
|
|
1888
|
+
controlItemClasses,
|
|
1815
1889
|
formatForDisplay,
|
|
1816
1890
|
formatForEditing,
|
|
1817
1891
|
parseValue,
|