@box/metadata-template-browser 1.19.5 → 1.20.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 (53) hide show
  1. package/dist/chunks/browser-row.js +8 -8
  2. package/dist/chunks/metadata-template-browser-container.js +36 -25
  3. package/dist/chunks/metadata-template-browser-controller.js +6 -6
  4. package/dist/esm/lib/components/browse-list/browse-list.js +51 -46
  5. package/dist/esm/lib/components/browse-list/messages.js +4 -0
  6. package/dist/esm/lib/components/messages.js +4 -0
  7. package/dist/esm/lib/contexts/contexts.js +10 -5
  8. package/dist/esm/lib/contexts/provider.js +35 -33
  9. package/dist/esm/lib/contexts/reducer.js +3 -0
  10. package/dist/esm/lib/contexts/use-template-browser-actions.js +7 -3
  11. package/dist/esm/lib/metadata-template-browser.js +2 -1
  12. package/dist/i18n/bn-IN.js +2 -0
  13. package/dist/i18n/da-DK.js +2 -0
  14. package/dist/i18n/de-DE.js +2 -0
  15. package/dist/i18n/en-AU.js +2 -0
  16. package/dist/i18n/en-CA.js +2 -0
  17. package/dist/i18n/en-GB.js +2 -0
  18. package/dist/i18n/en-US.js +2 -0
  19. package/dist/i18n/en-US.properties +4 -0
  20. package/dist/i18n/en-x-pseudo.js +26 -24
  21. package/dist/i18n/en-x-pseudo.properties +24 -24
  22. package/dist/i18n/es-419.js +2 -0
  23. package/dist/i18n/es-ES.js +2 -0
  24. package/dist/i18n/fi-FI.js +2 -0
  25. package/dist/i18n/fr-CA.js +2 -0
  26. package/dist/i18n/fr-FR.js +2 -0
  27. package/dist/i18n/hi-IN.js +2 -0
  28. package/dist/i18n/it-IT.js +2 -0
  29. package/dist/i18n/ja-JP.js +2 -0
  30. package/dist/i18n/json/src/lib/components/browse-list/messages.json +1 -1
  31. package/dist/i18n/json/src/lib/components/messages.json +1 -1
  32. package/dist/i18n/ko-KR.js +2 -0
  33. package/dist/i18n/nb-NO.js +2 -0
  34. package/dist/i18n/nl-NL.js +2 -0
  35. package/dist/i18n/pl-PL.js +2 -0
  36. package/dist/i18n/pt-BR.js +2 -0
  37. package/dist/i18n/ru-RU.js +2 -0
  38. package/dist/i18n/sv-SE.js +2 -0
  39. package/dist/i18n/tr-TR.js +2 -0
  40. package/dist/i18n/zh-CN.js +2 -0
  41. package/dist/i18n/zh-TW.js +2 -0
  42. package/dist/styles/browser-row.css +1 -1
  43. package/dist/styles/metadata-template-browser-container.css +1 -1
  44. package/dist/types/lib/components/browse-list/messages.d.ts +5 -0
  45. package/dist/types/lib/components/messages.d.ts +5 -0
  46. package/dist/types/lib/components/metadata-template-browser-container.d.ts +6 -1
  47. package/dist/types/lib/contexts/contexts.d.ts +1 -1
  48. package/dist/types/lib/contexts/provider.d.ts +7 -1
  49. package/dist/types/lib/contexts/reducer.d.ts +1 -0
  50. package/dist/types/lib/metadata-template-browser.d.ts +8 -1
  51. package/dist/types/lib/stories/shared/generate-namespaces.d.ts +1 -0
  52. package/dist/types/lib/types.d.ts +10 -0
  53. package/package.json +1 -1
@@ -4,14 +4,14 @@ import n from "clsx";
4
4
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
5
5
  import { GridListItem as a } from "react-aria-components";
6
6
  import '../styles/browser-row.css';var o = {
7
- row: "_row_ybl3t_2",
8
- trailingSlotHoverOnly: "_trailingSlotHoverOnly_ybl3t_15",
9
- item: "_item_ybl3t_19",
10
- disabled: "_disabled_ybl3t_40",
11
- leadingIcon: "_leadingIcon_ybl3t_59",
12
- content: "_content_ybl3t_66",
13
- trailingSlot: "_trailingSlot_ybl3t_15",
14
- subtitle: "_subtitle_ybl3t_77"
7
+ row: "_row_x9hxe_2",
8
+ trailingSlotHoverOnly: "_trailingSlotHoverOnly_x9hxe_15",
9
+ item: "_item_x9hxe_19",
10
+ disabled: "_disabled_x9hxe_40",
11
+ leadingIcon: "_leadingIcon_x9hxe_59",
12
+ content: "_content_x9hxe_66",
13
+ trailingSlot: "_trailingSlot_x9hxe_15",
14
+ subtitle: "_subtitle_x9hxe_77"
15
15
  };
