@box/metadata-editor 0.51.1 → 0.52.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 (47) hide show
  1. package/chunks/metadata-editor-field-wrapper.js +18 -16
  2. package/esm/index.js +16 -16
  3. package/esm/lib/components/combobox-with-api-pagination/combobox-with-api-pagination.js +191 -0
  4. package/esm/lib/components/combobox-with-api-pagination/index.js +4 -0
  5. package/esm/lib/components/combobox-with-api-pagination/utils/use-controllable-state.js +40 -0
  6. package/esm/lib/components/interactive-text/interactive-text.js +16 -10
  7. package/esm/lib/components/metadata-editor-fields/components/metadata-date-field/metadata-date-field.js +57 -50
  8. package/esm/lib/components/metadata-editor-fields/components/metadata-enum-field/metadata-enum-field.js +39 -30
  9. package/esm/lib/components/metadata-editor-fields/components/metadata-float-field/metadata-float-field.js +43 -34
  10. package/esm/lib/components/metadata-editor-fields/components/metadata-multi-select-field/metadata-multi-select-field.js +39 -30
  11. package/esm/lib/components/metadata-editor-fields/components/metadata-string-field/metadata-string-field.js +37 -28
  12. package/esm/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/single-level-taxonomy-field.js +8 -0
  13. package/esm/lib/components/metadata-editor-fields/components/update-mode-field-wrapper/update-mode-field-wrapper.js +8 -8
  14. package/esm/lib/components/metadata-instance-list/subcomponents/metadata-instance-entry/metadata-instance-entry.js +19 -21
  15. package/package.json +3 -3
  16. package/styles/interactive-text.css +1 -0
  17. package/styles/metadata-instance-entry.css +1 -1
  18. package/types/index.d.ts +1 -1
  19. package/types/lib/components/combobox-with-api-pagination/combobox-with-api-pagination.d.ts +2 -0
  20. package/types/lib/components/combobox-with-api-pagination/index.d.ts +2 -0
  21. package/types/lib/components/combobox-with-api-pagination/types.d.ts +35 -0
  22. package/types/lib/components/combobox-with-api-pagination/utils/use-controllable-state.d.ts +8 -0
  23. package/types/lib/components/interactive-text/interactive-text.d.ts +2 -1
  24. package/types/lib/components/metadata-editor-fields/components/metadata-date-field/metadata-date-field.d.ts +1 -1
  25. package/types/lib/components/metadata-editor-fields/components/metadata-enum-field/metadata-enum-field.d.ts +1 -1
  26. package/types/lib/components/metadata-editor-fields/components/metadata-float-field/metadata-float-field.d.ts +1 -1
  27. package/types/lib/components/metadata-editor-fields/components/metadata-multi-select-field/metadata-multi-select-field.d.ts +1 -1
  28. package/types/lib/components/metadata-editor-fields/components/metadata-string-field/metadata-string-field.d.ts +1 -1
  29. package/types/lib/components/metadata-editor-fields/components/metadata-taxonomy-field/types.d.ts +21 -0
  30. package/types/lib/components/metadata-editor-fields/types.d.ts +1 -0
  31. package/types/lib/test-utils/sample-data.d.ts +1 -1
  32. package/esm/lib/components/metadata-taxonomy-field/combobox-with-api-pagination.js +0 -188
  33. package/esm/lib/components/metadata-taxonomy-field/single-level-taxonomy-field.js +0 -19
  34. package/types/lib/components/metadata-taxonomy-field/combobox-with-api-pagination.d.ts +0 -15
  35. package/types/lib/components/metadata-taxonomy-field/types.d.ts +0 -41
  36. /package/esm/lib/components/{metadata-taxonomy-field → combobox-with-api-pagination}/messages.js +0 -0
  37. /package/esm/lib/components/{metadata-taxonomy-field → combobox-with-api-pagination}/request.js +0 -0
  38. /package/esm/lib/components/{metadata-taxonomy-field → combobox-with-api-pagination}/use-async-list.js +0 -0
  39. /package/esm/lib/components/{metadata-taxonomy-field → combobox-with-api-pagination}/utils/use-intersection-observer.js +0 -0
  40. /package/esm/lib/components/{metadata-taxonomy-field → metadata-editor-fields/components/metadata-taxonomy-field}/index.js +0 -0
  41. /package/i18n/json/src/lib/components/{metadata-taxonomy-field → combobox-with-api-pagination}/messages.json +0 -0
  42. /package/types/lib/components/{metadata-taxonomy-field → combobox-with-api-pagination}/messages.d.ts +0 -0
  43. /package/types/lib/components/{metadata-taxonomy-field → combobox-with-api-pagination}/request.d.ts +0 -0
  44. /package/types/lib/components/{metadata-taxonomy-field → combobox-with-api-pagination}/use-async-list.d.ts +0 -0
  45. /package/types/lib/components/{metadata-taxonomy-field → combobox-with-api-pagination}/utils/use-intersection-observer.d.ts +0 -0
  46. /package/types/lib/components/{metadata-taxonomy-field → metadata-editor-fields/components/metadata-taxonomy-field}/index.d.ts +0 -0
  47. /package/types/lib/components/{metadata-taxonomy-field → metadata-editor-fields/components/metadata-taxonomy-field}/single-level-taxonomy-field.d.ts +0 -0
