@osdk/react-components 0.18.0-main-1f635101dcdf13bf3201bcaa21c641715744dbb6 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -21
- package/build/browser/action-form/FormField.js +11 -5
- package/build/browser/action-form/FormField.js.map +1 -1
- package/build/browser/action-form/FormField.module.css +17 -0
- package/build/browser/action-form/FormField.module.css.js +1 -0
- package/build/browser/action-form/fields/FieldBridge.js +7 -1
- package/build/browser/action-form/fields/FieldBridge.js.map +1 -1
- package/build/browser/action-form/fields/FormFieldRenderer.js +2 -0
- package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/browser/styles.css +38 -0
- package/build/browser/tokens/component-tokens/form.css +21 -0
- package/build/browser/util/UserAgent.js +1 -1
- package/build/browser/util/UserAgent.js.map +1 -1
- package/build/cjs/{chunk-T535MGC4.cjs → chunk-3ZTI3X34.cjs} +4 -4
- package/build/cjs/{chunk-T535MGC4.cjs.map → chunk-3ZTI3X34.cjs.map} +1 -1
- package/build/cjs/{chunk-3MZS45DK.cjs → chunk-4VBZDFNF.cjs} +19 -9
- package/build/cjs/chunk-4VBZDFNF.cjs.map +1 -0
- package/build/cjs/chunk-4WN66RSZ.cjs +11 -0
- package/build/cjs/{chunk-UKGRBSSF.cjs.map → chunk-4WN66RSZ.cjs.map} +1 -1
- package/build/cjs/chunk-5BNDEXWF.cjs +11 -0
- package/build/cjs/{chunk-EE2OFLAZ.cjs.map → chunk-5BNDEXWF.cjs.map} +1 -1
- package/build/cjs/{chunk-DY5TM2V6.cjs → chunk-5YC6ASJW.cjs} +4 -4
- package/build/cjs/{chunk-DY5TM2V6.cjs.map → chunk-5YC6ASJW.cjs.map} +1 -1
- package/build/cjs/{chunk-CGCF5U65.cjs → chunk-DDXYP26C.cjs} +4 -4
- package/build/cjs/{chunk-CGCF5U65.cjs.map → chunk-DDXYP26C.cjs.map} +1 -1
- package/build/cjs/{chunk-HHNCKBQD.cjs → chunk-G7ASG6Y4.cjs} +4 -4
- package/build/cjs/{chunk-HHNCKBQD.cjs.map → chunk-G7ASG6Y4.cjs.map} +1 -1
- package/build/cjs/{chunk-2OWD7MYY.cjs → chunk-GU5FOAQH.cjs} +3 -3
- package/build/cjs/chunk-GU5FOAQH.cjs.map +1 -0
- package/build/cjs/{chunk-PQB7LUTF.cjs → chunk-JYNEP3MG.cjs} +4 -4
- package/build/cjs/{chunk-PQB7LUTF.cjs.map → chunk-JYNEP3MG.cjs.map} +1 -1
- package/build/cjs/{chunk-H43DG4GH.cjs → chunk-LPGTPRYE.cjs} +4 -4
- package/build/cjs/{chunk-H43DG4GH.cjs.map → chunk-LPGTPRYE.cjs.map} +1 -1
- package/build/cjs/chunk-RR3VWKZH.cjs +11 -0
- package/build/cjs/{chunk-YYSCXUYI.cjs.map → chunk-RR3VWKZH.cjs.map} +1 -1
- package/build/cjs/chunk-URQCTCDJ.cjs +11 -0
- package/build/cjs/{chunk-L3U64NY4.cjs.map → chunk-URQCTCDJ.cjs.map} +1 -1
- package/build/cjs/chunk-WVP6Y6QL.cjs +11 -0
- package/build/cjs/{chunk-357LAJ2P.cjs.map → chunk-WVP6Y6QL.cjs.map} +1 -1
- package/build/cjs/public/experimental/action-form.cjs +4 -4
- package/build/cjs/public/experimental/action-form.css +15 -0
- package/build/cjs/public/experimental/action-form.css.map +1 -1
- package/build/cjs/public/experimental/document-viewer.cjs +4 -4
- package/build/cjs/public/experimental/email-viewer.cjs +3 -3
- package/build/cjs/public/experimental/excel-viewer.cjs +3 -3
- package/build/cjs/public/experimental/filter-list.cjs +13 -13
- package/build/cjs/public/experimental/image-viewer.cjs +3 -3
- package/build/cjs/public/experimental/markdown-renderer.cjs +3 -3
- package/build/cjs/public/experimental/object-table.cjs +8 -8
- package/build/cjs/public/experimental/pdf-viewer.cjs +7 -7
- package/build/cjs/public/experimental/tiff-renderer.cjs +3 -3
- package/build/cjs/public/experimental/video-viewer.cjs +3 -3
- package/build/cjs/public/experimental/xml-viewer.cjs +3 -3
- package/build/cjs/public/experimental.cjs +46 -46
- package/build/cjs/public/experimental.css +15 -0
- package/build/cjs/public/experimental.css.map +1 -1
- package/build/esm/action-form/FormField.js +11 -5
- package/build/esm/action-form/FormField.js.map +1 -1
- package/build/esm/action-form/FormField.module.css +17 -0
- package/build/esm/action-form/fields/FieldBridge.js +7 -1
- package/build/esm/action-form/fields/FieldBridge.js.map +1 -1
- package/build/esm/action-form/fields/FormFieldRenderer.js +2 -0
- package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -1
- package/build/esm/tokens/component-tokens/form.css +21 -0
- package/build/esm/util/UserAgent.js +1 -1
- package/build/esm/util/UserAgent.js.map +1 -1
- package/build/types/action-form/FormField.d.ts +1 -0
- package/build/types/action-form/FormField.d.ts.map +1 -1
- package/build/types/action-form/fields/FieldBridge.d.ts.map +1 -1
- package/build/types/action-form/fields/FormFieldRenderer.d.ts +1 -0
- package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -1
- package/package.json +8 -8
- package/build/cjs/chunk-2OWD7MYY.cjs.map +0 -1
- package/build/cjs/chunk-357LAJ2P.cjs +0 -11
- package/build/cjs/chunk-3MZS45DK.cjs.map +0 -1
- package/build/cjs/chunk-EE2OFLAZ.cjs +0 -11
- package/build/cjs/chunk-L3U64NY4.cjs +0 -11
- package/build/cjs/chunk-UKGRBSSF.cjs +0 -11
- package/build/cjs/chunk-YYSCXUYI.cjs +0 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,25 @@
|
|
|
1
1
|
# @osdk/react-components
|
|
2
2
|
|
|
3
|
-
## 0.18.0
|
|
3
|
+
## 0.18.0
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
|
+
- b0de21b: ActionForm fields now show an `Edited` tag after users edit them.
|
|
7
8
|
- 1f63510: Add built-in dark mode token overrides. Components now react automatically to `prefers-color-scheme: dark` and to the `[data-bp-color-scheme="dark"]` / `.bp6-dark` attribute selectors, matching the Foundry custom widgets dark theme guidance.
|
|
9
|
+
- aad8d52: filter-list: match "No value" row gap to regular row gap so it doesn't look visually tighter than its neighbors
|
|
10
|
+
- f6f92fb: Fix broken CSS custom property references that used non-existent token names
|
|
11
|
+
- 19d5612: Fix two ObjectTable editable-cell visual issues:
|
|
12
|
+
- Dropdown cell no longer shows a phantom "edited" outline after clearing a
|
|
13
|
+
never-set cell. `EditableCell` and `useEditableTable` now treat `null` and
|
|
14
|
+
`undefined` as the same empty state when deciding whether an edit is a
|
|
15
|
+
revert, so clearing a cell whose value was `undefined` removes the edit
|
|
16
|
+
entry instead of leaving a stale "edited" indicator. `""` remains a
|
|
17
|
+
distinct value — clearing an empty string still registers as an edit.
|
|
18
|
+
- Date picker cell now shows the same focus outline as the text input cell,
|
|
19
|
+
and no longer renders the date picker's own box-shadow on top of the cell
|
|
20
|
+
border. The cell wrapper also reserves a transparent border so focusing
|
|
21
|
+
the picker doesn't shift layout.
|
|
22
|
+
|
|
8
23
|
- 5c20aba: Add `--osdk-table-cell-bg` CSS variable on `ObjectTable` / `BaseTable`
|
|
9
24
|
cells, and tag each `<td>` with `data-editable="true"` when the cell renders
|
|
10
25
|
as editable. The variable defaults to `inherit`, preserving current visuals.
|
|
@@ -21,27 +36,7 @@
|
|
|
21
36
|
```
|
|
22
37
|
|
|
23
38
|
- ca8ef7c: ObjectTable: drop the redundant `selectedRowIds` field from the `RowSelectionChange` payload delivered to `onRowSelectionChanged`. The primary keys are still available via `selectedRows.map(r => r.$primaryKey)`. `selectedRowIds` was redundant with `selectedRows` and was kept only as a transitional alias.
|
|
24
|
-
|
|
25
|
-
### Patch Changes
|
|
26
|
-
|
|
27
|
-
- aad8d52: filter-list: match "No value" row gap to regular row gap so it doesn't look visually tighter than its neighbors
|
|
28
|
-
- f6f92fb: Fix broken CSS custom property references that used non-existent token names
|
|
29
|
-
- 19d5612: Fix two ObjectTable editable-cell visual issues:
|
|
30
|
-
- Dropdown cell no longer shows a phantom "edited" outline after clearing a
|
|
31
|
-
never-set cell. `EditableCell` and `useEditableTable` now treat `null` and
|
|
32
|
-
`undefined` as the same empty state when deciding whether an edit is a
|
|
33
|
-
revert, so clearing a cell whose value was `undefined` removes the edit
|
|
34
|
-
entry instead of leaving a stale "edited" indicator. `""` remains a
|
|
35
|
-
distinct value — clearing an empty string still registers as an edit.
|
|
36
|
-
- Date picker cell now shows the same focus outline as the text input cell,
|
|
37
|
-
and no longer renders the date picker's own box-shadow on top of the cell
|
|
38
|
-
border. The cell wrapper also reserves a transparent border so focusing
|
|
39
|
-
the picker doesn't shift layout.
|
|
40
|
-
|
|
41
39
|
- 5ca0da3: Replace hardcoded table header menu colors with surface tokens and align table row hover/active to `--osdk-intent-primary-rest` for better dark theme compatibility.
|
|
42
|
-
- @osdk/api@2.21.1-main-1f635101dcdf13bf3201bcaa21c641715744dbb6
|
|
43
|
-
- @osdk/client@2.21.1-main-1f635101dcdf13bf3201bcaa21c641715744dbb6
|
|
44
|
-
- @osdk/react@2.21.1-main-1f635101dcdf13bf3201bcaa21c641715744dbb6
|
|
45
40
|
|
|
46
41
|
## 0.17.0
|
|
47
42
|
|
|
@@ -24,11 +24,14 @@ export const FormField = /*#__PURE__*/memo(function ({
|
|
|
24
24
|
isRequired,
|
|
25
25
|
helperText,
|
|
26
26
|
helperTextPlacement = "tooltip",
|
|
27
|
+
isEdited,
|
|
27
28
|
error,
|
|
28
29
|
onBlur,
|
|
29
30
|
children
|
|
30
31
|
}) {
|
|
31
32
|
const hasHelperText = helperText != null && helperText !== "";
|
|
33
|
+
const showTooltip = hasHelperText && helperTextPlacement === "tooltip";
|
|
34
|
+
const showEditedTag = isEdited === true;
|
|
32
35
|
const labelElement = label != null ? /*#__PURE__*/React.createElement("label", {
|
|
33
36
|
className: styles.osdkFormFieldLabel,
|
|
34
37
|
htmlFor: fieldKey
|
|
@@ -36,14 +39,17 @@ export const FormField = /*#__PURE__*/memo(function ({
|
|
|
36
39
|
className: styles.osdkFormFieldRequired,
|
|
37
40
|
"aria-label": "required"
|
|
38
41
|
}, " ", "*")) : null;
|
|
42
|
+
const labelRow = labelElement != null || showTooltip || showEditedTag ? /*#__PURE__*/React.createElement("div", {
|
|
43
|
+
className: styles.osdkFormFieldLabelRow
|
|
44
|
+
}, labelElement, showTooltip && /*#__PURE__*/React.createElement(InfoTip, {
|
|
45
|
+
label: label
|
|
46
|
+
}, helperText), showEditedTag && /*#__PURE__*/React.createElement("span", {
|
|
47
|
+
className: styles.osdkFormFieldEditedTag
|
|
48
|
+
}, "Edited")) : null;
|
|
39
49
|
return /*#__PURE__*/React.createElement("div", {
|
|
40
50
|
className: styles.osdkFormField,
|
|
41
51
|
onBlur: onBlur
|
|
42
|
-
}, hasHelperText && helperTextPlacement === "
|
|
43
|
-
className: styles.osdkFormFieldLabelRow
|
|
44
|
-
}, labelElement, /*#__PURE__*/React.createElement(InfoTip, {
|
|
45
|
-
label: label
|
|
46
|
-
}, helperText)) : labelElement, hasHelperText && helperTextPlacement === "bottom" && /*#__PURE__*/React.createElement("div", {
|
|
52
|
+
}, labelRow, hasHelperText && helperTextPlacement === "bottom" && /*#__PURE__*/React.createElement("div", {
|
|
47
53
|
className: styles.osdkFormFieldHelperText
|
|
48
54
|
}, helperText), children, /*#__PURE__*/React.createElement("div", {
|
|
49
55
|
className: styles.osdkFormFieldErrorSlot,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormField.js","names":["Popover","InfoSign","React","memo","styles","FormField","fieldKey","label","isRequired","helperText","helperTextPlacement","error","onBlur","children","hasHelperText","labelElement","createElement","className","osdkFormFieldLabel","htmlFor","osdkFormFieldRequired","
|
|
1
|
+
{"version":3,"file":"FormField.js","names":["Popover","InfoSign","React","memo","styles","FormField","fieldKey","label","isRequired","helperText","helperTextPlacement","isEdited","error","onBlur","children","hasHelperText","showTooltip","showEditedTag","labelElement","createElement","className","osdkFormFieldLabel","htmlFor","osdkFormFieldRequired","labelRow","osdkFormFieldLabelRow","InfoTip","osdkFormFieldEditedTag","osdkFormField","osdkFormFieldHelperText","osdkFormFieldErrorSlot","osdkFormFieldError","role","Root","Trigger","render","osdkFormFieldInfoIcon","nativeButton","openOnHover","size","Portal","Positioner","sideOffset","Popup","osdkFormFieldInfoPopup"],"sources":["FormField.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Popover } from \"@base-ui/react/popover\";\nimport { InfoSign } from \"@blueprintjs/icons\";\nimport React, { memo } from \"react\";\nimport styles from \"./FormField.module.css\";\n\ninterface FormFieldProps {\n fieldKey: string;\n label?: string;\n isRequired?: boolean;\n helperText?: React.ReactNode;\n helperTextPlacement?: \"bottom\" | \"tooltip\";\n isEdited?: boolean;\n error?: string;\n onBlur?: (e: React.FocusEvent<HTMLDivElement>) => void;\n children: React.ReactNode;\n}\n\nexport const FormField: React.FC<FormFieldProps> = memo(function FormFieldFn({\n fieldKey,\n label,\n isRequired,\n helperText,\n helperTextPlacement = \"tooltip\",\n isEdited,\n error,\n onBlur,\n children,\n}: FormFieldProps): React.ReactElement {\n const hasHelperText = helperText != null && helperText !== \"\";\n const showTooltip = hasHelperText && helperTextPlacement === \"tooltip\";\n const showBottomText = hasHelperText && helperTextPlacement === \"bottom\";\n const showEditedTag = isEdited === true;\n\n const labelElement = label != null\n ? (\n <label className={styles.osdkFormFieldLabel} htmlFor={fieldKey}>\n {label}\n {isRequired === true && (\n <span className={styles.osdkFormFieldRequired} aria-label=\"required\">\n {\" \"}\n *\n </span>\n )}\n </label>\n )\n : null;\n const labelRow = labelElement != null || showTooltip || showEditedTag\n ? (\n <div className={styles.osdkFormFieldLabelRow}>\n {labelElement}\n {showTooltip && <InfoTip label={label}>{helperText}</InfoTip>}\n {showEditedTag && (\n <span className={styles.osdkFormFieldEditedTag}>Edited</span>\n )}\n </div>\n )\n : null;\n\n return (\n <div className={styles.osdkFormField} onBlur={onBlur}>\n {labelRow}\n {showBottomText && (\n <div className={styles.osdkFormFieldHelperText}>{helperText}</div>\n )}\n {children}\n <div\n className={styles.osdkFormFieldErrorSlot}\n data-osdk-form-field-error-slot=\"\"\n >\n {error != null && (\n <div className={styles.osdkFormFieldError} role=\"alert\">\n {error}\n </div>\n )}\n </div>\n </div>\n );\n});\n\ninterface InfoTipProps {\n label?: string;\n children: React.ReactNode;\n}\n\n// Uses Popover (not Tooltip) because helper text may contain interactive\n// content like links that need focus management and keyboard navigation.\n// See https://base-ui.com/react/components/tooltip#infotips\nfunction InfoTip({ label, children }: InfoTipProps): React.ReactElement {\n return (\n <Popover.Root>\n <Popover.Trigger\n render={<span className={styles.osdkFormFieldInfoIcon} />}\n nativeButton={false}\n openOnHover={true}\n aria-label={label != null ? `Info about ${label}` : \"More information\"}\n >\n <InfoSign size={12} />\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Positioner sideOffset={4}>\n <Popover.Popup className={styles.osdkFormFieldInfoPopup}>\n {children}\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -44,6 +44,23 @@
|
|
|
44
44
|
display: flex;
|
|
45
45
|
align-items: center;
|
|
46
46
|
gap: var(--osdk-form-label-row-gap);
|
|
47
|
+
/* Reserve the edited pill's block size so showing it does not grow the label row. */
|
|
48
|
+
min-block-size: var(--osdk-form-label-row-min-block-size);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.osdkFormFieldEditedTag {
|
|
52
|
+
display: inline-flex;
|
|
53
|
+
align-items: center;
|
|
54
|
+
flex-shrink: 0;
|
|
55
|
+
margin-inline-start: auto;
|
|
56
|
+
padding-block: var(--osdk-form-edited-tag-padding-block);
|
|
57
|
+
padding-inline: var(--osdk-form-edited-tag-padding-inline);
|
|
58
|
+
border-radius: var(--osdk-form-edited-tag-border-radius);
|
|
59
|
+
background-color: var(--osdk-form-edited-tag-bg);
|
|
60
|
+
color: var(--osdk-form-edited-tag-color);
|
|
61
|
+
font-size: var(--osdk-form-edited-tag-font-size);
|
|
62
|
+
font-weight: var(--osdk-form-edited-tag-font-weight);
|
|
63
|
+
line-height: var(--osdk-form-edited-tag-line-height);
|
|
47
64
|
}
|
|
48
65
|
|
|
49
66
|
.osdkFormFieldInfoIcon {
|
|
@@ -6,6 +6,7 @@ const styles = {
|
|
|
6
6
|
"osdkFormFieldError": "FormField-module__osdkFormFieldError___VYf8-K5I",
|
|
7
7
|
"osdkFormFieldErrorSlot": "FormField-module__osdkFormFieldErrorSlot___6kJW7FnJ",
|
|
8
8
|
"osdkFormFieldLabelRow": "FormField-module__osdkFormFieldLabelRow___RXG0mixo",
|
|
9
|
+
"osdkFormFieldEditedTag": "FormField-module__osdkFormFieldEditedTag___Kx4N62b7",
|
|
9
10
|
"osdkFormFieldInfoIcon": "FormField-module__osdkFormFieldInfoIcon___p4UK4WxM",
|
|
10
11
|
"osdkFormFieldInfoPopup": "FormField-module__osdkFormFieldInfoPopup___vSWWPRsu",
|
|
11
12
|
"osdkFormFieldHelperText": "FormField-module__osdkFormFieldHelperText___awLgHOsQ"
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
import React, { memo, useCallback, useMemo } from "react";
|
|
17
|
+
import React, { memo, useCallback, useMemo, useState } from "react";
|
|
18
18
|
import { useController } from "react-hook-form";
|
|
19
19
|
import { extractValidationRules } from "../utils/extractValidationRules.js";
|
|
20
20
|
import { FormFieldRenderer } from "./FormFieldRenderer.js";
|
|
@@ -42,8 +42,13 @@ export const FieldBridge = /*#__PURE__*/memo(function ({
|
|
|
42
42
|
});
|
|
43
43
|
const isSelectLike = SELECT_LIKE_FIELDS.has(fieldDef.fieldComponent);
|
|
44
44
|
const isDropdown = fieldDef.fieldComponent === "DROPDOWN";
|
|
45
|
+
// RHF's touched state is blur-based and dirty state is value-comparison
|
|
46
|
+
// based. The tag represents an actual user edit, so set it from the
|
|
47
|
+
// field change path and keep it visible even if the value is restored.
|
|
48
|
+
const [isEdited, setIsEdited] = useState(false);
|
|
45
49
|
const handleChange = useCallback(newValue => {
|
|
46
50
|
onChange(newValue);
|
|
51
|
+
setIsEdited(true);
|
|
47
52
|
onExternalChange?.(fieldDef.fieldKey, newValue);
|
|
48
53
|
// Select-like fields are "pick once" interactions — mark as touched
|
|
49
54
|
// immediately so RHF revalidates (clears errors) on selection rather
|
|
@@ -72,6 +77,7 @@ export const FieldBridge = /*#__PURE__*/memo(function ({
|
|
|
72
77
|
,
|
|
73
78
|
onBlur: isDropdown ? undefined : handleBlur,
|
|
74
79
|
onFieldBlur: isDropdown ? onBlur : undefined,
|
|
80
|
+
isEdited: isEdited,
|
|
75
81
|
error: fieldError?.message,
|
|
76
82
|
portalContainer: portalContainer
|
|
77
83
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldBridge.js","names":["React","memo","useCallback","useMemo","useController","extractValidationRules","FormFieldRenderer","SELECT_LIKE_FIELDS","Set","FieldBridge","fieldDef","control","onExternalChange","portalContainer","rules","field","onChange","onBlur","value","fieldState","error","fieldError","name","fieldKey","isSelectLike","has","fieldComponent","isDropdown","handleChange","newValue","handleBlur","e","currentTarget","contains","relatedTarget","createElement","fieldDefinition","onFieldValueChange","undefined","onFieldBlur","message"],"sources":["FieldBridge.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { memo, useCallback, useMemo } from \"react\";\nimport type { Control } from \"react-hook-form\";\nimport { useController } from \"react-hook-form\";\nimport type {\n FieldComponent,\n PortalContainer,\n RendererFieldDefinition,\n} from \"../FormFieldApi.js\";\nimport { extractValidationRules } from \"../utils/extractValidationRules.js\";\nimport { FormFieldRenderer } from \"./FormFieldRenderer.js\";\n\nexport interface FieldBridgeProps {\n fieldDef: RendererFieldDefinition;\n control: Control<Record<string, unknown>>;\n onExternalChange?: (fieldKey: string, value: unknown) => void;\n portalContainer?: PortalContainer;\n}\nconst SELECT_LIKE_FIELDS: ReadonlySet<FieldComponent> = new Set<FieldComponent>(\n [\
|
|
1
|
+
{"version":3,"file":"FieldBridge.js","names":["React","memo","useCallback","useMemo","useState","useController","extractValidationRules","FormFieldRenderer","SELECT_LIKE_FIELDS","Set","FieldBridge","fieldDef","control","onExternalChange","portalContainer","rules","field","onChange","onBlur","value","fieldState","error","fieldError","name","fieldKey","isSelectLike","has","fieldComponent","isDropdown","isEdited","setIsEdited","handleChange","newValue","handleBlur","e","currentTarget","contains","relatedTarget","createElement","fieldDefinition","onFieldValueChange","undefined","onFieldBlur","message"],"sources":["FieldBridge.tsx"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { memo, useCallback, useMemo, useState } from \"react\";\nimport type { Control } from \"react-hook-form\";\nimport { useController } from \"react-hook-form\";\nimport type {\n FieldComponent,\n PortalContainer,\n RendererFieldDefinition,\n} from \"../FormFieldApi.js\";\nimport { extractValidationRules } from \"../utils/extractValidationRules.js\";\nimport { FormFieldRenderer } from \"./FormFieldRenderer.js\";\n\nexport interface FieldBridgeProps {\n fieldDef: RendererFieldDefinition;\n control: Control<Record<string, unknown>>;\n onExternalChange?: (fieldKey: string, value: unknown) => void;\n portalContainer?: PortalContainer;\n}\nconst SELECT_LIKE_FIELDS: ReadonlySet<FieldComponent> = new Set<FieldComponent>(\n [\"RADIO_BUTTONS\", \"SWITCH\"],\n);\n\nexport const FieldBridge: React.FC<FieldBridgeProps> = memo(\n function FieldBridgeFn({\n fieldDef,\n control,\n onExternalChange,\n portalContainer,\n }: FieldBridgeProps): React.ReactElement {\n const rules = useMemo(() => extractValidationRules(fieldDef), [fieldDef]);\n\n const {\n field: { onChange, onBlur, value },\n fieldState: { error: fieldError },\n } = useController({\n name: fieldDef.fieldKey,\n control,\n rules,\n });\n\n const isSelectLike = SELECT_LIKE_FIELDS.has(fieldDef.fieldComponent);\n const isDropdown = fieldDef.fieldComponent === \"DROPDOWN\";\n // RHF's touched state is blur-based and dirty state is value-comparison\n // based. The tag represents an actual user edit, so set it from the\n // field change path and keep it visible even if the value is restored.\n const [isEdited, setIsEdited] = useState(false);\n\n const handleChange = useCallback(\n (newValue: unknown) => {\n onChange(newValue);\n setIsEdited(true);\n onExternalChange?.(fieldDef.fieldKey, newValue);\n // Select-like fields are \"pick once\" interactions — mark as touched\n // immediately so RHF revalidates (clears errors) on selection rather\n // than waiting for focus to leave the container.\n if (isSelectLike) {\n onBlur();\n }\n },\n [onChange, onBlur, onExternalChange, fieldDef.fieldKey, isSelectLike],\n );\n\n // Ignore blur events where focus stays within the field container\n // (e.g. moving between radio buttons in a group). Only fire RHF's\n // onBlur when focus truly leaves the field.\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLDivElement>) => {\n if (e.currentTarget.contains(e.relatedTarget)) {\n return;\n }\n onBlur();\n },\n [onBlur],\n );\n\n return (\n <FormFieldRenderer\n value={value}\n fieldDefinition={fieldDef}\n onFieldValueChange={handleChange}\n // Dropdown fields own their blur signal because their popover renders\n // in a portal outside the container div — the container-level blur\n // would fire prematurely when the popover opens.\n onBlur={isDropdown ? undefined : handleBlur}\n onFieldBlur={isDropdown ? onBlur : undefined}\n isEdited={isEdited}\n error={fieldError?.message}\n portalContainer={portalContainer}\n />\n );\n },\n);\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,IAAI,EAAEC,WAAW,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAEnE,SAASC,aAAa,QAAQ,iBAAiB;AAM/C,SAASC,sBAAsB,QAAQ,oCAAoC;AAC3E,SAASC,iBAAiB,QAAQ,wBAAwB;AAQ1D,MAAMC,kBAA+C,GAAG,IAAIC,GAAG,CAC7D,CAAC,eAAe,EAAE,QAAQ,CAC5B,CAAC;AAED,OAAO,MAAMC,WAAuC,gBAAGT,IAAI,CACzD,UAAuB;EACrBU,QAAQ;EACRC,OAAO;EACPC,gBAAgB;EAChBC;AACgB,CAAC,EAAsB;EACvC,MAAMC,KAAK,GAAGZ,OAAO,CAAC,MAAMG,sBAAsB,CAACK,QAAQ,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEzE,MAAM;IACJK,KAAK,EAAE;MAAEC,QAAQ;MAAEC,MAAM;MAAEC;IAAM,CAAC;IAClCC,UAAU,EAAE;MAAEC,KAAK,EAAEC;IAAW;EAClC,CAAC,GAAGjB,aAAa,CAAC;IAChBkB,IAAI,EAAEZ,QAAQ,CAACa,QAAQ;IACvBZ,OAAO;IACPG;EACF,CAAC,CAAC;EAEF,MAAMU,YAAY,GAAGjB,kBAAkB,CAACkB,GAAG,CAACf,QAAQ,CAACgB,cAAc,CAAC;EACpE,MAAMC,UAAU,GAAGjB,QAAQ,CAACgB,cAAc,KAAK,UAAU;EACzD;EACA;EACA;EACA,MAAM,CAACE,QAAQ,EAAEC,WAAW,CAAC,GAAG1B,QAAQ,CAAC,KAAK,CAAC;EAE/C,MAAM2B,YAAY,GAAG7B,WAAW,CAC7B8B,QAAiB,IAAK;IACrBf,QAAQ,CAACe,QAAQ,CAAC;IAClBF,WAAW,CAAC,IAAI,CAAC;IACjBjB,gBAAgB,GAAGF,QAAQ,CAACa,QAAQ,EAAEQ,QAAQ,CAAC;IAC/C;IACA;IACA;IACA,IAAIP,YAAY,EAAE;MAChBP,MAAM,CAAC,CAAC;IACV;EACF,CAAC,EACD,CAACD,QAAQ,EAAEC,MAAM,EAAEL,gBAAgB,EAAEF,QAAQ,CAACa,QAAQ,EAAEC,YAAY,CACtE,CAAC;;EAED;EACA;EACA;EACA,MAAMQ,UAAU,GAAG/B,WAAW,CAC3BgC,CAAmC,IAAK;IACvC,IAAIA,CAAC,CAACC,aAAa,CAACC,QAAQ,CAACF,CAAC,CAACG,aAAa,CAAC,EAAE;MAC7C;IACF;IACAnB,MAAM,CAAC,CAAC;EACV,CAAC,EACD,CAACA,MAAM,CACT,CAAC;EAED,oBACElB,KAAA,CAAAsC,aAAA,CAAC/B,iBAAiB;IAChBY,KAAK,EAAEA,KAAM;IACboB,eAAe,EAAE5B,QAAS;IAC1B6B,kBAAkB,EAAET;IACpB;IACA;IACA;IAAA;IACAb,MAAM,EAAEU,UAAU,GAAGa,SAAS,GAAGR,UAAW;IAC5CS,WAAW,EAAEd,UAAU,GAAGV,MAAM,GAAGuB,SAAU;IAC7CZ,QAAQ,EAAEA,QAAS;IACnBR,KAAK,EAAEC,UAAU,EAAEqB,OAAQ;IAC3B7B,eAAe,EAAEA;EAAgB,CAClC,CAAC;AAEN,CACF,CAAC","ignoreList":[]}
|
|
@@ -35,6 +35,7 @@ export const FormFieldRenderer = /*#__PURE__*/memo(function ({
|
|
|
35
35
|
onFieldValueChange,
|
|
36
36
|
onBlur,
|
|
37
37
|
onFieldBlur,
|
|
38
|
+
isEdited,
|
|
38
39
|
error,
|
|
39
40
|
portalContainer
|
|
40
41
|
}) {
|
|
@@ -50,6 +51,7 @@ export const FormFieldRenderer = /*#__PURE__*/memo(function ({
|
|
|
50
51
|
fieldKey: fieldDefinition.fieldKey,
|
|
51
52
|
helperText: helperText,
|
|
52
53
|
helperTextPlacement: helperTextPlacement,
|
|
54
|
+
isEdited: isEdited,
|
|
53
55
|
error: error,
|
|
54
56
|
onBlur: onBlur
|
|
55
57
|
}, renderFieldComponent(fieldDefinition, value, onFieldValueChange, error, portalContainer, onFieldBlur));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormFieldRenderer.js","names":["React","memo","DatePicker","DateRangePicker","EMPTY_RANGE","FormField","CustomField","DropdownField","FilePickerField","NumberInputField","ObjectSelectField","ObjectSetField","RadioButtonsField","SwitchField","TextAreaField","TextInputField","UNSUPPORTED_FIELD_MESSAGE","FormFieldRenderer","fieldDefinition","value","onFieldValueChange","onBlur","onFieldBlur","error","portalContainer","label","isRequired","helperText","helperTextPlacement","createElement","fieldKey","renderFieldComponent","onChange","fieldComponent","_extends","id","coerceToDateRange","placeholderStart","placeholder","fieldComponentProps","resolvePortalContainer","String","disabled","Date","coerceToFileValue","narrowToOsdkObject","assertUnreachableFieldComponent","formPortalContainer","Object","hasOwn","Array","isArray","length","start","end","isFileArray","every","v","File","Error"],"sources":["FormFieldRenderer.tsx"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition, Osdk } from \"@osdk/api\";\nimport React, { memo } from \"react\";\nimport {\n DatePicker,\n type DateRange,\n DateRangePicker,\n EMPTY_RANGE,\n} from \"../../shared/calendar/index.js\";\nimport { FormField } from \"../FormField.js\";\nimport {\n type PortalContainer,\n type RendererFieldDefinition,\n} from \"../FormFieldApi.js\";\nimport { CustomField } from \"./CustomField.js\";\nimport { DropdownField } from \"./DropdownField.js\";\nimport { FilePickerField } from \"./FilePickerField.js\";\nimport { NumberInputField } from \"./NumberInputField.js\";\nimport { ObjectSelectField } from \"./ObjectSelectField.js\";\nimport { ObjectSetField } from \"./ObjectSetField.js\";\nimport { RadioButtonsField } from \"./RadioButtonsField.js\";\nimport { SwitchField } from \"./SwitchField.js\";\nimport { TextAreaField } from \"./TextAreaField.js\";\nimport { TextInputField } from \"./TextInputField.js\";\n\nconst UNSUPPORTED_FIELD_MESSAGE =\n \"Unsupported field type. Use a CUSTOM field instead\";\n\nexport interface FormFieldRendererProps {\n fieldDefinition: RendererFieldDefinition;\n value: unknown;\n onFieldValueChange: (value: unknown) => void;\n onBlur?: (e: React.FocusEvent<HTMLDivElement>) => void;\n /** Field-level blur for fields that own their touched state (e.g. dropdowns). */\n onFieldBlur?: () => void;\n error: string | undefined;\n portalContainer?: PortalContainer;\n}\n\nexport const FormFieldRenderer: React.FC<FormFieldRendererProps> = memo(\n function FormFieldRendererFn({\n fieldDefinition,\n value,\n onFieldValueChange,\n onBlur,\n onFieldBlur,\n error,\n portalContainer,\n }: FormFieldRendererProps): React.ReactElement {\n const { label, isRequired, helperText, helperTextPlacement } =\n fieldDefinition;\n\n return (\n <FormField\n label={label}\n isRequired={isRequired}\n fieldKey={fieldDefinition.fieldKey}\n helperText={helperText}\n helperTextPlacement={helperTextPlacement}\n error={error}\n onBlur={onBlur}\n >\n {renderFieldComponent(\n fieldDefinition,\n value,\n onFieldValueChange,\n error,\n portalContainer,\n onFieldBlur,\n )}\n </FormField>\n );\n },\n);\n\nfunction renderFieldComponent(\n fieldDefinition: RendererFieldDefinition,\n value: unknown,\n onChange: (value: unknown) => void,\n error: string | undefined,\n portalContainer: PortalContainer | undefined,\n onFieldBlur: (() => void) | undefined,\n): React.ReactElement {\n switch (fieldDefinition.fieldComponent) {\n case \"DATE_RANGE_INPUT\":\n return (\n <DateRangePicker\n id={fieldDefinition.fieldKey}\n value={coerceToDateRange(value)}\n onChange={onChange}\n placeholderStart={fieldDefinition.placeholder}\n {...fieldDefinition.fieldComponentProps}\n portalContainer={resolvePortalContainer(\n fieldDefinition.fieldComponentProps,\n portalContainer,\n )}\n />\n );\n case \"TEXT_INPUT\":\n return (\n <TextInputField\n id={fieldDefinition.fieldKey}\n value={value != null ? String(value) : \"\"}\n onChange={onChange}\n placeholder={fieldDefinition.placeholder}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"UNSUPPORTED\":\n return (\n <TextInputField\n {...fieldDefinition.fieldComponentProps}\n id={fieldDefinition.fieldKey}\n value={UNSUPPORTED_FIELD_MESSAGE}\n error={error}\n disabled={true}\n />\n );\n case \"TEXT_AREA\":\n return (\n <TextAreaField\n id={fieldDefinition.fieldKey}\n value={value != null ? String(value) : \"\"}\n onChange={onChange}\n placeholder={fieldDefinition.placeholder}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"DROPDOWN\": {\n return (\n <DropdownField\n id={fieldDefinition.fieldKey}\n value={value}\n onChange={onChange}\n placeholder={fieldDefinition.placeholder}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n portalContainer={resolvePortalContainer(\n fieldDefinition.fieldComponentProps,\n portalContainer,\n )}\n onBlur={onFieldBlur}\n />\n );\n }\n case \"DATETIME_PICKER\":\n return (\n <DatePicker\n id={fieldDefinition.fieldKey}\n placeholder={fieldDefinition.placeholder}\n // TODO: Use coerceFieldValue\n value={value instanceof Date ? value : null}\n onChange={onChange}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n portalContainer={resolvePortalContainer(\n fieldDefinition.fieldComponentProps,\n portalContainer,\n )}\n />\n );\n case \"RADIO_BUTTONS\":\n return (\n <RadioButtonsField\n id={fieldDefinition.fieldKey}\n value={value}\n onChange={onChange}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"SWITCH\":\n return (\n <SwitchField\n id={fieldDefinition.fieldKey}\n label={fieldDefinition.label}\n value={!!value}\n onChange={onChange}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"CUSTOM\":\n return (\n <CustomField\n id={fieldDefinition.fieldKey}\n value={value}\n onChange={onChange}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"NUMBER_INPUT\":\n // TODO: Use coerceFieldValue\n return (\n <NumberInputField\n id={fieldDefinition.fieldKey}\n value={typeof value === \"number\" ? value : null}\n onChange={onChange}\n placeholder={fieldDefinition.placeholder}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"FILE_PICKER\":\n return (\n <FilePickerField\n id={fieldDefinition.fieldKey}\n value={coerceToFileValue(value)}\n onChange={onChange}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"OBJECT_SELECT\":\n return (\n <ObjectSelectField\n id={fieldDefinition.fieldKey}\n value={narrowToOsdkObject(value)}\n onChange={onChange}\n placeholder={fieldDefinition.placeholder}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n portalContainer={resolvePortalContainer(\n fieldDefinition.fieldComponentProps,\n portalContainer,\n )}\n />\n );\n case \"OBJECT_SET\":\n return (\n <ObjectSetField\n id={fieldDefinition.fieldKey}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n default:\n return assertUnreachableFieldComponent(fieldDefinition);\n }\n}\n\nfunction resolvePortalContainer(\n fieldComponentProps: { portalContainer?: PortalContainer },\n formPortalContainer: PortalContainer | undefined,\n): PortalContainer | undefined {\n // A field-level value, including null, is an explicit override. That lets a\n // single field opt out of a form-level dialog portal when needed.\n return Object.hasOwn(fieldComponentProps, \"portalContainer\")\n ? fieldComponentProps.portalContainer\n : formPortalContainer;\n}\n\nfunction coerceToDateRange(value: unknown): DateRange {\n if (!Array.isArray(value) || value.length !== 2) return EMPTY_RANGE;\n const start = value[0] instanceof Date ? value[0] : null;\n const end = value[1] instanceof Date ? value[1] : null;\n if (start == null && end == null) return EMPTY_RANGE;\n return [start, end];\n}\n\n// TODO: Move and share with `coerceFieldValue`\nfunction isFileArray(value: unknown[]): value is File[] {\n return value.every((v) => v instanceof File);\n}\n\nfunction coerceToFileValue(value: unknown): File | File[] | null {\n if (value instanceof File) {\n return value;\n }\n if (Array.isArray(value) && isFileArray(value)) {\n return value;\n }\n return null;\n}\n\n/** Narrows the untyped form value to an OsdkObject by checking for $primaryKey. */\nfunction narrowToOsdkObject(\n value: unknown,\n): Osdk.Instance<ObjectTypeDefinition> | null {\n if (value != null && typeof value === \"object\" && \"$primaryKey\" in value) {\n return value as Osdk.Instance<ObjectTypeDefinition>;\n }\n return null;\n}\n\nfunction assertUnreachableFieldComponent(value: never): never {\n throw new Error(`Unhandled field component: ${String(value)}`);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"FormFieldRenderer.js","names":["React","memo","DatePicker","DateRangePicker","EMPTY_RANGE","FormField","CustomField","DropdownField","FilePickerField","NumberInputField","ObjectSelectField","ObjectSetField","RadioButtonsField","SwitchField","TextAreaField","TextInputField","UNSUPPORTED_FIELD_MESSAGE","FormFieldRenderer","fieldDefinition","value","onFieldValueChange","onBlur","onFieldBlur","isEdited","error","portalContainer","label","isRequired","helperText","helperTextPlacement","createElement","fieldKey","renderFieldComponent","onChange","fieldComponent","_extends","id","coerceToDateRange","placeholderStart","placeholder","fieldComponentProps","resolvePortalContainer","String","disabled","Date","coerceToFileValue","narrowToOsdkObject","assertUnreachableFieldComponent","formPortalContainer","Object","hasOwn","Array","isArray","length","start","end","isFileArray","every","v","File","Error"],"sources":["FormFieldRenderer.tsx"],"sourcesContent":["/*\n * Copyright 2026 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ObjectTypeDefinition, Osdk } from \"@osdk/api\";\nimport React, { memo } from \"react\";\nimport {\n DatePicker,\n type DateRange,\n DateRangePicker,\n EMPTY_RANGE,\n} from \"../../shared/calendar/index.js\";\nimport { FormField } from \"../FormField.js\";\nimport {\n type PortalContainer,\n type RendererFieldDefinition,\n} from \"../FormFieldApi.js\";\nimport { CustomField } from \"./CustomField.js\";\nimport { DropdownField } from \"./DropdownField.js\";\nimport { FilePickerField } from \"./FilePickerField.js\";\nimport { NumberInputField } from \"./NumberInputField.js\";\nimport { ObjectSelectField } from \"./ObjectSelectField.js\";\nimport { ObjectSetField } from \"./ObjectSetField.js\";\nimport { RadioButtonsField } from \"./RadioButtonsField.js\";\nimport { SwitchField } from \"./SwitchField.js\";\nimport { TextAreaField } from \"./TextAreaField.js\";\nimport { TextInputField } from \"./TextInputField.js\";\n\nconst UNSUPPORTED_FIELD_MESSAGE =\n \"Unsupported field type. Use a CUSTOM field instead\";\n\nexport interface FormFieldRendererProps {\n fieldDefinition: RendererFieldDefinition;\n value: unknown;\n onFieldValueChange: (value: unknown) => void;\n onBlur?: (e: React.FocusEvent<HTMLDivElement>) => void;\n /** Field-level blur for fields that own their touched state (e.g. dropdowns). */\n onFieldBlur?: () => void;\n isEdited: boolean;\n error: string | undefined;\n portalContainer?: PortalContainer;\n}\n\nexport const FormFieldRenderer: React.FC<FormFieldRendererProps> = memo(\n function FormFieldRendererFn({\n fieldDefinition,\n value,\n onFieldValueChange,\n onBlur,\n onFieldBlur,\n isEdited,\n error,\n portalContainer,\n }: FormFieldRendererProps): React.ReactElement {\n const { label, isRequired, helperText, helperTextPlacement } =\n fieldDefinition;\n\n return (\n <FormField\n label={label}\n isRequired={isRequired}\n fieldKey={fieldDefinition.fieldKey}\n helperText={helperText}\n helperTextPlacement={helperTextPlacement}\n isEdited={isEdited}\n error={error}\n onBlur={onBlur}\n >\n {renderFieldComponent(\n fieldDefinition,\n value,\n onFieldValueChange,\n error,\n portalContainer,\n onFieldBlur,\n )}\n </FormField>\n );\n },\n);\n\nfunction renderFieldComponent(\n fieldDefinition: RendererFieldDefinition,\n value: unknown,\n onChange: (value: unknown) => void,\n error: string | undefined,\n portalContainer: PortalContainer | undefined,\n onFieldBlur: (() => void) | undefined,\n): React.ReactElement {\n switch (fieldDefinition.fieldComponent) {\n case \"DATE_RANGE_INPUT\":\n return (\n <DateRangePicker\n id={fieldDefinition.fieldKey}\n value={coerceToDateRange(value)}\n onChange={onChange}\n placeholderStart={fieldDefinition.placeholder}\n {...fieldDefinition.fieldComponentProps}\n portalContainer={resolvePortalContainer(\n fieldDefinition.fieldComponentProps,\n portalContainer,\n )}\n />\n );\n case \"TEXT_INPUT\":\n return (\n <TextInputField\n id={fieldDefinition.fieldKey}\n value={value != null ? String(value) : \"\"}\n onChange={onChange}\n placeholder={fieldDefinition.placeholder}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"UNSUPPORTED\":\n return (\n <TextInputField\n {...fieldDefinition.fieldComponentProps}\n id={fieldDefinition.fieldKey}\n value={UNSUPPORTED_FIELD_MESSAGE}\n error={error}\n disabled={true}\n />\n );\n case \"TEXT_AREA\":\n return (\n <TextAreaField\n id={fieldDefinition.fieldKey}\n value={value != null ? String(value) : \"\"}\n onChange={onChange}\n placeholder={fieldDefinition.placeholder}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"DROPDOWN\": {\n return (\n <DropdownField\n id={fieldDefinition.fieldKey}\n value={value}\n onChange={onChange}\n placeholder={fieldDefinition.placeholder}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n portalContainer={resolvePortalContainer(\n fieldDefinition.fieldComponentProps,\n portalContainer,\n )}\n onBlur={onFieldBlur}\n />\n );\n }\n case \"DATETIME_PICKER\":\n return (\n <DatePicker\n id={fieldDefinition.fieldKey}\n placeholder={fieldDefinition.placeholder}\n // TODO: Use coerceFieldValue\n value={value instanceof Date ? value : null}\n onChange={onChange}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n portalContainer={resolvePortalContainer(\n fieldDefinition.fieldComponentProps,\n portalContainer,\n )}\n />\n );\n case \"RADIO_BUTTONS\":\n return (\n <RadioButtonsField\n id={fieldDefinition.fieldKey}\n value={value}\n onChange={onChange}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"SWITCH\":\n return (\n <SwitchField\n id={fieldDefinition.fieldKey}\n label={fieldDefinition.label}\n value={!!value}\n onChange={onChange}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"CUSTOM\":\n return (\n <CustomField\n id={fieldDefinition.fieldKey}\n value={value}\n onChange={onChange}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"NUMBER_INPUT\":\n // TODO: Use coerceFieldValue\n return (\n <NumberInputField\n id={fieldDefinition.fieldKey}\n value={typeof value === \"number\" ? value : null}\n onChange={onChange}\n placeholder={fieldDefinition.placeholder}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"FILE_PICKER\":\n return (\n <FilePickerField\n id={fieldDefinition.fieldKey}\n value={coerceToFileValue(value)}\n onChange={onChange}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n case \"OBJECT_SELECT\":\n return (\n <ObjectSelectField\n id={fieldDefinition.fieldKey}\n value={narrowToOsdkObject(value)}\n onChange={onChange}\n placeholder={fieldDefinition.placeholder}\n error={error}\n {...fieldDefinition.fieldComponentProps}\n portalContainer={resolvePortalContainer(\n fieldDefinition.fieldComponentProps,\n portalContainer,\n )}\n />\n );\n case \"OBJECT_SET\":\n return (\n <ObjectSetField\n id={fieldDefinition.fieldKey}\n {...fieldDefinition.fieldComponentProps}\n />\n );\n default:\n return assertUnreachableFieldComponent(fieldDefinition);\n }\n}\n\nfunction resolvePortalContainer(\n fieldComponentProps: { portalContainer?: PortalContainer },\n formPortalContainer: PortalContainer | undefined,\n): PortalContainer | undefined {\n // A field-level value, including null, is an explicit override. That lets a\n // single field opt out of a form-level dialog portal when needed.\n return Object.hasOwn(fieldComponentProps, \"portalContainer\")\n ? fieldComponentProps.portalContainer\n : formPortalContainer;\n}\n\nfunction coerceToDateRange(value: unknown): DateRange {\n if (!Array.isArray(value) || value.length !== 2) return EMPTY_RANGE;\n const start = value[0] instanceof Date ? value[0] : null;\n const end = value[1] instanceof Date ? value[1] : null;\n if (start == null && end == null) return EMPTY_RANGE;\n return [start, end];\n}\n\n// TODO: Move and share with `coerceFieldValue`\nfunction isFileArray(value: unknown[]): value is File[] {\n return value.every((v) => v instanceof File);\n}\n\nfunction coerceToFileValue(value: unknown): File | File[] | null {\n if (value instanceof File) {\n return value;\n }\n if (Array.isArray(value) && isFileArray(value)) {\n return value;\n }\n return null;\n}\n\n/** Narrows the untyped form value to an OsdkObject by checking for $primaryKey. */\nfunction narrowToOsdkObject(\n value: unknown,\n): Osdk.Instance<ObjectTypeDefinition> | null {\n if (value != null && typeof value === \"object\" && \"$primaryKey\" in value) {\n return value as Osdk.Instance<ObjectTypeDefinition>;\n }\n return null;\n}\n\nfunction assertUnreachableFieldComponent(value: never): never {\n throw new Error(`Unhandled field component: ${String(value)}`);\n}\n"],"mappings":"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","ignoreList":[]}
|
package/build/browser/styles.css
CHANGED
|
@@ -1780,6 +1780,27 @@
|
|
|
1780
1780
|
);
|
|
1781
1781
|
--osdk-form-error-color: var(--osdk-typography-color-danger-rest);
|
|
1782
1782
|
|
|
1783
|
+
/* Edited tag */
|
|
1784
|
+
--osdk-form-edited-tag-bg: var(--osdk-custom-color-gray-2);
|
|
1785
|
+
--osdk-form-edited-tag-color: var(--osdk-typography-color-default-rest);
|
|
1786
|
+
--osdk-form-edited-tag-font-size: var(--osdk-typography-size-body-small);
|
|
1787
|
+
--osdk-form-edited-tag-font-weight: var(--osdk-typography-weight-bold);
|
|
1788
|
+
--osdk-form-edited-tag-line-height: var(
|
|
1789
|
+
--osdk-typography-line-height-default
|
|
1790
|
+
);
|
|
1791
|
+
--osdk-form-edited-tag-padding-block: calc(var(--osdk-surface-spacing) * 0.5);
|
|
1792
|
+
--osdk-form-edited-tag-padding-inline: calc(
|
|
1793
|
+
var(--osdk-surface-spacing) * 1.5
|
|
1794
|
+
);
|
|
1795
|
+
--osdk-form-edited-tag-border-radius: var(--osdk-surface-border-radius);
|
|
1796
|
+
|
|
1797
|
+
/* Label row reserved height (accounts for edited tag) to avoid layout shift */
|
|
1798
|
+
--osdk-form-label-row-min-block-size: calc(
|
|
1799
|
+
var(--osdk-form-edited-tag-font-size) *
|
|
1800
|
+
var(--osdk-form-edited-tag-line-height) +
|
|
1801
|
+
var(--osdk-form-edited-tag-padding-block) * 2
|
|
1802
|
+
);
|
|
1803
|
+
|
|
1783
1804
|
/* Form footer error indicator */
|
|
1784
1805
|
--osdk-form-footer-error-color: var(--osdk-form-error-color);
|
|
1785
1806
|
--osdk-form-footer-error-font-size: var(--osdk-typography-size-body-medium);
|
|
@@ -2283,6 +2304,23 @@
|
|
|
2283
2304
|
display: flex;
|
|
2284
2305
|
align-items: center;
|
|
2285
2306
|
gap: var(--osdk-form-label-row-gap);
|
|
2307
|
+
/* Reserve the edited pill's block size so showing it does not grow the label row. */
|
|
2308
|
+
min-block-size: var(--osdk-form-label-row-min-block-size);
|
|
2309
|
+
}
|
|
2310
|
+
|
|
2311
|
+
.FormField-module__osdkFormFieldEditedTag___Kx4N62b7 {
|
|
2312
|
+
display: inline-flex;
|
|
2313
|
+
align-items: center;
|
|
2314
|
+
flex-shrink: 0;
|
|
2315
|
+
margin-inline-start: auto;
|
|
2316
|
+
padding-block: var(--osdk-form-edited-tag-padding-block);
|
|
2317
|
+
padding-inline: var(--osdk-form-edited-tag-padding-inline);
|
|
2318
|
+
border-radius: var(--osdk-form-edited-tag-border-radius);
|
|
2319
|
+
background-color: var(--osdk-form-edited-tag-bg);
|
|
2320
|
+
color: var(--osdk-form-edited-tag-color);
|
|
2321
|
+
font-size: var(--osdk-form-edited-tag-font-size);
|
|
2322
|
+
font-weight: var(--osdk-form-edited-tag-font-weight);
|
|
2323
|
+
line-height: var(--osdk-form-edited-tag-line-height);
|
|
2286
2324
|
}
|
|
2287
2325
|
|
|
2288
2326
|
.FormField-module__osdkFormFieldInfoIcon___p4UK4WxM {
|
|
@@ -44,6 +44,27 @@
|
|
|
44
44
|
);
|
|
45
45
|
--osdk-form-error-color: var(--osdk-typography-color-danger-rest);
|
|
46
46
|
|
|
47
|
+
/* Edited tag */
|
|
48
|
+
--osdk-form-edited-tag-bg: var(--osdk-custom-color-gray-2);
|
|
49
|
+
--osdk-form-edited-tag-color: var(--osdk-typography-color-default-rest);
|
|
50
|
+
--osdk-form-edited-tag-font-size: var(--osdk-typography-size-body-small);
|
|
51
|
+
--osdk-form-edited-tag-font-weight: var(--osdk-typography-weight-bold);
|
|
52
|
+
--osdk-form-edited-tag-line-height: var(
|
|
53
|
+
--osdk-typography-line-height-default
|
|
54
|
+
);
|
|
55
|
+
--osdk-form-edited-tag-padding-block: calc(var(--osdk-surface-spacing) * 0.5);
|
|
56
|
+
--osdk-form-edited-tag-padding-inline: calc(
|
|
57
|
+
var(--osdk-surface-spacing) * 1.5
|
|
58
|
+
);
|
|
59
|
+
--osdk-form-edited-tag-border-radius: var(--osdk-surface-border-radius);
|
|
60
|
+
|
|
61
|
+
/* Label row reserved height (accounts for edited tag) to avoid layout shift */
|
|
62
|
+
--osdk-form-label-row-min-block-size: calc(
|
|
63
|
+
var(--osdk-form-edited-tag-font-size) *
|
|
64
|
+
var(--osdk-form-edited-tag-line-height) +
|
|
65
|
+
var(--osdk-form-edited-tag-padding-block) * 2
|
|
66
|
+
);
|
|
67
|
+
|
|
47
68
|
/* Form footer error indicator */
|
|
48
69
|
--osdk-form-footer-error-color: var(--osdk-form-error-color);
|
|
49
70
|
--osdk-form-footer-error-font-size: var(--osdk-typography-size-body-medium);
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
-
const PACKAGE_USER_AGENT = `osdk-react-components/${"0.18.0
|
|
17
|
+
const PACKAGE_USER_AGENT = `osdk-react-components/${"0.18.0"}`;
|
|
18
18
|
export function componentUserAgent(componentName) {
|
|
19
19
|
return `${PACKAGE_USER_AGENT}/${componentName}`;
|
|
20
20
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst PACKAGE_USER_AGENT =\n `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GACtB,
|
|
1
|
+
{"version":3,"file":"UserAgent.js","names":["PACKAGE_USER_AGENT","componentUserAgent","componentName"],"sources":["UserAgent.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst PACKAGE_USER_AGENT =\n `osdk-react-components/${process.env.PACKAGE_VERSION}`;\n\nexport function componentUserAgent(componentName: string): string {\n return `${PACKAGE_USER_AGENT}/${componentName}`;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,kBAAkB,GACtB,mCAAsD;AAExD,OAAO,SAASC,kBAAkBA,CAACC,aAAqB,EAAU;EAChE,OAAO,GAAGF,kBAAkB,IAAIE,aAAa,EAAE;AACjD","ignoreList":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunkIISDOJPR_cjs = require('./chunk-IISDOJPR.cjs');
|
|
4
|
-
var
|
|
4
|
+
var chunkGU5FOAQH_cjs = require('./chunk-GU5FOAQH.cjs');
|
|
5
5
|
|
|
6
6
|
// src/public/experimental/tiff-renderer.ts
|
|
7
|
-
var TiffViewerMedia2 =
|
|
7
|
+
var TiffViewerMedia2 = chunkGU5FOAQH_cjs.withOsdkMetrics(chunkIISDOJPR_cjs.TiffViewerMedia, "TiffViewerMedia");
|
|
8
8
|
|
|
9
9
|
exports.TiffViewerMedia = TiffViewerMedia2;
|
|
10
|
-
//# sourceMappingURL=chunk-
|
|
11
|
-
//# sourceMappingURL=chunk-
|
|
10
|
+
//# sourceMappingURL=chunk-3ZTI3X34.cjs.map
|
|
11
|
+
//# sourceMappingURL=chunk-3ZTI3X34.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/public/experimental/tiff-renderer.ts"],"names":["TiffViewerMedia","withOsdkMetrics"],"mappings":";;;;;;AAqBO,IAAMA,gBAAAA,GAAkBC,iCAAA,CAAgBD,iCAAA,EAAkB,iBAAiB","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../../src/public/experimental/tiff-renderer.ts"],"names":["TiffViewerMedia","withOsdkMetrics"],"mappings":";;;;;;AAqBO,IAAMA,gBAAAA,GAAkBC,iCAAA,CAAgBD,iCAAA,EAAkB,iBAAiB","file":"chunk-3ZTI3X34.cjs","sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// TiffRenderer\nexport { TiffRenderer } from \"../../images/tiff-renderer/TiffRenderer.js\";\n// TiffViewerMedia (Media wrapper)\nimport { TiffViewerMedia as _TiffViewerMedia } from \"../../images/tiff-renderer/TiffViewerMedia.js\";\nimport { withOsdkMetrics } from \"../../util/withOsdkMetrics.js\";\nexport const TiffViewerMedia = withOsdkMetrics(_TiffViewerMedia, \"TiffViewerMedia\");"]}
|
|
@@ -7,7 +7,7 @@ var chunkHNBSGCSZ_cjs = require('./chunk-HNBSGCSZ.cjs');
|
|
|
7
7
|
var chunk7LXS66DW_cjs = require('./chunk-7LXS66DW.cjs');
|
|
8
8
|
var chunkMD4KDE44_cjs = require('./chunk-MD4KDE44.cjs');
|
|
9
9
|
var chunkUCTQICPR_cjs = require('./chunk-UCTQICPR.cjs');
|
|
10
|
-
var
|
|
10
|
+
var chunkGU5FOAQH_cjs = require('./chunk-GU5FOAQH.cjs');
|
|
11
11
|
var react = require('@osdk/react');
|
|
12
12
|
var React17 = require('react');
|
|
13
13
|
var icons = require('@blueprintjs/icons');
|
|
@@ -236,6 +236,7 @@ var FormField = /* @__PURE__ */ React17.memo(function FormFieldFn({
|
|
|
236
236
|
isRequired,
|
|
237
237
|
helperText,
|
|
238
238
|
helperTextPlacement = "tooltip",
|
|
239
|
+
isEdited,
|
|
239
240
|
error,
|
|
240
241
|
onBlur,
|
|
241
242
|
children
|
|
@@ -243,6 +244,7 @@ var FormField = /* @__PURE__ */ React17.memo(function FormFieldFn({
|
|
|
243
244
|
const hasHelperText = helperText != null && helperText !== "";
|
|
244
245
|
const showTooltip = hasHelperText && helperTextPlacement === "tooltip";
|
|
245
246
|
const showBottomText = hasHelperText && helperTextPlacement === "bottom";
|
|
247
|
+
const showEditedTag = isEdited === true;
|
|
246
248
|
const labelElement = label != null ? /* @__PURE__ */ React17__default.default.createElement("label", {
|
|
247
249
|
className: FormField_default.osdkFormFieldLabel,
|
|
248
250
|
htmlFor: fieldKey
|
|
@@ -250,14 +252,17 @@ var FormField = /* @__PURE__ */ React17.memo(function FormFieldFn({
|
|
|
250
252
|
className: FormField_default.osdkFormFieldRequired,
|
|
251
253
|
"aria-label": "required"
|
|
252
254
|
}, " ", "*")) : null;
|
|
255
|
+
const labelRow = labelElement != null || showTooltip || showEditedTag ? /* @__PURE__ */ React17__default.default.createElement("div", {
|
|
256
|
+
className: FormField_default.osdkFormFieldLabelRow
|
|
257
|
+
}, labelElement, showTooltip && /* @__PURE__ */ React17__default.default.createElement(InfoTip, {
|
|
258
|
+
label
|
|
259
|
+
}, helperText), showEditedTag && /* @__PURE__ */ React17__default.default.createElement("span", {
|
|
260
|
+
className: FormField_default.osdkFormFieldEditedTag
|
|
261
|
+
}, "Edited")) : null;
|
|
253
262
|
return /* @__PURE__ */ React17__default.default.createElement("div", {
|
|
254
263
|
className: FormField_default.osdkFormField,
|
|
255
264
|
onBlur
|
|
256
|
-
},
|
|
257
|
-
className: FormField_default.osdkFormFieldLabelRow
|
|
258
|
-
}, labelElement, /* @__PURE__ */ React17__default.default.createElement(InfoTip, {
|
|
259
|
-
label
|
|
260
|
-
}, helperText)) : labelElement, showBottomText && /* @__PURE__ */ React17__default.default.createElement("div", {
|
|
265
|
+
}, labelRow, showBottomText && /* @__PURE__ */ React17__default.default.createElement("div", {
|
|
261
266
|
className: FormField_default.osdkFormFieldHelperText
|
|
262
267
|
}, helperText), children, /* @__PURE__ */ React17__default.default.createElement("div", {
|
|
263
268
|
className: FormField_default.osdkFormFieldErrorSlot,
|
|
@@ -1021,6 +1026,7 @@ var FormFieldRenderer = /* @__PURE__ */ React17.memo(function FormFieldRendererF
|
|
|
1021
1026
|
onFieldValueChange,
|
|
1022
1027
|
onBlur,
|
|
1023
1028
|
onFieldBlur,
|
|
1029
|
+
isEdited,
|
|
1024
1030
|
error,
|
|
1025
1031
|
portalContainer
|
|
1026
1032
|
}) {
|
|
@@ -1036,6 +1042,7 @@ var FormFieldRenderer = /* @__PURE__ */ React17.memo(function FormFieldRendererF
|
|
|
1036
1042
|
fieldKey: fieldDefinition.fieldKey,
|
|
1037
1043
|
helperText,
|
|
1038
1044
|
helperTextPlacement,
|
|
1045
|
+
isEdited,
|
|
1039
1046
|
error,
|
|
1040
1047
|
onBlur
|
|
1041
1048
|
}, renderFieldComponent(fieldDefinition, value, onFieldValueChange, error, portalContainer, onFieldBlur));
|
|
@@ -1208,8 +1215,10 @@ var FieldBridge = /* @__PURE__ */ React17.memo(function FieldBridgeFn({
|
|
|
1208
1215
|
});
|
|
1209
1216
|
const isSelectLike = SELECT_LIKE_FIELDS.has(fieldDef.fieldComponent);
|
|
1210
1217
|
const isDropdown = fieldDef.fieldComponent === "DROPDOWN";
|
|
1218
|
+
const [isEdited, setIsEdited] = React17.useState(false);
|
|
1211
1219
|
const handleChange = React17.useCallback((newValue) => {
|
|
1212
1220
|
onChange(newValue);
|
|
1221
|
+
setIsEdited(true);
|
|
1213
1222
|
onExternalChange?.(fieldDef.fieldKey, newValue);
|
|
1214
1223
|
if (isSelectLike) {
|
|
1215
1224
|
onBlur();
|
|
@@ -1227,6 +1236,7 @@ var FieldBridge = /* @__PURE__ */ React17.memo(function FieldBridgeFn({
|
|
|
1227
1236
|
onFieldValueChange: handleChange,
|
|
1228
1237
|
onBlur: isDropdown ? void 0 : handleBlur,
|
|
1229
1238
|
onFieldBlur: isDropdown ? onBlur : void 0,
|
|
1239
|
+
isEdited,
|
|
1230
1240
|
error: fieldError?.message,
|
|
1231
1241
|
portalContainer
|
|
1232
1242
|
});
|
|
@@ -1798,9 +1808,9 @@ var ActionForm = chunkFXEPNL5K_cjs.typedReactMemo(function ActionFormFn({
|
|
|
1798
1808
|
});
|
|
1799
1809
|
|
|
1800
1810
|
// src/public/experimental/action-form.ts
|
|
1801
|
-
var ActionForm2 =
|
|
1811
|
+
var ActionForm2 = chunkGU5FOAQH_cjs.withOsdkMetrics(ActionForm, "ActionForm");
|
|
1802
1812
|
|
|
1803
1813
|
exports.ActionForm = ActionForm2;
|
|
1804
1814
|
exports.BaseForm = BaseForm;
|
|
1805
|
-
//# sourceMappingURL=chunk-
|
|
1806
|
-
//# sourceMappingURL=chunk-
|
|
1815
|
+
//# sourceMappingURL=chunk-4VBZDFNF.cjs.map
|
|
1816
|
+
//# sourceMappingURL=chunk-4VBZDFNF.cjs.map
|