@mongodb-js/compass-components 1.67.1 → 1.69.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 (312) hide show
  1. package/dist/components/accordion.js +0 -1
  2. package/dist/components/actions/action-glyph.js +0 -1
  3. package/dist/components/actions/constants.js +0 -1
  4. package/dist/components/actions/dropdown-menu-button.js +0 -1
  5. package/dist/components/actions/item-action-button.js +0 -1
  6. package/dist/components/actions/item-action-controls.js +0 -1
  7. package/dist/components/actions/item-action-group.js +0 -1
  8. package/dist/components/actions/item-action-menu.js +0 -1
  9. package/dist/components/actions/small-icon-button.js +0 -1
  10. package/dist/components/actions/types.js +0 -1
  11. package/dist/components/actions/utils.js +0 -1
  12. package/dist/components/breadcrumb.js +0 -1
  13. package/dist/components/bson-value.d.ts +23 -12
  14. package/dist/components/bson-value.d.ts.map +1 -1
  15. package/dist/components/bson-value.js +53 -65
  16. package/dist/components/chevron-collapse-icon.js +0 -1
  17. package/dist/components/collapsible-field-set.js +1 -4
  18. package/dist/components/combobox-with-custom-option.js +0 -1
  19. package/dist/components/compass-components-provider.d.ts +6 -8
  20. package/dist/components/compass-components-provider.d.ts.map +1 -1
  21. package/dist/components/compass-components-provider.js +5 -6
  22. package/dist/components/context-menu.d.ts +1 -2
  23. package/dist/components/context-menu.d.ts.map +1 -1
  24. package/dist/components/context-menu.js +5 -3
  25. package/dist/components/document-list/auto-focus-context.js +0 -1
  26. package/dist/components/document-list/bson-display-options-context.d.ts +13 -0
  27. package/dist/components/document-list/bson-display-options-context.d.ts.map +1 -0
  28. package/dist/components/document-list/bson-display-options-context.js +56 -0
  29. package/dist/components/document-list/bson-utils.d.ts +10 -0
  30. package/dist/components/document-list/bson-utils.d.ts.map +1 -0
  31. package/dist/components/document-list/bson-utils.js +63 -0
  32. package/dist/components/document-list/date-time-picker.d.ts +6 -0
  33. package/dist/components/document-list/date-time-picker.d.ts.map +1 -0
  34. package/dist/components/document-list/date-time-picker.js +112 -0
  35. package/dist/components/document-list/date-with-timezone-hint.d.ts +11 -0
  36. package/dist/components/document-list/date-with-timezone-hint.d.ts.map +1 -0
  37. package/dist/components/document-list/date-with-timezone-hint.js +95 -0
  38. package/dist/components/document-list/document-actions-group.js +0 -1
  39. package/dist/components/document-list/document-edit-actions-footer.d.ts +1 -0
  40. package/dist/components/document-list/document-edit-actions-footer.d.ts.map +1 -1
  41. package/dist/components/document-list/document-edit-actions-footer.js +2 -6
  42. package/dist/components/document-list/document.d.ts.map +1 -1
  43. package/dist/components/document-list/document.js +8 -1
  44. package/dist/components/document-list/editors/date-editor.d.ts +4 -0
  45. package/dist/components/document-list/editors/date-editor.d.ts.map +1 -0
  46. package/dist/components/document-list/editors/date-editor.js +135 -0
  47. package/dist/components/document-list/editors/default-editor.d.ts +4 -0
  48. package/dist/components/document-list/editors/default-editor.d.ts.map +1 -0
  49. package/dist/components/document-list/editors/default-editor.js +46 -0
  50. package/dist/components/document-list/editors/editor-with-label.d.ts +7 -0
  51. package/dist/components/document-list/editors/editor-with-label.d.ts.map +1 -0
  52. package/dist/components/document-list/editors/editor-with-label.js +28 -0
  53. package/dist/components/document-list/editors/input-editor.d.ts +4 -0
  54. package/dist/components/document-list/editors/input-editor.d.ts.map +1 -0
  55. package/dist/components/document-list/editors/input-editor.js +24 -0
  56. package/dist/components/document-list/editors/shared.d.ts +16 -0
  57. package/dist/components/document-list/editors/shared.d.ts.map +1 -0
  58. package/dist/components/document-list/editors/shared.js +34 -0
  59. package/dist/components/document-list/editors/text-editor.d.ts +4 -0
  60. package/dist/components/document-list/editors/text-editor.d.ts.map +1 -0
  61. package/dist/components/document-list/editors/text-editor.js +85 -0
  62. package/dist/components/document-list/editors/uuid-editor.d.ts +4 -0
  63. package/dist/components/document-list/editors/uuid-editor.d.ts.map +1 -0
  64. package/dist/components/document-list/editors/uuid-editor.js +54 -0
  65. package/dist/components/document-list/element-actions.d.ts.map +1 -1
  66. package/dist/components/document-list/element-actions.js +11 -11
  67. package/dist/components/document-list/element-editors.d.ts +1 -1
  68. package/dist/components/document-list/element-editors.d.ts.map +1 -1
  69. package/dist/components/document-list/element-editors.js +56 -141
  70. package/dist/components/document-list/element.d.ts.map +1 -1
  71. package/dist/components/document-list/element.js +104 -41
  72. package/dist/components/document-list/index.d.ts +1 -1
  73. package/dist/components/document-list/index.d.ts.map +1 -1
  74. package/dist/components/document-list/index.js +4 -4
  75. package/dist/components/document-list/typography.js +0 -1
  76. package/dist/components/document-list/use-force-update.js +0 -1
  77. package/dist/components/document-list/visible-field-toggle.d.ts.map +1 -1
  78. package/dist/components/document-list/visible-field-toggle.js +2 -1
  79. package/dist/components/drawer-portal.d.ts +4 -2
  80. package/dist/components/drawer-portal.d.ts.map +1 -1
  81. package/dist/components/drawer-portal.js +0 -1
  82. package/dist/components/empty-content.js +0 -1
  83. package/dist/components/error-boundary.d.ts +1 -0
  84. package/dist/components/error-boundary.d.ts.map +1 -1
  85. package/dist/components/error-boundary.js +0 -1
  86. package/dist/components/error-warning-summary.js +0 -1
  87. package/dist/components/feedback-popover.js +0 -1
  88. package/dist/components/file-picker-dialog.d.ts +1 -0
  89. package/dist/components/file-picker-dialog.d.ts.map +1 -1
  90. package/dist/components/file-picker-dialog.js +0 -1
  91. package/dist/components/file-selector.js +0 -1
  92. package/dist/components/form-field-container.js +0 -1
  93. package/dist/components/guide-cue/guide-cue-exceptions.js +0 -1
  94. package/dist/components/guide-cue/guide-cue-groups.js +0 -1
  95. package/dist/components/guide-cue/guide-cue-service.js +0 -1
  96. package/dist/components/guide-cue/guide-cue-storage.js +0 -1
  97. package/dist/components/guide-cue/guide-cue.d.ts +2 -1
  98. package/dist/components/guide-cue/guide-cue.d.ts.map +1 -1
  99. package/dist/components/guide-cue/guide-cue.js +10 -1
  100. package/dist/components/horizontal-rule.js +0 -1
  101. package/dist/components/icons/document-icon.js +0 -1
  102. package/dist/components/icons/favorite-icon.js +0 -1
  103. package/dist/components/icons/logo-icon.js +0 -1
  104. package/dist/components/icons/no-saved-items-icon.js +0 -1
  105. package/dist/components/icons/png-icon.js +0 -1
  106. package/dist/components/icons/server-icon.js +0 -1
  107. package/dist/components/index-icon.js +0 -1
  108. package/dist/components/index-keys-badge.js +0 -1
  109. package/dist/components/inline-definition.js +2 -3
  110. package/dist/components/inline-info-link.js +0 -1
  111. package/dist/components/insights-chip.js +0 -1
  112. package/dist/components/interactive-popover.js +0 -1
  113. package/dist/components/keyline-card.js +0 -1
  114. package/dist/components/leafygreen.d.ts +1 -35
  115. package/dist/components/leafygreen.d.ts.map +1 -1
  116. package/dist/components/leafygreen.js +0 -1
  117. package/dist/components/links/link.d.ts +1 -1
  118. package/dist/components/links/link.d.ts.map +1 -1
  119. package/dist/components/links/link.js +0 -1
  120. package/dist/components/list-editor.js +0 -1
  121. package/dist/components/loader.js +0 -1
  122. package/dist/components/modals/confirmation-modal.js +0 -1
  123. package/dist/components/modals/form-modal.d.ts +2 -1
  124. package/dist/components/modals/form-modal.d.ts.map +1 -1
  125. package/dist/components/modals/form-modal.js +2 -3
  126. package/dist/components/modals/info-modal.js +0 -1
  127. package/dist/components/modals/marketing-modal.js +0 -1
  128. package/dist/components/modals/modal-body.d.ts.map +1 -1
  129. package/dist/components/modals/modal-body.js +7 -1
  130. package/dist/components/modals/modal-header.js +0 -1
  131. package/dist/components/modals/modal.js +0 -1
  132. package/dist/components/options-toggle.js +0 -1
  133. package/dist/components/placeholder.js +0 -1
  134. package/dist/components/radio-box-group.js +0 -1
  135. package/dist/components/resize-handle.d.ts.map +1 -1
  136. package/dist/components/resize-handle.js +5 -9
  137. package/dist/components/resizeable-sidebar.js +0 -1
  138. package/dist/components/select-list.d.ts.map +1 -1
  139. package/dist/components/select-list.js +2 -3
  140. package/dist/components/signal-popover.d.ts +1 -1
  141. package/dist/components/signal-popover.d.ts.map +1 -1
  142. package/dist/components/signal-popover.js +2 -4
  143. package/dist/components/signals.js +0 -1
  144. package/dist/components/tab-nav-bar.js +0 -1
  145. package/dist/components/toast-body.js +0 -1
  146. package/dist/components/virtual-grid.js +0 -1
  147. package/dist/components/virtual-list.js +1 -7
  148. package/dist/components/workspace-container.d.ts +2 -2
  149. package/dist/components/workspace-container.d.ts.map +1 -1
  150. package/dist/components/workspace-container.js +0 -1
  151. package/dist/components/workspace-tabs/tab.js +0 -1
  152. package/dist/components/workspace-tabs/use-tab-theme.js +0 -1
  153. package/dist/components/workspace-tabs/workspace-tabs.d.ts.map +1 -1
  154. package/dist/components/workspace-tabs/workspace-tabs.js +1 -2
  155. package/dist/force-emotion-speedy.js +0 -1
  156. package/dist/hooks/use-confirmation.d.ts +3 -1
  157. package/dist/hooks/use-confirmation.d.ts.map +1 -1
  158. package/dist/hooks/use-confirmation.js +2 -3
  159. package/dist/hooks/use-copy-paste-context-menu.d.ts +1 -1
  160. package/dist/hooks/use-copy-paste-context-menu.d.ts.map +1 -1
  161. package/dist/hooks/use-copy-paste-context-menu.js +0 -1
  162. package/dist/hooks/use-current-value-ref.js +0 -1
  163. package/dist/hooks/use-default-action.js +0 -1
  164. package/dist/hooks/use-dom-rect.js +0 -1
  165. package/dist/hooks/use-effect-on-change.js +0 -1
  166. package/dist/hooks/use-error-details.js +0 -1
  167. package/dist/hooks/use-focus-hover.js +0 -1
  168. package/dist/hooks/use-focus-ring.js +0 -1
  169. package/dist/hooks/use-formatted-date.js +0 -1
  170. package/dist/hooks/use-hotkeys.js +0 -1
  171. package/dist/hooks/use-initial-value.js +0 -1
  172. package/dist/hooks/use-persisted-state.js +0 -1
  173. package/dist/hooks/use-scrollbars.js +0 -1
  174. package/dist/hooks/use-sort.js +0 -1
  175. package/dist/hooks/use-stacked-component.d.ts.map +1 -1
  176. package/dist/hooks/use-stacked-component.js +0 -1
  177. package/dist/hooks/use-sync-state-on-prop-change.js +0 -1
  178. package/dist/hooks/use-theme.d.ts.map +1 -1
  179. package/dist/hooks/use-theme.js +0 -1
  180. package/dist/hooks/use-throttled-props.js +0 -1
  181. package/dist/hooks/use-toast.d.ts +3 -1
  182. package/dist/hooks/use-toast.d.ts.map +1 -1
  183. package/dist/hooks/use-toast.js +0 -1
  184. package/dist/hooks/use-virtual-grid.js +0 -1
  185. package/dist/hooks/use-virtual-list-item-observer.js +0 -1
  186. package/dist/index.d.ts +1 -0
  187. package/dist/index.d.ts.map +1 -1
  188. package/dist/index.js +6 -5
  189. package/dist/utils/format-date.d.ts +17 -0
  190. package/dist/utils/format-date.d.ts.map +1 -1
  191. package/dist/utils/format-date.js +33 -3
  192. package/dist/utils/format.js +0 -1
  193. package/dist/utils/merge-props.js +0 -1
  194. package/dist/utils/rafraf.js +0 -1
  195. package/dist/utils/reset-global-css.js +0 -1
  196. package/package.json +19 -19
  197. package/dist/components/accordion.js.map +0 -1
  198. package/dist/components/actions/action-glyph.js.map +0 -1
  199. package/dist/components/actions/constants.js.map +0 -1
  200. package/dist/components/actions/dropdown-menu-button.js.map +0 -1
  201. package/dist/components/actions/item-action-button.js.map +0 -1
  202. package/dist/components/actions/item-action-controls.js.map +0 -1
  203. package/dist/components/actions/item-action-group.js.map +0 -1
  204. package/dist/components/actions/item-action-menu.js.map +0 -1
  205. package/dist/components/actions/small-icon-button.js.map +0 -1
  206. package/dist/components/actions/types.js.map +0 -1
  207. package/dist/components/actions/utils.js.map +0 -1
  208. package/dist/components/breadcrumb.js.map +0 -1
  209. package/dist/components/bson-value.js.map +0 -1
  210. package/dist/components/chevron-collapse-icon.js.map +0 -1
  211. package/dist/components/collapsible-field-set.js.map +0 -1
  212. package/dist/components/combobox-with-custom-option.js.map +0 -1
  213. package/dist/components/compass-components-provider.js.map +0 -1
  214. package/dist/components/context-menu.js.map +0 -1
  215. package/dist/components/document-list/auto-focus-context.js.map +0 -1
  216. package/dist/components/document-list/document-actions-group.js.map +0 -1
  217. package/dist/components/document-list/document-edit-actions-footer.js.map +0 -1
  218. package/dist/components/document-list/document.js.map +0 -1
  219. package/dist/components/document-list/element-actions.js.map +0 -1
  220. package/dist/components/document-list/element-editors.js.map +0 -1
  221. package/dist/components/document-list/element.js.map +0 -1
  222. package/dist/components/document-list/index.js.map +0 -1
  223. package/dist/components/document-list/legacy-uuid-format-context.d.ts +0 -4
  224. package/dist/components/document-list/legacy-uuid-format-context.d.ts.map +0 -1
  225. package/dist/components/document-list/legacy-uuid-format-context.js +0 -10
  226. package/dist/components/document-list/legacy-uuid-format-context.js.map +0 -1
  227. package/dist/components/document-list/typography.js.map +0 -1
  228. package/dist/components/document-list/use-force-update.js.map +0 -1
  229. package/dist/components/document-list/visible-field-toggle.js.map +0 -1
  230. package/dist/components/drawer-portal.js.map +0 -1
  231. package/dist/components/empty-content.js.map +0 -1
  232. package/dist/components/error-boundary.js.map +0 -1
  233. package/dist/components/error-warning-summary.js.map +0 -1
  234. package/dist/components/feedback-popover.js.map +0 -1
  235. package/dist/components/file-picker-dialog.js.map +0 -1
  236. package/dist/components/file-selector.js.map +0 -1
  237. package/dist/components/form-field-container.js.map +0 -1
  238. package/dist/components/guide-cue/guide-cue-exceptions.js.map +0 -1
  239. package/dist/components/guide-cue/guide-cue-groups.js.map +0 -1
  240. package/dist/components/guide-cue/guide-cue-service.js.map +0 -1
  241. package/dist/components/guide-cue/guide-cue-storage.js.map +0 -1
  242. package/dist/components/guide-cue/guide-cue.js.map +0 -1
  243. package/dist/components/horizontal-rule.js.map +0 -1
  244. package/dist/components/icons/document-icon.js.map +0 -1
  245. package/dist/components/icons/favorite-icon.js.map +0 -1
  246. package/dist/components/icons/logo-icon.js.map +0 -1
  247. package/dist/components/icons/no-saved-items-icon.js.map +0 -1
  248. package/dist/components/icons/png-icon.js.map +0 -1
  249. package/dist/components/icons/server-icon.js.map +0 -1
  250. package/dist/components/index-icon.js.map +0 -1
  251. package/dist/components/index-keys-badge.js.map +0 -1
  252. package/dist/components/inline-definition.js.map +0 -1
  253. package/dist/components/inline-info-link.js.map +0 -1
  254. package/dist/components/insights-chip.js.map +0 -1
  255. package/dist/components/interactive-popover.js.map +0 -1
  256. package/dist/components/keyline-card.js.map +0 -1
  257. package/dist/components/leafygreen.js.map +0 -1
  258. package/dist/components/links/link.js.map +0 -1
  259. package/dist/components/list-editor.js.map +0 -1
  260. package/dist/components/loader.js.map +0 -1
  261. package/dist/components/modals/confirmation-modal.js.map +0 -1
  262. package/dist/components/modals/form-modal.js.map +0 -1
  263. package/dist/components/modals/info-modal.js.map +0 -1
  264. package/dist/components/modals/marketing-modal.js.map +0 -1
  265. package/dist/components/modals/modal-body.js.map +0 -1
  266. package/dist/components/modals/modal-header.js.map +0 -1
  267. package/dist/components/modals/modal.js.map +0 -1
  268. package/dist/components/options-toggle.js.map +0 -1
  269. package/dist/components/placeholder.js.map +0 -1
  270. package/dist/components/radio-box-group.js.map +0 -1
  271. package/dist/components/resize-handle.js.map +0 -1
  272. package/dist/components/resizeable-sidebar.js.map +0 -1
  273. package/dist/components/select-list.js.map +0 -1
  274. package/dist/components/signal-popover.js.map +0 -1
  275. package/dist/components/signals.js.map +0 -1
  276. package/dist/components/tab-nav-bar.js.map +0 -1
  277. package/dist/components/toast-body.js.map +0 -1
  278. package/dist/components/virtual-grid.js.map +0 -1
  279. package/dist/components/virtual-list.js.map +0 -1
  280. package/dist/components/workspace-container.js.map +0 -1
  281. package/dist/components/workspace-tabs/tab.js.map +0 -1
  282. package/dist/components/workspace-tabs/use-tab-theme.js.map +0 -1
  283. package/dist/components/workspace-tabs/workspace-tabs.js.map +0 -1
  284. package/dist/force-emotion-speedy.js.map +0 -1
  285. package/dist/hooks/use-confirmation.js.map +0 -1
  286. package/dist/hooks/use-copy-paste-context-menu.js.map +0 -1
  287. package/dist/hooks/use-current-value-ref.js.map +0 -1
  288. package/dist/hooks/use-default-action.js.map +0 -1
  289. package/dist/hooks/use-dom-rect.js.map +0 -1
  290. package/dist/hooks/use-effect-on-change.js.map +0 -1
  291. package/dist/hooks/use-error-details.js.map +0 -1
  292. package/dist/hooks/use-focus-hover.js.map +0 -1
  293. package/dist/hooks/use-focus-ring.js.map +0 -1
  294. package/dist/hooks/use-formatted-date.js.map +0 -1
  295. package/dist/hooks/use-hotkeys.js.map +0 -1
  296. package/dist/hooks/use-initial-value.js.map +0 -1
  297. package/dist/hooks/use-persisted-state.js.map +0 -1
  298. package/dist/hooks/use-scrollbars.js.map +0 -1
  299. package/dist/hooks/use-sort.js.map +0 -1
  300. package/dist/hooks/use-stacked-component.js.map +0 -1
  301. package/dist/hooks/use-sync-state-on-prop-change.js.map +0 -1
  302. package/dist/hooks/use-theme.js.map +0 -1
  303. package/dist/hooks/use-throttled-props.js.map +0 -1
  304. package/dist/hooks/use-toast.js.map +0 -1
  305. package/dist/hooks/use-virtual-grid.js.map +0 -1
  306. package/dist/hooks/use-virtual-list-item-observer.js.map +0 -1
  307. package/dist/index.js.map +0 -1
  308. package/dist/utils/format-date.js.map +0 -1
  309. package/dist/utils/format.js.map +0 -1
  310. package/dist/utils/merge-props.js.map +0 -1
  311. package/dist/utils/rafraf.js.map +0 -1
  312. package/dist/utils/reset-global-css.js.map +0 -1