16
16
  function s({ id: s, leadingIcon: c, title: l, subtitle: u, trailingSlot: d, isTrailingSlotHoverOnly: f }) {
17
17
  let { isDisabled: p } = e(), m = n(o.trailingSlot, { [o.trailingSlotHoverOnly]: f });
@@ -1,31 +1,42 @@
1
- import { useBrowserActions as e, useConsumerState as t } from "../esm/lib/contexts/hooks.js";
2
- import { t as n } from "./breadcrumb-navigation.js";
3
- import { messages as r } from "../esm/lib/components/messages.js";
4
- import { useIsInitialBrowseLoading as i } from "../esm/lib/hooks/use-is-initial-browse-loading.js";
5
- import { t as a } from "./metadata-template-browser-list-box.js";
6
- import { SearchInput as o } from "@box/blueprint-web";
7
- import { useIntl as s } from "react-intl";
8
- import { jsx as c, jsxs as l } from "react/jsx-runtime";
9
- import '../styles/metadata-template-browser-container.css';var u = {
10
- container: "_container_qa97y_1",
11
- searchInput: "_searchInput_qa97y_9"
1
+ import { useBrowseState as e, useBrowserActions as t, useConsumerState as n, useNavigationState as r, useSearchState as i } from "../esm/lib/contexts/hooks.js";
2
+ import { t as a } from "./breadcrumb-navigation.js";
3
+ import { messages as o } from "../esm/lib/components/messages.js";
4
+ import { useIsInitialBrowseLoading as s } from "../esm/lib/hooks/use-is-initial-browse-loading.js";
5
+ import { t as c } from "./metadata-template-browser-list-box.js";
6
+ import { Button as l, SearchInput as u } from "@box/blueprint-web";
7
+ import { useIntl as d } from "react-intl";
8
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
9
+ import { Plus as m } from "@box/blueprint-web-assets/icons/Fill";
10
+ import '../styles/metadata-template-browser-container.css';var h = {
11
+ container: "_container_1dqk1_1",
12
+ searchInput: "_searchInput_1dqk1_9",
13
+ createTemplateButton: "_createTemplateButton_1dqk1_13"
12
14
  };
13
- function d() {
14
- let { formatMessage: d } = s(), { isDisabled: f } = t(), { setSearchValue: p } = e(), m = i();
15
- return /* @__PURE__ */ l("div", {
16
- className: u.container,
15
+ function g() {
16
+ let { formatMessage: g } = d(), { isDisabled: _ } = n(), { setSearchValue: v, createTemplate: y } = t(), { namespaceFQN: b, canCreateInCurrentNamespace: x } = r(), { searchValue: S } = i(), { isFetching: C, namespaces: w, templates: T, isNamespacesExhausted: E } = e(), D = s(), O = !C && E && w.length === 0 && T.length === 0, k = x && !D && !C && !O && S.length === 0;
17
+ return /* @__PURE__ */ p("div", {
18
+ className: h.container,
17
19
  children: [
18
- /* @__PURE__ */ c(o, {
19
- className: u.searchInput,
20
- disabled: f || m,
21
- onChange: p,
22
- placeholder: d(r.searchInputPlaceholder),
23
- searchInputAriaLabel: d(r.searchInputAriaLabel),
24
- searchInputClearAriaLabel: d(r.searchInputClearAriaLabel)
20
+ /* @__PURE__ */ f(u, {
21
+ className: h.searchInput,
22
+ disabled: _ || D,
23
+ onChange: v,
24
+ placeholder: g(o.searchInputPlaceholder),
25
+ searchInputAriaLabel: g(o.searchInputAriaLabel),
26
+ searchInputClearAriaLabel: g(o.searchInputClearAriaLabel)
25
27
  }),
26
- !m && /* @__PURE__ */ c(n, {}),
27
- /* @__PURE__ */ c(a, {})
28
+ !D && /* @__PURE__ */ f(a, {}),
29
+ k && /* @__PURE__ */ f(l, {
30
+ className: h.createTemplateButton,
31
+ disabled: _,
32
+ startIcon: m,
33
+ onClick: () => y(b),
34
+ variant: "tertiary",
35
+ size: "large",
36
+ children: g(o.createTemplateButtonLabel)
37
+ }),
38
+ /* @__PURE__ */ f(c, {})
28
39
  ]
29
40
  });
30
41
  }
31
- export { d as t };
42
+ export { g as t };
@@ -9,19 +9,19 @@ import { jsx as f, jsxs as p } from "react/jsx-runtime";
9
9
  import { NoTemplates as m } from "@box/blueprint-web-assets/illustrations/Medium";
10
10
  import '../styles/metadata-template-browser-controller.css';var h = { container: "_container_14phx_1" };
11
11
  function g() {
12
- let { isLoading: g } = n(), { formatMessage: _ } = l(), { initialLoad: v, retry: y } = t(), { path: b } = r(), { isFetching: x, initialLoadError: S, namespaces: C, templates: w } = e(), T = d(!1);
12
+ let { isLoading: g } = n(), { formatMessage: _ } = l(), { initialLoad: v, retry: y } = t(), { path: b, canCreateInCurrentNamespace: x } = r(), { isFetching: S, initialLoadError: C, namespaces: w, templates: T } = e(), E = d(!1);
13
13
  u(() => {
14
- !g && !T.current && (T.current = !0, v());
14
+ !g && !E.current && (E.current = !0, v());
15
15
  }, [g, v]);
16
- let E = C.length > 0 || w.length > 0, D = S !== null, O = b.length === 0, k = !x && !g && !E && !D && O, A = !D && !k;
16
+ let D = w.length > 0 || T.length > 0, O = C !== null, k = b.length === 0, A = !S && !g && !D && !O && k && !x, j = !O && !A;
17
17
  return /* @__PURE__ */ p("div", {
18
18
  className: h.container,
19
19
  children: [
20
- D && /* @__PURE__ */ f(i, {
20
+ O && /* @__PURE__ */ f(i, {
21
21
  body: _(a.initialLoadErrorBody),
22
22
  onRetry: y
23
23
  }),
24
- k && /* @__PURE__ */ f(s, {
24
+ A && /* @__PURE__ */ f(s, {
25
25
  body: /* @__PURE__ */ f(c, {
26
26
  as: "p",
27
27
  children: _(a.initialEmptyStateBody)
@@ -29,7 +29,7 @@ function g() {
29
29
  illustration: m,
30
30
  size: "small"
31
31
  }),
32
- A && /* @__PURE__ */ f(o, {})
32
+ j && /* @__PURE__ */ f(o, {})
33
33
  ]
34
34
  });
35
35
  }
@@ -1,58 +1,63 @@
1
- import { useBrowseState as e, useBrowserActions as t } from "../../contexts/hooks.js";
2
- import { t as n } from "../../../../chunks/types.js";
3
- import { ErrorState as r } from "../error-state/error-state.js";
4
- import { t as i } from "../../../../chunks/loader-skeleton.js";
5
- import { NamespaceRow as a } from "../namespace-row/namespace-row.js";
6
- import { TemplateRow as o } from "../template-row/template-row.js";
7
- import { t as s } from "../../../../chunks/virtualized-grid-list.js";
8
- import { messages as c } from "./messages.js";
9
- import { EmptyState as l, Text as u } from "@box/blueprint-web";
10
- import { useIntl as d } from "react-intl";
11
- import { useCallback as f } from "react";
12
- import { jsx as p } from "react/jsx-runtime";
13
- import { NoTemplates as m } from "@box/blueprint-web-assets/illustrations/Medium";
14
- var h = /* @__PURE__ */ function(e) {
1
+ import { useBrowseState as e, useBrowserActions as t, useConsumerState as n, useNavigationState as r } from "../../contexts/hooks.js";
2
+ import { t as i } from "../../../../chunks/types.js";
3
+ import { ErrorState as a } from "../error-state/error-state.js";
4
+ import { t as o } from "../../../../chunks/loader-skeleton.js";
5
+ import { NamespaceRow as s } from "../namespace-row/namespace-row.js";
6
+ import { TemplateRow as c } from "../template-row/template-row.js";
7
+ import { t as l } from "../../../../chunks/virtualized-grid-list.js";
8
+ import { messages as u } from "./messages.js";
9
+ import { EmptyState as d, Text as f } from "@box/blueprint-web";
10
+ import { useIntl as p } from "react-intl";
11
+ import { useCallback as m } from "react";
12
+ import { jsx as h } from "react/jsx-runtime";
13
+ import { NoTemplates as g } from "@box/blueprint-web-assets/illustrations/Medium";
14
+ var _ = /* @__PURE__ */ function(e) {
15
15
  return e.Namespace = "namespace", e.Template = "template", e;
16
- }(h || {});
17
- function g({ onAction: g, selectedKeys: _ }) {
18
- let { formatMessage: v } = d(), { namespaces: y, templates: b, isNamespacesExhausted: x, namespaceNextMarker: S, templateNextMarker: C, isFetching: w, isFetchingMore: T, browseError: E, loadMoreError: D } = e(), { loadMore: O, retry: k, editTemplate: A } = t(), j = S !== void 0 || x && C !== void 0, M = f((e) => e.kind === h.Namespace ? /* @__PURE__ */ p(a, { namespace: e.namespace }) : /* @__PURE__ */ p(o, {
19
- onEdit: A,
16
+ }(_ || {});
17
+ function v({ onAction: v, selectedKeys: y }) {
18
+ let { formatMessage: b } = p(), { namespaces: x, templates: S, isNamespacesExhausted: C, namespaceNextMarker: w, templateNextMarker: T, isFetching: E, isFetchingMore: D, browseError: O, loadMoreError: k } = e(), { loadMore: A, retry: j, editTemplate: M, createTemplate: N } = t(), { namespaceFQN: P, canCreateInCurrentNamespace: F } = r(), { isDisabled: I } = n(), L = w !== void 0 || C && T !== void 0, R = m((e) => e.kind === _.Namespace ? /* @__PURE__ */ h(s, { namespace: e.namespace }) : /* @__PURE__ */ h(c, {
19
+ onEdit: M,
20
20
  template: e.template,
21
- variant: n.Browse
22
- }), [A]);
23
- if (w) return /* @__PURE__ */ p(i, {});
24
- if (E !== null) return /* @__PURE__ */ p(r, {
25
- body: v(c.browseErrorBody),
26
- onRetry: k
21
+ variant: i.Browse
22
+ }), [M]);
23
+ if (E) return /* @__PURE__ */ h(o, {});
24
+ if (O !== null) return /* @__PURE__ */ h(a, {
25
+ body: b(u.browseErrorBody),
26
+ onRetry: j
27
27
  });
28
- let N = x ? b : [], P = [...y.map((e) => ({
28
+ let z = C ? S : [], B = [...x.map((e) => ({
29
29
  id: e.id,
30
- kind: h.Namespace,
30
+ kind: _.Namespace,
31
31
  namespace: e
32
- })), ...N.map((e) => ({
32
+ })), ...z.map((e) => ({
33
33
  id: e.id,
34
- kind: h.Template,
34
+ kind: _.Template,
35
35
  template: e
36
36
  }))];
37
- return P.length === 0 ? /* @__PURE__ */ p(l, {
38
- body: /* @__PURE__ */ p(u, {
37
+ return B.length === 0 ? /* @__PURE__ */ h(d, {
38
+ body: /* @__PURE__ */ h(f, {
39
39
  as: "p",
40
- children: v(c.emptyStateBody)
40
+ children: b(u.emptyStateBody)
41
41
  }),
42
- illustration: m,
43
- size: "small"
44
- }) : /* @__PURE__ */ p(s, {
45
- ariaLabel: v(c.listAriaLabel),
46
- isFetchingMore: T,
47
- items: P,
48
- listType: n.Browse,
49
- loadMoreError: D,
50
- onAction: g,
51
- hasMoreItems: j,
52
- onLoadMore: O,
53
- onRetry: O,
54
- selectedKeys: _,
55
- children: M
42
+ illustration: g,
43
+ size: "small",
44
+ children: F && /* @__PURE__ */ h(d.PrimaryAction, {
45
+ disabled: I,
46
+ onClick: () => N(P),
47
+ children: b(u.createFirstTemplateButtonLabel)
48
+ })
49
+ }) : /* @__PURE__ */ h(l, {
50
+ ariaLabel: b(u.listAriaLabel),
51
+ isFetchingMore: D,
52
+ items: B,
53
+ listType: i.Browse,
54
+ loadMoreError: k,
55
+ onAction: v,
56
+ hasMoreItems: L,
57
+ onLoadMore: A,
58
+ onRetry: A,
59
+ selectedKeys: y,
60
+ children: R
56
61
  });
57
62
  }
58
- export { g as BrowseList };
63
+ export { v as BrowseList };
@@ -11,6 +11,10 @@ var t = e({
11
11
  emptyStateBody: {
12
12
  id: "groupSharedFeatures.metadataTemplateBrowser.browseList.emptyStateBody",
13
13
  defaultMessage: "There are no templates or namespaces in this folder."
14
+ },
15
+ createFirstTemplateButtonLabel: {
16
+ id: "groupSharedFeatures.metadataTemplateBrowser.browseList.createFirstTemplateButtonLabel",
17
+ defaultMessage: "Create first template"
14
18
  }
15
19
  });
16
20
  export { t as messages };
@@ -23,6 +23,10 @@ var t = e({
23
23
  initialLoadErrorBody: {
24
24
  id: "groupSharedFeatures.metadataTemplateBrowser.container.initialLoadErrorBody",
25
25
  defaultMessage: "Something went wrong while loading templates."
26
+ },
27
+ createTemplateButtonLabel: {
28
+ id: "groupSharedFeatures.metadataTemplateBrowser.container.createTemplateButtonLabel",
29
+ defaultMessage: "New Template"
26
30
  }
27
31
  });
28
32
  export { t as messages };
@@ -2,13 +2,18 @@ import { useTemplateBrowserActions as e } from "./use-template-browser-actions.j
2
2
  import { createContext as t, useMemo as n } from "react";
3
3
  import { jsx as r } from "react/jsx-runtime";
4
4
  var i = /* @__PURE__ */ t(null);
5
- function a({ children: e, namespaceFQN: t, path: a }) {
6
- let o = n(() => ({
5
+ function a({ children: e, namespaceFQN: t, path: a, canCreateInCurrentNamespace: o }) {
6
+ let s = n(() => ({
7
7
  namespaceFQN: t,
8
- path: a
9
- }), [t, a]);
8
+ path: a,
9
+ canCreateInCurrentNamespace: o
10
+ }), [
11
+ t,
12
+ a,
13
+ o
14
+ ]);
10
15
  return /* @__PURE__ */ r(i.Provider, {
11
- value: o,
16
+ value: s,
12
17
  children: e
13
18
  });
14
19
  }
@@ -2,45 +2,47 @@ import { browserReducer as e, initialState as t } from "./reducer.js";
2
2
  import { BrowseStateContextProvider as n, BrowserActionsContextProvider as r, NavigationStateContextProvider as i, SearchStateContextProvider as a, SelectionStateContextProvider as o } from "./contexts.js";
3
3
  import { useReducer as s, useRef as c } from "react";
4
4
  import { jsx as l } from "react/jsx-runtime";
5
- function u({ children: u, namespaceFQN: d, itemsService: f, eventService: p, initialSelectedTemplateId: m }) {
6
- let [h, g] = s(e, {
5
+ function u({ children: u, namespaceFQN: d, itemsService: f, eventService: p, initialSelectedTemplateId: m, canCreateAtRoot: h = !1 }) {
6
+ let [g, _] = s(e, {
7
7
  ...t,
8
8
  namespaceFQN: d,
9
- selectedTemplateId: m ?? null
10
- }), _ = c(h);
11
- _.current = h;
12
- let v = c(/* @__PURE__ */ new Map()), y = c(f);
13
- y.current = f;
14
- let b = c(p);
15
- return b.current = p, /* @__PURE__ */ l(i, {
16
- namespaceFQN: h.namespaceFQN,
17
- path: h.path,
9
+ selectedTemplateId: m ?? null,
10
+ canCreateInCurrentNamespace: h
11
+ }), v = c(g);
12
+ v.current = g;
13
+ let y = c(/* @__PURE__ */ new Map()), b = c(f);
14
+ b.current = f;
15
+ let x = c(p);
16
+ return x.current = p, /* @__PURE__ */ l(i, {
17
+ namespaceFQN: g.namespaceFQN,
18
+ path: g.path,
19
+ canCreateInCurrentNamespace: g.canCreateInCurrentNamespace,
18
20
  children: /* @__PURE__ */ l(n, {
19
- namespaces: h.namespaces,
20
- templates: h.templates,
21
- isNamespacesExhausted: h.isNamespacesExhausted,
22
- namespaceNextMarker: h.namespaceNextMarker,
23
- templateNextMarker: h.templateNextMarker,
24
- isFetching: h.isFetching,
25
- isFetchingMore: h.isFetchingMore,
26
- initialLoadError: h.initialLoadError,
27
- browseError: h.browseError,
28
- loadMoreError: h.loadMoreError,
21
+ namespaces: g.namespaces,
22
+ templates: g.templates,
23
+ isNamespacesExhausted: g.isNamespacesExhausted,
24
+ namespaceNextMarker: g.namespaceNextMarker,
25
+ templateNextMarker: g.templateNextMarker,
26
+ isFetching: g.isFetching,
27
+ isFetchingMore: g.isFetchingMore,
28
+ initialLoadError: g.initialLoadError,
29
+ browseError: g.browseError,
30
+ loadMoreError: g.loadMoreError,
29
31
  children: /* @__PURE__ */ l(a, {
30
- searchValue: h.searchValue,
31
- searchQuery: h.searchQuery,
32
- searchResults: h.searchResults,
33
- searchNextMarker: h.searchNextMarker,
34
- isFetchingSearch: h.isFetchingSearch,
35
- searchError: h.searchError,
32
+ searchValue: g.searchValue,
33
+ searchQuery: g.searchQuery,
34
+ searchResults: g.searchResults,
35
+ searchNextMarker: g.searchNextMarker,
36
+ isFetchingSearch: g.isFetchingSearch,
37
+ searchError: g.searchError,
36
38
  children: /* @__PURE__ */ l(o, {
37
- selectedTemplateId: h.selectedTemplateId,
39
+ selectedTemplateId: g.selectedTemplateId,
38
40
  children: /* @__PURE__ */ l(r, {
39
- itemsServiceRef: y,
40
- eventServiceRef: b,
41
- stateRef: _,
42
- dispatch: g,
43
- levelCache: v,
41
+ itemsServiceRef: b,
42
+ eventServiceRef: x,
43
+ stateRef: v,
44
+ dispatch: _,
45
+ levelCache: y,
44
46
  children: u
45
47
  })
46
48
  })
@@ -3,6 +3,7 @@ var e = /* @__PURE__ */ function(e) {
3
3
  }({}), t = {
4
4
  namespaceFQN: "",
5
5
  path: [],
6
+ canCreateInCurrentNamespace: !1,
6
7
  namespaces: [],
7
8
  templates: [],
8
9
  isNamespacesExhausted: !1,
@@ -30,6 +31,7 @@ function n(t, n) {
30
31
  fqn: n.namespace.id,
31
32
  displayName: n.namespace.displayName
32
33
  }],
34
+ canCreateInCurrentNamespace: n.namespace.canCreate ?? !1,
33
35
  namespaces: [],
34
36
  templates: [],
35
37
  namespaceNextMarker: void 0,
@@ -43,6 +45,7 @@ function n(t, n) {
43
45
  ...t,
44
46
  namespaceFQN: n.fqn,
45
47
  path: t.path.filter((e) => n.fqn === e.fqn || n.fqn.startsWith(`${e.fqn}.`)),
48
+ canCreateInCurrentNamespace: n.cached.canCreate,
46
49
  namespaces: n.cached.namespaces,
47
50
  templates: n.cached.templates,
48
51
  namespaceNextMarker: n.cached.namespaceNextMarker,
@@ -97,7 +97,8 @@ function d(d, f, p, m, h) {
97
97
  templates: r.templates,
98
98
  namespaceNextMarker: r.namespaceNextMarker,
99
99
  templateNextMarker: r.templateNextMarker,
100
- isNamespacesExhausted: r.isNamespacesExhausted
100
+ isNamespacesExhausted: r.isNamespacesExhausted,
101
+ canCreate: r.canCreateInCurrentNamespace
101
102
  }), m({
102
103
  type: e.NavigateTo,
103
104
  namespace: t
@@ -188,7 +189,9 @@ function d(d, f, p, m, h) {
188
189
  }), s(() => f.current.onTemplateSelect?.(t)));
189
190
  }, P = (e) => {
190
191
  s(() => f.current.onTemplateEdit?.(e));
191
- }, F = async () => {
192
+ }, F = (e) => {
193
+ s(() => f.current.onCreateTemplate?.(e));
194
+ }, I = async () => {
192
195
  let { searchError: t, searchQuery: n, loadMoreError: r, initialLoadError: i, browseError: a, namespaceFQN: o } = p.current;
193
196
  if (t) {
194
197
  let t = x();
@@ -222,7 +225,8 @@ function d(d, f, p, m, h) {
222
225
  loadMore: M,
223
226
  selectTemplate: N,
224
227
  editTemplate: P,
225
- retry: F
228
+ createTemplate: F,
229
+ retry: I
226
230
  }), []);
227
231
  }
228
232
  export { d as useTemplateBrowserActions };
@@ -2,7 +2,7 @@ import { ConsumerStateContextProvider as e } from "./contexts/contexts.js";
2
2
  import { MetadataTemplateBrowserProvider as t } from "./contexts/provider.js";
3
3
  import { t as n } from "../../chunks/metadata-template-browser-controller.js";
4
4
  import { jsx as r } from "react/jsx-runtime";
5
- function i({ enterpriseId: i, itemsService: a, eventService: o, isLoading: s, isDisabled: c, initialSelectedTemplateId: l }) {
5
+ function i({ enterpriseId: i, itemsService: a, eventService: o, isLoading: s, isDisabled: c, initialSelectedTemplateId: l, canCreateAtRoot: u }) {
6
6
  return /* @__PURE__ */ r(e, {
7
7
  isDisabled: c,
8
8
  isLoading: s,
@@ -11,6 +11,7 @@ function i({ enterpriseId: i, itemsService: a, eventService: o, isLoading: s, is
11
11
  itemsService: a,
12
12
  eventService: o,
13
13
  initialSelectedTemplateId: l,
14
+ canCreateAtRoot: u,
14
15
  children: /* @__PURE__ */ r(n, {})
15
16
  })
16
17
  });
@@ -3,8 +3,10 @@ export default {
3
3
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.enterpriseCrumbLabel": "Enterprise",
4
4
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.truncatedLinksIconAriaLabel": "আরও দেখান",
5
5
  "groupSharedFeatures.metadataTemplateBrowser.browseList.browseErrorBody": "এই নেমস্পেস লোড করার সময় কোনো সমস্যা হয়েছে।",
6
+ "groupSharedFeatures.metadataTemplateBrowser.browseList.createFirstTemplateButtonLabel": "Create first template",
6
7
  "groupSharedFeatures.metadataTemplateBrowser.browseList.emptyStateBody": "এই ফোল্ডারে কোনো টেমপ্লেট বা নেমস্পেস নেই।",
7
8
  "groupSharedFeatures.metadataTemplateBrowser.browseList.listAriaLabel": "মেটাডেটা টেম্পলেট",
9
+ "groupSharedFeatures.metadataTemplateBrowser.container.createTemplateButtonLabel": "New Template",
8
10
  "groupSharedFeatures.metadataTemplateBrowser.container.initialEmptyStateBody": "এই মুহূর্তে, ব্যবহারের জন্য কোনও মেটাডেটা টেমপ্লেট প্রস্তুত নেই। আপনি আপনার অ্যাডমিনের কাছে পৌঁছিয়ে প্রথমটি তৈরি করতে পারেন।",
9
11
  "groupSharedFeatures.metadataTemplateBrowser.container.initialLoadErrorBody": "টেমপ্লেট লোড করার সময় কোনো সমস্যা হয়েছে।",
10
12
  "groupSharedFeatures.metadataTemplateBrowser.container.loadingAriaLabel": "টেমপ্লেটগুলি লোড করা হচ্ছে",
@@ -3,8 +3,10 @@ export default {
3
3
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.enterpriseCrumbLabel": "Virksomhed",
4
4
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.truncatedLinksIconAriaLabel": "Vis flere",
5
5
  "groupSharedFeatures.metadataTemplateBrowser.browseList.browseErrorBody": "Noget gik galt under indlæsningen af dette navneområde.",
6
+ "groupSharedFeatures.metadataTemplateBrowser.browseList.createFirstTemplateButtonLabel": "Create first template",
6
7
  "groupSharedFeatures.metadataTemplateBrowser.browseList.emptyStateBody": "Der er ingen skabeloner eller navneområder i denne mappe.",
7
8
  "groupSharedFeatures.metadataTemplateBrowser.browseList.listAriaLabel": "Metadataskabeloner",
9
+ "groupSharedFeatures.metadataTemplateBrowser.container.createTemplateButtonLabel": "New Template",
8
10
  "groupSharedFeatures.metadataTemplateBrowser.container.initialEmptyStateBody": "I øjeblikket er der ingen metadataskabeloner klar til brug. Du kan oprette den første ved at kontakte din administrator.",
9
11
  "groupSharedFeatures.metadataTemplateBrowser.container.initialLoadErrorBody": "Noget gik galt under indlæsningen af skabeloner.",
10
12
  "groupSharedFeatures.metadataTemplateBrowser.container.loadingAriaLabel": "Indlæser skabeloner",
@@ -3,8 +3,10 @@ export default {
3
3
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.enterpriseCrumbLabel": "Unternehmen",
4
4
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.truncatedLinksIconAriaLabel": "Weitere anzeigen",
5
5
  "groupSharedFeatures.metadataTemplateBrowser.browseList.browseErrorBody": "Beim Laden dieses Namensraums ist ein Fehler aufgetreten.",
6
+ "groupSharedFeatures.metadataTemplateBrowser.browseList.createFirstTemplateButtonLabel": "Create first template",
6
7
  "groupSharedFeatures.metadataTemplateBrowser.browseList.emptyStateBody": "In diesem Ordner sind keine Vorlagen oder Namensräume enthalten.",
7
8
  "groupSharedFeatures.metadataTemplateBrowser.browseList.listAriaLabel": "Metadatenvorlagen",
9
+ "groupSharedFeatures.metadataTemplateBrowser.container.createTemplateButtonLabel": "New Template",
8
10
  "groupSharedFeatures.metadataTemplateBrowser.container.initialEmptyStateBody": "Derzeit sind keine Metadatenvorlagen zur Verwendung verfügbar. Sie können die erste Vorlage erstellen, indem Sie sich an Ihren Administrator wenden.",
9
11
  "groupSharedFeatures.metadataTemplateBrowser.container.initialLoadErrorBody": "Beim Laden der Vorlagen ist ein Fehler aufgetreten.",
10
12
  "groupSharedFeatures.metadataTemplateBrowser.container.loadingAriaLabel": "Vorlagen werden geladen",
@@ -3,8 +3,10 @@ export default {
3
3
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.enterpriseCrumbLabel": "Enterprise",
4
4
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.truncatedLinksIconAriaLabel": "Show more",
5
5
  "groupSharedFeatures.metadataTemplateBrowser.browseList.browseErrorBody": "Something went wrong while loading this namespace.",
6
+ "groupSharedFeatures.metadataTemplateBrowser.browseList.createFirstTemplateButtonLabel": "Create first template",
6
7
  "groupSharedFeatures.metadataTemplateBrowser.browseList.emptyStateBody": "There are no templates or namespaces in this folder.",
7
8
  "groupSharedFeatures.metadataTemplateBrowser.browseList.listAriaLabel": "Metadata templates",
9
+ "groupSharedFeatures.metadataTemplateBrowser.container.createTemplateButtonLabel": "New Template",
8
10
  "groupSharedFeatures.metadataTemplateBrowser.container.initialEmptyStateBody": "At the moment, there are no metadata templates ready for use. You can create the first one by reaching out to your Admin.",
9
11
  "groupSharedFeatures.metadataTemplateBrowser.container.initialLoadErrorBody": "Something went wrong while loading templates.",
10
12
  "groupSharedFeatures.metadataTemplateBrowser.container.loadingAriaLabel": "Loading templates",
@@ -3,8 +3,10 @@ export default {
3
3
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.enterpriseCrumbLabel": "Enterprise",
4
4
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.truncatedLinksIconAriaLabel": "Show more",
5
5
  "groupSharedFeatures.metadataTemplateBrowser.browseList.browseErrorBody": "Something went wrong while loading this namespace.",
6
+ "groupSharedFeatures.metadataTemplateBrowser.browseList.createFirstTemplateButtonLabel": "Create first template",
6
7
  "groupSharedFeatures.metadataTemplateBrowser.browseList.emptyStateBody": "There are no templates or namespaces in this folder.",
7
8
  "groupSharedFeatures.metadataTemplateBrowser.browseList.listAriaLabel": "Metadata templates",
9
+ "groupSharedFeatures.metadataTemplateBrowser.container.createTemplateButtonLabel": "New Template",
8
10
  "groupSharedFeatures.metadataTemplateBrowser.container.initialEmptyStateBody": "At the moment, there are no metadata templates ready for use. You can create the first one by reaching out to your Admin.",
9
11
  "groupSharedFeatures.metadataTemplateBrowser.container.initialLoadErrorBody": "Something went wrong while loading templates.",
10
12
  "groupSharedFeatures.metadataTemplateBrowser.container.loadingAriaLabel": "Loading templates",
@@ -3,8 +3,10 @@ export default {
3
3
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.enterpriseCrumbLabel": "Enterprise",
4
4
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.truncatedLinksIconAriaLabel": "Show more",
5
5
  "groupSharedFeatures.metadataTemplateBrowser.browseList.browseErrorBody": "Something went wrong while loading this namespace.",
6
+ "groupSharedFeatures.metadataTemplateBrowser.browseList.createFirstTemplateButtonLabel": "Create first template",
6
7
  "groupSharedFeatures.metadataTemplateBrowser.browseList.emptyStateBody": "There are no templates or namespaces in this folder.",
7
8
  "groupSharedFeatures.metadataTemplateBrowser.browseList.listAriaLabel": "Metadata templates",
9
+ "groupSharedFeatures.metadataTemplateBrowser.container.createTemplateButtonLabel": "New Template",
8
10
  "groupSharedFeatures.metadataTemplateBrowser.container.initialEmptyStateBody": "At the moment, there are no metadata templates ready for use. You can create the first one by reaching out to your Admin.",
9
11
  "groupSharedFeatures.metadataTemplateBrowser.container.initialLoadErrorBody": "Something went wrong while loading templates.",
10
12
  "groupSharedFeatures.metadataTemplateBrowser.container.loadingAriaLabel": "Loading templates",
@@ -3,8 +3,10 @@ export default {
3
3
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.enterpriseCrumbLabel": "Enterprise",
4
4
  "groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.truncatedLinksIconAriaLabel": "Show more",
5
5
  "groupSharedFeatures.metadataTemplateBrowser.browseList.browseErrorBody": "Something went wrong while loading this namespace.",
6
+ "groupSharedFeatures.metadataTemplateBrowser.browseList.createFirstTemplateButtonLabel": "Create first template",
6
7
  "groupSharedFeatures.metadataTemplateBrowser.browseList.emptyStateBody": "There are no templates or namespaces in this folder.",
7
8
  "groupSharedFeatures.metadataTemplateBrowser.browseList.listAriaLabel": "Metadata templates",
9
+ "groupSharedFeatures.metadataTemplateBrowser.container.createTemplateButtonLabel": "New Template",
8
10
  "groupSharedFeatures.metadataTemplateBrowser.container.initialEmptyStateBody": "At the moment, there are no metadata templates ready for use. You can create the first one by reaching out to your Admin.",
9
11
  "groupSharedFeatures.metadataTemplateBrowser.container.initialLoadErrorBody": "Something went wrong while loading templates.",
10
12
  "groupSharedFeatures.metadataTemplateBrowser.container.loadingAriaLabel": "Loading templates",
@@ -6,10 +6,14 @@ groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.enterpriseCrumb
6
6
  groupSharedFeatures.metadataTemplateBrowser.breadcrumbNavigation.truncatedLinksIconAriaLabel = Show more
7
7
  # Error body when navigating into a namespace fails to load
8
8
  groupSharedFeatures.metadataTemplateBrowser.browseList.browseErrorBody = Something went wrong while loading this namespace.
9
+ # Button label shown in the empty namespace state when the user is allowed to create a template
10
+ groupSharedFeatures.metadataTemplateBrowser.browseList.createFirstTemplateButtonLabel = Create first template
9
11
  # Body text shown when the current namespace has no child namespaces or templates
10
12
  groupSharedFeatures.metadataTemplateBrowser.browseList.emptyStateBody = There are no templates or namespaces in this folder.
11
13
  # Accessible label for the browse list
12
14
  groupSharedFeatures.metadataTemplateBrowser.browseList.listAriaLabel = Metadata templates
15
+ # Label for the button that opens the template editor to create a new template in the current namespace
16
+ groupSharedFeatures.metadataTemplateBrowser.container.createTemplateButtonLabel = New Template
13
17
  # Body text shown when the initial load returns no templates at all
14
18
  groupSharedFeatures.metadataTemplateBrowser.container.initialEmptyStateBody = At the moment, there are no metadata templates ready for use. You can create the first one by reaching out to your Admin.
15
19
  # Error body when the initial template list fails to load