@firecms/core 3.0.1 → 3.1.0-canary.1df3b2c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/README.md +1 -1
  2. package/dist/components/AIIcon.d.ts +16 -0
  3. package/dist/components/EntityCollectionTable/EntityCollectionRowActions.d.ts +7 -1
  4. package/dist/components/EntityCollectionTable/EntityCollectionTable.d.ts +1 -1
  5. package/dist/components/EntityCollectionTable/EntityCollectionTableProps.d.ts +14 -0
  6. package/dist/components/EntityCollectionTable/PropertyTableCell.d.ts +6 -0
  7. package/dist/components/EntityCollectionTable/internal/CollectionTableToolbar.d.ts +5 -4
  8. package/dist/components/EntityCollectionTable/internal/EntityTableCell.d.ts +6 -0
  9. package/dist/components/EntityCollectionView/Board.d.ts +2 -0
  10. package/dist/components/EntityCollectionView/BoardColumn.d.ts +42 -0
  11. package/dist/components/EntityCollectionView/BoardColumnTitle.d.ts +9 -0
  12. package/dist/components/EntityCollectionView/BoardSortableList.d.ts +14 -0
  13. package/dist/components/EntityCollectionView/EntityBoardCard.d.ts +26 -0
  14. package/dist/components/EntityCollectionView/EntityCard.d.ts +19 -0
  15. package/dist/components/EntityCollectionView/EntityCollectionBoardView.d.ts +20 -0
  16. package/dist/components/EntityCollectionView/EntityCollectionCardView.d.ts +31 -0
  17. package/dist/components/EntityCollectionView/EntityCollectionViewActions.d.ts +2 -2
  18. package/dist/components/EntityCollectionView/EntityCollectionViewStartActions.d.ts +7 -3
  19. package/dist/components/EntityCollectionView/FiltersDialog.d.ts +14 -0
  20. package/dist/components/EntityCollectionView/ViewModeToggle.d.ts +49 -0
  21. package/dist/components/EntityCollectionView/board_types.d.ts +105 -0
  22. package/dist/components/EntityCollectionView/useBoardDataController.d.ts +60 -0
  23. package/dist/components/SelectableTable/SelectableTable.d.ts +5 -1
  24. package/dist/components/SelectableTable/filters/DateTimeFilterField.d.ts +2 -1
  25. package/dist/components/VirtualTable/VirtualTableCell.d.ts +6 -0
  26. package/dist/components/VirtualTable/VirtualTableHeader.d.ts +2 -0
  27. package/dist/components/VirtualTable/VirtualTableHeaderRow.d.ts +1 -1
  28. package/dist/components/VirtualTable/VirtualTableProps.d.ts +11 -0
  29. package/dist/components/VirtualTable/fields/VirtualTableDateField.d.ts +1 -0
  30. package/dist/components/VirtualTable/types.d.ts +2 -0
  31. package/dist/components/index.d.ts +3 -0
  32. package/dist/contexts/index.d.ts +10 -0
  33. package/dist/core/DrawerNavigationGroup.d.ts +45 -0
  34. package/dist/core/index.d.ts +1 -0
  35. package/dist/form/validation.d.ts +3 -2
  36. package/dist/hooks/useBreadcrumbsController.d.ts +16 -0
  37. package/dist/hooks/useCollapsedGroups.d.ts +4 -1
  38. package/dist/index.es.js +5239 -1590
  39. package/dist/index.es.js.map +1 -1
  40. package/dist/index.umd.js +5233 -1585
  41. package/dist/index.umd.js.map +1 -1
  42. package/dist/preview/PropertyPreviewProps.d.ts +5 -0
  43. package/dist/preview/components/DatePreview.d.ts +13 -3
  44. package/dist/preview/components/ImagePreview.d.ts +5 -1
  45. package/dist/preview/components/StorageThumbnail.d.ts +2 -1
  46. package/dist/preview/components/UrlComponentPreview.d.ts +2 -1
  47. package/dist/preview/property_previews/ArrayOfStorageComponentsPreview.d.ts +1 -1
  48. package/dist/preview/property_previews/ArrayOfStringsPreview.d.ts +1 -1
  49. package/dist/preview/property_previews/SkeletonPropertyComponent.d.ts +1 -1
  50. package/dist/types/collections.d.ts +42 -2
  51. package/dist/types/datasource.d.ts +0 -1
  52. package/dist/types/plugins.d.ts +46 -1
  53. package/dist/types/properties.d.ts +259 -4
  54. package/dist/util/__tests__/conditions.test.d.ts +1 -0
  55. package/dist/util/__tests__/objects.test.d.ts +1 -0
  56. package/dist/util/conditions.d.ts +26 -0
  57. package/dist/util/entities.d.ts +1 -2
  58. package/dist/util/index.d.ts +2 -1
  59. package/dist/util/property_utils.d.ts +2 -1
  60. package/dist/util/resolutions.d.ts +1 -1
  61. package/package.json +10 -7
  62. package/src/app/Scaffold.tsx +14 -15
  63. package/src/components/AIIcon.tsx +39 -0
  64. package/src/components/ArrayContainer.tsx +1 -4
  65. package/src/components/ClearFilterSortButton.tsx +19 -16
  66. package/src/components/ConfirmationDialog.tsx +0 -2
  67. package/src/components/DeleteEntityDialog.tsx +2 -4
  68. package/src/components/EntityCollectionTable/EntityCollectionRowActions.tsx +74 -41
  69. package/src/components/EntityCollectionTable/EntityCollectionTable.tsx +130 -79
  70. package/src/components/EntityCollectionTable/EntityCollectionTableProps.tsx +121 -104
  71. package/src/components/EntityCollectionTable/PropertyTableCell.tsx +132 -103
  72. package/src/components/EntityCollectionTable/internal/CollectionTableToolbar.tsx +20 -42
  73. package/src/components/EntityCollectionTable/internal/EntityTableCell.tsx +90 -49
  74. package/src/components/EntityCollectionView/Board.tsx +324 -0
  75. package/src/components/EntityCollectionView/BoardColumn.tsx +158 -0
  76. package/src/components/EntityCollectionView/BoardColumnTitle.tsx +45 -0
  77. package/src/components/EntityCollectionView/BoardSortableList.tsx +172 -0
  78. package/src/components/EntityCollectionView/EntityBoardCard.tsx +212 -0
  79. package/src/components/EntityCollectionView/EntityCard.tsx +231 -0
  80. package/src/components/EntityCollectionView/EntityCollectionBoardView.tsx +713 -0
  81. package/src/components/EntityCollectionView/EntityCollectionCardView.tsx +244 -0
  82. package/src/components/EntityCollectionView/EntityCollectionView.tsx +485 -203
  83. package/src/components/EntityCollectionView/EntityCollectionViewActions.tsx +31 -19
  84. package/src/components/EntityCollectionView/EntityCollectionViewStartActions.tsx +84 -15
  85. package/src/components/EntityCollectionView/FiltersDialog.tsx +249 -0
  86. package/src/components/EntityCollectionView/ViewModeToggle.tsx +202 -0
  87. package/src/components/EntityCollectionView/board_types.ts +113 -0
  88. package/src/components/EntityCollectionView/useBoardDataController.tsx +490 -0
  89. package/src/components/ErrorTooltip.tsx +2 -1
  90. package/src/components/HomePage/DefaultHomePage.tsx +47 -10
  91. package/src/components/HomePage/HomePageDnD.tsx +56 -41
  92. package/src/components/HomePage/NavigationCard.tsx +20 -18
  93. package/src/components/HomePage/NavigationGroup.tsx +17 -16
  94. package/src/components/HomePage/RenameGroupDialog.tsx +0 -2
  95. package/src/components/HomePage/SmallNavigationCard.tsx +10 -9
  96. package/src/components/ReferenceTable/ReferenceSelectionTable.tsx +3 -10
  97. package/src/components/ReferenceWidget.tsx +2 -4
  98. package/src/components/SelectableTable/SelectableTable.tsx +75 -67
  99. package/src/components/SelectableTable/filters/BooleanFilterField.tsx +7 -6
  100. package/src/components/SelectableTable/filters/DateTimeFilterField.tsx +39 -40
  101. package/src/components/SelectableTable/filters/ReferenceFilterField.tsx +38 -38
  102. package/src/components/SelectableTable/filters/StringNumberFilterField.tsx +49 -58
  103. package/src/components/UnsavedChangesDialog.tsx +0 -2
  104. package/src/components/UserDisplay.tsx +4 -4
  105. package/src/components/VirtualTable/VirtualTable.tsx +170 -19
  106. package/src/components/VirtualTable/VirtualTableCell.tsx +18 -2
  107. package/src/components/VirtualTable/VirtualTableHeader.tsx +20 -11
  108. package/src/components/VirtualTable/VirtualTableHeaderRow.tsx +158 -42
  109. package/src/components/VirtualTable/VirtualTableProps.tsx +14 -1
  110. package/src/components/VirtualTable/VirtualTableRow.tsx +1 -1
  111. package/src/components/VirtualTable/fields/VirtualTableDateField.tsx +3 -0
  112. package/src/components/VirtualTable/fields/VirtualTableSelect.tsx +17 -4
  113. package/src/components/VirtualTable/types.tsx +2 -0
  114. package/src/components/common/useColumnsIds.tsx +95 -3
  115. package/src/components/index.tsx +4 -0
  116. package/src/contexts/BreacrumbsContext.tsx +15 -8
  117. package/src/contexts/index.ts +10 -0
  118. package/src/core/DefaultAppBar.tsx +39 -26
  119. package/src/core/DefaultDrawer.tsx +42 -56
  120. package/src/core/DrawerNavigationGroup.tsx +118 -0
  121. package/src/core/DrawerNavigationItem.tsx +4 -3
  122. package/src/core/EntityEditView.tsx +41 -43
  123. package/src/core/SideDialogs.tsx +4 -2
  124. package/src/core/index.tsx +1 -0
  125. package/src/form/PropertyFieldBinding.tsx +58 -43
  126. package/src/form/components/StorageItemPreview.tsx +2 -1
  127. package/src/form/field_bindings/ArrayOfReferencesFieldBinding.tsx +0 -1
  128. package/src/form/field_bindings/DateTimeFieldBinding.tsx +17 -16
  129. package/src/form/field_bindings/KeyValueFieldBinding.tsx +0 -1
  130. package/src/form/field_bindings/MapFieldBinding.tsx +69 -67
  131. package/src/form/field_bindings/MarkdownEditorFieldBinding.tsx +21 -17
  132. package/src/form/field_bindings/TextFieldBinding.tsx +71 -35
  133. package/src/form/validation.ts +245 -160
  134. package/src/hooks/useBreadcrumbsController.tsx +18 -0
  135. package/src/hooks/useBuildNavigationController.tsx +42 -19
  136. package/src/hooks/useCollapsedGroups.ts +12 -4
  137. package/src/internal/useBuildDataSource.ts +69 -34
  138. package/src/internal/useBuildSideDialogsController.tsx +11 -8
  139. package/src/internal/useBuildSideEntityController.tsx +2 -4
  140. package/src/internal/useRestoreScroll.tsx +26 -14
  141. package/src/preview/PropertyPreview.tsx +40 -32
  142. package/src/preview/PropertyPreviewProps.tsx +6 -0
  143. package/src/preview/components/DatePreview.tsx +72 -4
  144. package/src/preview/components/EmptyValue.tsx +1 -1
  145. package/src/preview/components/ImagePreview.tsx +37 -21
  146. package/src/preview/components/StorageThumbnail.tsx +16 -12
  147. package/src/preview/components/UrlComponentPreview.tsx +28 -25
  148. package/src/preview/property_previews/ArrayOfStorageComponentsPreview.tsx +9 -7
  149. package/src/preview/property_previews/ArrayOfStringsPreview.tsx +11 -9
  150. package/src/preview/property_previews/ArrayPropertyPreview.tsx +26 -24
  151. package/src/preview/property_previews/SkeletonPropertyComponent.tsx +61 -56
  152. package/src/routes/CustomCMSRoute.tsx +1 -0
  153. package/src/routes/FireCMSRoute.tsx +26 -13
  154. package/src/types/collections.ts +48 -3
  155. package/src/types/datasource.ts +54 -56
  156. package/src/types/plugins.tsx +51 -1
  157. package/src/types/properties.ts +347 -27
  158. package/src/util/__tests__/conditions.test.ts +506 -0
  159. package/src/util/__tests__/objects.test.ts +196 -0
  160. package/src/util/callbacks.ts +6 -3
  161. package/src/util/collections.ts +51 -6
  162. package/src/util/conditions.ts +339 -0
  163. package/src/util/entities.ts +28 -29
  164. package/src/util/entity_cache.ts +2 -1
  165. package/src/util/index.ts +2 -1
  166. package/src/util/objects.ts +31 -13
  167. package/src/util/{references.ts → previews.ts} +14 -0
  168. package/src/util/property_utils.tsx +36 -10
  169. package/src/util/resolutions.ts +57 -55
  170. /package/dist/util/{references.d.ts → previews.d.ts} +0 -0