@@ -32,58 +32,50 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
39
  exports.TypeEditor = exports.ValueEditor = exports.KeyEditor = void 0;
37
- const react_1 = __importStar(require("react"));
40
+ const react_1 = __importDefault(require("react"));
38
41
  const hadron_type_checker_1 = __importStar(require("hadron-type-checker"));
39
42
  const emotion_1 = require("@leafygreen-ui/emotion");
40
43
  const palette_1 = require("@leafygreen-ui/palette");
41
44
  const tokens_1 = require("@leafygreen-ui/tokens");
42
- const bson_value_1 = __importStar(require("../bson-value"));
45
+ const bson_value_1 = __importDefault(require("../bson-value"));
43
46
  const merge_props_1 = require("../../utils/merge-props");
44
- const typography_1 = require("./typography");
45
47
  const leafygreen_1 = require("../leafygreen");
46
48
  const use_theme_1 = require("../../hooks/use-theme");
49
+ const shared_1 = require("./editors/shared");
50
+ const date_editor_1 = require("./editors/date-editor");
51
+ const default_editor_1 = require("./editors/default-editor");
52
+ const text_editor_1 = require("./editors/text-editor");
53
+ const uuid_editor_1 = require("./editors/uuid-editor");
47
54
  const maxWidth = (0, emotion_1.css)({
48
55
  maxWidth: '100%',
49
56
  overflowX: 'hidden',
50
57
  textOverflow: 'ellipsis',
51
58
  });
