@box/metadata-template-editor 2.3.21 → 2.3.23

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.
@@ -1 +1 @@
1
- import{general}from"../esm/lib/components/metadata-field-configurator/messages/configurator-messages.js";import{Divider,DropdownMenu,IconButton,Text}from"@box/blueprint-web";import{FormattedMessage,useIntl}from"react-intl";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import{Ellipsis}from"@box/blueprint-web-assets/icons/Fill";import React from"react";import{IconIconErrorOnLight}from"@box/blueprint-web-assets/tokens/tokens";import clsx from"clsx";import{ArrowDown,ArrowUp,Hidden,Trash,TwoFiles,Visible}from"@box/blueprint-web-assets/icons/Line";import '../styles/field-context-menu.css';var field_context_menu_module_default={contextMenuTrigger:`_contextMenuTrigger_102vn_1`,menuItem:`_menuItem_102vn_5`,contextMenu:`_contextMenu_102vn_1`,divider:`_divider_102vn_14`},FieldContextMenu=({className,index,maxIndex,isHidden=!1,onReorderFields,onToggleVisibility,onRequestDelete,onRequestDuplicate,onOpenChange})=>{let intl=useIntl(),[contextMenuOpen,setContextMenuOpen]=React.useState(!1),contextMenuRef=React.useRef(null),handleOpenChange=open=>{setContextMenuOpen(open),onOpenChange?.(open)},handleMoveUp=()=>{index>0&&onReorderFields?.(index,index-1)},handleMoveDown=()=>{onReorderFields?.(index,index+1)},hasItemsAboveDelete=!!(onReorderFields||onRequestDuplicate||onToggleVisibility);return jsxs(DropdownMenu.Root,{open:contextMenuOpen,onOpenChange:handleOpenChange,modal:!1,children:[jsx(DropdownMenu.Trigger,{className:clsx(field_context_menu_module_default.contextMenuTrigger,className),children:jsx(IconButton,{icon:Ellipsis,"aria-label":intl.formatMessage(general.contextMenuAriaLabel),size:`large`})}),jsxs(DropdownMenu.Content,{ref:contextMenuRef,align:`end`,className:field_context_menu_module_default.contextMenu,children:[onReorderFields&&jsxs(Fragment,{children:[jsx(DropdownMenu.Item,{disabled:index===0,onClick:handleMoveUp,"aria-label":intl.formatMessage(general.moveUpAriaLabel),children:jsxs(`div`,{className:field_context_menu_module_default.menuItem,children:[jsx(ArrowUp,{"aria-hidden":`true`}),jsx(FormattedMessage,{...general.moveUp})]})}),jsx(DropdownMenu.Item,{disabled:index===maxIndex,onClick:handleMoveDown,"aria-label":intl.formatMessage(general.moveDownAriaLabel),children:jsxs(`div`,{className:field_context_menu_module_default.menuItem,children:[jsx(ArrowDown,{"aria-hidden":`true`}),jsx(FormattedMessage,{...general.moveDown})]})})]}),onRequestDuplicate&&jsx(DropdownMenu.Item,{onClick:onRequestDuplicate,"aria-label":intl.formatMessage(general.duplicateFieldAriaLabel),children:jsxs(`div`,{className:field_context_menu_module_default.menuItem,children:[jsx(TwoFiles,{"aria-hidden":`true`}),jsx(FormattedMessage,{...general.duplicateField})]})}),onToggleVisibility&&jsx(DropdownMenu.Item,{onClick:()=>onToggleVisibility(!isHidden),"aria-label":intl.formatMessage(isHidden?general.showField:general.hideField),children:jsxs(`div`,{className:field_context_menu_module_default.menuItem,children:[jsx(isHidden?Visible:Hidden,{"aria-hidden":`true`}),jsx(FormattedMessage,{...isHidden?general.showField:general.hideField})]})}),onRequestDelete&&jsxs(Fragment,{children:[hasItemsAboveDelete&&jsx(Divider,{className:field_context_menu_module_default.divider}),jsx(DropdownMenu.Item,{onClick:onRequestDelete,"aria-label":intl.formatMessage(general.deleteFieldAriaLabel),children:jsxs(`div`,{className:field_context_menu_module_default.menuItem,children:[jsx(Trash,{color:IconIconErrorOnLight,"aria-hidden":`true`}),jsx(Text,{as:`span`,color:`textOnLightError`,children:jsx(FormattedMessage,{...general.deleteField})})]})})]})]})]})};export{FieldContextMenu as t};
1
+ import{general}from"../esm/lib/components/metadata-field-configurator/messages/configurator-messages.js";import{Divider,DropdownMenu,IconButton,Text}from"@box/blueprint-web";import{FormattedMessage,useIntl}from"react-intl";import{Fragment,jsx,jsxs}from"react/jsx-runtime";import{Ellipsis}from"@box/blueprint-web-assets/icons/Fill";import React,{Children}from"react";import{IconIconErrorOnLight}from"@box/blueprint-web-assets/tokens/tokens";import clsx from"clsx";import{ArrowDown,ArrowUp,Hidden,Trash,TwoFiles,Visible}from"@box/blueprint-web-assets/icons/Line";import '../styles/field-context-menu.css';var field_context_menu_module_default={contextMenuTrigger:`_contextMenuTrigger_102vn_1`,menuItem:`_menuItem_102vn_5`,contextMenu:`_contextMenu_102vn_1`,divider:`_divider_102vn_14`},FieldContextMenu=({className,index,maxIndex,isHidden=!1,onReorderFields,onToggleVisibility,onRequestDelete,onRequestDuplicate,onOpenChange})=>{let intl=useIntl(),[contextMenuOpen,setContextMenuOpen]=React.useState(!1),contextMenuRef=React.useRef(null),handleOpenChange=open=>{setContextMenuOpen(open),onOpenChange?.(open)},handleMoveUp=()=>{index>0&&onReorderFields?.(index,index-1)},handleMoveDown=()=>{onReorderFields?.(index,index+1)},hasItemsAboveDelete=!!(onReorderFields||onRequestDuplicate||onToggleVisibility),menuContent=jsxs(Fragment,{children:[onReorderFields&&jsxs(Fragment,{children:[jsx(DropdownMenu.Item,{disabled:index===0,onClick:handleMoveUp,"aria-label":intl.formatMessage(general.moveUpAriaLabel),children:jsxs(`div`,{className:field_context_menu_module_default.menuItem,children:[jsx(ArrowUp,{"aria-hidden":`true`}),jsx(FormattedMessage,{...general.moveUp})]})}),jsx(DropdownMenu.Item,{disabled:index===maxIndex,onClick:handleMoveDown,"aria-label":intl.formatMessage(general.moveDownAriaLabel),children:jsxs(`div`,{className:field_context_menu_module_default.menuItem,children:[jsx(ArrowDown,{"aria-hidden":`true`}),jsx(FormattedMessage,{...general.moveDown})]})})]}),onRequestDuplicate&&jsx(DropdownMenu.Item,{onClick:onRequestDuplicate,"aria-label":intl.formatMessage(general.duplicateFieldAriaLabel),children:jsxs(`div`,{className:field_context_menu_module_default.menuItem,children:[jsx(TwoFiles,{"aria-hidden":`true`}),jsx(FormattedMessage,{...general.duplicateField})]})}),onToggleVisibility&&jsx(DropdownMenu.Item,{onClick:()=>onToggleVisibility(!isHidden),"aria-label":intl.formatMessage(isHidden?general.showField:general.hideField),children:jsxs(`div`,{className:field_context_menu_module_default.menuItem,children:[jsx(isHidden?Visible:Hidden,{"aria-hidden":`true`}),jsx(FormattedMessage,{...isHidden?general.showField:general.hideField})]})}),onRequestDelete&&jsxs(Fragment,{children:[hasItemsAboveDelete&&jsx(Divider,{className:field_context_menu_module_default.divider}),jsx(DropdownMenu.Item,{onClick:onRequestDelete,"aria-label":intl.formatMessage(general.deleteFieldAriaLabel),children:jsxs(`div`,{className:field_context_menu_module_default.menuItem,children:[jsx(Trash,{color:IconIconErrorOnLight,"aria-hidden":`true`}),jsx(Text,{as:`span`,color:`textOnLightError`,children:jsx(FormattedMessage,{...general.deleteField})})]})})]})]}),menuItems=Children.toArray(menuContent.props.children);return menuItems.length===0?null:jsxs(DropdownMenu.Root,{open:contextMenuOpen,onOpenChange:handleOpenChange,modal:!1,children:[jsx(DropdownMenu.Trigger,{className:clsx(field_context_menu_module_default.contextMenuTrigger,className),children:jsx(IconButton,{icon:Ellipsis,"aria-label":intl.formatMessage(general.contextMenuAriaLabel),size:`large`})}),jsx(DropdownMenu.Content,{ref:contextMenuRef,align:`end`,className:field_context_menu_module_default.contextMenu,children:menuItems})]})};export{FieldContextMenu as t};
@@ -1 +1 @@
1
- import '../styles/metadata-field-configurator.css';var metadata_field_configurator_module_default={fieldset:`_fieldset_1fcv5_1`,expandedContent:`_expandedContent_1fcv5_7`,basic:`_basic_1fcv5_13`,fieldTypeSelect:`_fieldTypeSelect_1fcv5_18`,typeSpecific:`_typeSpecific_1fcv5_22`,description:`_description_1fcv5_29`,labelWithTooltip:`_labelWithTooltip_1fcv5_34`,fieldActionSlot:`_fieldActionSlot_1fcv5_39`,expandedToolbarActions:`_expandedToolbarActions_1fcv5_46`,extensionTabsContainer:`_extensionTabsContainer_1fcv5_52`,extensionContent:`_extensionContent_1fcv5_58`,fieldCollapsedText:`_fieldCollapsedText_1fcv5_62`,expanded:`_expanded_1fcv5_7`,contextMenuWithCollapsedText:`_contextMenuWithCollapsedText_1fcv5_71`,fieldAccordionItem:`_fieldAccordionItem_1fcv5_77`,fieldContextMenu:`_fieldContextMenu_1fcv5_84`,menuOpen:`_menuOpen_1fcv5_87`};export{metadata_field_configurator_module_default as t};
1
+ import '../styles/metadata-field-configurator.css';var metadata_field_configurator_module_default={fieldset:`_fieldset_1dkyn_1`,expandedContent:`_expandedContent_1dkyn_7`,basic:`_basic_1dkyn_13`,fieldTypeSelect:`_fieldTypeSelect_1dkyn_18`,typeSpecific:`_typeSpecific_1dkyn_22`,description:`_description_1dkyn_29`,labelWithTooltip:`_labelWithTooltip_1dkyn_34`,fieldActionSlot:`_fieldActionSlot_1dkyn_39`,expandedToolbarActions:`_expandedToolbarActions_1dkyn_46`,extensionTabsContainer:`_extensionTabsContainer_1dkyn_52`,extensionContent:`_extensionContent_1dkyn_58`,fieldCollapsedText:`_fieldCollapsedText_1dkyn_62`,expanded:`_expanded_1dkyn_7`,contextMenuWithCollapsedText:`_contextMenuWithCollapsedText_1dkyn_71`,fieldAccordionItem:`_fieldAccordionItem_1dkyn_77`,fieldContextMenu:`_fieldContextMenu_1dkyn_84`,menuOpen:`_menuOpen_1dkyn_87`,hiddenBadge:`_hiddenBadge_1dkyn_106`};export{metadata_field_configurator_module_default as t};
@@ -1 +1 @@
1
- ._fieldset_1fcv5_1{border:0;margin:0;padding:0}._expandedContent_1fcv5_7{gap:var(--space-4);flex-direction:column;display:flex}._basic_1fcv5_13{gap:var(--space-4);grid-template-columns:3fr 2fr;display:grid}._basic_1fcv5_13 ._fieldTypeSelect_1fcv5_18{min-width:145px}._typeSpecific_1fcv5_22{margin-top:var(--space-2);gap:var(--space-4);flex-direction:column;display:flex}._description_1fcv5_29{gap:var(--space-4);flex-direction:column;display:flex}._description_1fcv5_29 ._labelWithTooltip_1fcv5_34{margin-block-end:var(--space-2);display:inline-block}._fieldActionSlot_1fcv5_39{align-items:center;gap:var(--space-2);display:flex;position:relative}._expandedToolbarActions_1fcv5_46{align-items:center;gap:var(--space-1);display:flex}._extensionTabsContainer_1fcv5_52{border-right:1px solid var(--border-border-on-light);height:auto;overflow:visible}._extensionContent_1fcv5_58{padding:var(--space-4) 0}._fieldCollapsedText_1fcv5_62{visibility:visible;display:block}._expanded_1fcv5_7 ._fieldCollapsedText_1fcv5_62{visibility:hidden}._contextMenuWithCollapsedText_1fcv5_71{background-color:#0000;position:absolute;right:0}._fieldAccordionItem_1fcv5_77{max-width:650px}._fieldAccordionItem_1fcv5_77[data-state=closed] ._fieldActionSlot_1fcv5_39{position:relative}._fieldAccordionItem_1fcv5_77[data-state=closed] ._fieldContextMenu_1fcv5_84{display:none}._fieldAccordionItem_1fcv5_77[data-state=closed] ._fieldContextMenu_1fcv5_84._menuOpen_1fcv5_87{display:flex}._fieldAccordionItem_1fcv5_77[data-state=closed] ._extensionTabsContainer_1fcv5_52{display:none}._fieldAccordionItem_1fcv5_77[data-state=closed]:has(:hover) ._fieldContextMenu_1fcv5_84{display:flex}._fieldAccordionItem_1fcv5_77[data-state=closed]:has(:hover) ._contextMenuWithCollapsedText_1fcv5_71{position:absolute;top:-50%;right:0}
1
+ ._fieldset_1dkyn_1{border:0;margin:0;padding:0}._expandedContent_1dkyn_7{gap:var(--space-4);flex-direction:column;display:flex}._basic_1dkyn_13{gap:var(--space-4);grid-template-columns:3fr 2fr;display:grid}._basic_1dkyn_13 ._fieldTypeSelect_1dkyn_18{min-width:145px}._typeSpecific_1dkyn_22{margin-top:var(--space-2);gap:var(--space-4);flex-direction:column;display:flex}._description_1dkyn_29{gap:var(--space-4);flex-direction:column;display:flex}._description_1dkyn_29 ._labelWithTooltip_1dkyn_34{margin-block-end:var(--space-2);display:inline-block}._fieldActionSlot_1dkyn_39{align-items:center;gap:var(--space-2);display:flex;position:relative}._expandedToolbarActions_1dkyn_46{align-items:center;gap:var(--space-1);display:flex}._extensionTabsContainer_1dkyn_52{border-right:1px solid var(--border-border-on-light);height:auto;overflow:visible}._extensionContent_1dkyn_58{padding:var(--space-4) 0}._fieldCollapsedText_1dkyn_62{visibility:visible;display:block}._expanded_1dkyn_7 ._fieldCollapsedText_1dkyn_62{visibility:hidden}._contextMenuWithCollapsedText_1dkyn_71{background-color:#0000;position:absolute;right:0}._fieldAccordionItem_1dkyn_77{max-width:650px}._fieldAccordionItem_1dkyn_77[data-state=closed] ._fieldActionSlot_1dkyn_39{position:relative}._fieldAccordionItem_1dkyn_77[data-state=closed] ._fieldContextMenu_1dkyn_84{display:none}._fieldAccordionItem_1dkyn_77[data-state=closed] ._fieldContextMenu_1dkyn_84._menuOpen_1dkyn_87{display:flex}._fieldAccordionItem_1dkyn_77[data-state=closed] ._extensionTabsContainer_1dkyn_52{display:none}._fieldAccordionItem_1dkyn_77[data-state=closed]:has(>:hover) ._fieldContextMenu_1dkyn_84{background-color:#ebebeb;display:flex}._fieldAccordionItem_1dkyn_77[data-state=closed]:has(>:hover) ._fieldContextMenu_1dkyn_84:before{content:"";width:var(--space-3);background:linear-gradient(90deg,#0000,#ebebeb);position:absolute;top:0;bottom:0;right:99%}._fieldAccordionItem_1dkyn_77[data-state=closed]:has(>:hover) ._fieldActionSlot_1dkyn_39:has(._fieldContextMenu_1dkyn_84,._contextMenuWithCollapsedText_1dkyn_71) ._hiddenBadge_1dkyn_106{visibility:hidden}._fieldAccordionItem_1dkyn_77[data-state=closed]:has(>:hover) ._contextMenuWithCollapsedText_1dkyn_71{position:absolute;top:-50%;right:0}
@@ -4,7 +4,7 @@ type FieldActionSlotBaseProps = {
4
4
  isExpanded?: boolean;
5
5
  index: number;
6
6
  maxIndex?: number;
7
- onReorderFields: (fromIndex: number, toIndex: number) => void;
7
+ onReorderFields?: (fromIndex: number, toIndex: number) => void;
8
8
  onToggleVisibility?: (hidden: boolean) => void;
9
9
  onRequestDelete?: () => void;
10
10
  onRequestDuplicate?: () => void;
@@ -17,7 +17,8 @@ type FieldActionSlotBaseProps = {
17
17
  /**
18
18
  * A custom menu slot to render in place of the built-in context menu when collapsed.
19
19
  * When provided and collapsed, this is shown instead of FieldContextMenu.
20
- * When expanded, FieldContextMenu is always used.
20
+ * When expanded, FieldContextMenu is always used — though it renders nothing when
21
+ * no action handlers are supplied (see the component docs).
21
22
  */
22
23
  collapsedMenuSlot?: React.ReactNode;
23
24
  /**
@@ -34,6 +35,10 @@ export type FieldActionSlotProps = FieldActionSlotBaseProps;
34
35
  * - "Hidden" status badge (when field is hidden)
35
36
  * - Extension ContentSwitcher tabs (when extensions are provided)
36
37
  * - Field context menu, or a custom `menuSlot` when provided
38
+ *
39
+ * The context menu is omitted entirely when none of `onReorderFields`, `onToggleVisibility`,
40
+ * `onRequestDelete`, or `onRequestDuplicate` is provided, so an actionless field renders no
41
+ * "…" trigger instead of one that opens an empty menu. Extension tabs are unaffected.
37
42
  */
38
43
  export declare const FieldActionSlot: ({ isHidden, isExpanded, index, maxIndex, onReorderFields, onToggleVisibility, onRequestDelete, onRequestDuplicate, extensions, fieldCollapsedText, collapsedMenuSlot, readOnly, }: FieldActionSlotProps) => import("react/jsx-runtime").JSX.Element;
39
44
  export {};
@@ -22,6 +22,10 @@ type FieldContextMenuProps = {
22
22
  * An ellipsis icon button that opens a dropdown menu with actions for a single
23
23
  * metadata field: move up, move down, toggle visibility, duplicate (when
24
24
  * `onRequestDuplicate` is provided), and delete.
25
+ *
26
+ * Every menu item is gated on its own handler, and the rendered items are counted
27
+ * before the trigger is drawn, so when no handler is provided the component renders
28
+ * `null` rather than a trigger that opens an empty menu.
25
29
  */
26
- export declare const FieldContextMenu: ({ className, index, maxIndex, isHidden, onReorderFields, onToggleVisibility, onRequestDelete, onRequestDuplicate, onOpenChange, }: FieldContextMenuProps) => import("react/jsx-runtime").JSX.Element;
30
+ export declare const FieldContextMenu: ({ className, index, maxIndex, isHidden, onReorderFields, onToggleVisibility, onRequestDelete, onRequestDuplicate, onOpenChange, }: FieldContextMenuProps) => import("react/jsx-runtime").JSX.Element | null;
27
31
  export {};
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@box/metadata-template-editor",
3
- "version": "2.3.21",
3
+ "version": "2.3.23",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "peerDependencies": {
6
- "@box/blueprint-web": "^16.20.3",
7
- "@box/blueprint-web-assets": "^5.7.10",
6
+ "@box/blueprint-web": "^16.20.4",
7
+ "@box/blueprint-web-assets": "^5.7.11",
8
8
  "@dnd-kit/core": "^6.1.0",
9
9
  "@dnd-kit/sortable": "^8.0.0",
10
10
  "@dnd-kit/utilities": "^3.2.2",
@@ -17,10 +17,10 @@
17
17
  "yup": "^1.6.1"
18
18
  },
19
19
  "devDependencies": {
20
- "@box/blueprint-web": "^16.20.3",
21
- "@box/blueprint-web-assets": "^5.7.10",
22
- "@box/eslint-plugin-blueprint": "2.2.6",
23
- "@box/storybook-utils": "1.2.19",
20
+ "@box/blueprint-web": "^16.20.4",
21
+ "@box/blueprint-web-assets": "^5.7.11",
22
+ "@box/eslint-plugin-blueprint": "2.2.7",
23
+ "@box/storybook-utils": "1.2.20",
24
24
  "@dnd-kit/core": "^6.1.0",
25
25
  "@dnd-kit/sortable": "^8.0.0",
26
26
  "@dnd-kit/utilities": "^3.2.2",