@@ -4,6 +4,7 @@ import { FieldProps, MapProperty, Properties, PropertyFieldBindingProps, Resolve
4
4
  import { ErrorBoundary } from "../../components";
5
5
  import { getIconForProperty, isHidden, isReadOnly, pick } from "../../util";
6
6
  import { FieldHelperText, LabelWithIconAndTooltip } from "../components";
7
+ import { FormEntry } from "../components/FormEntry";
7
8
  import { PropertyFieldBinding } from "../PropertyFieldBinding";
8
9
  import { cls, ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/ui";
9
10
 
@@ -15,19 +16,19 @@ import { cls, ExpandablePanel, InputLabel, Select, SelectItem } from "@firecms/u
15
16
  * @group Form fields
16
17
  */
17
18
  export function MapFieldBinding({
18
- propertyKey,
19
- value,
20
- showError,
21
- error,
22
- disabled,
23
- property,
24
- partOfArray,
25
- minimalistView: minimalistViewProp,
26
- includeDescription,
27
- autoFocus,
28
- context,
29
- onPropertyChange
30
- }: FieldProps<Record<string, any>>) {
19
+ propertyKey,
20
+ value,
21
+ showError,
22
+ error,
23
+ disabled,
24
+ property,
25
+ partOfArray,
26
+ minimalistView: minimalistViewProp,
27
+ includeDescription,
28
+ autoFocus,
29
+ context,
30
+ onPropertyChange
31
+ }: FieldProps<Record<string, any>>) {
31
32
 
32
33
  const pickOnlySomeKeys = property.pickOnlySomeKeys || false;
33
34
  const expanded = property.expanded === undefined ? true : property.expanded;
@@ -52,75 +53,76 @@ export function MapFieldBinding({
52
53
  }
53
54
 
54
55
  const mapFormView = <>
55
- <div
56
- className={cls("py-1 flex flex-col space-y-2", minimalistView && property.widthPercentage !== undefined ? "mt-8" : undefined)}>
57
- {Object.entries(mapProperties)
58
- .filter(([_, property]) => !isHidden(property))
59
- .map(([entryKey, childProperty], index) => {
60
- const thisDisabled = isReadOnly(childProperty) || Boolean(childProperty.disabled);
61
- const fieldBindingProps: PropertyFieldBindingProps<any> = {
62
- propertyKey: `${propertyKey}.${entryKey}`,
63
- disabled: disabled || thisDisabled,
64
- property: childProperty,
65
- includeDescription,
66
- context,
67
- partOfArray: false,
68
- minimalistView: false,
69
- autoFocus: autoFocus && index === 0,
70
- onPropertyChange: function (updatedProperty) {
71
- onPropertyChange?.({
72
- properties: {
73
- [entryKey]: updatedProperty
74
- }
75
- } as Partial<MapProperty>);
56
+ <div
57
+ className={cls("py-1 flex flex-wrap gap-x-4 w-full space-y-2", minimalistView && property.widthPercentage !== undefined ? "mt-8" : undefined)}>
58
+ {Object.entries(mapProperties)
59
+ .filter(([_, property]) => !isHidden(property))
60
+ .map(([entryKey, childProperty], index) => {
61
+ const thisDisabled = isReadOnly(childProperty) || Boolean(childProperty.disabled);
62
+ const fieldBindingProps: PropertyFieldBindingProps<any> = {
63
+ propertyKey: `${propertyKey}.${entryKey}`,
64
+ disabled: disabled || thisDisabled,
65
+ property: childProperty,
66
+ includeDescription,
67
+ context,
68
+ partOfArray: false,
69
+ minimalistView: false,
70
+ autoFocus: autoFocus && index === 0,
71
+ onPropertyChange: function (updatedProperty) {
72
+ onPropertyChange?.({
73
+ properties: {
74
+ [entryKey]: updatedProperty
76
75
  }
77
- };
78
-
79
- return (
80
- <div key={`map-${propertyKey}-${index}`} className={"relative"}>
81
- <ErrorBoundary>
82
- <PropertyFieldBinding
83
- {...fieldBindingProps}/>
84
- </ErrorBoundary>
85
- </div>
86
- ) ;
76
+ } as Partial<MapProperty>);
87
77
  }
88
- )
78
+ };
79
+
80
+ const widthPercentage = childProperty.widthPercentage ?? 100;
81
+ return (
82
+ <FormEntry propertyKey={`${propertyKey}.${entryKey}`}
83
+ widthPercentage={widthPercentage}
84
+ key={`map-${propertyKey}-${index}`}>
85
+ <PropertyFieldBinding
86
+ {...fieldBindingProps} />
87
+ </FormEntry>
88
+ );
89
89
  }
90
- </div>
90
+ )
91
+ }
92
+ </div>
91
93
 
92
- {/*{pickOnlySomeKeys && buildPickKeysSelect(disabled, property.properties, setValue, value)}*/}
94
+ {/*{pickOnlySomeKeys && buildPickKeysSelect(disabled, property.properties, setValue, value)}*/}
93
95
 
94
- </>
95
- ;
96
+ </>
97
+ ;
96
98
 
97
99
  return (
98
100
  <ErrorBoundary>
99
101
 
100
102
  {!minimalistView && <ExpandablePanel initiallyExpanded={expanded}
101
- onExpandedChange={(expanded) => {
102
- onPropertyChange?.({
103
- expanded
104
- });
105
- }}
106
- className={property.widthPercentage !== undefined ? "mt-8" : undefined}
107
- innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2 bg-white dark:bg-surface-900"}
108
- title={<LabelWithIconAndTooltip
109
- propertyKey={propertyKey}
110
- icon={getIconForProperty(property, "small")}
111
- required={property.validation?.required}
112
- title={property.name}
113
- className={"text-text-secondary dark:text-text-secondary-dark"}/>}>
103
+ onExpandedChange={(expanded) => {
104
+ onPropertyChange?.({
105
+ expanded
106
+ });
107
+ }}
108
+ className={property.widthPercentage !== undefined ? "mt-8" : undefined}
109
+ innerClassName={"px-2 md:px-4 pb-2 md:pb-4 pt-1 md:pt-2 bg-white dark:bg-surface-900"}
110
+ title={<LabelWithIconAndTooltip
111
+ propertyKey={propertyKey}
112
+ icon={getIconForProperty(property, "small")}
113
+ required={property.validation?.required}
114
+ title={property.name}
115
+ className={"text-text-secondary dark:text-text-secondary-dark"} />}>
114
116
  {mapFormView}
115
117
  </ExpandablePanel>}
116
118
 
117
119
  {minimalistView && mapFormView}
118
120
 
119
121
  <FieldHelperText includeDescription={includeDescription}
120
- showError={showError ?? false}
121
- error={error && !partOfArray ? (typeof error === "string" ? error : "A property of this map has an error") : undefined}
122
- disabled={disabled}
123
- property={property}/>
122
+ showError={showError ?? false}
123
+ error={error && !partOfArray ? (typeof error === "string" ? error : "A property of this map has an error") : undefined}
124
+ disabled={disabled}
125
+ property={property} />
124
126
 
125
127
  </ErrorBoundary>
126
128
  );
@@ -150,7 +152,7 @@ const buildPickKeysSelect = (disabled: boolean, properties: Properties, setValue
150
152
  onValueChange={handleAddProperty}
151
153
  renderValue={(key) => (properties as Properties)[key].name || key}>
152
154
  {keys.map((key) => <SelectItem key={key}
153
- value={key}>{(properties as Properties)[key].name || key}</SelectItem>)}
155
+ value={key}>{(properties as Properties)[key].name || key}</SelectItem>)}
154
156
  </Select>
155
157
  </div>;
156
158
  };
@@ -21,19 +21,19 @@ interface MarkdownEditorFieldProps {
21
21
  }
22
22
 
23
23
  export function MarkdownEditorFieldBinding({
24
- property,
25
- propertyKey,
26
- value,
27
- setValue,
28
- includeDescription,
29
- showError,
30
- error,
31
- minimalistView,
32
- disabled: disabledProp,
33
- isSubmitting,
34
- context,
35
- customProps,
36
- }: FieldProps<string, MarkdownEditorFieldProps>) {
24
+ property,
25
+ propertyKey,
26
+ value,
27
+ setValue,
28
+ includeDescription,
29
+ showError,
30
+ error,
31
+ minimalistView,
32
+ disabled: disabledProp,
33
+ isSubmitting,
34
+ context,
35
+ customProps,
36
+ }: FieldProps<string, MarkdownEditorFieldProps>) {
37
37
 
38
38
  const authController = useAuthController();
39
39
  const disabled = disabledProp || isSubmitting;
@@ -109,12 +109,16 @@ export function MarkdownEditorFieldBinding({
109
109
  }) ?? "/";
110
110
  }, [entityId, entityValues, path, property, propertyKey, storage]);
111
111
 
112
+ // Extract markdown config from property - can be boolean or object
113
+ const markdownConfig = typeof property.markdown === 'object' ? property.markdown : undefined;
114
+
112
115
  const editor = <FireCMSEditor
113
116
  content={value}
114
117
  onMarkdownContentChange={onContentChange}
115
118
  version={context.formex.version + fieldVersion}
116
119
  highlight={highlight}
117
120
  disabled={disabled}
121
+ markdownConfig={markdownConfig}
118
122
  handleImageUpload={async (file: File) => {
119
123
  const storagePath = storagePathBuilder(file);
120
124
  const fileName = await fileNameBuilder(file);
@@ -143,15 +147,15 @@ export function MarkdownEditorFieldBinding({
143
147
  icon={getIconForProperty(property, "small")}
144
148
  required={property.validation?.required}
145
149
  title={property.name}
146
- className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"}/>
150
+ className={"h-8 text-text-secondary dark:text-text-secondary-dark ml-3.5"} />
147
151
  <div
148
152
  className={cls("rounded-md", fieldBackgroundMixin, disabled ? fieldBackgroundDisabledMixin : fieldBackgroundHoverMixin)}>
149
153
  {editor}
150
154
  </div>
151
155
  <FieldHelperText includeDescription={includeDescription}
152
- showError={showError}
153
- error={error}
154
- property={property}/>
156
+ showError={showError}
157
+ error={error}
158
+ property={property} />
155
159
  </>
156
160
 
157
161
  );
@@ -1,6 +1,6 @@
1
1
  import React, { useCallback } from "react";
2
2
 
3
- import { CloseIcon, Collapse, IconButton, TextField } from "@firecms/ui";
3
+ import { CloseIcon, Collapse, IconButton, TextField, TextareaAutosize, fieldBackgroundHoverMixin, fieldBackgroundMixin, cls } from "@firecms/ui";
4
4
  import { FieldProps, PreviewType } from "../../types";
5
5
  import { FieldHelperText, LabelWithIcon } from "../components";
6
6
  import { getIconForProperty } from "../../util";
@@ -19,17 +19,17 @@ interface TextFieldBindingProps<T extends string | number> extends FieldProps<T>
19
19
  * @group Form fields
20
20
  */
21
21
  export function TextFieldBinding<T extends string | number>({
22
- propertyKey,
23
- value,
24
- setValue,
25
- error,
26
- showError,
27
- disabled,
28
- autoFocus,
29
- property,
30
- includeDescription,
31
- size = "large"
32
- }: TextFieldBindingProps<T>) {
22
+ propertyKey,
23
+ value,
24
+ setValue,
25
+ error,
26
+ showError,
27
+ disabled,
28
+ autoFocus,
29
+ property,
30
+ includeDescription,
31
+ size = "large"
32
+ }: TextFieldBindingProps<T>) {
33
33
 
34
34
  let multiline: boolean | undefined;
35
35
  let url: boolean | PreviewType | undefined;
@@ -68,46 +68,82 @@ export function TextFieldBinding<T extends string | number>({
68
68
  const isMultiline = Boolean(multiline);
69
69
 
70
70
  const inputType = property.dataType === "number" ? "number" : undefined;
71
+
72
+ const label = (
73
+ <LabelWithIcon
74
+ icon={getIconForProperty(property, "small")}
75
+ required={property.validation?.required}
76
+ title={property.name} />
77
+ );
78
+
71
79
  return (<>
72
- <PropertyIdCopyTooltip propertyKey={propertyKey}>
80
+ <PropertyIdCopyTooltip propertyKey={propertyKey}>
81
+ {isMultiline ? (
82
+ <div className={cls(
83
+ "rounded-md relative max-w-full min-h-[64px]",
84
+ fieldBackgroundMixin,
85
+ fieldBackgroundHoverMixin,
86
+ showError && error ? "border border-red-500 dark:border-red-600" : "",
87
+ property.widthPercentage !== undefined ? "mt-8" : undefined
88
+ )}>
89
+ <div className="pointer-events-none absolute top-1 text-xs font-medium px-3 text-text-secondary dark:text-text-secondary-dark">
90
+ {label}
91
+ </div>
92
+ <TextareaAutosize
93
+ value={value ?? ""}
94
+ onChange={onChange}
95
+ autoFocus={autoFocus}
96
+ disabled={disabled}
97
+ className={cls(
98
+ "rounded-md resize-none w-full outline-none p-[32px] text-base bg-transparent min-h-[64px] px-3 pt-8",
99
+ disabled && "outline-none opacity-50 text-surface-accent-600 dark:text-surface-accent-500",
100
+ showError && error ? "text-red-500 dark:text-red-600" : ""
101
+ )}
102
+ />
103
+ {property.clearable && (
104
+ <div className="flex flex-row justify-center items-center absolute h-full right-0 top-0 mr-4">
105
+ <IconButton onClick={handleClearClick}>
106
+ <CloseIcon />
107
+ </IconButton>
108
+ </div>
109
+ )}
110
+ </div>
111
+ ) : (
73
112
  <TextField
74
113
  size={size}
75
114
  value={value}
76
115
  onChange={onChange}
77
116
  autoFocus={autoFocus}
78
117
  className={property.widthPercentage !== undefined ? "mt-8" : undefined}
79
- label={<LabelWithIcon
80
- icon={getIconForProperty(property, "small")}
81
- required={property.validation?.required}
82
- title={property.name}/>}
118
+ label={label}
83
119
  type={inputType}
84
- multiline={isMultiline}
85
120
  disabled={disabled}
86
121
  endAdornment={
87
122
  property.clearable && <IconButton
88
123
  onClick={handleClearClick}>
89
- <CloseIcon/>
124
+ <CloseIcon />
90
125
  </IconButton>
91
126
  }
92
127
  error={showError ? error : undefined}
93
- inputClassName={error ? "text-red-500 dark:text-red-600" : ""}/>
94
- </PropertyIdCopyTooltip>
95
- <FieldHelperText includeDescription={includeDescription}
96
- showError={showError}
97
- error={error}
98
- disabled={disabled}
99
- property={property}/>
128
+ inputClassName={error ? "text-red-500 dark:text-red-600" : ""} />
129
+ )}
130
+ </PropertyIdCopyTooltip>
131
+ <FieldHelperText includeDescription={includeDescription}
132
+ showError={showError}
133
+ error={error}
134
+ disabled={disabled}
135
+ property={property} />
100
136
 
101
- {url && <Collapse
102
- className="mt-1 ml-1"
103
- in={Boolean(value)}>
104
- <PropertyPreview
105
- value={value}
106
- property={property}
107
- size={size}/>
108
- </Collapse>}
137
+ {url && <Collapse
138
+ className="mt-1 ml-1"
139
+ in={Boolean(value)}>
140
+ <PropertyPreview
141
+ value={value}
142
+ property={property}
143
+ size={size} />
144
+ </Collapse>}
109
145
 
110
- </>
146
+ </>
111
147
  );
112
148
 
113
149
  }