52
- const editorReset = (0, emotion_1.css)({
53
- padding: 0,
54
- margin: 0,
55
- border: 'none',
56
- boxShadow: 'none',
57
- outline: 'none',
58
- backgroundColor: 'transparent',
59
+ // Sizes the input to its content by overlaying it on a hidden copy of the text,
60
+ // so that the key occupies the same width when viewing and when editing.
61
+ const keyEditorSizer = (0, emotion_1.css)({
62
+ display: 'inline-grid',
59
63
  maxWidth: '100%',
60
- });
61
- const editorOutline = (0, emotion_1.css)({
62
- '&:focus, &:active': {
63
- borderRadius: `2px`,
64
- boxShadow: `0 0 0 2px ${palette_1.palette.blue.light1}`,
64
+ verticalAlign: 'bottom',
65
+ '&::after': {
66
+ content: 'attr(data-value)',
67
+ visibility: 'hidden',
68
+ whiteSpace: 'pre',
65
69
  },
66
- });
67
- const editorInvalid = (0, emotion_1.css)({
68
- '&:focus, &:active': {
69
- boxShadow: `0 0 0 2px ${palette_1.palette.red.dark2}`,
70
+ '&::after, & > input': {
71
+ gridArea: '1 / 1',
72
+ font: 'inherit',
73
+ width: '100%',
74
+ minWidth: 0,
70
75
  },
71
76
  });
72
- const editorInvalidLightMode = (0, emotion_1.css)({
73
- backgroundColor: palette_1.palette.red.light2,
74
- color: palette_1.palette.red.dark2,
75
- });
76
- const editorInvalidDarkMode = (0, emotion_1.css)({
77
- backgroundColor: palette_1.palette.red.dark2,
78
- color: palette_1.palette.red.light2,
79
- });
80
77
  const KeyEditor = ({ editing, value, valid, validationMessage, onChange, autoFocus, onEditStart, }) => {
81
78
  const darkMode = (0, use_theme_1.useDarkMode)();
82
- // On Safari if a text is 5 mono-characters wide and is supposed to overflow /
83
- // get ellipse'd only when shorter than that, it would still overflow and get
84
- // ellipse'd under normal conditions, for unknown reasons. For that, we add a
85
- // small amount to the width to tackle this issue.
86
- const width = `${Math.max(value.length, 1)}.5ch`;
87
79
  return (react_1.default.createElement(react_1.default.Fragment, null, editing ? (react_1.default.createElement(leafygreen_1.Tooltip, { darkMode: true, enabled: !valid, trigger: ({ className, children,
88
80
  // Having a tooltip connected to the input elements is not the most
89
81
  // accessible thing ever and so a lot of event listeners of the
@@ -93,124 +85,48 @@ const KeyEditor = ({ editing, value, valid, validationMessage, onChange, autoFoc
93
85
  // for our case
94
86
  onDragStart, onPointerUp, onPointerDown, onMouseDown, ...triggerProps }) => {
95
87
  return (react_1.default.createElement("div", { className: className },
96
- react_1.default.createElement("input", { type: "text", "data-testid": "hadron-document-key-editor", value: value, onChange: (evt) => {
97
- onChange(evt.currentTarget.value);
98
- },
99
- // See ./element.tsx
100
- // eslint-disable-next-line jsx-a11y/no-autofocus
101
- autoFocus: autoFocus, className: (0, emotion_1.cx)(maxWidth, editorReset, editorOutline, !valid && editorInvalid, !valid &&
102
- (darkMode
103
- ? editorInvalidDarkMode
104
- : editorInvalidLightMode)), style: { width }, spellCheck: "false", ...triggerProps }),
88
+ react_1.default.createElement("span", { className: keyEditorSizer, "data-value": value },
89
+ react_1.default.createElement("input", { type: "text", size: 1, "data-testid": "hadron-document-key-editor", value: value, onChange: (evt) => {
90
+ onChange(evt.currentTarget.value);
91
+ },
92
+ // See ./element.tsx
93
+ // eslint-disable-next-line jsx-a11y/no-autofocus
94
+ autoFocus: autoFocus, className: (0, emotion_1.cx)(maxWidth, shared_1.editorStyles, !valid && shared_1.editorInvalidStyles, !valid &&
95
+ (darkMode
96
+ ? shared_1.editorInvalidDarkModeStyles
97
+ : shared_1.editorInvalidLightModeStyles)), spellCheck: "false", ...triggerProps })),
105
98
  children));
106
- } }, validationMessage)) : (
107
- // Double-click is not accessible so no reason for this to be a button
108
- react_1.default.createElement("div", { "data-testid": "hadron-document-clickable-key", onDoubleClick: onEditStart, className: maxWidth, style: { width } }, value))));
99
+ } }, validationMessage)) : (react_1.default.createElement("span", { "data-testid": "hadron-document-clickable-key", onDoubleClick: onEditStart }, value))));
109
100
  };