@@ -1,188 +0,0 @@
1
- import "../../../../styles/combobox-with-api-pagination.css";
2
- import { ComboboxItemValue as q } from "@ariakit/react";
3
- import { Combobox as u, LoadingIndicator as H, InlineNotice as J, Text as K } from "@box/blueprint-web";
4
- import { Search as Q, Loader as X } from "@box/blueprint-web-assets/icons/Fill";
5
- import { IconIconOnLightSecondary as Y, Size6 as C, Size1 as Z } from "@box/blueprint-web-assets/tokens/tokens";
6
- import { useRef as I, useCallback as $, useState as oo, useMemo as y, useEffect as M, forwardRef as eo } from "react";
7
- import { useIntl as V, FormattedMessage as T } from "react-intl";
8
- import i from "./messages.js";
9
- import { useAsyncList as to } from "./use-async-list.js";
10
- import { useTrackVisibility as ro } from "./utils/use-intersection-observer.js";
11
- import { jsx as r, jsxs as N, Fragment as no } from "react/jsx-runtime";
12
- const io = "_container_16dlc_1", so = "_highlightOptionText_16dlc_7", ao = "_option_16dlc_20", lo = "_errorComboboxOption_16dlc_24", co = "_errorComboboxOptionText_16dlc_29", d = {
13
- container: io,
14
- highlightOptionText: so,
15
- option: ao,
16
- errorComboboxOption: lo,
17
- errorComboboxOptionText: co
18
- }, S = /* @__PURE__ */ eo(({
19
- onTryAgain: p
20
- }, m) => {
21
- const {
22
- formatMessage: h
23
- } = V();
24
- return /* @__PURE__ */ N(no, {
25
- children: [/* @__PURE__ */ r(J, {
26
- variant: "error",
27
- variantIconAriaLabel: h(i.loadingResultsErrorIconLabel),
28
- children: /* @__PURE__ */ r(T, {
29
- ...i.loadingResultsErrorMessage
30
- })
31
- }), /* @__PURE__ */ r(u.Option, {
32
- ref: m,
33
- className: d.errorComboboxOption,
34
- onClick: p,
35
- children: /* @__PURE__ */ N(K, {
36
- as: "span",
37
- className: d.errorComboboxOptionText,
38
- color: "textOnLightLink",
39
- variant: "bodyDefaultBold",
40
- children: [/* @__PURE__ */ r(T, {
41
- ...i.loadingResultsErrorAction
42
- }), /* @__PURE__ */ r(X, {
43
- color: "currentColor",
44
- height: "12px",
45
- width: "12px"
46
- })]
47
- })
48
- })]
49
- });
50
- }), _ = "__LOADING__", R = "__LOADING_ERROR__", uo = "0px 0px 20px 0px", po = /* @__PURE__ */ r(Q, {
51
- color: Y,
52
- height: C,
53
- role: "presentation",
54
- style: {
55
- padding: Z,
56
- boxSizing: "border-box"
57
- },
58
- width: C
59
- }), Eo = (p) => {
60
- const {
61
- defaultFetcher: m,
62
- searchFetcher: h,
63
- onInputValueChange: f,
64
- value: D,
65
- noResultMessage: F,
66
- loadingAriaLabel: k,
67
- multiselect: g = !1,
68
- ...P
69
- } = p, {
70
- formatMessage: a
71
- } = V(), b = I(null), o = to({
72
- async load({
73
- marker: t,
74
- searchInput: e,
75
- signal: v
76
- }) {
77
- const c = await (e === "" ? m : h)({
78
- signal: v,
79
- marker: t,
80
- searchInput: e
81
- });
82
- return {
83
- items: c.options,
84
- marker: c.marker
85
- };
86
- }
87
- }), A = I(!1), w = $(() => {
88
- A.current || (o.reload(), A.current = !0);
89
- }, []), [n, L] = oo(D), x = y(() => Array.isArray(n) ? n.filter((t) => !o.items.some((e) => e.value === t.value)) : [], [n, o.items]), B = (t) => {
90
- const {
91
- value: e,
92
- level: v,
93
- ...O
94
- } = t;
95
- if (e === _)
96
- return o.hasNextPage ? /* @__PURE__ */ r(u.Option, {
97
- ...O,
98
- ref: W,
99
- disabled: !0,
100
- value: e,
101
- children: /* @__PURE__ */ r(H, {
102
- "aria-label": a(i.loadingMoreAriaLabel),
103
- style: {
104
- position: "unset"
105
- }
106
- })
107
- }) : null;
108
- if (e === R && o.hasError && !o.isEmpty)
109
- return /* @__PURE__ */ r(S, {
110
- onTryAgain: () => {
111
- var s;
112
- o.loadMore(), (s = b.current) == null || s.focus();
113
- }
114
- });
115
- if (x.some((s) => s.value === e))
116
- return null;
117
- const c = () => n ? Array.isArray(n) ? n.some((s) => s.value === e) : n.value === e : !1;
118
- return /* @__PURE__ */ r(u.Option, {
119
- ...O,
120
- className: d.option,
121
- disabled: c(),
122
- value: e,
123
- children: /* @__PURE__ */ r(q, {
124
- className: d.highlightOptionText,
125
- value: e
126
- })
127
- });
128
- }, z = (t) => {
129
- f == null || f(t), o.search(t);
130
- }, G = () => {
131
- var t;
132
- o.reload(), (t = b.current) == null || t.focus();
133
- };
134
- let l;
135
- o.hasError && !o.isLoading ? l = /* @__PURE__ */ r(S, {
136
- onTryAgain: G
137
- }) : o.isEmpty && !o.isLoading ? l = F || a(i.noResults) : l = void 0;
138
- const [W, {
139
- rootRef: j,
140
- isVisible: E
141
- }] = ro({
142
- rootMargin: uo
143
- });
144
- M(() => {
145
- o.searchInput === "" && !g && L(void 0);
146
- }, [o.searchInput, g]), M(() => {
147
- if (!(E && o.hasNextPage))
148
- return;
149
- const e = setTimeout(() => {
150
- o.loadMore();
151
- }, 100);
152
- return () => {
153
- clearTimeout(e);
154
- };
155
- }, [E]);
156
- const U = y(() => {
157
- const t = o.hasNextPage ? {
158
- id: _,
159
- value: _
160
- } : null, e = !t && o.hasError && !o.isEmpty ? {
161
- id: R,
162
- value: R
163
- } : null;
164
- return [...o.items, ...x, t, e].filter(Boolean);
165
- }, [o.hasNextPage, o.hasError, o.isEmpty, o.items, x]);
166
- return /* @__PURE__ */ r(u, {
167
- as: "input",
168
- ...P,
169
- ref: b,
170
- clearButtonAriaLabel: a(i.clearButtonAriaLabel),
171
- endComboboxIcon: po,
172
- focusLoop: !1,
173
- getPopoverRef: j,
174
- loading: o.isReloading,
175
- loadingAriaLabel: k || a(i.loadingAriaLabel),
176
- multiselect: g,
177
- noResultMessage: l,
178
- onFocus: w,
179
- onInputValueChange: z,
180
- onValueChange: L,
181
- options: U,
182
- renderOption: B,
183
- value: n
184
- });
185
- };
186
- export {
187
- Eo as ComboboxWithApiPagination
188
- };
@@ -1,19 +0,0 @@
1
- import { ComboboxWithApiPagination as n } from "./combobox-with-api-pagination.js";
2
- import { jsx as a } from "react/jsx-runtime";
3
- const c = (e) => {
4
- const {
5
- label: o,
6
- defaultFetcher: t,
7
- searchFetcher: r,
8
- ...i
9
- } = e;
10
- return /* @__PURE__ */ a(n, {
11
- ...i,
12
- defaultFetcher: t,
13
- label: o,
14
- searchFetcher: r
15
- });
16
- };
17
- export {
18
- c as SingleLevelTaxonomyField
19
- };
@@ -1,15 +0,0 @@
1
- import { type ReactElement } from 'react';
2
- import { type PaginationQueryInput, type TaxonomyComboboxOption, type TaxonomyFetcherResponse } from './types';
3
- interface ComboboxWithApiPaginationProps {
4
- defaultFetcher: (input: PaginationQueryInput) => Promise<TaxonomyFetcherResponse>;
5
- searchFetcher?: (input: PaginationQueryInput) => Promise<TaxonomyFetcherResponse>;
6
- includeTextInputOption?: boolean;
7
- noResultMessage?: ReactElement | string;
8
- onInputValueChange?: (inputValue: string) => void;
9
- value: TaxonomyComboboxOption | TaxonomyComboboxOption[];
10
- label: string;
11
- loadingAriaLabel?: string;
12
- multiselect?: boolean;
13
- }
14
- export declare const ComboboxWithApiPagination: (props: ComboboxWithApiPaginationProps) => import("react/jsx-runtime").JSX.Element;
15
- export {};
@@ -1,41 +0,0 @@
1
- import { type ReactElement } from 'react';
2
- export interface PaginationQueryInput {
3
- marker?: string;
4
- searchInput?: string;
5
- /**
6
- * Abort signal that will be used to cancel the request in your fetching function
7
- */
8
- signal?: AbortSignal;
9
- }
10
- export interface TaxonomyResponseOption {
11
- displayName: string;
12
- id: string;
13
- level?: number;
14
- }
15
- export interface TaxonomyResponse {
16
- marker?: string;
17
- options: TaxonomyResponseOption[];
18
- }
19
- export interface TaxonomyFetcherResponse {
20
- marker?: string;
21
- options: TaxonomyComboboxOption[];
22
- }
23
- export interface TaxonomyComboboxOption {
24
- id: string;
25
- value: string;
26
- level?: number;
27
- parentId?: string;
28
- disabled?: boolean;
29
- }
30
- export interface SingleLevelTaxonomyFieldProps {
31
- defaultOpen?: boolean;
32
- experimentalVirtualization?: boolean;
33
- multiselect?: boolean;
34
- noResultMessage?: ReactElement | string;
35
- portalElement?: HTMLElement | (() => HTMLElement);
36
- label: string;
37
- value: TaxonomyComboboxOption | TaxonomyComboboxOption[];
38
- onValueChange: (value: string) => void;
39
- defaultFetcher: (input: PaginationQueryInput) => Promise<TaxonomyFetcherResponse>;
40
- searchFetcher: (input: PaginationQueryInput) => Promise<TaxonomyFetcherResponse>;
41
- }