@object-ui/fields 17.2.0 → 17.5.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 +1533 -0
- package/README.md +1 -12
- package/dist/FieldEditWidget.d.ts +7 -1
- package/dist/currency.d.ts +46 -0
- package/dist/field-type-alias.d.ts +19 -1
- package/dist/index.cjs +5 -5
- package/dist/index.css +633 -0
- package/dist/index.d.ts +52 -12
- package/dist/index.js +5167 -4759
- package/dist/widgets/AddressField.d.ts +4 -12
- package/dist/widgets/AvatarField.d.ts +1 -1
- package/dist/widgets/CharacterCount.d.ts +56 -0
- package/dist/widgets/CheckboxesField.d.ts +1 -1
- package/dist/widgets/CodeField.d.ts +1 -1
- package/dist/widgets/ColorField.d.ts +1 -1
- package/dist/widgets/CurrencyField.d.ts +1 -1
- package/dist/widgets/EmailField.d.ts +1 -1
- package/dist/widgets/FileField.d.ts +1 -1
- package/dist/widgets/FilterConditionField.d.ts +1 -1
- package/dist/widgets/FullscreenFieldEditor.d.ts +45 -0
- package/dist/widgets/GeolocationField.d.ts +1 -1
- package/dist/widgets/GridField.d.ts +12 -2
- package/dist/widgets/ImageField.d.ts +1 -1
- package/dist/widgets/LocationField.d.ts +1 -1
- package/dist/widgets/LookupField.d.ts +1 -1
- package/dist/widgets/MultiSelectField.d.ts +1 -1
- package/dist/widgets/ObjectField.d.ts +1 -1
- package/dist/widgets/ObjectRefField.d.ts +1 -1
- package/dist/widgets/OptionsEmptyState.d.ts +59 -0
- package/dist/widgets/PercentField.d.ts +1 -1
- package/dist/widgets/PhoneField.d.ts +1 -1
- package/dist/widgets/QRCodeField.d.ts +1 -1
- package/dist/widgets/RadioField.d.ts +1 -1
- package/dist/widgets/RatingField.d.ts +1 -1
- package/dist/widgets/RecipientPickerField.d.ts +1 -1
- package/dist/widgets/RecordPickerDialog.d.ts +49 -7
- package/dist/widgets/RichTextField.d.ts +19 -1
- package/dist/widgets/SelectField.d.ts +25 -5
- package/dist/widgets/TagsField.d.ts +1 -1
- package/dist/widgets/TextAreaField.d.ts +44 -5
- package/dist/widgets/UrlField.d.ts +1 -1
- package/dist/widgets/address-format.d.ts +68 -0
- package/dist/widgets/file-size-guard.d.ts +41 -0
- package/dist/widgets/nativeDateValue.d.ts +37 -0
- package/dist/widgets/toDomProps.d.ts +111 -0
- package/dist/widgets/toHostGroupProps.d.ts +91 -0
- package/dist/widgets/types.d.ts +128 -33
- package/dist/widgets/useRecordQuery.d.ts +7 -1
- package/dist/withFieldCarrier.d.ts +56 -0
- package/package.json +20 -16
- package/src/FieldEditWidget.tsx +17 -1
- package/src/__tests__/AddressCellRenderer.test.tsx +166 -0
- package/src/__tests__/CurrencyField.minorUnits.test.tsx +191 -0
- package/src/__tests__/CurrencyField.symbol.test.tsx +198 -0
- package/src/__tests__/DateCellRenderer.test.tsx +9 -0
- package/src/__tests__/NumberCellRenderer.grouping.test.tsx +146 -0
- package/src/__tests__/PercentCellRenderer.locale.test.tsx +152 -0
- package/src/__tests__/PercentCellRenderer.test.tsx +115 -0
- package/src/__tests__/boolean-label-association-e2e.test.tsx +298 -0
- package/src/__tests__/capability-multiselect-retired.test.ts +109 -0
- package/src/__tests__/cell-truncation.test.tsx +96 -0
- package/src/__tests__/composite-group-label-e2e.test.tsx +436 -0
- package/src/__tests__/composite-group-label-readonly-e2e.test.tsx +403 -0
- package/src/__tests__/date-formatter-residue-4272.test.ts +120 -0
- package/src/__tests__/date-locale-channel.test.tsx +305 -0
- package/src/__tests__/field-carrier-sdui.test.tsx +169 -0
- package/src/__tests__/formatCurrency.centsDigit.test.tsx +158 -0
- package/src/__tests__/formatCurrency.minorUnits.test.tsx +221 -0
- package/src/__tests__/group-labelling-declaration.test.ts +148 -0
- package/src/__tests__/lookupCellRecordLink.test.tsx +171 -0
- package/src/__tests__/percent-cell-vs-measure-4576.test.ts +115 -0
- package/src/__tests__/percent-formatter-locale-4553.test.ts +147 -0
- package/src/__tests__/percent-tie-halfup-4590.test.ts +224 -0
- package/src/__tests__/select-label-association-e2e.test.tsx +199 -0
- package/src/__tests__/spec-symbol-batch7.test.ts +29 -15
- package/src/__tests__/validation-feedback.test.tsx +22 -13
- package/src/__tests__/widget-aria-invalid-e2e.test.tsx +265 -0
- package/src/__tests__/widget-aria-invalid-registry-e2e.test.tsx +338 -0
- package/src/__tests__/widget-dom-leak-e2e.test.tsx +357 -0
- package/src/__tests__/widget-props-contract.test.tsx +22 -9
- package/src/complex-widgets.test.tsx +22 -6
- package/src/currency.ts +130 -0
- package/src/datetime-widgets.test.tsx +94 -2
- package/src/field-type-alias.multiple.test.ts +81 -0
- package/src/field-type-alias.ts +58 -2
- package/src/index.css +44 -0
- package/src/index.tsx +558 -268
- package/src/standard-widgets.test.tsx +8 -1
- package/src/widgets/AddressField.postalCode.test.tsx +257 -0
- package/src/widgets/AddressField.tsx +107 -38
- package/src/widgets/AddressField.uniqueIds.test.tsx +93 -0
- package/src/widgets/AvatarField.tsx +9 -2
- package/src/widgets/BooleanField.tsx +44 -10
- package/src/widgets/CapabilityMultiSelectField.tsx +17 -5
- package/src/widgets/CharacterCount.tsx +263 -0
- package/src/widgets/CheckboxesField.tsx +66 -16
- package/src/widgets/CodeField.tsx +9 -2
- package/src/widgets/ColorField.tsx +11 -2
- package/src/widgets/CurrencyField.tsx +60 -19
- package/src/widgets/DateField.tsx +13 -4
- package/src/widgets/DateTimeField.tsx +14 -5
- package/src/widgets/EmailField.tsx +5 -5
- package/src/widgets/FileField.tsx +39 -11
- package/src/widgets/FilterConditionField.tsx +11 -0
- package/src/widgets/FormulaField.tsx +7 -2
- package/src/widgets/FullscreenFieldEditor.tsx +60 -0
- package/src/widgets/GeolocationField.tsx +49 -8
- package/src/widgets/GeolocationField.uniqueIds.test.tsx +88 -0
- package/src/widgets/GridField.test.tsx +226 -0
- package/src/widgets/GridField.tsx +115 -11
- package/src/widgets/ImageField.maxSize.test.tsx +154 -0
- package/src/widgets/ImageField.tsx +63 -6
- package/src/widgets/LocationField.tsx +9 -2
- package/src/widgets/LookupField.gateHintLabel.test.tsx +135 -0
- package/src/widgets/LookupField.hydration.test.tsx +1 -1
- package/src/widgets/LookupField.tsx +49 -10
- package/src/widgets/MasterDetailField.tsx +1 -1
- package/src/widgets/MultiSelectField.tsx +86 -16
- package/src/widgets/NumberField.tsx +3 -3
- package/src/widgets/ObjectField.tsx +17 -8
- package/src/widgets/ObjectRefField.tsx +10 -0
- package/src/widgets/OptionsEmptyState.no-provider.test.tsx +88 -0
- package/src/widgets/OptionsEmptyState.test.tsx +169 -0
- package/src/widgets/OptionsEmptyState.tsx +99 -0
- package/src/widgets/PasswordField.tsx +3 -3
- package/src/widgets/PeoplePicker.tsx +7 -1
- package/src/widgets/PercentField.tsx +5 -4
- package/src/widgets/PhoneField.tsx +5 -5
- package/src/widgets/QRCodeField.tsx +9 -2
- package/src/widgets/RadioField.tsx +58 -16
- package/src/widgets/RatingField.tsx +32 -4
- package/src/widgets/RecipientPickerField.tsx +18 -0
- package/src/widgets/RecordPickerDialog.baseFilterShapes.test.tsx +191 -0
- package/src/widgets/RecordPickerDialog.dateLocale.test.tsx +124 -0
- package/src/widgets/RecordPickerDialog.filterOptions.test.tsx +611 -0
- package/src/widgets/RecordPickerDialog.selectLabel.test.tsx +112 -0
- package/src/widgets/RecordPickerDialog.tsx +235 -21
- package/src/widgets/RichTextField.tsx +151 -24
- package/src/widgets/SelectField.tsx +84 -22
- package/src/widgets/SliderField.tsx +1 -1
- package/src/widgets/SummaryField.tsx +1 -1
- package/src/widgets/TagsField.placeholder.no-provider.test.tsx +68 -0
- package/src/widgets/TagsField.placeholder.test.tsx +95 -0
- package/src/widgets/TagsField.tsx +23 -2
- package/src/widgets/TextAreaField.tsx +171 -93
- package/src/widgets/TextField.tsx +3 -3
- package/src/widgets/TimeField.tsx +2 -2
- package/src/widgets/UrlField.tsx +5 -5
- package/src/widgets/UserField.tsx +4 -3
- package/src/widgets/VectorField.tsx +1 -1
- package/src/widgets/__tests__/FilterConditionField.operators.test.ts +25 -1
- package/src/widgets/__tests__/FullscreenFieldEditor.i18n.test.tsx +248 -0
- package/src/widgets/__tests__/FullscreenFieldEditor.no-provider.test.tsx +116 -0
- package/src/widgets/__tests__/RichTextField.fullscreenDisabled.test.tsx +244 -0
- package/src/widgets/__tests__/RichTextField.mobileFullscreen.test.tsx +195 -0
- package/src/widgets/__tests__/TextAreaField.characterCount.announcements.test.tsx +417 -0
- package/src/widgets/__tests__/TextAreaField.characterCount.i18n.test.tsx +287 -0
- package/src/widgets/__tests__/TextAreaField.characterCount.no-provider.test.tsx +160 -0
- package/src/widgets/__tests__/TextAreaField.fullscreenCharacterCount.i18n.test.tsx +161 -0
- package/src/widgets/__tests__/TextAreaField.fullscreenCharacterCount.test.tsx +346 -0
- package/src/widgets/__tests__/TextAreaField.fullscreenDisabled.test.tsx +246 -0
- package/src/widgets/__tests__/TextAreaField.mobileFullscreen.test.tsx +175 -0
- package/src/widgets/address-format.ts +120 -0
- package/src/widgets/file-size-guard.ts +55 -0
- package/src/widgets/nativeDateValue.test.ts +115 -0
- package/src/widgets/nativeDateValue.ts +112 -0
- package/src/widgets/optionWidgets.gatedOptions.test.tsx +267 -0
- package/src/widgets/optionWidgets.unconfiguredOptions.test.tsx +150 -0
- package/src/widgets/toDomProps.ts +204 -0
- package/src/widgets/toHostGroupProps.ts +102 -0
- package/src/widgets/types.ts +135 -35
- package/src/widgets/useFieldTranslation.ts +46 -4
- package/src/widgets/useRecordQuery.ts +30 -3
- package/src/withFieldCarrier.tsx +75 -0
- package/dist/FieldEditWidget.test.d.ts +0 -8
- package/dist/__tests__/DateCellRenderer.test.d.ts +0 -0
- package/dist/__tests__/NumberCellRenderer.test.d.ts +0 -0
- package/dist/__tests__/lookupCellDisplayField.test.d.ts +0 -0
- package/dist/__tests__/lookupCellDisplayName.test.d.ts +0 -0
- package/dist/__tests__/lookupCellReferenceKey.test.d.ts +0 -0
- package/dist/__tests__/registry-collision.test.d.ts +0 -0
- package/dist/__tests__/resolveFieldCurrency.test.d.ts +0 -1
- package/dist/__tests__/spec-symbol-batch7.test.d.ts +0 -8
- package/dist/__tests__/validation-feedback.test.d.ts +0 -0
- package/dist/__tests__/widget-props-contract.test.d.ts +0 -8
- package/dist/coerce-safe-value.test.d.ts +0 -1
- package/dist/complex-widgets.test.d.ts +0 -1
- package/dist/datetime-widgets.test.d.ts +0 -1
- package/dist/field-type-coverage.test.d.ts +0 -1
- package/dist/standard-widgets.test.d.ts +0 -0
- package/dist/widgets/CapabilityMultiSelectField.test.d.ts +0 -0
- package/dist/widgets/CheckboxesField.cascade.test.d.ts +0 -0
- package/dist/widgets/GridField.test.d.ts +0 -1
- package/dist/widgets/ImageLightbox.test.d.ts +0 -1
- package/dist/widgets/LookupField.dependsOn.test.d.ts +0 -8
- package/dist/widgets/LookupField.hydration.test.d.ts +0 -1
- package/dist/widgets/LookupField.idField.test.d.ts +0 -1
- package/dist/widgets/MultiSelectField.cascade.test.d.ts +0 -0
- package/dist/widgets/PeoplePicker.test.d.ts +0 -8
- package/dist/widgets/PeoplePickerComponents.test.d.ts +0 -8
- package/dist/widgets/RadioField.cascade.test.d.ts +0 -0
- package/dist/widgets/RecipientPickerField.test.d.ts +0 -0
- package/dist/widgets/SelectField.cascade.test.d.ts +0 -0
- package/dist/widgets/UserFieldPicker.test.d.ts +0 -8
- package/dist/widgets/__tests__/FilterConditionField.matchAll.test.d.ts +0 -8
- package/dist/widgets/__tests__/FilterConditionField.operators.test.d.ts +0 -8
- package/dist/widgets/deriveLookupColumns.test.d.ts +0 -1
- package/dist/widgets/file-value.test.d.ts +0 -1
- package/dist/widgets/personDisplay.test.d.ts +0 -8
- package/dist/widgets/recentLookups.test.d.ts +0 -1
- package/dist/widgets/useRecordQuery.test.d.ts +0 -8
- package/dist/widgets/useUploadingSignal.test.d.ts +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -29,24 +29,36 @@ export interface CellRendererProps {
|
|
|
29
29
|
*/
|
|
30
30
|
export declare function coerceToSafeValue(value: unknown): string | number | boolean | null | undefined;
|
|
31
31
|
export { resolveFieldCurrency };
|
|
32
|
-
export declare function formatCurrency(value: number, currency?: string): string;
|
|
32
|
+
export declare function formatCurrency(value: number, currency?: string, locale?: string): string;
|
|
33
33
|
/**
|
|
34
34
|
* Format currency value in compact form for mobile display.
|
|
35
35
|
* E.g., $150,000 → $150K, $1,200,000 → $1.2M
|
|
36
36
|
* When `currency` is undefined, returns a compact number without symbol.
|
|
37
37
|
*/
|
|
38
|
-
export declare function formatCompactCurrency(value: number, currency?: string): string;
|
|
38
|
+
export declare function formatCompactCurrency(value: number, currency?: string, locale?: string): string;
|
|
39
39
|
/**
|
|
40
40
|
* Format a plain number with thousands separators, no currency symbol.
|
|
41
41
|
* Used as a safe fallback when a currency-typed field has no `currency`
|
|
42
42
|
* configured — we'd rather render `1,234.50` than silently assume USD.
|
|
43
43
|
*/
|
|
44
|
-
export declare function formatNumber(value: number, decimals?: number): string;
|
|
44
|
+
export declare function formatNumber(value: number, decimals?: number, locale?: string): string;
|
|
45
45
|
/**
|
|
46
|
-
* Format percent value
|
|
46
|
+
* Format percent value.
|
|
47
47
|
* Handles both decimal (0.8 = 80%) and whole number (80 = 80%) inputs.
|
|
48
|
+
*
|
|
49
|
+
* `locale` is the third positional parameter, matching {@link formatNumber} and
|
|
50
|
+
* {@link formatCurrency} — the shape the sibling formatters already use.
|
|
51
|
+
* Callers should pass the tag from `useDisplayLocale()`.
|
|
52
|
+
*
|
|
53
|
+
* Before objectui#4553 this function took no locale and never touched `Intl`:
|
|
54
|
+
* its whole body was `${percentDisplayValue(value).toFixed(precision)}%`, so it
|
|
55
|
+
* rendered in NO locale rather than the machine's — an ASCII decimal mark and
|
|
56
|
+
* never a grouping separator, byte-identical on every machine. That made
|
|
57
|
+
* `1235%` the output everywhere, which is wrong in en-US as well as in German,
|
|
58
|
+
* so the grouping and the locale are fixed together: en output MOVES from
|
|
59
|
+
* `1235%` to `1,235%` at four digits and up, and that move is the fix.
|
|
48
60
|
*/
|
|
49
|
-
export declare function formatPercent(value: number, precision?: number): string;
|
|
61
|
+
export declare function formatPercent(value: number, precision?: number, locale?: string): string;
|
|
50
62
|
/**
|
|
51
63
|
* Humanize a snake_case or kebab-case string into Title Case.
|
|
52
64
|
* Used as fallback label when no explicit option.label exists.
|
|
@@ -81,9 +93,17 @@ export declare function formatRelativeDate(value: string | Date | number, option
|
|
|
81
93
|
*/
|
|
82
94
|
export declare function formatDate(value: string | Date | number, style?: string, options?: DateDisplayOptions): string;
|
|
83
95
|
/**
|
|
84
|
-
* Format datetime value
|
|
96
|
+
* Format datetime value.
|
|
97
|
+
*
|
|
98
|
+
* `options` mirrors {@link formatDate}'s and is optional, so an existing
|
|
99
|
+
* caller that passes nothing keeps the exact runtime-default behavior it had.
|
|
100
|
+
* Before objectui#4272 the parameter did not exist at all, which meant no
|
|
101
|
+
* caller could localize this function however hard it tried — it always handed
|
|
102
|
+
* `Intl` an `undefined` tag, i.e. the MACHINE's locale, which is neither of
|
|
103
|
+
* the repo's two locale channels. Callers should pass the tag from
|
|
104
|
+
* `useDisplayLocale()`.
|
|
85
105
|
*/
|
|
86
|
-
export declare function formatDateTime(value: string | Date | number): string;
|
|
106
|
+
export declare function formatDateTime(value: string | Date | number, options?: DateDisplayOptions): string;
|
|
87
107
|
/**
|
|
88
108
|
* Text field cell renderer
|
|
89
109
|
*/
|
|
@@ -240,6 +260,26 @@ export declare function HtmlCellRenderer({ value }: CellRendererProps): React.Re
|
|
|
240
260
|
* or a `[lat, lng]` array. Falls back to compact JSON for anything else.
|
|
241
261
|
*/
|
|
242
262
|
export declare function LocationCellRenderer({ value }: CellRendererProps): React.ReactElement;
|
|
263
|
+
/**
|
|
264
|
+
* Renders an `address` value as a formatted single-line postal address instead
|
|
265
|
+
* of stringified JSON (objectui#4037).
|
|
266
|
+
*
|
|
267
|
+
* The detail page's display registry mapped `address` to {@link JsonCellRenderer},
|
|
268
|
+
* so a populated address read as `{"street":"中策路 1 号","city":"杭州",…}` on the
|
|
269
|
+
* detail page and in its inline-edit read state — while the very same value
|
|
270
|
+
* rendered correctly in the create/edit dialog, whose input registry has always
|
|
271
|
+
* carried `address`. Read side only: nothing about the input widget changes.
|
|
272
|
+
*
|
|
273
|
+
* Layout is not invented here. It is {@link formatAddress} — the rule
|
|
274
|
+
* `AddressField`'s own readonly branch already applied, over the sub-field set
|
|
275
|
+
* its inputs expose — so a readonly form and a detail page cannot spell one
|
|
276
|
+
* stored address two ways.
|
|
277
|
+
*
|
|
278
|
+
* Anything `formatAddress` cannot recognize falls back to compact JSON rather
|
|
279
|
+
* than rendering blank: an unknown shape stays visible (today's behaviour) and
|
|
280
|
+
* is never silently swallowed by the fix.
|
|
281
|
+
*/
|
|
282
|
+
export declare function AddressCellRenderer({ value }: CellRendererProps): React.ReactElement;
|
|
243
283
|
/**
|
|
244
284
|
* Get the appropriate cell renderer for a field type
|
|
245
285
|
*/
|
|
@@ -304,11 +344,6 @@ export declare function registerField(fieldType: string): void;
|
|
|
304
344
|
* registerAllFields();
|
|
305
345
|
*/
|
|
306
346
|
export declare function registerAllFields(): void;
|
|
307
|
-
/**
|
|
308
|
-
* Legacy function - kept for backward compatibility
|
|
309
|
-
* @deprecated Use registerAllFields() instead
|
|
310
|
-
*/
|
|
311
|
-
export declare function registerFields(): void;
|
|
312
347
|
export * from './widgets/types';
|
|
313
348
|
export * from './widgets/file-value';
|
|
314
349
|
export * from './FieldEditWidget';
|
|
@@ -333,6 +368,7 @@ export * from './widgets/ObjectRefField';
|
|
|
333
368
|
export * from './widgets/FilterConditionField';
|
|
334
369
|
export * from './widgets/RecipientPickerField';
|
|
335
370
|
export * from './widgets/RecordPickerDialog';
|
|
371
|
+
export * from './widgets/deriveLookupColumns';
|
|
336
372
|
export * from './widgets/FileField';
|
|
337
373
|
export * from './widgets/ImageField';
|
|
338
374
|
export { ImageCropperDialog } from './widgets/ImageCropperDialog';
|
|
@@ -359,3 +395,7 @@ export * from './widgets/MultiSelectField';
|
|
|
359
395
|
export * from './widgets/RadioField';
|
|
360
396
|
export * from './widgets/CheckboxesField';
|
|
361
397
|
export * from './widgets/TagsField';
|
|
398
|
+
export { withFieldCarrier } from './withFieldCarrier';
|
|
399
|
+
export { toDomProps } from './widgets/toDomProps';
|
|
400
|
+
export type { DomProps } from './widgets/toDomProps';
|
|
401
|
+
export { toDateInputValue, toDateTimeInputValue, fromDateTimeInputValue, } from './widgets/nativeDateValue';
|