110
101
  exports.KeyEditor = KeyEditor;
111
- const textareaContainer = (0, emotion_1.css)({
112
- width: '100%',
113
- maxWidth: '100%',
114
- '&::before, &::after': {
115
- content: "'\"'",
116
- userSelect: 'none',
117
- },
118
- });
119
- const editorTextarea = (0, emotion_1.css)({
120
- display: 'inline-block',
121
- whiteSpace: 'nowrap',
122
- minWidth: '5ch',
123
- // 2ch for `"` around the textarea
124
- maxWidth: 'calc(100% - 2ch)',
125
- verticalAlign: 'top',
126
- color: 'inherit',
127
- });
128
- // UUID editor container that shows: UUID(" <input> ")
129
- const uuidEditorContainer = (0, emotion_1.css)({
130
- display: 'inline-flex',
131
- alignItems: 'center',
132
- maxWidth: '100%',
133
- });
134
- const uuidEditorInput = (0, emotion_1.css)({
135
- display: 'inline-block',
136
- whiteSpace: 'nowrap',
137
- verticalAlign: 'top',
138
- color: 'inherit',
139
- });
140
- const uuidEditorLabel = (0, emotion_1.css)({
141
- userSelect: 'none',
142
- whiteSpace: 'nowrap',
143
- });
144
102
  const ValueEditor = ({ editing, onEditStart, type, value, valid, validationMessage, originalValue, autoFocus, onChange, onFocus, onBlur, }) => {
145
- const val = String(value);
146
- const darkMode = (0, use_theme_1.useDarkMode)();
147
- const inputStyle = (0, react_1.useMemo)(() => {
148
- if (type === 'String') {
149
- const lines = val.split('\n');
150
- let longestLineCharLength = 0;
151
- for (const line of lines) {
152
- const length = line.length;
153
- if (length > longestLineCharLength) {
154
- longestLineCharLength = length;
155
- }
156
- }
157
- const width = `${Math.min(
158
- // Adding one to account for a textarea resize icon button thingie
159
- longestLineCharLength + 1, 70)}ch`;
160
- const minLines = Math.max(lines.length, longestLineCharLength > 70 ? 2 : 1);
161
- const maxLines = Math.min(minLines, 10);
162
- const minHeight = typography_1.documentTypography.lineHeight * Math.min(minLines, maxLines);
163
- const height = typography_1.documentTypography.lineHeight * maxLines;
164
- return { width, minHeight, height };
165
- }
166
- return { width: `${Math.max(val.length, 1)}ch` };
167
- }, [val, type]);
168
- const uuidInputStyle = (0, react_1.useMemo)(() => {
169
- // UUID format is 36 characters (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
170
- return { width: `${Math.max(val.length, 36)}ch` };
171
- }, [val]);
172
- return (react_1.default.createElement(react_1.default.Fragment, null, editing ? (react_1.default.createElement(leafygreen_1.Tooltip, { darkMode: true, enabled: !valid, trigger: ({ className, children,
103
+ if (!editing) {
104
+ // Double-click is not accessible so no reason for this to be a button,
105
+ // users won't be able to interact with it anyway
106
+ return (react_1.default.createElement("span", { "data-testid": "hadron-document-clickable-value", onDoubleClick: onEditStart },
107
+ react_1.default.createElement(bson_value_1.default, { type: type, value: originalValue })));
108
+ }
109
+ const sharedProps = {
110
+ autoFocus,
111
+ value: String(value),
112
+ valid,
113
+ onChange,
114
+ onBlur,
115
+ };
116
+ return (react_1.default.createElement(leafygreen_1.Tooltip, { darkMode: true, enabled: !valid, trigger: ({ className, children,
173
117
  // See above
174
118
  onDragStart, onPointerUp, onPointerDown, onMouseDown, ...triggerProps }) => {
175
119
  // NB: Order is important, if triggerProps has onFocus / onBlur we
176
120
  // want to merge them with ours, if they are not passed, we want our
177
121
  // listeners to overwrite undefined keys
178
- const mergedProps = (0, merge_props_1.mergeProps)(triggerProps, { onBlur, onFocus });
122
+ const mergedProps = (0, merge_props_1.mergeProps)(triggerProps, {
123
+ onBlur,
124
+ onFocus,
125
+ });
179
126
  return (react_1.default.createElement("div", { className: className },
180
- type === 'String' ? (react_1.default.createElement(bson_value_1.BSONValueContainer, { type: "String", className: (0, emotion_1.cx)(textareaContainer) },
181
- react_1.default.createElement("textarea", { "data-testid": "hadron-document-value-editor", value: val, onChange: (evt) => {
182
- onChange(evt.currentTarget.value);
183
- },
184
- // See ./element.tsx
185
- // eslint-disable-next-line jsx-a11y/no-autofocus
186
- autoFocus: autoFocus, className: (0, emotion_1.cx)(editorReset, editorOutline, editorTextarea, !valid && editorInvalid), spellCheck: "false", style: inputStyle, ...mergedProps }))) : (0, hadron_type_checker_1.isUUIDType)(type) ? (react_1.default.createElement("div", { className: uuidEditorContainer },
187
- react_1.default.createElement("span", { className: uuidEditorLabel },
188
- type,
189
- "('"),
190
- react_1.default.createElement("input", { type: "text", "data-testid": "hadron-document-value-editor", value: val, placeholder: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", onChange: (evt) => {
191
- onChange(evt.currentTarget.value);
192
- },
193
- // See ./element.tsx
194
- // eslint-disable-next-line jsx-a11y/no-autofocus
195
- autoFocus: autoFocus, className: (0, emotion_1.cx)(editorReset, editorOutline, uuidEditorInput, !valid && editorInvalid, !valid &&
196
- (darkMode
197
- ? editorInvalidDarkMode
198
- : editorInvalidLightMode)), spellCheck: "false", style: uuidInputStyle, ...mergedProps }),
199
- react_1.default.createElement("span", { className: uuidEditorLabel }, "')"))) : (react_1.default.createElement("input", { type: "text", "data-testid": "hadron-document-value-editor", value: val, onChange: (evt) => {
200
- onChange(evt.currentTarget.value);
201
- },
202
- // See ./element.tsx
203
- // eslint-disable-next-line jsx-a11y/no-autofocus
204
- autoFocus: autoFocus, className: (0, emotion_1.cx)(editorReset, editorOutline, !valid && editorInvalid, !valid &&
205
- (darkMode
206
- ? editorInvalidDarkMode
207
- : editorInvalidLightMode)), style: inputStyle, spellCheck: "false", ...mergedProps })),
127
+ type === 'String' ? (react_1.default.createElement(text_editor_1.TextEditor, { ...mergedProps, ...sharedProps })) : type === 'Date' ? (react_1.default.createElement(date_editor_1.DateEditor, { ...sharedProps, ...mergedProps, type: type })) : (0, hadron_type_checker_1.isUUIDType)(type) ? (react_1.default.createElement(uuid_editor_1.UUIDEditor, { ...sharedProps, ...mergedProps, type: type })) : (react_1.default.createElement(default_editor_1.DefaultEditor, { ...sharedProps, ...mergedProps, type: type })),
208
128
  children));
209
- } }, validationMessage)) : (
210
- // Double-click is not accessible so no reason for this to be a button,
211
- // users won't be able to interact with it anyway
212
- react_1.default.createElement("div", { "data-testid": "hadron-document-clickable-value", onDoubleClick: onEditStart },
213
- react_1.default.createElement(bson_value_1.default, { type: type, value: originalValue })))));
129
+ } }, validationMessage));
214
130
  };
