@box/metadata-editor 2.0.1 → 2.2.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.
Files changed (34) hide show
  1. package/dist/chunks/combobox-with-api-pagination.js +2 -2
  2. package/dist/chunks/metadata-instance-form-autofill-button.js +1 -1
  3. package/dist/chunks/update-mode-field-wrapper.js +1 -1
  4. package/dist/chunks/utils.js +12 -5
  5. package/dist/esm/lib/components/combobox-with-api-pagination/use-async-list.js +48 -51
  6. package/dist/esm/lib/components/metadata-editor-fields/components/metadata-date-field/metadata-date-field.js +1 -1
  7. package/dist/esm/lib/components/metadata-editor-fields/components/metadata-enum-field/metadata-enum-field.js +1 -1
  8. package/dist/esm/lib/components/metadata-editor-fields/components/metadata-float-field/metadata-float-field.js +1 -1
  9. package/dist/esm/lib/components/metadata-editor-fields/components/metadata-multi-select-field/metadata-multi-select-field.js +1 -1
  10. package/dist/esm/lib/components/metadata-editor-fields/components/metadata-string-field/metadata-string-field.js +1 -1
  11. package/dist/esm/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/legacy-metadata-taxonomy-field.js +67 -0
  12. package/dist/esm/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/metadata-taxonomy-field.js +15 -66
  13. package/dist/esm/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/metadata-taxonomy-picker-field/metadata-taxonomy-picker-field.js +53 -0
  14. package/dist/esm/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/metadata-taxonomy-picker-field/value-mapping.js +30 -0
  15. package/dist/esm/lib/components/metadata-editor-fields/editor-field-types.js +5 -5
  16. package/dist/esm/lib/components/metadata-editor-fields/metadata-editor-field-wrapper.js +122 -118
  17. package/dist/esm/lib/components/metadata-editor-fields/metadata-editor-fields.js +1 -1
  18. package/dist/esm/lib/components/metadata-editor-fields/utils.js +2 -2
  19. package/dist/esm/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form/metadata-instance-form.js +67 -63
  20. package/dist/esm/lib/utils/analytics/analytics-context.js +1 -1
  21. package/dist/esm/lib/utils/autofill-context.js +1 -1
  22. package/dist/esm/lib/utils/convertDate.js +1 -1
  23. package/dist/types/index.d.ts +1 -0
  24. package/dist/types/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/legacy-metadata-taxonomy-field.d.ts +9 -0
  25. package/dist/types/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/metadata-taxonomy-field.d.ts +7 -0
  26. package/dist/types/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/metadata-taxonomy-picker-field/metadata-taxonomy-picker-field.d.ts +15 -0
  27. package/dist/types/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/metadata-taxonomy-picker-field/value-mapping.d.ts +28 -0
  28. package/dist/types/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/types.d.ts +12 -0
  29. package/dist/types/lib/components/metadata-editor-fields/types.d.ts +9 -1
  30. package/dist/types/lib/components/metadata-editor-fields/utils.d.ts +8 -0
  31. package/dist/types/lib/components/metadata-instance-editor/subcomponents/metadata-instance-form/types.d.ts +5 -1
  32. package/dist/types/lib/test-utils/index.d.ts +1 -0
  33. package/dist/types/lib/test-utils/taxonomy-items-service.mock.d.ts +7 -0
  34. package/package.json +13 -11
@@ -1,7 +1,19 @@
1
1
  import { TreeOptionType, TreeQueryInput } from '@box/combobox-with-api';
2
+ import { TaxonomyItemsService } from '@box/metadata-taxonomy-picker';
2
3
  import { FetcherResponse, PaginationQueryInput } from '../../../combobox-with-api-pagination/types';
3
4
  import { MetadataFieldProps } from '../../types';
4
5
  export type MetadataTaxonomyFieldProps = Omit<MetadataFieldProps, 'portalElement'> & {
5
6
  portalElement?: HTMLElement | (() => HTMLElement);
6
7
  };
7
8
  export type TaxonomyOptionsFetcher = (scope: string, templateKey: string, fieldKey: string, level: number, options: PaginationQueryInput | TreeQueryInput) => Promise<FetcherResponse<TreeOptionType>>;
