@object-ui/fields 3.1.5 → 3.3.1

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 (183) hide show
  1. package/CHANGELOG.md +141 -0
  2. package/README.md +24 -0
  3. package/dist/LookupField-CiIjeL_i.cjs +1 -0
  4. package/dist/LookupField-De-GqsfT.js +903 -0
  5. package/dist/chunk-D-qHiVGv.cjs +1 -0
  6. package/dist/index.cjs +3 -3
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.js +704 -690
  9. package/dist/packages/fields/src/widgets/useFieldTranslation.d.ts +5 -0
  10. package/dist/rolldown-runtime-CAFD8bLK.js +11 -0
  11. package/dist/useFieldTranslation-BYPwtuNZ.cjs +1 -0
  12. package/dist/useFieldTranslation-Bv3oUVgb.js +9 -0
  13. package/package.json +35 -9
  14. package/src/__tests__/cell-renderers.test.tsx +39 -18
  15. package/src/__tests__/datetime-cell.test.tsx +2 -2
  16. package/src/__tests__/datetime-timezone.test.tsx +9 -9
  17. package/src/__tests__/validation-feedback.test.tsx +8 -8
  18. package/src/datetime-widgets.test.tsx +1 -1
  19. package/src/index.tsx +54 -28
  20. package/src/record-picker.test.tsx +30 -23
  21. package/src/remaining-widgets.test.tsx +1 -1
  22. package/src/widgets/AddressField.tsx +4 -3
  23. package/src/widgets/AutoNumberField.tsx +5 -3
  24. package/src/widgets/CodeField.tsx +2 -2
  25. package/src/widgets/ColorField.tsx +2 -2
  26. package/src/widgets/CurrencyField.tsx +2 -2
  27. package/src/widgets/DateField.tsx +2 -2
  28. package/src/widgets/DateTimeField.tsx +2 -2
  29. package/src/widgets/EmailField.tsx +2 -2
  30. package/src/widgets/FileField.tsx +2 -2
  31. package/src/widgets/FormulaField.tsx +14 -12
  32. package/src/widgets/GeolocationField.tsx +4 -3
  33. package/src/widgets/GridField.tsx +3 -3
  34. package/src/widgets/ImageField.tsx +2 -2
  35. package/src/widgets/LocationField.tsx +2 -2
  36. package/src/widgets/LookupField.tsx +8 -8
  37. package/src/widgets/NumberField.tsx +2 -2
  38. package/src/widgets/ObjectField.tsx +2 -2
  39. package/src/widgets/PercentField.tsx +2 -2
  40. package/src/widgets/PhoneField.tsx +2 -2
  41. package/src/widgets/QRCodeField.tsx +2 -2
  42. package/src/widgets/RichTextField.tsx +2 -2
  43. package/src/widgets/SelectField.tsx +12 -8
  44. package/src/widgets/SummaryField.tsx +12 -10
  45. package/src/widgets/TextAreaField.tsx +2 -2
  46. package/src/widgets/TextField.tsx +2 -2
  47. package/src/widgets/TimeField.tsx +2 -2
  48. package/src/widgets/UrlField.tsx +2 -2
  49. package/src/widgets/UserField.tsx +2 -2
  50. package/src/widgets/VectorField.tsx +2 -1
  51. package/src/widgets/useFieldTranslation.ts +17 -0
  52. package/dist/AddressField-B6fPb2Fs.js +0 -3
  53. package/dist/AddressField-Ctsxkj35.cjs +0 -1
  54. package/dist/AutoNumberField-DXIYJfiB.js +0 -3
  55. package/dist/AutoNumberField-f76XU1bR.cjs +0 -1
  56. package/dist/AvatarField-BHpex3Wa.js +0 -3
  57. package/dist/AvatarField-CXOdYavl.cjs +0 -1
  58. package/dist/BooleanField-Bs0urhsx.js +0 -3
  59. package/dist/BooleanField-DeexI_O2.cjs +0 -1
  60. package/dist/CodeField-DDOMH8E8.cjs +0 -1
  61. package/dist/CodeField-tRACqngO.js +0 -3
  62. package/dist/ColorField-Bar6bOJw.js +0 -3
  63. package/dist/ColorField-CM9CxZ9h.cjs +0 -1
  64. package/dist/CurrencyField-CezTX_rA.cjs +0 -1
  65. package/dist/CurrencyField-D4VwXI9k.js +0 -3
  66. package/dist/DateField-DDUllj7w.cjs +0 -1
  67. package/dist/DateField-DjGiK6BH.js +0 -3
  68. package/dist/DateTimeField-DBh-dYdR.js +0 -3
  69. package/dist/DateTimeField-DDqgVN3b.cjs +0 -1
  70. package/dist/EmailField-B-3nY8Pr.cjs +0 -1
  71. package/dist/EmailField-Cp6yJlpH.js +0 -3
  72. package/dist/FileField-C1bcL7tu.cjs +0 -1
  73. package/dist/FileField-DUgt6ai3.js +0 -3
  74. package/dist/FormulaField-BLV1KgkQ.js +0 -3
  75. package/dist/FormulaField-CsbQIZ7S.cjs +0 -1
  76. package/dist/GeolocationField-BbIRH51u.js +0 -3
  77. package/dist/GeolocationField-UFu9VR-x.cjs +0 -1
  78. package/dist/GridField-2m74haE0.cjs +0 -1
  79. package/dist/GridField-O3Jd1NuJ.js +0 -3
  80. package/dist/ImageField-Cna7g6KL.cjs +0 -1
  81. package/dist/ImageField-rc1Nzcvb.js +0 -3
  82. package/dist/LocationField-DpRe9QlH.cjs +0 -1
  83. package/dist/LocationField-QZPPYo0J.js +0 -3
  84. package/dist/LookupField-BX4sK8NG.js +0 -904
  85. package/dist/LookupField-C9rPrHi_.cjs +0 -1
  86. package/dist/MasterDetailField-BXncIT1s.js +0 -3
  87. package/dist/MasterDetailField-TNP2825Z.cjs +0 -1
  88. package/dist/NumberField-DCHTzmDG.js +0 -3
  89. package/dist/NumberField-SqRwbcY8.cjs +0 -1
  90. package/dist/ObjectField-BEUHpn_X.js +0 -3
  91. package/dist/ObjectField-BWZwaFIG.cjs +0 -1
  92. package/dist/PasswordField-BZ_OeQyw.js +0 -3
  93. package/dist/PasswordField-kLp-ZyPm.cjs +0 -1
  94. package/dist/PercentField-B2t2knlc.js +0 -3
  95. package/dist/PercentField-BzhD6tQm.cjs +0 -1
  96. package/dist/PhoneField-CirvuysP.cjs +0 -1
  97. package/dist/PhoneField-CkrCFmcO.js +0 -3
  98. package/dist/QRCodeField-C4OOLCbE.cjs +0 -1
  99. package/dist/QRCodeField-CQoGow8y.js +0 -3
  100. package/dist/RatingField-CZG8SgQ8.cjs +0 -1
  101. package/dist/RatingField-DecDJkou.js +0 -3
  102. package/dist/RichTextField-Bog2i4NN.cjs +0 -1
  103. package/dist/RichTextField-b-8QbNCJ.js +0 -3
  104. package/dist/SelectField-CAa6c0cB.cjs +0 -1
  105. package/dist/SelectField-DMy5IxRc.js +0 -3
  106. package/dist/SignatureField-BvTPE7Dn.js +0 -3
  107. package/dist/SignatureField-jsb-0AYp.cjs +0 -1
  108. package/dist/SliderField-B7WvKFv7.js +0 -3
  109. package/dist/SliderField-DRjEJSxK.cjs +0 -1
  110. package/dist/SummaryField-DA16Edq3.cjs +0 -1
  111. package/dist/SummaryField-DVSVfKmY.js +0 -3
  112. package/dist/TextAreaField--ut87UiB.js +0 -3
  113. package/dist/TextAreaField-Cxp3DFC6.cjs +0 -1
  114. package/dist/TextField-CkEDGbkQ.js +0 -3
  115. package/dist/TextField-aLAzBaLZ.cjs +0 -1
  116. package/dist/TimeField-D0lF0y_I.cjs +0 -1
  117. package/dist/TimeField-DA_S6lQV.js +0 -3
  118. package/dist/UrlField-D0ugmD3f.cjs +0 -1
  119. package/dist/UrlField-DCnXHR1A.js +0 -3
  120. package/dist/UserField-DGlorzyG.cjs +0 -1
  121. package/dist/UserField-V0GmvyGV.js +0 -3
  122. package/dist/VectorField-BSD85ntU.cjs +0 -1
  123. package/dist/VectorField-CVi5yrrc.js +0 -3
  124. package/dist/jsx-runtime-DHCF5ANT.cjs +0 -6
  125. package/dist/jsx-runtime-MxADXuRH.js +0 -189
  126. /package/dist/{fields → packages/fields}/src/__tests__/boolean-checkbox.test.d.ts +0 -0
  127. /package/dist/{fields → packages/fields}/src/__tests__/cell-renderers.test.d.ts +0 -0
  128. /package/dist/{fields → packages/fields}/src/__tests__/datetime-cell.test.d.ts +0 -0
  129. /package/dist/{fields → packages/fields}/src/__tests__/datetime-timezone.test.d.ts +0 -0
  130. /package/dist/{fields → packages/fields}/src/__tests__/extreme-inputs.test.d.ts +0 -0
  131. /package/dist/{fields → packages/fields}/src/__tests__/form-variants.test.d.ts +0 -0
  132. /package/dist/{fields → packages/fields}/src/__tests__/validation-feedback.test.d.ts +0 -0
  133. /package/dist/{fields → packages/fields}/src/complex-widgets.test.d.ts +0 -0
  134. /package/dist/{fields → packages/fields}/src/datetime-widgets.test.d.ts +0 -0
  135. /package/dist/{fields → packages/fields}/src/fields-edge-cases.stories.d.ts +0 -0
  136. /package/dist/{fields → packages/fields}/src/fields.stories.d.ts +0 -0
  137. /package/dist/{fields → packages/fields}/src/index.d.ts +0 -0
  138. /package/dist/{fields → packages/fields}/src/new-widgets.test.d.ts +0 -0
  139. /package/dist/{fields → packages/fields}/src/record-picker-dialog.stories.d.ts +0 -0
  140. /package/dist/{fields → packages/fields}/src/record-picker.test.d.ts +0 -0
  141. /package/dist/{fields → packages/fields}/src/remaining-widgets.test.d.ts +0 -0
  142. /package/dist/{fields → packages/fields}/src/standard-widgets.test.d.ts +0 -0
  143. /package/dist/{fields → packages/fields}/src/text-rich-widgets.test.d.ts +0 -0
  144. /package/dist/{fields → packages/fields}/src/visual-widgets.test.d.ts +0 -0
  145. /package/dist/{fields → packages/fields}/src/widgets/AddressField.d.ts +0 -0
  146. /package/dist/{fields → packages/fields}/src/widgets/AutoNumberField.d.ts +0 -0
  147. /package/dist/{fields → packages/fields}/src/widgets/AvatarField.d.ts +0 -0
  148. /package/dist/{fields → packages/fields}/src/widgets/BooleanField.d.ts +0 -0
  149. /package/dist/{fields → packages/fields}/src/widgets/CodeField.d.ts +0 -0
  150. /package/dist/{fields → packages/fields}/src/widgets/ColorField.d.ts +0 -0
  151. /package/dist/{fields → packages/fields}/src/widgets/CurrencyField.d.ts +0 -0
  152. /package/dist/{fields → packages/fields}/src/widgets/DateField.d.ts +0 -0
  153. /package/dist/{fields → packages/fields}/src/widgets/DateTimeField.d.ts +0 -0
  154. /package/dist/{fields → packages/fields}/src/widgets/EmailField.d.ts +0 -0
  155. /package/dist/{fields → packages/fields}/src/widgets/FileField.d.ts +0 -0
  156. /package/dist/{fields → packages/fields}/src/widgets/FormulaField.d.ts +0 -0
  157. /package/dist/{fields → packages/fields}/src/widgets/GeolocationField.d.ts +0 -0
  158. /package/dist/{fields → packages/fields}/src/widgets/GridField.d.ts +0 -0
  159. /package/dist/{fields → packages/fields}/src/widgets/ImageField.d.ts +0 -0
  160. /package/dist/{fields → packages/fields}/src/widgets/LocationField.d.ts +0 -0
  161. /package/dist/{fields → packages/fields}/src/widgets/LookupField.d.ts +0 -0
  162. /package/dist/{fields → packages/fields}/src/widgets/MasterDetailField.d.ts +0 -0
  163. /package/dist/{fields → packages/fields}/src/widgets/NumberField.d.ts +0 -0
  164. /package/dist/{fields → packages/fields}/src/widgets/ObjectField.d.ts +0 -0
  165. /package/dist/{fields → packages/fields}/src/widgets/PasswordField.d.ts +0 -0
  166. /package/dist/{fields → packages/fields}/src/widgets/PercentField.d.ts +0 -0
  167. /package/dist/{fields → packages/fields}/src/widgets/PhoneField.d.ts +0 -0
  168. /package/dist/{fields → packages/fields}/src/widgets/QRCodeField.d.ts +0 -0
  169. /package/dist/{fields → packages/fields}/src/widgets/RatingField.d.ts +0 -0
  170. /package/dist/{fields → packages/fields}/src/widgets/RecordPickerDialog.d.ts +0 -0
  171. /package/dist/{fields → packages/fields}/src/widgets/RichTextField.d.ts +0 -0
  172. /package/dist/{fields → packages/fields}/src/widgets/SelectField.d.ts +0 -0
  173. /package/dist/{fields → packages/fields}/src/widgets/SignatureField.d.ts +0 -0
  174. /package/dist/{fields → packages/fields}/src/widgets/SliderField.d.ts +0 -0
  175. /package/dist/{fields → packages/fields}/src/widgets/SummaryField.d.ts +0 -0
  176. /package/dist/{fields → packages/fields}/src/widgets/TextAreaField.d.ts +0 -0
  177. /package/dist/{fields → packages/fields}/src/widgets/TextField.d.ts +0 -0
  178. /package/dist/{fields → packages/fields}/src/widgets/TimeField.d.ts +0 -0
  179. /package/dist/{fields → packages/fields}/src/widgets/UrlField.d.ts +0 -0
  180. /package/dist/{fields → packages/fields}/src/widgets/UserField.d.ts +0 -0
  181. /package/dist/{fields → packages/fields}/src/widgets/VectorField.d.ts +0 -0
  182. /package/dist/{fields → packages/fields}/src/widgets/_cell-renderer-bridge.d.ts +0 -0
  183. /package/dist/{fields → packages/fields}/src/widgets/types.d.ts +0 -0
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { Input } from '@object-ui/components';
2
+ import { Input, EmptyValue } from '@object-ui/components';
3
3
  import { FieldWidgetProps } from './types';