215
131
  exports.ValueEditor = ValueEditor;
216
132
  const TYPES = hadron_type_checker_1.default.castableTypes(true);
@@ -257,7 +173,7 @@ const TypeEditor = ({ editing, autoFocus, type, onChange, visuallyActive }) => {
257
173
  // eslint-disable-next-line jsx-a11y/no-autofocus
258
174
  autoFocus: autoFocus, onChange: (evt) => {
259
175
  onChange(evt.currentTarget.value);
260
- }, className: (0, emotion_1.cx)(editorReset, editorOutline, typeEditor, visuallyActive && typeEditorActive), onClick: (e) => {
176
+ }, className: (0, emotion_1.cx)(shared_1.editorStyles, typeEditor, visuallyActive && typeEditorActive), onClick: (e) => {
261
177
  e.stopPropagation();
262
178
  } }, TYPES.map((type) => {
263
179
  return (react_1.default.createElement("option", { key: type, value: type, className: darkMode ? typeEditorOptionDark : typeEditorOptionLight }, type));
@@ -265,4 +181,3 @@ const TypeEditor = ({ editing, autoFocus, type, onChange, visuallyActive }) => {
265
181
  react_1.default.createElement(leafygreen_1.Icon, { glyph: "ChevronDown", size: "xsmall", className: typeEditorChevron })))));
266
182
  };
267
183
  exports.TypeEditor = TypeEditor;