9
+ /**
10
+ * Builds the per-field `TaxonomyItemsService` consumed by the new
11
+ * `MetadataTaxonomyPicker` experience. Called once per taxonomy field with that
12
+ * field's identity; browse/search level scoping is supplied by the picker per
13
+ * request, so it is intentionally not a parameter here.
14
+ */
15
+ export type CreateTaxonomyItemsService = (params: {
16
+ scope: string;
17
+ templateKey: string;
18
+ fieldKey: string;
19
+ }) => TaxonomyItemsService;
@@ -1,12 +1,16 @@
1
1
  import { Level } from '@box/combobox-with-api';
2
2
  import { ConfidenceScoreData, MetadataTemplateField, MetadataTemplateFieldOption } from '../../types';
3
- import { TaxonomyOptionsFetcher } from './components/metadata-taxonomy-field/types';
3
+ import { CreateTaxonomyItemsService, TaxonomyOptionsFetcher } from './components/metadata-taxonomy-field/types';
4
4
  export type TemplateInstanceProps = {
5
5
  disableForm: boolean;
6
6
  portalElement?: HTMLElement;
7
7
  taxonomyOptionsFetcher: TaxonomyOptionsFetcher;
8
8
  isExternallyOwned?: boolean;
9
9
  isMultilevelTaxonomyFieldEnabled: boolean;
10
+ /** When true, taxonomy fields render the new `MetadataTaxonomyPicker` experience instead of the legacy comboboxes. */
11
+ isTaxonomyPickerEnabled?: boolean;
12
+ /** Builds the per-field `TaxonomyItemsService` for the new picker experience. Required when `isTaxonomyPickerEnabled` is true. */
13
+ createTaxonomyItemsService?: CreateTaxonomyItemsService;
10
14
  isConfidenceScoreReviewEnabled?: boolean;
11
15
  isBoundingBoxEnabled?: boolean;
12
16
  shouldShowOnlyReviewFields?: boolean;
@@ -29,6 +33,10 @@ export type MetadataFieldProps = {
29
33
  onValueEdited: () => void;
30
34
  isExternallyOwned?: boolean;
31
35
  isMultilevelTaxonomyFieldEnabled: boolean;
36
+ /** When true, taxonomy fields render the new `MetadataTaxonomyPicker` experience instead of the legacy comboboxes. */
37
+ isTaxonomyPickerEnabled?: boolean;
38
+ /** Builds the per-field `TaxonomyItemsService` for the new picker experience. Required when `isTaxonomyPickerEnabled` is true. */
39
+ createTaxonomyItemsService?: CreateTaxonomyItemsService;
32
40
  };
33
41
  export type MetadataEditorFieldWrapperProps = TemplateInstanceProps & {
34
42
  field: MetadataTemplateField;
@@ -1,4 +1,12 @@
1
1
  import { Labelable, TextProps } from '@box/blueprint-web';
2
+ import { ReactNode } from 'react';
2
3
  import { ConfidenceScoreData } from '../../types';
3
4
  export declare const getFieldLabel: (fieldName: string, fieldDescription: string | undefined, isAiSuggestionApplied?: boolean, as?: TextProps["as"], confidenceScore?: ConfidenceScoreData) => Labelable["label"];
5
+ /**
6
+ * Returns the decorated field label as a `ReactNode` (field name + ellipsis/description
7
+ * tooltips + AI/confidence badge), rendered with a `<span>` root so it can be embedded
8
+ * inside a caller-owned `<label htmlFor>` without producing nested `<label>` elements.
9
+ * Used by the taxonomy picker field, where `MetadataTaxonomyPicker` owns the label element.
10
+ */
11
+ export declare const getFieldLabelContent: (fieldName: string, fieldDescription: string | undefined, isAiSuggestionApplied?: boolean, confidenceScore?: ConfidenceScoreData) => ReactNode;
4
12
  export declare const tryParseDateSuggestion: (suggestedDate: string) => string;
@@ -1,5 +1,5 @@
1
1
  import { AutofillSuggestions, MetadataTemplateField, MetadataTemplateInstance } from '../../../../types';
2
- import { TaxonomyOptionsFetcher } from '../../../metadata-editor-fields/components/metadata-taxonomy-field/types';
2
+ import { CreateTaxonomyItemsService, TaxonomyOptionsFetcher } from '../../../metadata-editor-fields/components/metadata-taxonomy-field/types';
3
3
  import { FormValues } from '../../types';
4
4
  import { ERROR_CODE_METADATA_AUTOFILL_TIMEOUT, ERROR_CODE_METADATA_PRECONDITION_FAILED, ERROR_CODE_MISSING_PERMISSIONS, ERROR_CODE_UNKNOWN } from './constants';
5
5
  export type errorCodeTypes = typeof ERROR_CODE_METADATA_AUTOFILL_TIMEOUT | typeof ERROR_CODE_METADATA_PRECONDITION_FAILED | typeof ERROR_CODE_MISSING_PERMISSIONS | typeof ERROR_CODE_UNKNOWN;
@@ -13,6 +13,10 @@ export type MetadataInstanceFormProps = {
13
13
  isLargeFile: boolean;
14
14
  /** When true enables the multilevel taxonomy filed component with tree selection */
15
15
  isMultilevelTaxonomyFieldEnabled: boolean;
16
+ /** When true, taxonomy fields render the new `MetadataTaxonomyPicker` experience instead of the legacy comboboxes. Requires `createTaxonomyItemsService`. */
17
+ isTaxonomyPickerEnabled?: boolean;
18
+ /** Builds the per-field `TaxonomyItemsService` for the new picker experience. Required when `isTaxonomyPickerEnabled` is true. */
19
+ createTaxonomyItemsService?: CreateTaxonomyItemsService;
16
20
  isUnsavedChangesModalOpen: boolean;
17
21
  selectedTemplateInstance: MetadataTemplateInstance | null;
18
22
  onCancel: () => void;
@@ -3,4 +3,5 @@ export * from './formik-wrapper';
3
3
  export * from './mock-resize-observer';
4
4
  export * from './pending-promise';
5
5
  export * from './sample-data';
6
+ export * from './taxonomy-items-service.mock';
6
7
  export * from './test-utils';
@@ -0,0 +1,7 @@
1
+ import { CreateTaxonomyItemsService } from '../components/metadata-editor-fields/components/metadata-taxonomy-field/types';
2
+ /**
3
+ * Builds a demo `TaxonomyItemsService` for Storybook. Single-level taxonomy fields
4
+ * (keys containing `SingleLevel`) serve a flat country list; everything else serves
5
+ * a Country -> Region -> City hierarchy with `hasChildren` and search ancestors.
6
+ */
7
+ export declare const createMockTaxonomyItemsService: CreateTaxonomyItemsService;
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@box/metadata-editor",
3
- "version": "2.0.1",
3
+ "version": "2.2.0",
4
4
  "peerDependencies": {
5
5
  "@ariakit/react": "0.4.21",
6
- "@box/blueprint-web": "^16.0.0",
7
- "@box/blueprint-web-assets": "^5.0.0",
8
- "@box/box-ai-agent-selector": "^2.0.0",
9
- "@box/combobox-with-api": "^2.0.0",
10
- "@box/metadata-template-browser": "^2.0.0",
6
+ "@box/blueprint-web": "^16.1.1",
7
+ "@box/blueprint-web-assets": "^5.1.1",
8
+ "@box/box-ai-agent-selector": "^2.1.1",
9
+ "@box/combobox-with-api": "^2.1.1",
10
+ "@box/metadata-taxonomy-picker": "^3.1.1",
11
+ "@box/metadata-template-browser": "^2.1.1",
11
12
  "formik": "^2.0.3",
12
13
  "lodash": "^4.17.15",
13
14
  "react": "^17.0.0 || ^18.0.0",
@@ -16,11 +17,12 @@
16
17
  },
17
18
  "devDependencies": {
18
19
  "@ariakit/react": "0.4.21",
19
- "@box/babel-plugin-target-attributes": "2.0.0",
20
- "@box/blueprint-web": "^16.0.0",
21
- "@box/blueprint-web-assets": "^5.0.0",
22
- "@box/box-ai-agent-selector": "^2.0.0",
23
- "@box/storybook-utils": "^1.0.0",
20
+ "@box/babel-plugin-target-attributes": "2.1.1",
21
+ "@box/blueprint-web": "^16.1.1",
22
+ "@box/blueprint-web-assets": "^5.1.1",
23
+ "@box/box-ai-agent-selector": "^2.1.1",
24
+ "@box/metadata-taxonomy-picker": "^3.1.1",
25
+ "@box/storybook-utils": "^1.1.1",
24
26
  "@testing-library/react": "^15.0.6",
25
27
  "react": "^18.3.0",
26
28
  "react-dom": "^18.3.0",