4
4
 
5
5
  /**
@@ -8,7 +8,7 @@ import { FieldWidgetProps } from './types';
8
8
  */
9
9
  export function TimeField({ value, onChange, field, readonly, ...props }: FieldWidgetProps<string>) {
10
10
  if (readonly) {
11
- return <span className="text-sm">{value || '-'}</span>;
11
+ return <span className="text-sm">{value || <EmptyValue />}</span>;
12
12
  }
13
13
 
14
14
  // Filter out non-DOM props
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { Input } from '@object-ui/components';
2
+ import { Input, EmptyValue } from '@object-ui/components';
3
3
  import { FieldWidgetProps } from './types';
4
4
 
5
5
  /**
@@ -9,7 +9,7 @@ import { FieldWidgetProps } from './types';
9
9
  export function UrlField({ value, onChange, field, readonly, errorMessage, ...props }: FieldWidgetProps<string>) {
10
10
  const config = field || (props as any).schema;
11
11
  if (readonly) {
12
- if (!value) return <span className="text-sm">-</span>;
12
+ if (!value) return <EmptyValue />;
13
13
 
14
14
  // Validate URL to prevent javascript: or data: URLs
15
15
  const isValidUrl = value.startsWith('http://') || value.startsWith('https://');
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { Avatar, AvatarFallback, Badge } from '@object-ui/components';
2
+ import { Avatar, AvatarFallback, Badge, EmptyValue } from '@object-ui/components';
3
3
  import { X } from 'lucide-react';
4
4
  import { FieldWidgetProps } from './types';
5
5
 
@@ -12,7 +12,7 @@ export function UserField({ value, onChange, field, readonly, ...props }: FieldW
12
12
  const multiple = userField?.multiple || false;
13
13
 
14
14
  if (readonly) {
15
- if (!value) return <span className="text-sm">-</span>;
15
+ if (!value) return <EmptyValue />;
16
16
 
17
17
  const users = Array.isArray(value) ? value : [value];
18
18
  return (
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { EmptyValue } from '@object-ui/components';
2
3
  import { FieldWidgetProps } from './types';
3
4
 
4
5
  /**
@@ -10,7 +11,7 @@ export function VectorField({ value, field, ...props }: FieldWidgetProps<number[
10
11
  const dimensions = vectorField?.dimensions || (Array.isArray(value) ? value.length : 0);
11
12
 
12
13
  if (!value || !Array.isArray(value)) {
13
- return <span className="text-sm text-gray-500">-</span>;
14
+ return <EmptyValue />;
14
15
  }
15
16
 
16
17
  // Show first few values and total dimensions
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Safe translation hook for field widgets.
3
+ * Falls back to English defaults when no I18nProvider is available.
4
+ */
5
+ import { createSafeTranslation } from '@object-ui/i18n';
6
+
7
+ const FIELD_DEFAULTS: Record<string, string> = {
8
+ 'common.selectOption': 'Select an option',
9
+ 'common.select': 'Select...',
10
+ 'common.search': 'Search',
11
+ 'table.selected': '{{count}} selected',
12
+ };
13
+
14
+ export const useFieldTranslation = createSafeTranslation(
15
+ FIELD_DEFAULTS,
16
+ 'common.selectOption',
17
+ );
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { AddressField as e } from "./index.js";
3
- export { e as AddressField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.AddressField=e.AddressField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { AutoNumberField as e } from "./index.js";
3
- export { e as AutoNumberField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.AutoNumberField=e.AutoNumberField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { AvatarField as e } from "./index.js";
3
- export { e as AvatarField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.AvatarField=e.AvatarField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { BooleanField as e } from "./index.js";
3
- export { e as BooleanField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.BooleanField=e.BooleanField;
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.CodeField=e.CodeField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { CodeField as e } from "./index.js";
3
- export { e as CodeField };
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { ColorField as e } from "./index.js";
3
- export { e as ColorField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.ColorField=e.ColorField;
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.CurrencyField=e.CurrencyField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { CurrencyField as e } from "./index.js";
3
- export { e as CurrencyField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.DateField=e.DateField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { DateField as e } from "./index.js";
3
- export { e as DateField };
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { DateTimeField as e } from "./index.js";
3
- export { e as DateTimeField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.DateTimeField=e.DateTimeField;
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.EmailField=e.EmailField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { EmailField as e } from "./index.js";
3
- export { e as EmailField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.FileField=e.FileField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { FileField as e } from "./index.js";
3
- export { e as FileField };
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { FormulaField as e } from "./index.js";
3
- export { e as FormulaField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.FormulaField=e.FormulaField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { GeolocationField as e } from "./index.js";
3
- export { e as GeolocationField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.GeolocationField=e.GeolocationField;
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.GridField=e.GridField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { GridField as e } from "./index.js";
3
- export { e as GridField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.ImageField=e.ImageField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { ImageField as e } from "./index.js";
3
- export { e as ImageField };
@@ -1 +0,0 @@
1
- require(`./jsx-runtime-DHCF5ANT.cjs`);const e=require(`./index.cjs`);exports.LocationField=e.LocationField;
@@ -1,3 +0,0 @@
1
- import "./jsx-runtime-MxADXuRH.js";
2
- import { LocationField as e } from "./index.js";
3
- export { e as LocationField };