268
- //# sourceMappingURL=element-editors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../../src/components/document-list/element.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAEzE,OAAO,KAAK,EAEV,OAAO,IAAI,iBAAiB,EAC7B,MAAM,iBAAiB,CAAC;AAiWzB,eAAO,MAAM,6BAA6B,GAAI,mEAK3C;IACD,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB,EAAE,OAAO,CAAC;IACnC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,WAeA,CAAC;AAYF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GACrC,SAAS,iBAAiB,KACzB,MAcF,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAClD,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAyZA,CAAC"}
1
+ {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../../src/components/document-list/element.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAEzE,OAAO,KAAK,EAEV,OAAO,IAAI,iBAAiB,EAC7B,MAAM,iBAAiB,CAAC;AAiazB,eAAO,MAAM,6BAA6B,GAAI,mEAK3C;IACD,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB,EAAE,OAAO,CAAC;IACnC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,WAeA,CAAC;AAYF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GACrC,SAAS,iBAAiB,KACzB,MAcF,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,iBAAiB,CAAC;IAClD,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,CAAC;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAqaA,CAAC"}
@@ -40,6 +40,7 @@ exports.HadronElement = exports.getNestedKeyPathForElement = exports.calculateSh
40
40
  const react_1 = __importStar(require("react"));
41
41
  const hadron_document_1 = require("hadron-document");
42
42
  const bson_value_1 = __importDefault(require("../bson-value"));
43
+ const bson_utils_1 = require("./bson-utils");
43
44
  const tokens_1 = require("@leafygreen-ui/tokens");
44
45
  const element_editors_1 = require("./element-editors");
45
46
  const element_actions_1 = require("./element-actions");
@@ -53,7 +54,7 @@ const visible_field_toggle_1 = __importDefault(require("./visible-field-toggle")
53
54
  const mongodb_query_util_1 = require("mongodb-query-util");
54
55
  const context_menu_1 = require("../context-menu");
55
56
  const use_sync_state_on_prop_change_1 = require("../../hooks/use-sync-state-on-prop-change");
56
- const legacy_uuid_format_context_1 = require("./legacy-uuid-format-context");
57
+ const bson_display_options_context_1 = require("./bson-display-options-context");
57
58
  function useElementEditor(el, displayType) {
58
59
  return (0, react_1.useMemo)(() => {
59
60
  const Editor = (0, hadron_document_1.getEditorByType)(displayType);
@@ -62,8 +63,8 @@ function useElementEditor(el, displayType) {
62
63
  }
63
64
  function useHadronElement(el) {
64
65
  const forceUpdate = (0, use_force_update_1.useForceUpdate)();
65
- const legacyUUIDEncoding = (0, legacy_uuid_format_context_1.useLegacyUUIDDisplayContext)();
66
- const displayType = (0, hadron_document_1.getDisplayType)(el, legacyUUIDEncoding);
66
+ const { legacyUUIDDisplayEncoding } = (0, bson_display_options_context_1.useBSONDisplayOptions)();
67
+ const displayType = (0, hadron_document_1.getDisplayType)(el, legacyUUIDDisplayEncoding);
67
68
  const editor = useElementEditor(el, displayType);
68
69
  // NB: Duplicate key state is kept local to the component and not derived on
69
70
  // every change so that only the changed key is highlighed as duplicate
@@ -114,6 +115,14 @@ function useHadronElement(el) {
114
115
  };
115
116
  }, [el, onElementChanged, onElementAddedOrRemoved, onElementReverted]);
116
117
  const isValid = el.isCurrentTypeValid();
118
+ const originalValue = el.currentType === 'Array'
119
+ ? [...(el.elements || [])]
120
+ : el.currentType === 'Object'
121
+ ? Object.fromEntries(Array.from(el.elements || []).map((e) => [
122
+ e.currentKey,
123
+ e.currentValue,
124
+ ]))
125
+ : el.currentValue;
117
126
  return {
118
127
  id: el.uuid,
119
128
  key: {
@@ -133,7 +142,7 @@ function useHadronElement(el) {
133
142
  },
134
143
  value: {
135
144
  value: editor.value(),
136
- originalValue: el.currentType === 'Array' ? [...(el.elements || [])] : el.currentValue,
145
+ originalValue,
137
146
  change(newVal) {
138
147
  editor.edit(newVal);
139
148
  },
@@ -159,6 +168,7 @@ function useHadronElement(el) {
159
168
  visibleChildren: el.getVisibleElements(),
160
169
  level: el.level,
161
170
  parentType: el.parent?.currentType,
171
+ modified: el.isModified(),
162
172
  removed: el.isRemoved(),
163
173
  internal: el.isInternalField(),
164
174
  expanded: el.expanded,
@@ -204,6 +214,7 @@ const elementRemovedLightMode = (0, emotion_1.css)({
204
214
  backgroundColor: palette_1.palette.red.light2,
205
215
  },
206
216
  });
217
+ const elementModifiedLightMode = elementInvalidLightMode;
207
218
  const elementInvalidDarkMode = (0, emotion_1.css)({
208
219
  backgroundColor: palette_1.palette.yellow.dark3,
209
220
  '&:hover': {
@@ -216,16 +227,19 @@ const elementRemovedDarkMode = (0, emotion_1.css)({
216
227
  backgroundColor: palette_1.palette.red.dark2,
217
228
  },
218
229
  });
230
+ const elementModifiedDarkMode = elementInvalidDarkMode;
219
231
  const elementActions = (0, emotion_1.css)({
220
232
  flex: 'none',
221
233
  width: tokens_1.spacing[300],
222
234
  position: 'relative',
235
+ userSelect: 'none',
223
236
  });
224
237
  const elementLineNumber = (0, emotion_1.css)({
225
238
  flex: 'none',
226
239
  position: 'relative',
227
240
  marginLeft: tokens_1.spacing[100],
228
241
  boxSizing: 'content-box',
242
+ userSelect: 'none',
229
243
  });
230
244
  const addFieldActionsContainer = (0, emotion_1.css)({
231
245
  position: 'absolute',
@@ -270,22 +284,37 @@ const lineNumberRemovedDarkMode = (0, emotion_1.css)({
270
284
  });
271
285
  const elementSpacer = (0, emotion_1.css)({
272
286
  flex: 'none',
287
+ userSelect: 'none',
273
288
  });
274
289
  const elementExpand = (0, emotion_1.css)({
275
290
  width: tokens_1.spacing[400],
276
291
  flex: 'none',
277
292
  display: 'flex',
278
293
  alignItems: 'center',
294
+ userSelect: 'none',
279
295
  });
280
296
  const elementKey = (0, emotion_1.css)({
281
297
  flex: 'none',
282
298
  fontWeight: 'bold',
299
+ minWidth: '1em',
283
300
  maxWidth: '60%',
284
301
  });
302
+ const elementKeyInline = (0, emotion_1.css)({
303
+ // Inline-block to keep the key's own max width and ellipsis, aligned to the
304
+ // bottom for the box's baseline.
305
+ display: 'inline-block',
306
+ verticalAlign: 'bottom',
307
+ overflow: 'hidden',
308
+ textOverflow: 'ellipsis',
309
+ });
285
310
  const elementKeyInternal = (0, emotion_1.css)({
286
311
  color: palette_1.palette.gray.base,
287
312
  });
288
313
  const elementDivider = (0, emotion_1.css)({
314
+ flex: 'none',
315
+ display: 'inline',
316
+ });
317
+ const elementDecryptedIcon = (0, emotion_1.css)({
289
318
  flex: 'none',
290
319
  userSelect: 'none',
291
320
  });
@@ -293,10 +322,27 @@ const elementValue = (0, emotion_1.css)({
293
322
  flex: 1,
294
323
  minWidth: 0,
295
324
  maxWidth: '100%',
325
+ display: 'inline',
326
+ });
327
+ const elementContent = (0, emotion_1.css)({
328
+ display: 'flex',
329
+ flex: 1,
330
+ minWidth: 0,
331
+ });
332
+ // When not editing we want the key and value inline for copy-ability.
333
+ const elementContentInline = (0, emotion_1.css)({
334
+ display: 'block',
335
+ flex: 1,
336
+ minWidth: 0,
337
+ whiteSpace: 'nowrap',
338
+ overflow: 'hidden',
339
+ textOverflow: 'ellipsis',
340
+ [bson_utils_1.bsonValueDisplayVar]: 'inline',
296
341
  });
297
342
  const elementType = (0, emotion_1.css)({
298
343
  flex: 'none',
299
344
  marginLeft: tokens_1.spacing[100],
345
+ userSelect: 'none',
300
346
  });
301
347
  const actions = (0, emotion_1.css)({
302
348
  display: 'none',
@@ -311,6 +357,15 @@ const actionsVisible = (0, emotion_1.css)({
311
357
  '[data-document-element="true"]:hover &, [data-document-element="true"]:focus-within &': {
312
358
  display: 'block',
313
359
  },
360
+ // Keep the actions visible while a menu opened from them is expanded. The
361
+ // add-field menu's trigger sets `aria-expanded="true"` while open; otherwise
362
+ // the gutter is hidden as soon as the row loses `:hover` (and the menu's focus
363
+ // is not `:focus-within` the row), which collapses the trigger to 0x0 and
364
+ // makes leafygreen's popover positioning lose its reference — throwing the
365
+ // open menu offscreen so clicks on its items miss.
366
+ '&:has([aria-expanded="true"])': {
367
+ display: 'block',
368
+ },
314
369
  });
315
370
  const lineNumberCountHidden = (0, emotion_1.css)({
316
371
  // See above
@@ -368,7 +423,7 @@ exports.getNestedKeyPathForElement = getNestedKeyPathForElement;
368
423
  const HadronElement = ({ value: element, editable, editingEnabled, onEditStart, lineNumberSize, onAddElement, extraGutterWidth = 0, onUpdateQuery, query, }) => {
369
424
  const darkMode = (0, use_theme_1.useDarkMode)();
370
425
  const autoFocus = (0, auto_focus_context_1.useAutoFocusContext)();
371
- const { id, key, value, type, revert, remove, expandable, children, visibleChildren, level, parentType, removed, internal, expanded, expand, collapse, } = useHadronElement(element);
426
+ const { id, key, value, type, revert, remove, expandable, children, visibleChildren, level, parentType, modified, removed, internal, expanded, expand, collapse, } = useHadronElement(element);
372
427
  // Function to check if a field is in the query
373
428
  // TODO: COMPASS-9541 Improve the functionality when checking for nested objects.
374
429
  const isFieldInQuery = (0, react_1.useCallback)((field, fieldValue) => {
@@ -389,10 +444,16 @@ const HadronElement = ({ value: element, editable, editingEnabled, onEditStart,
389
444
  },
390
445
  }
391
446
  : undefined,
447
+ {
448
+ label: 'Copy value',
449
+ onAction: () => {
450
+ void navigator.clipboard.writeText(element.toShellSyntax());
451
+ },
452
+ },
392
453
  {
393
454
  label: 'Copy field & value',
394
455
  onAction: () => {
395
- void navigator.clipboard.writeText(`${key.value}: ${element.toEJSON()}`);
456
+ void navigator.clipboard.writeText(`${key.value}: ${element.toShellSyntax()}`);
396
457
  },
397
458
  },
398
459
  type.value === 'String' && isValidUrl(value.value)
@@ -449,11 +510,13 @@ const HadronElement = ({ value: element, editable, editingEnabled, onEditStart,
449
510
  : elementInvalidLightMode;
450
511
  const elementProps = {
451
512
  ref: fieldContextMenuRef,
452
- className: (0, emotion_1.cx)(hadronElement, darkMode ? hadronElementDarkMode : hadronElementLightMode, removed ? elementRemoved : editingEnabled && !isValid && elementInvalid),
513
+ className: (0, emotion_1.cx)(hadronElement, darkMode ? hadronElementDarkMode : hadronElementLightMode, modified &&
514
+ !expanded &&
515
+ (darkMode ? elementModifiedDarkMode : elementModifiedLightMode), removed ? elementRemoved : editingEnabled && !isValid && elementInvalid),
453
516
  onClick: toggleExpanded,
454
517
  };
455
518
  const keyProps = {
456
- className: (0, emotion_1.cx)(elementKey, internal && elementKeyInternal, darkMode && elementKeyDarkMode),
519
+ className: (0, emotion_1.cx)(elementKey, !editingEnabled && elementKeyInline, internal && elementKeyInternal, darkMode && elementKeyDarkMode),
457
520
  };
458
521
  const lineNumberRemoved = darkMode
459
522
  ? lineNumberRemovedDarkMode
@@ -491,38 +554,39 @@ const HadronElement = ({ value: element, editable, editingEnabled, onEditStart,
491
554
  toggleExpanded();
492
555
  } },
493
556
  react_1.default.createElement(leafygreen_1.Icon, { size: "xsmall", glyph: expanded ? 'CaretDown' : 'CaretRight' })))),
494
- react_1.default.createElement("div", { ...keyProps, "data-testid": "hadron-document-element-key" }, key.editable ? (react_1.default.createElement(element_editors_1.KeyEditor, { value: key.value, valid: key.valid, validationMessage: key.validationMessage, onChange: (newVal) => {
495
- key.change(newVal);
496
- },
497
- // This autofocus will only trigger after user deliberately
498
- // double-clicked on a field and so auto focusing the input is
499
- // expected in this case
500
- // eslint-disable-next-line jsx-a11y/no-autofocus
501
- autoFocus: autoFocus?.id === id && autoFocus?.type === 'key', editing: editingEnabled, onEditStart: () => {
502
- onEditStart?.(element.uuid, 'key');
503
- } })) : (react_1.default.createElement("span", null, key.value))),
504
- react_1.default.createElement("div", { className: elementDivider, role: "presentation" }, ":\u00A0"),
505
- react_1.default.createElement("div", { className: elementDivider, role: "presentation" }, value.decrypted && (react_1.default.createElement("span", { "data-testid": "hadron-document-element-decrypted-icon", title: "Encrypted Field" },
506
- react_1.default.createElement(leafygreen_1.Icon, { glyph: "Key", size: "small" })))),
507
- react_1.default.createElement("div", { className: elementValue, "data-testid": "hadron-document-element-value" }, value.editable ? (react_1.default.createElement(element_editors_1.ValueEditor, { type: type.value, originalValue: value.originalValue, value: value.value, valid: value.valid, validationMessage: value.validationMessage, onChange: (newVal) => {
508
- value.change(newVal);
509
- },
510
- // See above
511
- // eslint-disable-next-line jsx-a11y/no-autofocus
512
- autoFocus: autoFocus?.id === id && autoFocus?.type === 'value', editing: editingEnabled, onEditStart: () => {
513
- onEditStart?.(element.uuid, 'value');
514
- }, onFocus: () => {
515
- value.startEdit();
516
- }, onBlur: () => {
517
- value.completeEdit();
518
- } })) : (react_1.default.createElement("div", { "data-testid": editable && !editingEnabled
519
- ? 'hadron-document-clickable-value'
520
- : undefined, onDoubleClick: () => {
521
- if (editable && !editingEnabled) {
522
- onEditStart?.(element.uuid, 'type');
523
- }
524
- } },
525
- react_1.default.createElement(bson_value_1.default, { type: type.value, value: value.originalValue })))),
557
+ react_1.default.createElement("div", { className: editingEnabled ? elementContent : elementContentInline },
558
+ react_1.default.createElement("div", { ...keyProps, "data-testid": "hadron-document-element-key" }, key.editable ? (react_1.default.createElement(element_editors_1.KeyEditor, { value: key.value, valid: key.valid, validationMessage: key.validationMessage, onChange: (newVal) => {
559
+ key.change(newVal);
560
+ },
561
+ // This autofocus will only trigger after user deliberately
562
+ // double-clicked on a field and so auto focusing the input is
563
+ // expected in this case
564
+ // eslint-disable-next-line jsx-a11y/no-autofocus
565
+ autoFocus: autoFocus?.id === id && autoFocus?.type === 'key', editing: editingEnabled, onEditStart: () => {
566
+ onEditStart?.(element.uuid, 'key');
567
+ } })) : (react_1.default.createElement("span", null, key.value))),
568
+ react_1.default.createElement("div", { className: elementDivider, role: "presentation" }, ":\u00A0"),
569
+ value.decrypted && (react_1.default.createElement("span", { className: elementDecryptedIcon, "data-testid": "hadron-document-element-decrypted-icon", title: "Encrypted Field" },
570
+ react_1.default.createElement(leafygreen_1.Icon, { glyph: "Key", size: "small" }))),
571
+ react_1.default.createElement("div", { className: elementValue, "data-testid": "hadron-document-element-value" }, value.editable ? (react_1.default.createElement(element_editors_1.ValueEditor, { type: type.value, originalValue: value.originalValue, value: value.value, valid: value.valid, validationMessage: value.validationMessage, onChange: (newVal) => {
572
+ value.change(newVal);
573
+ },
574
+ // See above
575
+ // eslint-disable-next-line jsx-a11y/no-autofocus
576
+ autoFocus: autoFocus?.id === id && autoFocus?.type === 'value', editing: editingEnabled, onEditStart: () => {
577
+ onEditStart?.(element.uuid, 'value');
578
+ }, onFocus: () => {
579
+ value.startEdit();
580
+ }, onBlur: () => {
581
+ value.completeEdit();
582
+ } })) : (react_1.default.createElement("span", { "data-testid": editable && !editingEnabled
583
+ ? 'hadron-document-clickable-value'
584
+ : undefined, onDoubleClick: () => {
585
+ if (editable && !editingEnabled) {
586
+ onEditStart?.(element.uuid, 'type');
587
+ }
588
+ } },
589
+ react_1.default.createElement(bson_value_1.default, { type: type.value, value: value.originalValue }))))),
526
590
  editable && (react_1.default.createElement("div", { className: elementType, "data-testid": "hadron-document-element-type" },
527
591
  react_1.default.createElement(element_editors_1.TypeEditor, { editing: editingEnabled, type: type.value,
528
592
  // See above
@@ -551,4 +615,3 @@ const HadronElement = ({ value: element, editable, editingEnabled, onEditStart,
551
615
  step: editingEnabled ? hadron_document_1.DEFAULT_VISIBLE_ELEMENTS : 1000, onSizeChange: handleVisibleElementsChanged, style: nestedElementsVisibilityToggleOffsetStyle })))));
552
616
  };
553
617
  exports.HadronElement = HadronElement;
554
- //# sourceMappingURL=element.js.map
@@ -2,5 +2,5 @@ export { default as DocumentActionsGroup } from './document-actions-group';
2
2
  export { default as VisibleFieldsToggle } from './visible-field-toggle';
3
3
  export { default as Document } from './document';
4
4
  export { default as DocumentEditActionsFooter } from './document-edit-actions-footer';
5
- export { LegacyUUIDDisplayContext, type LegacyUUIDDisplay, } from './legacy-uuid-format-context';
5
+ export { BSONDisplayOptionsProvider, useBSONDisplayOptions, type BSONDisplayOptions, type LegacyUUIDDisplay, } from './bson-display-options-context';
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/document-list/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EACL,wBAAwB,EACxB,KAAK,iBAAiB,GACvB,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/document-list/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AACtF,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,gCAAgC,CAAC"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.LegacyUUIDDisplayContext = exports.DocumentEditActionsFooter = exports.Document = exports.VisibleFieldsToggle = exports.DocumentActionsGroup = void 0;
6
+ exports.useBSONDisplayOptions = exports.BSONDisplayOptionsProvider = exports.DocumentEditActionsFooter = exports.Document = exports.VisibleFieldsToggle = exports.DocumentActionsGroup = void 0;
7
7
  var document_actions_group_1 = require("./document-actions-group");
8
8
  Object.defineProperty(exports, "DocumentActionsGroup", { enumerable: true, get: function () { return __importDefault(document_actions_group_1).default; } });
9
9
  var visible_field_toggle_1 = require("./visible-field-toggle");
@@ -12,6 +12,6 @@ var document_1 = require("./document");
12
12
  Object.defineProperty(exports, "Document", { enumerable: true, get: function () { return __importDefault(document_1).default; } });
13
13
  var document_edit_actions_footer_1 = require("./document-edit-actions-footer");
14
14
  Object.defineProperty(exports, "DocumentEditActionsFooter", { enumerable: true, get: function () { return __importDefault(document_edit_actions_footer_1).default; } });
15
- var legacy_uuid_format_context_1 = require("./legacy-uuid-format-context");
16
- Object.defineProperty(exports, "LegacyUUIDDisplayContext", { enumerable: true, get: function () { return legacy_uuid_format_context_1.LegacyUUIDDisplayContext; } });
17
- //# sourceMappingURL=index.js.map
15
+ var bson_display_options_context_1 = require("./bson-display-options-context");
16
+ Object.defineProperty(exports, "BSONDisplayOptionsProvider", { enumerable: true, get: function () { return bson_display_options_context_1.BSONDisplayOptionsProvider; } });
17
+ Object.defineProperty(exports, "useBSONDisplayOptions", { enumerable: true, get: function () { return bson_display_options_context_1.useBSONDisplayOptions; } });
@@ -7,4 +7,3 @@ exports.documentTypography = {
7
7
  fontSize: 12,
8
8
  lineHeight: 16,
9
9
  };
10
- //# sourceMappingURL=typography.js.map
@@ -9,4 +9,3 @@ function useForceUpdate() {
9
9
  }, []);
10
10
  return forceUpdate;
11
11
  }
12
- //# sourceMappingURL=use-force-update.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"visible-field-toggle.d.ts","sourceRoot":"","sources":["../../../src/components/document-list/visible-field-toggle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AA0BpD,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CA4EA,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"visible-field-toggle.d.ts","sourceRoot":"","sources":["../../../src/components/document-list/visible-field-toggle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AA4BpD,QAAA,MAAM,mBAAmB,EAAE,KAAK,CAAC,iBAAiB,CAAC;IACjD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC,CA4EA,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -42,6 +42,8 @@ const container = (0, emotion_1.css)({
42
42
  display: 'flex',
43
43
  gap: tokens_1.spacing[200],
44
44
  paddingTop: tokens_1.spacing[200],
45
+ // Not a part of the document, keep it out of selectable/copied text.
46
+ userSelect: 'none',
45
47
  });
46
48
  const linkButtonStyles = (0, emotion_1.css)({
47
49
  border: 'none',
@@ -89,4 +91,3 @@ const VisibleFieldsToggle = ({ showHideButton = true, buttonClassName, parentFie
89
91
  hideButtonText))));
90
92
  };
91
93
  exports.default = VisibleFieldsToggle;
92
- //# sourceMappingURL=visible-field-toggle.js.map